Author: andrew
Date: Sat Aug  5 20:57:34 2017
New Revision: 322109
URL: https://svnweb.freebsd.org/changeset/base/322109

Log:
  Mark each cpu in the appropriate cpuset_domain set. This allows devices to
  handle cases where they can only run on a single domain.
  
  To allow all devices access to this set we need to move reading the domain
  earlier in the boot as it was previously handled in the CPU driver, however
  this is too late for the GICv3 ITS driver.
  
  Sponsored by: DARPA, AFRL

Modified:
  head/sys/arm64/arm64/mp_machdep.c
  head/sys/arm64/include/param.h

Modified: head/sys/arm64/arm64/mp_machdep.c
==============================================================================
--- head/sys/arm64/arm64/mp_machdep.c   Sat Aug  5 19:57:45 2017        
(r322108)
+++ head/sys/arm64/arm64/mp_machdep.c   Sat Aug  5 20:57:34 2017        
(r322109)
@@ -198,10 +198,6 @@ arm64_cpu_attach(device_t dev)
        /* Set the device to start it later */
        cpu_list[cpuid] = dev;
 
-       /* Try to read the numa node of this cpu */
-       OF_getencprop(ofw_bus_get_node(dev), "numa-node-id",
-           &__pcpu[cpuid].pc_domain, sizeof(__pcpu[cpuid].pc_domain));
-
        return (0);
 }
 
@@ -535,6 +531,7 @@ static boolean_t
 cpu_init_fdt(u_int id, phandle_t node, u_int addr_size, pcell_t *reg)
 {
        uint64_t target_cpu;
+       int domain;
 
        target_cpu = reg[0];
        if (addr_size == 2) {
@@ -542,7 +539,17 @@ cpu_init_fdt(u_int id, phandle_t node, u_int addr_size
                target_cpu |= reg[1];
        }
 
-       return (start_cpu(id, target_cpu) ? TRUE : FALSE);
+       if (!start_cpu(id, target_cpu))
+               return (FALSE);
+
+       /* Try to read the numa node of this cpu */
+       if (OF_getencprop(node, "numa-node-id", &domain, sizeof(domain)) > 0) {
+               __pcpu[id].pc_domain = domain;
+               if (domain < MAXMEMDOM)
+                       CPU_SET(id, &cpuset_domain[domain]);
+       }
+
+       return (TRUE);
 }
 #endif
 

Modified: head/sys/arm64/include/param.h
==============================================================================
--- head/sys/arm64/include/param.h      Sat Aug  5 19:57:45 2017        
(r322108)
+++ head/sys/arm64/include/param.h      Sat Aug  5 20:57:34 2017        
(r322109)
@@ -60,7 +60,7 @@
 #endif /* SMP || KLD_MODULE */
 
 #ifndef MAXMEMDOM
-#define        MAXMEMDOM       1
+#define        MAXMEMDOM       2
 #endif
 
 #define        ALIGNBYTES      _ALIGNBYTES
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to