The only remaining caller of cpu_has_xfeatures() is
print_xstate_features(), which uses it only to check and get the name of
a single feature.

Remove it and just inline the needed code into print_xstate_features().

This also makes the "unknown xstate feature" entry at index XFEATURE_MAX
of xfeature_names[] unnecessary, so remove that too.

Acked-by: Christoph Hellwig <[email protected]>
Signed-off-by: Eric Biggers <[email protected]>
---
 arch/x86/include/asm/fpu/api.h |  9 -------
 arch/x86/kernel/fpu/xstate.c   | 44 +++-------------------------------
 2 files changed, 3 insertions(+), 50 deletions(-)

diff --git a/arch/x86/include/asm/fpu/api.h b/arch/x86/include/asm/fpu/api.h
index 90c63fe19c0f..cfed8b24d64f 100644
--- a/arch/x86/include/asm/fpu/api.h
+++ b/arch/x86/include/asm/fpu/api.h
@@ -99,15 +99,6 @@ static inline void fpregs_assert_state_consistent(void) { }
  */
 extern void switch_fpu_return(void);
 
-/*
- * Query the presence of one or more xfeatures. Works on any legacy CPU as 
well.
- *
- * If 'feature_name' is set then put a human-readable description of
- * the feature there as well - this can be used to print error (or success)
- * messages.
- */
-extern int cpu_has_xfeatures(u64 xfeatures_mask, const char **feature_name);
-
 /* Trap handling */
 extern int  fpu__exception_code(struct fpu *fpu, int trap_nr);
 extern void fpu_sync_fpstate(struct fpu *fpu);
diff --git a/arch/x86/kernel/fpu/xstate.c b/arch/x86/kernel/fpu/xstate.c
index 97cfd4fb6cc0..0b17452d1788 100644
--- a/arch/x86/kernel/fpu/xstate.c
+++ b/arch/x86/kernel/fpu/xstate.c
@@ -66,8 +66,8 @@ static const char *xfeature_names[] =
        "AMX Tile config",
        "AMX Tile data",
        "APX registers",
-       "unknown xstate feature",
 };
+static_assert(ARRAY_SIZE(xfeature_names) == XFEATURE_MAX);
 
 static unsigned short xsave_cpuid_features[] __initdata = {
        [XFEATURE_FP]                           = X86_FEATURE_FPU,
@@ -122,44 +122,6 @@ static inline unsigned int next_xfeature_order(unsigned 
int i, u64 mask)
 #define XSTATE_FLAG_SUPERVISOR BIT(0)
 #define XSTATE_FLAG_ALIGNED64  BIT(1)
 
-/*
- * Return whether the system supports a given xfeature.
- *
- * Also return the name of the (most advanced) feature that the caller 
requested:
- */
-int cpu_has_xfeatures(u64 xfeatures_needed, const char **feature_name)
-{
-       u64 xfeatures_missing = xfeatures_needed & ~fpu_kernel_cfg.max_features;
-
-       if (unlikely(feature_name)) {
-               long xfeature_idx, max_idx;
-               u64 xfeatures_print;
-               /*
-                * So we use FLS here to be able to print the most advanced
-                * feature that was requested but is missing. So if a driver
-                * asks about "XFEATURE_MASK_SSE | XFEATURE_MASK_YMM" we'll 
print the
-                * missing AVX feature - this is the most informative message
-                * to users:
-                */
-               if (xfeatures_missing)
-                       xfeatures_print = xfeatures_missing;
-               else
-                       xfeatures_print = xfeatures_needed;
-
-               xfeature_idx = fls64(xfeatures_print)-1;
-               max_idx = ARRAY_SIZE(xfeature_names)-1;
-               xfeature_idx = min(xfeature_idx, max_idx);
-
-               *feature_name = xfeature_names[xfeature_idx];
-       }
-
-       if (xfeatures_missing)
-               return 0;
-
-       return 1;
-}
-EXPORT_SYMBOL_GPL(cpu_has_xfeatures);
-
 static bool xfeature_is_aligned64(int xfeature_nr)
 {
        return xstate_flags[xfeature_nr] & XSTATE_FLAG_ALIGNED64;
@@ -302,9 +264,9 @@ static void __init print_xstate_features(void)
 
        for (i = 0; i < XFEATURE_MAX; i++) {
                u64 mask = BIT_ULL(i);
-               const char *name;
+               const char *name = xfeature_names[i];
 
-               if (cpu_has_xfeatures(mask, &name))
+               if (fpu_kernel_cfg.max_features & mask)
                        pr_info("x86/fpu: Supporting XSAVE feature 0x%03Lx: 
'%s'\n", mask, name);
        }
 }
-- 
2.55.0


Reply via email to