On Tue, Jun 15, 2021 at 11:27:50AM +0530, Aneesh Kumar K.V wrote: > David Gibson writes: > > > On Mon, Jun 14, 2021 at 10:10:03PM +0530, Aneesh Kumar K.V wrote: > >> FORM2 introduce a concept of secondary domain which is identical to the > >> conceept of FORM1 primary domain. Use secondary domain as the numa node > >> when using persistent memory device. For DAX kmem use the logical domain > >> id introduced in FORM2. This new numa node > >> > >> Signed-off-by: Aneesh Kumar K.V > >> --- > >> arch/powerpc/mm/numa.c | 28 +++++++++++++++++++++++ > >> arch/powerpc/platforms/pseries/papr_scm.c | 26 +++++++++++++-------- > >> arch/powerpc/platforms/pseries/pseries.h | 1 + > >> 3 files changed, 45 insertions(+), 10 deletions(-) > >> > >> diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c > >> index 86cd2af014f7..b9ac6d02e944 100644 > >> --- a/arch/powerpc/mm/numa.c > >> +++ b/arch/powerpc/mm/numa.c > >> @@ -265,6 +265,34 @@ static int associativity_to_nid(const __be32 *associativity) > >> return nid; > >> } > >> > >> +int get_primary_and_secondary_domain(struct device_node *node, int *primary, int *secondary) > >> +{ > >> + int secondary_index; > >> + const __be32 *associativity; > >> + > >> + if (!numa_enabled) { > >> + *primary = NUMA_NO_NODE; > >> + *secondary = NUMA_NO_NODE; > >> + return 0; > >> + } > >> + > >> + associativity = of_get_associativity(node); > >> + if (!associativity) > >> + return -ENODEV; > >> + > >> + if (of_read_number(associativity, 1) >= primary_domain_index) { > >> + *primary = of_read_number(&associativity[primary_domain_index], 1); > >> + secondary_index = of_read_number(&distance_ref_points[1], 1); > > > > Secondary ID is always the second reference point, but primary depends > > on the length of resources? That seems very weird. > > primary_domain_index is distance_ref_point[0]. With Form2 we would find > both primary and secondary domain ID same for all resources other than > persistent memory device. The usage w.r.t. persistent memory is > explained in patch 7. Right, I misunderstood > > With Form2 the primary domainID and secondary domainID are used to identify the NUMA nodes > the kernel should use when using persistent memory devices. This seems kind of bogus. With Form1, the primary/secondary ID are a sort of heirarchy of distance (things with same primary ID are very close, things with same secondary are kinda-close, etc.). With Form2, it's referring to their effective node for different purposes. Using the same terms for different meanings seems unnecessarily confusing. > Persistent memory devices > can also be used as regular memory using DAX KMEM driver and primary domainID indicates > the numa node number OS should use when using these devices as regular memory. Secondary > domainID is the numa node number that should be used when using this device as > persistent memory. It's weird to me that you'd want to consider them in different nodes for those different purposes. > In the later case, we are interested in the locality of the > device to an established numa node. In the above example, if the last row represents a > persistent memory device/resource, NUMA node number 40 will be used when using the device > as regular memory and NUMA node number 0 will be the device numa node when using it as > a persistent memory device. I don't really get what you mean by "locality of the device to an established numa node". Or at least how that's different from anything else we're handling here. -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson