| From 536a0d8e79fb928f2735db37dda95682b6754f9a Mon Sep 17 00:00:00 2001 |
| From: Xiaochen Shen <xiaochen.shen@intel.com> |
| Date: Thu, 12 Dec 2019 04:05:05 +0800 |
| Subject: x86/resctrl: Check monitoring static key in the MBM overflow handler |
| |
| From: Xiaochen Shen <xiaochen.shen@intel.com> |
| |
| commit 536a0d8e79fb928f2735db37dda95682b6754f9a upstream. |
| |
| Currently, there are three static keys in the resctrl file system: |
| rdt_mon_enable_key and rdt_alloc_enable_key indicate if the monitoring |
| feature and the allocation feature are enabled, respectively. The |
| rdt_enable_key is enabled when either the monitoring feature or the |
| allocation feature is enabled. |
| |
| If no monitoring feature is present (either hardware doesn't support a |
| monitoring feature or the feature is disabled by the kernel command line |
| option "rdt="), rdt_enable_key is still enabled but rdt_mon_enable_key |
| is disabled. |
| |
| MBM is a monitoring feature. The MBM overflow handler intends to |
| check if the monitoring feature is not enabled for fast return. |
| |
| So check the rdt_mon_enable_key in it instead of the rdt_enable_key as |
| former is the more accurate check. |
| |
| [ bp: Massage commit message. ] |
| |
| Fixes: e33026831bdb ("x86/intel_rdt/mbm: Handle counter overflow") |
| Signed-off-by: Xiaochen Shen <xiaochen.shen@intel.com> |
| Signed-off-by: Borislav Petkov <bp@suse.de> |
| Link: https://lkml.kernel.org/r/1576094705-13660-1-git-send-email-xiaochen.shen@intel.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/x86/kernel/cpu/resctrl/internal.h | 1 + |
| arch/x86/kernel/cpu/resctrl/monitor.c | 4 ++-- |
| 2 files changed, 3 insertions(+), 2 deletions(-) |
| |
| --- a/arch/x86/kernel/cpu/resctrl/internal.h |
| +++ b/arch/x86/kernel/cpu/resctrl/internal.h |
| @@ -57,6 +57,7 @@ static inline struct rdt_fs_context *rdt |
| } |
| |
| DECLARE_STATIC_KEY_FALSE(rdt_enable_key); |
| +DECLARE_STATIC_KEY_FALSE(rdt_mon_enable_key); |
| |
| /** |
| * struct mon_evt - Entry in the event list of a resource |
| --- a/arch/x86/kernel/cpu/resctrl/monitor.c |
| +++ b/arch/x86/kernel/cpu/resctrl/monitor.c |
| @@ -514,7 +514,7 @@ void mbm_handle_overflow(struct work_str |
| |
| mutex_lock(&rdtgroup_mutex); |
| |
| - if (!static_branch_likely(&rdt_enable_key)) |
| + if (!static_branch_likely(&rdt_mon_enable_key)) |
| goto out_unlock; |
| |
| d = get_domain_from_cpu(cpu, &rdt_resources_all[RDT_RESOURCE_L3]); |
| @@ -543,7 +543,7 @@ void mbm_setup_overflow_handler(struct r |
| unsigned long delay = msecs_to_jiffies(delay_ms); |
| int cpu; |
| |
| - if (!static_branch_likely(&rdt_enable_key)) |
| + if (!static_branch_likely(&rdt_mon_enable_key)) |
| return; |
| cpu = cpumask_any(&dom->cpu_mask); |
| dom->mbm_work_cpu = cpu; |