[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v2 1/2] x86/AMD: collect checking for bugs in a single function


  • To: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Thu, 24 Feb 2022 14:24:23 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JAvTe/e7XAafZqd6Q/V4UD2oE01PCz2b1CUIOkE7Ztg=; b=jMFtamwTkqUz0NXPwWgg1TZ2pG5C/WvduWAJhawYzc6PH5LY1M+3/qjwWTKFwKh44ygWNNIUEBVAE8tTZSxqgJ7nUj/J467OUtEnDakBfQ+G03eEgctrxNoJAJE3ptkEv3cOcomEoQDnBvSRm2yITbcmlP4OzdvM2oAptBVnRvkEjpmnjDBch/kXsghXO9ZgZr4ToZoQkRkzUKihbnSrGZnG3s9iVLf2BV/8GJ9Hx1fOA7XJq4CUMhTGEznW2jBBGyN2Ch/BftnLPmSqxAGa8JjrttuFKNqKhykdsL47U1WzQhYolOp6Ir6tDPLXIzJWpgmgthfu32NxWyyH8o8xZQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ll47Pd8EGqMCrXWDdU72cFFso9loZfAvqSQd7FnawSTMJXO+8gwhA5FbLVIg3QCAALxBEXJHNDZ9X8s+KhqmhwXWimSG4H8oz/xK25dFPLeZko6YmN1f9/O56eVAKNscPt/h/Rc9rygal9Te0pD/m4BpvXC0jd6hQwXUttBNDvacEi2ZNxMnG752gRJfjj/mzdRo7n8NtD9jn8dxKTOV1Moo4T5nf5vxGzt0muzVeemVtHFrUgqts+hrNCHiLGA9QsGluVnNk2sQHHWJUVE5xYS7CpnnMPF0cZL33hWUGWkyyGkPY6IXuIDuY5P+6RPjwuhwrj6GF/ag94l9Qp665w==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com;
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Delivery-date: Thu, 24 Feb 2022 13:24:31 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

Besides keeping things centralized and reducing (by folding) a few
conditionals, this also allows this helper to be put in .init.text.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
---
v2: New.

--- a/xen/arch/x86/cpu/amd.c
+++ b/xen/arch/x86/cpu/amd.c
@@ -744,6 +744,23 @@ void __init detect_zen2_null_seg_behavio
 
 }
 
+static void __init noinline detect_bugs(const struct cpuinfo_x86 *c)
+{
+       /*
+        * Older AMD CPUs don't save/load FOP/FIP/FDP unless an FPU exception
+        * is pending.  Xen works around this at (F)XRSTOR time.
+        */
+       if (!cpu_has(c, X86_FEATURE_RSTR_FP_ERR_PTRS))
+               setup_force_cpu_cap(X86_BUG_FPU_PTRS);
+
+       /*
+        * AMD CPUs before Zen2 don't clear segment bases/limits when loading
+        * a NULL selector.
+        */
+       if (!cpu_has_nscb)
+               setup_force_cpu_cap(X86_BUG_NULL_SEG);
+}
+
 static void cf_check init_amd(struct cpuinfo_x86 *c)
 {
        u32 l, h;
@@ -781,13 +805,6 @@ static void init_amd(struct cpuinfo_x86
                        wrmsr_amd_safe(0xc001100d, l, h & ~1);
        }
 
-       /*
-        * Older AMD CPUs don't save/load FOP/FIP/FDP unless an FPU exception
-        * is pending.  Xen works around this at (F)XRSTOR time.
-        */
-       if (c == &boot_cpu_data && !cpu_has(c, X86_FEATURE_RSTR_FP_ERR_PTRS))
-               setup_force_cpu_cap(X86_BUG_FPU_PTRS);
-
        if (c->x86 == 0x0f || c->x86 == 0x11)
                /* Always dispatch serialising on this hardare. */
                __set_bit(X86_FEATURE_LFENCE_DISPATCH, c->x86_capability);
@@ -796,17 +813,13 @@ static void init_amd(struct cpuinfo_x86
 
        amd_init_ssbd(c);
 
-       /* Probe for NSCB on Zen2 CPUs when not virtualised */
-       if (!cpu_has_hypervisor && !cpu_has_nscb && c == &boot_cpu_data &&
-           c->x86 == 0x17)
-               detect_zen2_null_seg_behaviour();
+       if (c == &boot_cpu_data) {
+               /* Probe for NSCB on Zen2 CPUs when not virtualised */
+               if (!cpu_has_hypervisor && !cpu_has_nscb && c->x86 == 0x17)
+                       detect_zen2_null_seg_behaviour();
 
-       /*
-        * AMD CPUs before Zen2 don't clear segment bases/limits when loading
-        * a NULL selector.
-        */
-       if (c == &boot_cpu_data && !cpu_has_nscb)
-               setup_force_cpu_cap(X86_BUG_NULL_SEG);
+               detect_bugs(c);
+       }
 
        /* MFENCE stops RDTSC speculation */
        if (!cpu_has_lfence_dispatch)




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.