Source-Changes-HG archive

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

[src/trunk]: src/sys/arch/x86/x86 In fact, xc_broadcast also applies to offli...



details:   https://anonhg.NetBSD.org/src/rev/dd385edbbc1f
branches:  trunk
changeset: 840099:dd385edbbc1f
user:      maxv <maxv%NetBSD.org@localhost>
date:      Sat Mar 23 10:02:05 2019 +0000

description:
In fact, xc_broadcast also applies to offline CPUs, so we don't need to
make sure each CPU is online. Remove the checks, I suspect they weren't
totally correct by the way.

diffstat:

 sys/arch/x86/x86/spectre.c |  43 ++-----------------------------------------
 sys/arch/x86/x86/svs.c     |  23 ++---------------------
 2 files changed, 4 insertions(+), 62 deletions(-)

diffs (157 lines):

diff -r 5bcec7476e56 -r dd385edbbc1f sys/arch/x86/x86/spectre.c
--- a/sys/arch/x86/x86/spectre.c        Sat Mar 23 09:48:04 2019 +0000
+++ b/sys/arch/x86/x86/spectre.c        Sat Mar 23 10:02:05 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: spectre.c,v 1.24 2019/01/27 05:08:05 dholland Exp $    */
+/*     $NetBSD: spectre.c,v 1.25 2019/03/23 10:02:05 maxv Exp $        */
 
 /*
  * Copyright (c) 2018 NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: spectre.c,v 1.24 2019/01/27 05:08:05 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: spectre.c,v 1.25 2019/03/23 10:02:05 maxv Exp $");
 
 #include "opt_spectre.h"
 
@@ -292,31 +292,13 @@
 static int
 mitigation_v2_change(bool enabled)
 {
-       struct cpu_info *ci = NULL;
-       CPU_INFO_ITERATOR cii;
        uint64_t xc;
 
        v2_detect_method();
 
-       mutex_enter(&cpu_lock);
-
-       /*
-        * We expect all the CPUs to be online.
-        */
-       for (CPU_INFO_FOREACH(cii, ci)) {
-               struct schedstate_percpu *spc = &ci->ci_schedstate;
-               if (spc->spc_flags & SPCF_OFFLINE) {
-                       printf("[!] cpu%d offline, SpectreV2 not changed\n",
-                           cpu_index(ci));
-                       mutex_exit(&cpu_lock);
-                       return EOPNOTSUPP;
-               }
-       }
-
        switch (v2_mitigation_method) {
        case V2_MITIGATION_NONE:
                printf("[!] No mitigation available\n");
-               mutex_exit(&cpu_lock);
                return EOPNOTSUPP;
        case V2_MITIGATION_AMD_DIS_IND:
        case V2_MITIGATION_INTEL_IBRS:
@@ -331,7 +313,6 @@
                xc_wait(xc);
                printf(" done!\n");
                v2_mitigation_enabled = enabled;
-               mutex_exit(&cpu_lock);
                v2_set_name();
                return 0;
        default:
@@ -495,31 +476,13 @@
 static int
 mitigation_v4_change(bool enabled)
 {
-       struct cpu_info *ci = NULL;
-       CPU_INFO_ITERATOR cii;
        uint64_t xc;
 
        v4_detect_method();
 
-       mutex_enter(&cpu_lock);
-
-       /*
-        * We expect all the CPUs to be online.
-        */
-       for (CPU_INFO_FOREACH(cii, ci)) {
-               struct schedstate_percpu *spc = &ci->ci_schedstate;
-               if (spc->spc_flags & SPCF_OFFLINE) {
-                       printf("[!] cpu%d offline, SpectreV4 not changed\n",
-                           cpu_index(ci));
-                       mutex_exit(&cpu_lock);
-                       return EOPNOTSUPP;
-               }
-       }
-
        switch (v4_mitigation_method) {
        case V4_MITIGATION_NONE:
                printf("[!] No mitigation available\n");
-               mutex_exit(&cpu_lock);
                return EOPNOTSUPP;
        case V4_MITIGATION_INTEL_SSBD:
        case V4_MITIGATION_AMD_NONARCH_F15H:
@@ -532,13 +495,11 @@
                xc_wait(xc);
                printf(" done!\n");
                v4_mitigation_enabled = enabled;
-               mutex_exit(&cpu_lock);
                v4_set_name();
                return 0;
        case V4_MITIGATION_INTEL_SSB_NO:
        case V4_MITIGATION_AMD_SSB_NO:
                printf("[+] The CPU is not affected by SpectreV4\n");
-               mutex_exit(&cpu_lock);
                return 0;
        default:
                panic("impossible");
diff -r 5bcec7476e56 -r dd385edbbc1f sys/arch/x86/x86/svs.c
--- a/sys/arch/x86/x86/svs.c    Sat Mar 23 09:48:04 2019 +0000
+++ b/sys/arch/x86/x86/svs.c    Sat Mar 23 10:02:05 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: svs.c,v 1.23 2019/03/09 08:42:26 maxv Exp $    */
+/*     $NetBSD: svs.c,v 1.24 2019/03/23 10:02:05 maxv Exp $    */
 
 /*
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: svs.c,v 1.23 2019/03/09 08:42:26 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: svs.c,v 1.24 2019/03/23 10:02:05 maxv Exp $");
 
 #include "opt_svs.h"
 
@@ -704,25 +704,8 @@
 static int
 svs_disable(void)
 {
-       struct cpu_info *ci = NULL;
-       CPU_INFO_ITERATOR cii;
        uint64_t xc;
 
-       mutex_enter(&cpu_lock);
-
-       /*
-        * We expect all the CPUs to be online.
-        */
-       for (CPU_INFO_FOREACH(cii, ci)) {
-               struct schedstate_percpu *spc = &ci->ci_schedstate;
-               if (spc->spc_flags & SPCF_OFFLINE) {
-                       printf("[!] cpu%d offline, SVS not disabled\n",
-                           cpu_index(ci));
-                       mutex_exit(&cpu_lock);
-                       return EOPNOTSUPP;
-               }
-       }
-
        svs_cpu_barrier1 = ncpu;
        svs_cpu_barrier2 = ncpu;
 
@@ -731,8 +714,6 @@
        xc_wait(xc);
        printf(" done!\n");
 
-       mutex_exit(&cpu_lock);
-
        return 0;
 }
 



Home | Main Index | Thread Index | Old Index