Messages in this thread | | | Date | Thu, 25 Jul 2013 12:09:29 +0800 | From | Tang Chen <> | Subject | Re: [PATCH 18/21] x86, numa: Synchronize nid info in memblock.reserve with numa_meminfo. |
| |
On 07/24/2013 05:25 AM, Tejun Heo wrote: > On Fri, Jul 19, 2013 at 03:59:31PM +0800, Tang Chen wrote: >> Vasilis Liaskovitis found that before we parse SRAT and fulfill numa_meminfo, >> the nids of all the regions in memblock.reserve[] are MAX_NUMNODES. That is >> because nids have not been mapped at that time. >> >> When we arrange ZONE_MOVABLE in each node later, we need nid in memblock. So >> after we parse SRAT and fulfill nume_meminfo, synchronize the nid info to >> memblock.reserve[] immediately. > > Having a separate sync is rather nasty. Why not let > memblock_set_node() and alloc functions set nid on the reserved > regions?
Node id and pxm are 1-1 mapped. For the current kernel, before SRAT is parsed, we don't know nid. So all allocated regions are reserved by memblock with nid = MAX_NUMNODES. So for early allocated memory, we cannot use memblock_set_node() and alloc functions to set the nid.
In this patch-set, we parse SRAT twice, the first one is right after memblock is ready. But we didn't setup nid <-> pxm mapping. So we still have this problem.
And as in [patch 14/21], when reserving hotpluggable memory, we use pxm. So my idea was to do a nid sync in numa_init(). After this, memblock will set nid when it allocates memory.
If we want to let memblock_set_node() and alloc functions set nid on the reserved regions, we should setup nid <-> pxm mapping when we parst SRAT for the first time. If you think this is OK, I can try it.
Thanks.
| |