Provide mechanism to disable select RDT features & use for Skylake
Subsystems (2)
cover Provide mechanism to disable select RDT features & use for Skylake
From: Tony Luck <[email protected]>
Some of the RDT features are affected by errata on Skylake. Make sure unsuspecting users do not accidentally use these.
To do this we add a CPU model quirk mechanism that disables the features affected by the errata by default. But also add a command line mechanism for users to turn them back on again for cases where the use case still works despite the issue.
First patch establishes the CPU quirk mechanism and uses it for the existing Haswell probe code.
Second sets up the command line arguments.
Last adds the code for Skylake model to disable features affected by errata.
Tony Luck (3):
x86/intel_rdt: Move special case code for Haswell to a quirk function x86/intel_rdt: Add command line options for resource director
technology
x86/intel_rdt: Turn off most RDT features on Skylake
Documentation/admin-guide/kernel-parameters.rst | 1 + Documentation/admin-guide/kernel-parameters.txt | 6 + arch/x86/kernel/cpu/intel_rdt.c | 147 +++++++++++++++++++----- 3 files changed, 123 insertions(+), 31 deletions(-)
Signature · 1 line
2.11.0
PATCH 1/3 x86/intel_rdt: Move special case code for Haswell to a quirk function
From: Tony Luck <[email protected]>
No functional change, but lay the ground work for other per-model quirks.
--- arch/x86/kernel/cpu/intel_rdt.c | 52 ++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 24 deletions(-)
arch/x86/kernel/cpu/intel_rdt.c +28 -24
@@ -172,34 +172,28 @@ static unsigned int cbm_idx(struct rdt_resource *r, unsigned int closid)* is always 20 on hsw server parts. The minimum cache bitmask length * allowed for HSW server is always 2 bits. Hardcode all of them. */ -static inline bool cache_alloc_hsw_probe (void ) +static inline void cache_alloc_hsw_probe (void ) { -if (boot_cpu_data.x86_vendor ==X86_VENDOR_INTEL && - boot_cpu_data.x86 ==6 && - boot_cpu_data.x86_model ==INTEL_FAM6_HASWELL_X ) { -struct rdt_resource *r = &rdt_resources_all[RDT_RESOURCE_L3 ]; -u32 l, h, max_cbm =BIT_MASK (20 ) -1 ; +struct rdt_resource *r = &rdt_resources_all[RDT_RESOURCE_L3 ]; +u32 l, h, max_cbm =BIT_MASK (20 ) -1 ; -if (wrmsr_safe (IA32_L3_CBM_BASE , max_cbm,0 )) -return false; -rdmsr (IA32_L3_CBM_BASE , l, h); - -/* If all the bits were set in MSR, return success */ -if (l != max_cbm) -return false; +if (wrmsr_safe (IA32_L3_CBM_BASE , max_cbm,0 )) +return ; +rdmsr (IA32_L3_CBM_BASE , l, h); - r->num_closid =4 ; - r->default_ctrl = max_cbm; - r->cache.cbm_len =20 ; - r->cache.shareable_bits =0xc0000 ; - r->cache.min_cbm_bits =2 ; - r->alloc_capable = true; - r->alloc_enabled = true; +/* If all the bits were set in MSR, return success */ +if (l != max_cbm) +return ; -return true; - } + r->num_closid =4 ; + r->default_ctrl = max_cbm; + r->cache.cbm_len =20 ; + r->cache.shareable_bits =0xc0000 ; + r->cache.min_cbm_bits =2 ; + r->alloc_capable = true; + r->alloc_enabled = true; -return false; + rdt_alloc_capable = true; }/*
@@ -647,7 +641,7 @@ static __init bool get_rdt_alloc_resources(void) {bool ret = false; -if (cache_alloc_hsw_probe ()) +if (rdt_alloc_capable)return true;if (!boot_cpu_has (X86_FEATURE_RDT_A ))
@@ -689,8 +683,18 @@ static __init bool get_rdt_mon_resources(void)return !rdt_get_mon_l3_config (&rdt_resources_all[RDT_RESOURCE_L3 ]); } +static __init void rdt_quirks (void ) +{ +switch (boot_cpu_data.x86_model) { +case INTEL_FAM6_HASWELL_X : +cache_alloc_hsw_probe (); +break ; + } +} +static __init bool get_rdt_resources (void ) { +rdt_quirks (); rdt_alloc_capable =get_rdt_alloc_resources (); rdt_mon_capable =get_rdt_mon_resources ();
Signature · 1 line
2.11.0
tip-bot for Tony Luck
merge bot[tip:x86/cache] x86/intel_rdt: Move special case code for Haswell to a quirk function
x86/intel_rdt: Move special case code for Haswell to a quirk function
Commit-ID: 0576113a387e0c8a5d9e24b4cd62605d1c9c0db8 Gitweb: http://git.kernel.org/tip/0576113a387e0c8a5d9e24b4cd62605d1c9c0db8 Author: Tony Luck <[email protected]> AuthorDate: Thu, 24 Aug 2017 09:26:50 -0700 Committer: Thomas Gleixner <[email protected]> CommitDate: Fri, 25 Aug 2017 22:00:44 +0200
x86/intel_rdt: Move special case code for Haswell to a quirk function
No functional change, but lay the ground work for other per-model quirks.
--- arch/x86/kernel/cpu/intel_rdt.c | 52 ++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 24 deletions(-)
arch/x86/kernel/cpu/intel_rdt.c +28 -24
@@ -172,34 +172,28 @@ static unsigned int cbm_idx(struct rdt_resource *r, unsigned int closid)* is always 20 on hsw server parts. The minimum cache bitmask length * allowed for HSW server is always 2 bits. Hardcode all of them. */ -static inline bool cache_alloc_hsw_probe (void ) +static inline void cache_alloc_hsw_probe (void ) { -if (boot_cpu_data.x86_vendor ==X86_VENDOR_INTEL && - boot_cpu_data.x86 ==6 && - boot_cpu_data.x86_model ==INTEL_FAM6_HASWELL_X ) { -struct rdt_resource *r = &rdt_resources_all[RDT_RESOURCE_L3 ]; -u32 l, h, max_cbm =BIT_MASK (20 ) -1 ; +struct rdt_resource *r = &rdt_resources_all[RDT_RESOURCE_L3 ]; +u32 l, h, max_cbm =BIT_MASK (20 ) -1 ; -if (wrmsr_safe (IA32_L3_CBM_BASE , max_cbm,0 )) -return false; -rdmsr (IA32_L3_CBM_BASE , l, h); - -/* If all the bits were set in MSR, return success */ -if (l != max_cbm) -return false; +if (wrmsr_safe (IA32_L3_CBM_BASE , max_cbm,0 )) +return ; +rdmsr (IA32_L3_CBM_BASE , l, h); - r->num_closid =4 ; - r->default_ctrl = max_cbm; - r->cache.cbm_len =20 ; - r->cache.shareable_bits =0xc0000 ; - r->cache.min_cbm_bits =2 ; - r->alloc_capable = true; - r->alloc_enabled = true; +/* If all the bits were set in MSR, return success */ +if (l != max_cbm) +return ; -return true; - } + r->num_closid =4 ; + r->default_ctrl = max_cbm; + r->cache.cbm_len =20 ; + r->cache.shareable_bits =0xc0000 ; + r->cache.min_cbm_bits =2 ; + r->alloc_capable = true; + r->alloc_enabled = true; -return false; + rdt_alloc_capable = true; }/*
@@ -647,7 +641,7 @@ static __init bool get_rdt_alloc_resources(void) {bool ret = false; -if (cache_alloc_hsw_probe ()) +if (rdt_alloc_capable)return true;if (!boot_cpu_has (X86_FEATURE_RDT_A ))
@@ -689,8 +683,18 @@ static __init bool get_rdt_mon_resources(void)return !rdt_get_mon_l3_config (&rdt_resources_all[RDT_RESOURCE_L3 ]); } +static __init void rdt_quirks (void ) +{ +switch (boot_cpu_data.x86_model) { +case INTEL_FAM6_HASWELL_X : +cache_alloc_hsw_probe (); +break ; + } +} +static __init bool get_rdt_resources (void ) { +rdt_quirks (); rdt_alloc_capable =get_rdt_alloc_resources (); rdt_mon_capable =get_rdt_mon_resources ();
PATCH 2/3 x86/intel_rdt: Add command line options for resource director technology
In reply to Luck, TonyFrom: Tony Luck <[email protected]>
Command line options allow us to ignore features that we don't want. Also we can re-enable options that have been disabled on a platform (so long as the underlying h/w actually supports the option).
--- Documentation/admin-guide/kernel-parameters.rst | 1 + Documentation/admin-guide/kernel-parameters.txt | 6 ++ arch/x86/kernel/cpu/intel_rdt.c | 94 ++++++++++++++++++++++--- 3 files changed, 93 insertions(+), 8 deletions(-)
Documentation/admin-guide/kernel-parameters.rst +1 -0
@@ -138,6 +138,7 @@ parameter is applicable:: PPT Parallel port support is enabled. PS2 Appropriate PS/2 support is enabled. RAM RAM disk support is enabled. + RDT Intel Resource Director Technology. S390 S390 architecture is enabled. SCSI Appropriate SCSI support is enabled. A lot of drivers have their options described inside
Documentation/admin-guide/kernel-parameters.txt +6 -0
@@ -3598,6 +3598,12 @@ Run specified binary instead of /init from the ramdisk, used for early userspace startup. See initrd. + rdt= [HW,X86,RDT] + Turn on/off individual RDT features. List is: + cmt, mbmtotal, mbmlocal, l3cat, l3cdp, l2cat, mba. + E.g. to turn on cmt and turn off mba use: + rdt=cmt,!mba + reboot= [KNL] Format (x86 or x86_64): [w[arm] | c[old] | h[ard] | s[oft] | g[pio]] \
arch/x86/kernel/cpu/intel_rdt.c +86 -8
131 lines not on this page · raw message
Signature · 1 line
2.11.0
tip-bot for Tony Luck
merge bot[tip:x86/cache] x86/intel_rdt: Add command line options for resource director technology
x86/intel_rdt: Add command line options for resource director technology
Commit-ID: 1d9807fc64c131a83a96917f2b2da1c9b00cf127 Gitweb: http://git.kernel.org/tip/1d9807fc64c131a83a96917f2b2da1c9b00cf127 Author: Tony Luck <[email protected]> AuthorDate: Thu, 24 Aug 2017 09:26:51 -0700 Committer: Thomas Gleixner <[email protected]> CommitDate: Fri, 25 Aug 2017 22:00:45 +0200
x86/intel_rdt: Add command line options for resource director technology
Command line options allow us to ignore features that we don't want. Also we can re-enable options that have been disabled on a platform (so long as the underlying h/w actually supports the option).
[ tglx: Marked the option array __initdata and the helper function __init ]
--- Documentation/admin-guide/kernel-parameters.rst | 1 + Documentation/admin-guide/kernel-parameters.txt | 6 ++ arch/x86/kernel/cpu/intel_rdt.c | 96 ++++++++++++++++++++++--- 3 files changed, 95 insertions(+), 8 deletions(-)
Documentation/admin-guide/kernel-parameters.rst +1 -0
@@ -138,6 +138,7 @@ parameter is applicable:: PPT Parallel port support is enabled. PS2 Appropriate PS/2 support is enabled. RAM RAM disk support is enabled. + RDT Intel Resource Director Technology. S390 S390 architecture is enabled. SCSI Appropriate SCSI support is enabled. A lot of drivers have their options described inside
Documentation/admin-guide/kernel-parameters.txt +6 -0
@@ -3598,6 +3598,12 @@ Run specified binary instead of /init from the ramdisk, used for early userspace startup. See initrd. + rdt= [HW,X86,RDT] + Turn on/off individual RDT features. List is: + cmt, mbmtotal, mbmlocal, l3cat, l3cdp, l2cat, mba. + E.g. to turn on cmt and turn off mba use: + rdt=cmt,!mba + reboot= [KNL] Format (x86 or x86_64): [w[arm] | c[old] | h[ard] | s[oft] | g[pio]] \
arch/x86/kernel/cpu/intel_rdt.c +88 -8
133 lines not on this page · raw message
PATCH 3/3 x86/intel_rdt: Turn off most RDT features on Skylake
In reply to Luck, TonyFrom: Tony Luck <[email protected]>
Errata list is included in this document:
https://www.intel.com/content/dam/www/public/us/en/documents/specification-updates/6th-gen-x-series-spec-update.pdf
with more details in:
https://www.intel.com/content/www/us/en/processors/xeon/scalable/xeon-scalable-spec-update.html
But the tl;dr summary (using tags from first of the documents) is:
SKZ4 MBM does not accurately track write bandwidth
SKZ17 CMT counters may not count accurately
SKZ18 CAT may not restrict cacheline allocation under certain conditions SKZ19 MBM counters may undercount
Disable all these features on Skylake models. Users who understand the errata may re-enable using boot command line options.
--- arch/x86/kernel/cpu/intel_rdt.c | 3 +++ 1 file changed, 3 insertions(+)
arch/x86/kernel/cpu/intel_rdt.c +3 -0
@@ -767,6 +767,9 @@ static __init void rdt_quirks(void)if (!rdt_options[RDT_FLAG_L3_CAT ].force_off)cache_alloc_hsw_probe ();break ; +case INTEL_FAM6_SKYLAKE_X : +if (boot_cpu_data.x86_mask <=4 ) +set_rdt_options ("!cmt,!mbmtotal,!mbmlocal,!l3cat" ); } }
Signature · 1 line
2.11.0
tip-bot for Tony Luck
merge bot[tip:x86/cache] x86/intel_rdt: Turn off most RDT features on Skylake
x86/intel_rdt: Turn off most RDT features on Skylake
Commit-ID: d56593eb5eda8f593db92927059697bbf89bc4b3 Gitweb: http://git.kernel.org/tip/d56593eb5eda8f593db92927059697bbf89bc4b3 Author: Tony Luck <[email protected]> AuthorDate: Thu, 24 Aug 2017 09:26:52 -0700 Committer: Thomas Gleixner <[email protected]> CommitDate: Fri, 25 Aug 2017 22:00:45 +0200
x86/intel_rdt: Turn off most RDT features on Skylake
Errata list is included in this document:
https://www.intel.com/content/dam/www/public/us/en/documents/specification-updates/6th-gen-x-series-spec-update.pdf
with more details in:
https://www.intel.com/content/www/us/en/processors/xeon/scalable/xeon-scalable-spec-update.html
But the tl;dr summary (using tags from first of the documents) is:
SKZ4 MBM does not accurately track write bandwidth
SKZ17 CMT counters may not count accurately
SKZ18 CAT may not restrict cacheline allocation under certain conditions SKZ19 MBM counters may undercount
Disable all these features on Skylake models. Users who understand the errata may re-enable using boot command line options.
--- arch/x86/kernel/cpu/intel_rdt.c | 3 +++ 1 file changed, 3 insertions(+)
arch/x86/kernel/cpu/intel_rdt.c +3 -0
@@ -769,6 +769,9 @@ static __init void rdt_quirks(void)if (!rdt_options[RDT_FLAG_L3_CAT ].force_off)cache_alloc_hsw_probe ();break ; +case INTEL_FAM6_SKYLAKE_X : +if (boot_cpu_data.x86_mask <=4 ) +set_rdt_options ("!cmt,!mbmtotal,!mbmlocal,!l3cat" ); } }