lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 27 Aug 2015 10:11:07 -0700 From: Dave Hansen <dave@...1.net> To: dave@...1.net Cc: dave.hansen@...ux.intel.com, mingo@...hat.com, x86@...nel.org, bp@...en8.de, fenghua.yu@...el.com, tim.c.chen@...ux.intel.com, linux-kernel@...r.kernel.org Subject: [PATCH 05/11] x86, fpu: add helper xfeature_nr_enabled() instead of test_bit() From: Dave Hansen <dave.hansen@...ux.intel.com> We currently use test_bit() in a few places to see if an xfeature is enabled. It ends up being a bit ugly because 'xfeatures_mask' is a u64 and test_bit wants an 'unsigned long' so it requires a cast. The *_bit() functions are also techincally atomic, which we have no need for here. So, remove the test_bit()s and replace with the new xfeature_nr_enabled() helper. This also provides a central place to add a comment about the future need to support 'system xstates'. Signed-off-by: Dave Hansen <dave.hansen@...ux.intel.com> Cc: Ingo Molnar <mingo@...hat.com> Cc: x86@...nel.org Cc: Borislav Petkov <bp@...en8.de> Cc: Fenghua Yu <fenghua.yu@...el.com> Cc: Tim Chen <tim.c.chen@...ux.intel.com> Cc: linux-kernel@...r.kernel.org --- b/arch/x86/kernel/fpu/xstate.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff -puN arch/x86/kernel/fpu/xstate.c~use-xfeature_enabled arch/x86/kernel/fpu/xstate.c --- a/arch/x86/kernel/fpu/xstate.c~use-xfeature_enabled 2015-08-27 10:08:02.716686431 -0700 +++ b/arch/x86/kernel/fpu/xstate.c 2015-08-27 10:08:02.720686613 -0700 @@ -207,6 +207,16 @@ static void __init print_xstate_features } /* + * Note that in the future we will likely need a pair of + * functions here: one for user xstates and the other for + * system xstates. For now, they are the same. + */ +static int xfeature_nr_enabled(enum xfeature_nr xfeature_nr) +{ + return !!(xfeatures_mask & (1UL << xfeature_nr)); +} + +/* * This function sets up offsets and sizes of all extended states in * xsave area. This supports both standard format and compacted format * of the xsave aread. @@ -226,7 +236,7 @@ static void __init setup_xstate_comp(voi if (!cpu_has_xsaves) { for (i = FIRST_EXTENDED_XFEATURE_NR; i < XFEATURES_NR_MAX; i++) { - if (test_bit(i, (unsigned long *)&xfeatures_mask)) { + if (xfeature_nr_enabled(i)) { xstate_comp_offsets[i] = xstate_offsets[i]; xstate_comp_sizes[i] = xstate_sizes[i]; } @@ -238,7 +248,7 @@ static void __init setup_xstate_comp(voi FXSAVE_SIZE + XSAVE_HDR_SIZE; for (i = FIRST_EXTENDED_XFEATURE_NR; i < XFEATURES_NR_MAX; i++) { - if (test_bit(i, (unsigned long *)&xfeatures_mask)) + if (xfeature_nr_enabled(i)) xstate_comp_sizes[i] = xstate_sizes[i]; else xstate_comp_sizes[i] = 0; @@ -299,7 +309,7 @@ static void __init init_xstate_size(void xstate_size = FXSAVE_SIZE + XSAVE_HDR_SIZE; for (i = FIRST_EXTENDED_XFEATURE_NR; i < 64; i++) { - if (test_bit(i, (unsigned long *)&xfeatures_mask)) { + if (xfeature_nr_enabled(i)) { cpuid_count(XSTATE_CPUID, i, &eax, &ebx, &ecx, &edx); xstate_size += eax; } _ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists