On Fri, Mar 29, 2019 at 02:15:03PM -0700, Dan Williams wrote: > On Mon, Mar 11, 2019 at 1:55 PM Keith Busch <keith.busch@xxxxxxxxx> wrote: > > +static __init struct memory_target *find_mem_target(unsigned int mem_pxm) > > +{ > > + struct memory_target *target; > > + > > + list_for_each_entry(target, &targets, node) > > + if (target->memory_pxm == mem_pxm) > > + return target; > > + return NULL; > > The above implementation assumes that every SRAT entry has a unique > @mem_pxm. I don't think that's valid if the memory map is sparse, > right? Oh, we don't really care if multiple entries report the same PXM. We do assume there may be multiple entires with the same PXM and have tested this, but we're just allocating one memory target per unique memory PXM and consider multiple entires comprise the same memory target. That is okay if since we only need to identify unique PXMs and have no use for the adderss ranges that make up that target, which is the case for this series. I see you have a future use that has address ranges considerations, so separate targets for sparse ranges can definitely be added.