summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr/src/cmd/mdb/common/modules/genunix/pg.c7
-rw-r--r--usr/src/uts/common/os/pghw.c2
-rw-r--r--usr/src/uts/common/sys/lgrp.h1
-rw-r--r--usr/src/uts/sun4v/cpu/generic.c6
-rw-r--r--usr/src/uts/sun4v/cpu/niagara2.c4
-rw-r--r--usr/src/uts/sun4v/os/cmp.c2
-rw-r--r--usr/src/uts/sun4v/os/mpo.c28
7 files changed, 37 insertions, 13 deletions
diff --git a/usr/src/cmd/mdb/common/modules/genunix/pg.c b/usr/src/cmd/mdb/common/modules/genunix/pg.c
index 4d23c08bc5..4e36430f04 100644
--- a/usr/src/cmd/mdb/common/modules/genunix/pg.c
+++ b/usr/src/cmd/mdb/common/modules/genunix/pg.c
@@ -43,7 +43,8 @@ char *pg_hw_names[] = {
"ipipe",
"cache",
"fpu",
- "mpipe/chip",
+ "mpipe",
+ "chip",
"memory",
};
@@ -78,7 +79,7 @@ pg(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
if (mdb_getopts(argc, argv,
'q', MDB_OPT_SETBITS, TRUE, &opt_q,
- NULL) != argc)
+ NULL) != argc)
return (DCMD_USAGE);
if (flags & DCMD_PIPE_OUT)
@@ -111,7 +112,7 @@ pg(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
}
if (mdb_vread(&pg_class, sizeof (struct pg_class),
- (uintptr_t)pg.pg_class) == -1) {
+ (uintptr_t)pg.pg_class) == -1) {
mdb_warn("unable to read 'pg_class' at %p", pg.pg_class);
return (DCMD_ERR);
}
diff --git a/usr/src/uts/common/os/pghw.c b/usr/src/uts/common/os/pghw.c
index e2dc2a38f2..8b98bb7e7c 100644
--- a/usr/src/uts/common/os/pghw.c
+++ b/usr/src/uts/common/os/pghw.c
@@ -365,6 +365,8 @@ pghw_type_string(pghw_type_t hw)
return ("cache");
case PGHW_FPU:
return ("fpu");
+ case PGHW_MPIPE:
+ return ("mpipe");
case PGHW_CHIP:
return ("chip");
case PGHW_MEMORY:
diff --git a/usr/src/uts/common/sys/lgrp.h b/usr/src/uts/common/sys/lgrp.h
index 48ad8e8757..a7bc5e5d97 100644
--- a/usr/src/uts/common/sys/lgrp.h
+++ b/usr/src/uts/common/sys/lgrp.h
@@ -605,7 +605,6 @@ extern uint32_t lgrp_loadavg_tolerance;
extern uint32_t lgrp_loadavg_max_effect;
extern uint32_t lgrp_load_thresh;
extern lgrp_mem_policy_t lgrp_mem_policy_root;
-extern int tsb_lgrp_affinity;
#endif /* _KERNEL && _KMEMUSER */
diff --git a/usr/src/uts/sun4v/cpu/generic.c b/usr/src/uts/sun4v/cpu/generic.c
index 21771a5f71..b9467c4a5c 100644
--- a/usr/src/uts/sun4v/cpu/generic.c
+++ b/usr/src/uts/sun4v/cpu/generic.c
@@ -168,6 +168,12 @@ cpu_map_exec_units(struct cpu *cp)
if (cp->cpu_m.cpu_fpu == NO_EU_MAPPING_FOUND)
cp->cpu_m.cpu_fpu = (id_t)(cp->cpu_id);
+ /*
+ * The cpu_chip field is initialized based on the information
+ * in the MD and assume that all cpus within a chip
+ * share the same L2 cache. If no such info is available, we
+ * set the cpu to belong to the defacto chip 0.
+ */
cp->cpu_m.cpu_mpipe = cpunodes[cp->cpu_id].l2_cache_mapping;
if (cp->cpu_m.cpu_mpipe == NO_L2_CACHE_MAPPING_FOUND)
cp->cpu_m.cpu_mpipe = CPU_L2_CACHEID_INVALID;
diff --git a/usr/src/uts/sun4v/cpu/niagara2.c b/usr/src/uts/sun4v/cpu/niagara2.c
index e77b2ef3b4..1f0d3b65b8 100644
--- a/usr/src/uts/sun4v/cpu/niagara2.c
+++ b/usr/src/uts/sun4v/cpu/niagara2.c
@@ -201,6 +201,10 @@ cpu_map_exec_units(struct cpu *cp)
cp->cpu_m.cpu_mpipe = cpunodes[cp->cpu_id].l2_cache_mapping;
if (cp->cpu_m.cpu_mpipe == NO_L2_CACHE_MAPPING_FOUND)
cp->cpu_m.cpu_mpipe = CPU_L2_CACHEID_INVALID;
+
+ cp->cpu_m.cpu_chip = cpunodes[cp->cpu_id].l2_cache_mapping;
+ if (cp->cpu_m.cpu_chip == NO_L2_CACHE_MAPPING_FOUND)
+ cp->cpu_m.cpu_chip = CPU_CHIPID_INVALID;
}
static int cpucnt;
diff --git a/usr/src/uts/sun4v/os/cmp.c b/usr/src/uts/sun4v/os/cmp.c
index d5a9e3087d..681afab583 100644
--- a/usr/src/uts/sun4v/os/cmp.c
+++ b/usr/src/uts/sun4v/os/cmp.c
@@ -120,6 +120,8 @@ pg_plat_hw_instance_id(cpu_t *cpu, pghw_type_t hw)
switch (hw) {
case PGHW_IPIPE:
return (cpu->cpu_m.cpu_ipipe);
+ case PGHW_CHIP:
+ return (cpu->cpu_m.cpu_chip);
case PGHW_MPIPE:
return (cpu->cpu_m.cpu_mpipe);
case PGHW_FPU:
diff --git a/usr/src/uts/sun4v/os/mpo.c b/usr/src/uts/sun4v/os/mpo.c
index d98ce96438..b2776f3e93 100644
--- a/usr/src/uts/sun4v/os/mpo.c
+++ b/usr/src/uts/sun4v/os/mpo.c
@@ -37,6 +37,7 @@
#include <sys/mdesc.h>
#include <sys/mpo.h>
#include <vm/vm_dep.h>
+#include <vm/hat_sfmmu.h>
/*
* MPO and the sun4v memory representation
@@ -728,10 +729,12 @@ plat_build_mem_nodes(u_longlong_t *list, size_t nelems)
uint64_t stripe, frag, remove;
mem_stripe_t *ms;
- /* Check for non-MPO sun4v platforms */
+ /* Pre-reserve space for plat_assign_lgrphand_to_mem_node */
+ max_mem_nodes = max_locality_groups;
+ /* Check for non-MPO sun4v platforms */
if (n_locality_groups <= 1) {
- mpo_plat_assign_lgrphand_to_mem_node((lgrp_handle_t)0, 0);
+ mpo_plat_assign_lgrphand_to_mem_node(LGRP_DEFAULT_HANDLE, 0);
for (elem = 0; elem < nelems; elem += 2) {
base = list[elem];
len = list[elem+1];
@@ -742,11 +745,10 @@ plat_build_mem_nodes(u_longlong_t *list, size_t nelems)
mem_node_pfn_shift = 0;
mem_node_physalign = 0;
n_mem_stripes = 0;
- return;
+ if (n_mblocks == 1)
+ return;
}
- /* Pre-reserve space for plat_assign_lgrphand_to_mem_node */
- max_mem_nodes = max_locality_groups;
bzero(mem_stripes, sizeof (mem_stripes));
stripe = ptob(mnode_pages);
stride = max_locality_groups * stripe;
@@ -808,9 +810,17 @@ plat_build_mem_nodes(u_longlong_t *list, size_t nelems)
ms->offset = btop(offset);
ms->exists = 1;
- mpo_plat_assign_lgrphand_to_mem_node(lgrphand, mnode);
- mpo_mem_node_add_slice(ms->physbase, ms->physmax);
-
+ /*
+ * If we have only 1 lgroup and multiple mblocks,
+ * then we have already established our lgrp handle
+ * to mem_node and mem_node_config values above.
+ */
+ if (n_locality_groups > 1) {
+ mpo_plat_assign_lgrphand_to_mem_node(lgrphand,
+ mnode);
+ mpo_mem_node_add_slice(ms->physbase,
+ ms->physmax);
+ }
base = stripe_end;
stripe_end += stripe;
offset = 0;
@@ -837,7 +847,7 @@ plat_lgrp_cpu_to_hand(processorid_t id)
if (n_locality_groups > 1) {
return ((lgrp_handle_t)mpo_cpu[(int)id].home);
} else {
- return ((lgrp_handle_t)0); /* Default */
+ return ((lgrp_handle_t)LGRP_DEFAULT_HANDLE); /* Default */
}
}