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
This commit is contained in:
Andrew Turner 2017-08-05 20:57:34 +00:00
parent 8c59f334b9
commit 1f15260790
2 changed files with 13 additions and 6 deletions

View File

@ -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, pcell_t *reg)
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

View File

@ -60,7 +60,7 @@
#endif /* SMP || KLD_MODULE */
#ifndef MAXMEMDOM
#define MAXMEMDOM 1
#define MAXMEMDOM 2
#endif
#define ALIGNBYTES _ALIGNBYTES