| From 77a84da6670e5c0fa25507fe33209a6a8af5595f Mon Sep 17 00:00:00 2001 |
| From: Qian Cai <cai@lca.pw> |
| Date: Tue, 10 Dec 2019 22:30:42 -0500 |
| Subject: [PATCH] x86/resctrl: Fix an imbalance in domain_remove_cpu() |
| |
| commit e278af89f1ba0a9ef20947db6afc2c9afa37e85b upstream. |
| |
| A system that supports resource monitoring may have multiple resources |
| while not all of these resources are capable of monitoring. Monitoring |
| related state is initialized only for resources that are capable of |
| monitoring and correspondingly this state should subsequently only be |
| removed from these resources that are capable of monitoring. |
| |
| domain_add_cpu() calls domain_setup_mon_state() only when r->mon_capable |
| is true where it will initialize d->mbm_over. However, |
| domain_remove_cpu() calls cancel_delayed_work(&d->mbm_over) without |
| checking r->mon_capable resulting in an attempt to cancel d->mbm_over on |
| all resources, even those that never initialized d->mbm_over because |
| they are not capable of monitoring. Hence, it triggers a debugobjects |
| warning when offlining CPUs because those timer debugobjects are never |
| initialized: |
| |
| ODEBUG: assert_init not available (active state 0) object type: |
| timer_list hint: 0x0 |
| WARNING: CPU: 143 PID: 789 at lib/debugobjects.c:484 |
| debug_print_object |
| Hardware name: HP Synergy 680 Gen9/Synergy 680 Gen9 Compute Module, BIOS I40 05/23/2018 |
| RIP: 0010:debug_print_object |
| Call Trace: |
| debug_object_assert_init |
| del_timer |
| try_to_grab_pending |
| cancel_delayed_work |
| resctrl_offline_cpu |
| cpuhp_invoke_callback |
| cpuhp_thread_fun |
| smpboot_thread_fn |
| kthread |
| ret_from_fork |
| |
| Fixes: e33026831bdb ("x86/intel_rdt/mbm: Handle counter overflow") |
| Signed-off-by: Qian Cai <cai@lca.pw> |
| Signed-off-by: Borislav Petkov <bp@suse.de> |
| Acked-by: Reinette Chatre <reinette.chatre@intel.com> |
| Cc: Fenghua Yu <fenghua.yu@intel.com> |
| Cc: "H. Peter Anvin" <hpa@zytor.com> |
| Cc: Ingo Molnar <mingo@redhat.com> |
| Cc: john.stultz@linaro.org |
| Cc: sboyd@kernel.org |
| Cc: <stable@vger.kernel.org> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: tj@kernel.org |
| Cc: Tony Luck <tony.luck@intel.com> |
| Cc: Vikas Shivappa <vikas.shivappa@linux.intel.com> |
| Cc: x86-ml <x86@kernel.org> |
| Link: https://lkml.kernel.org/r/20191211033042.2188-1-cai@lca.pw |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c |
| index 03eb90d00af0..89049b343c7a 100644 |
| --- a/arch/x86/kernel/cpu/resctrl/core.c |
| +++ b/arch/x86/kernel/cpu/resctrl/core.c |
| @@ -618,7 +618,7 @@ static void domain_remove_cpu(int cpu, struct rdt_resource *r) |
| if (static_branch_unlikely(&rdt_mon_enable_key)) |
| rmdir_mondata_subdir_allrdtgrp(r, d->id); |
| list_del(&d->list); |
| - if (is_mbm_enabled()) |
| + if (r->mon_capable && is_mbm_enabled()) |
| cancel_delayed_work(&d->mbm_over); |
| if (is_llc_occupancy_enabled() && has_busy_rmid(r, d)) { |
| /* |
| -- |
| 2.7.4 |
| |