Message ID | 20201217130758.11565-5-osalvador@suse.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Allocate memmap from hotadded memory (per device) | expand |
On 17.12.20 14:07, Oscar Salvador wrote: > Let the caller check whether it can pass MHP_MEMMAP_ON_MEMORY by > checking mhp_supports_memmap_on_memory(). > MHP_MEMMAP_ON_MEMORY can only be set in case > ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE is enabled, the architecture supports > altmap, and the range to be added spans a single memory block. > > Signed-off-by: Oscar Salvador <osalvador@suse.de> > --- > arch/powerpc/platforms/pseries/hotplug-memory.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c > index 7efe6ec5d14a..a7f68e282ec1 100644 > --- a/arch/powerpc/platforms/pseries/hotplug-memory.c > +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c > @@ -610,6 +610,7 @@ static int dlpar_memory_remove_by_ic(u32 lmbs_to_remove, u32 drc_index) > > static int dlpar_add_lmb(struct drmem_lmb *lmb) > { > + mhp_t mhp_flags = MHP_NONE; > unsigned long block_sz; > int nid, rc; > > @@ -629,8 +630,10 @@ static int dlpar_add_lmb(struct drmem_lmb *lmb) > if (nid < 0 || !node_possible(nid)) > nid = first_online_node; > > + if (mhp_supports_memmap_on_memory(block_sz)) > + mhp_flags |= MHP_MEMMAP_ON_MEMORY; > /* Add the memory */ > - rc = __add_memory(nid, lmb->base_addr, block_sz, MHP_NONE); > + rc = __add_memory(nid, lmb->base_addr, block_sz, mhp_flags); > if (rc) { > invalidate_lmb_associativity_index(lmb); > return rc; With 16MB LMBs it's quite wasteful - you won't even have a huge page fitting the the remaining part. I do wonder if we want this on powerpc only with a bigger LMB/memory block size (e.g., 256 MB, which is AFAIK the maximum usually found).
On Mon, Jan 11, 2021 at 05:55:37PM +0100, David Hildenbrand wrote: > On 17.12.20 14:07, Oscar Salvador wrote: > With 16MB LMBs it's quite wasteful - you won't even have a huge page > fitting the the remaining part. > > I do wonder if we want this on powerpc only with a bigger LMB/memory > block size (e.g., 256 MB, which is AFAIK the maximum usually found). Yeah, powerpc is trickier than the others. It is more difficult to take advante of this in this platfowm as depending on the page's size, a larger memory are might have been mapped before, and so, further hot-add operations will be a noop wrt. populating sections, until the range to be added falls in non-mapped area. Nevertheless, I will make this wired to larger memory blocks as you said.
diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c index 7efe6ec5d14a..a7f68e282ec1 100644 --- a/arch/powerpc/platforms/pseries/hotplug-memory.c +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c @@ -610,6 +610,7 @@ static int dlpar_memory_remove_by_ic(u32 lmbs_to_remove, u32 drc_index) static int dlpar_add_lmb(struct drmem_lmb *lmb) { + mhp_t mhp_flags = MHP_NONE; unsigned long block_sz; int nid, rc; @@ -629,8 +630,10 @@ static int dlpar_add_lmb(struct drmem_lmb *lmb) if (nid < 0 || !node_possible(nid)) nid = first_online_node; + if (mhp_supports_memmap_on_memory(block_sz)) + mhp_flags |= MHP_MEMMAP_ON_MEMORY; /* Add the memory */ - rc = __add_memory(nid, lmb->base_addr, block_sz, MHP_NONE); + rc = __add_memory(nid, lmb->base_addr, block_sz, mhp_flags); if (rc) { invalidate_lmb_associativity_index(lmb); return rc;
Let the caller check whether it can pass MHP_MEMMAP_ON_MEMORY by checking mhp_supports_memmap_on_memory(). MHP_MEMMAP_ON_MEMORY can only be set in case ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE is enabled, the architecture supports altmap, and the range to be added spans a single memory block. Signed-off-by: Oscar Salvador <osalvador@suse.de> --- arch/powerpc/platforms/pseries/hotplug-memory.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)