Add a temporary hack to attach only the first thread of every core for
authorkettenis <kettenis@openbsd.org>
Sat, 12 Jul 2008 14:26:07 +0000 (14:26 +0000)
committerkettenis <kettenis@openbsd.org>
Sat, 12 Jul 2008 14:26:07 +0000 (14:26 +0000)
MULTIPROCESSOR kernels.  We map 'struct cpuinfo' at the same virtual
address on every processor, but since threads on the same core share
an MMU this doesn't quite work.  With the hack we are at least able to
use the other core (and any additional processors).

sys/arch/sparc64/conf/GENERIC.MP
sys/arch/sparc64/sparc64/cpu.c

index 42cb04e..f3c03f0 100644 (file)
@@ -1,4 +1,4 @@
-#      $OpenBSD: GENERIC.MP,v 1.3 2008/07/06 08:53:38 kettenis Exp $
+#      $OpenBSD: GENERIC.MP,v 1.4 2008/07/12 14:26:07 kettenis Exp $
 
 include "arch/sparc64/conf/GENERIC"
 
@@ -8,3 +8,4 @@ option  MULTIPROCESSOR
 cpu*   at mainbus?
 cpu*   at ssm?
 cpu*   at cmp?
+cpu*   at core?
index f4bf09a..fbd6d20 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: cpu.c,v 1.43 2008/07/12 07:37:25 kettenis Exp $       */
+/*     $OpenBSD: cpu.c,v 1.44 2008/07/12 14:26:07 kettenis Exp $       */
 /*     $NetBSD: cpu.c,v 1.13 2001/05/26 21:27:15 chs Exp $ */
 
 /*
@@ -209,6 +209,12 @@ cpu_match(parent, vcf, aux)
 
        if (portid != cpus->ci_upaid)
                return (0);
+#else
+       /* XXX Only attach the first thread of a core for now. */
+       if (OF_getprop(OF_parent(ma->ma_node), "device_type",
+           buf, sizeof(buf)) >= 0 && strcmp(buf, "core") == 0 &&
+           (getpropint(ma->ma_node, "cpuid", -1) % 2) == 1)
+               return (0);
 #endif
 
        return (1);