Source-Changes-HG archive

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

[src/trunk]: src/sys cpu topology:



details:   https://anonhg.NetBSD.org/src/rev/68f19037d981
branches:  trunk
changeset: 968316:68f19037d981
user:      ad <ad%NetBSD.org@localhost>
date:      Sun Jan 12 13:29:24 2020 +0000

description:
cpu topology:

- Fix a stupid bug where it complained about non-existent SMT on assymetric
  systems.

- Give each CPU a pointer back to the first CPU in same package.

diffstat:

 sys/kern/subr_cpu.c |  12 ++++++++----
 sys/sys/cpu_data.h  |   4 +++-
 2 files changed, 11 insertions(+), 5 deletions(-)

diffs (80 lines):

diff -r 6577c0fccf79 -r 68f19037d981 sys/kern/subr_cpu.c
--- a/sys/kern/subr_cpu.c       Sun Jan 12 13:19:32 2020 +0000
+++ b/sys/kern/subr_cpu.c       Sun Jan 12 13:29:24 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: subr_cpu.c,v 1.7 2020/01/12 09:29:18 mrg Exp $ */
+/*     $NetBSD: subr_cpu.c,v 1.8 2020/01/12 13:29:24 ad Exp $  */
 
 /*-
  * Copyright (c) 2007, 2008, 2009, 2010, 2012, 2019, 2020
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_cpu.c,v 1.7 2020/01/12 09:29:18 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_cpu.c,v 1.8 2020/01/12 13:29:24 ad Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -207,6 +207,8 @@
                        }
                        printf("\n");
                }
+               printf("%s first in package: %s\n", cpu_name(ci),
+                   cpu_name(ci->ci_package1st));
        }
 #endif /* DEBUG */
 }
@@ -229,6 +231,7 @@
        }
        ci->ci_schedstate.spc_flags |=
            (SPCF_CORE1ST | SPCF_PACKAGE1ST | SPCF_1STCLASS);
+       ci->ci_package1st = ci;
 }
 
 /*
@@ -338,8 +341,9 @@
                ci3->ci_schedstate.spc_flags |= SPCF_PACKAGE1ST;
 
                /* Walk through all CPUs in package and point to first. */
-               ci2 = ci;
+               ci2 = ci3;
                do {
+                       ci2->ci_package1st = ci3;
                        ci2->ci_sibling[CPUREL_PACKAGE1ST] = ci3;
                        ci2 = ci2->ci_sibling[CPUREL_PACKAGE];
                } while (ci2 != ci);
@@ -376,7 +380,7 @@
                 * others, mark first class CPUs for the scheduler.  This
                 * conflicts with SMT right now so whinge if observed.
                 */
-               if (curcpu()->ci_nsibling[CPUREL_CORE] == 1) {
+               if (curcpu()->ci_nsibling[CPUREL_CORE] > 1) {
                        printf("cpu_topology_init: asymmetric & SMT??\n");
                }
                for (CPU_INFO_FOREACH(cii, ci)) {
diff -r 6577c0fccf79 -r 68f19037d981 sys/sys/cpu_data.h
--- a/sys/sys/cpu_data.h        Sun Jan 12 13:19:32 2020 +0000
+++ b/sys/sys/cpu_data.h        Sun Jan 12 13:29:24 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: cpu_data.h,v 1.47 2020/01/09 16:35:03 ad Exp $ */
+/*     $NetBSD: cpu_data.h,v 1.48 2020/01/12 13:29:24 ad Exp $ */
 
 /*-
  * Copyright (c) 2004, 2006, 2007, 2008, 2019 The NetBSD Foundation, Inc.
@@ -151,6 +151,7 @@
        bool            cpu_is_slow;
        u_int           cpu_nsibling[CPUREL_COUNT];
        struct cpu_info *cpu_sibling[CPUREL_COUNT];
+       struct cpu_info *cpu_package1st;        /* 1st CPU in our package */
 
        /*
         * This section is mostly CPU-private.
@@ -203,6 +204,7 @@
 #define        ci_is_slow              ci_data.cpu_is_slow
 #define        ci_nsibling             ci_data.cpu_nsibling
 #define        ci_sibling              ci_data.cpu_sibling
+#define        ci_package1st           ci_data.cpu_package1st
 #define        ci_faultrng             ci_data.cpu_faultrng
 #define        ci_counts               ci_data.cpu_counts
 



Home | Main Index | Thread Index | Old Index