Index: sys/x86/x86/mp_x86.c =================================================================== --- sys/x86/x86/mp_x86.c +++ sys/x86/x86/mp_x86.c @@ -492,7 +492,7 @@ int type; int subtype; int id_shift; - } topo_layers[MAX_CACHE_LEVELS + 4]; + } topo_layers[MAX_CACHE_LEVELS + 5]; struct topo_node *parent; struct topo_node *node; int layer; @@ -524,6 +524,12 @@ printf("Package ID shift: %u\n", topo_layers[nlayers].id_shift); nlayers++; + topo_layers[nlayers].type = TOPO_TYPE_NODE; + topo_layers[nlayers].id_shift = pkg_id_shift; + if (bootverbose) + printf("Node ID shift: %u\n", topo_layers[nlayers].id_shift); + nlayers++; + if (pkg_id_shift > node_id_shift && node_id_shift != 0) { topo_layers[nlayers].type = TOPO_TYPE_GROUP; topo_layers[nlayers].id_shift = node_id_shift; @@ -796,7 +802,8 @@ node = root; while (node != NULL) { if ((node->type != TOPO_TYPE_GROUP && - node->type != TOPO_TYPE_CACHE) || + node->type != TOPO_TYPE_CACHE && + node->type != TOPO_TYPE_NODE) || (root->type != TOPO_TYPE_SYSTEM && CPU_CMP(&node->cpuset, &root->cpuset) == 0)) { node = topo_next_node(root, node); @@ -817,7 +824,8 @@ i = 0; while (node != NULL) { if ((node->type != TOPO_TYPE_GROUP && - node->type != TOPO_TYPE_CACHE) || + node->type != TOPO_TYPE_CACHE && + node->type != TOPO_TYPE_NODE) || (root->type != TOPO_TYPE_SYSTEM && CPU_CMP(&node->cpuset, &root->cpuset) == 0)) { node = topo_next_node(root, node);