lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <b915799f-663f-4deb-9ba8-3a7410cb5a31@redhat.com> Date: Tue, 28 Nov 2023 12:12:00 +0100 From: David Hildenbrand <david@...hat.com> To: Sumanth Korikkar <sumanthk@...ux.ibm.com>, linux-mm <linux-mm@...ck.org>, Andrew Morton <akpm@...ux-foundation.org> Cc: Oscar Salvador <osalvador@...e.de>, Michal Hocko <mhocko@...e.com>, "Aneesh Kumar K.V" <aneesh.kumar@...ux.ibm.com>, Anshuman Khandual <anshuman.khandual@....com>, Gerald Schaefer <gerald.schaefer@...ux.ibm.com>, Alexander Gordeev <agordeev@...ux.ibm.com>, Heiko Carstens <hca@...ux.ibm.com>, Vasily Gorbik <gor@...ux.ibm.com>, linux-s390 <linux-s390@...r.kernel.org>, LKML <linux-kernel@...r.kernel.org> Subject: Re: [PATCH v4 4/5] s390/mm: implement MEM_PREPARE_ONLINE/MEM_FINISH_OFFLINE notifiers On 28.11.23 12:03, Sumanth Korikkar wrote: > MEM_PREPARE_ONLINE memory notifier makes memory block physical > accessible via sclp assign command. The notifier ensures self-contained > memory maps are accessible and hence enabling the "memmap on memory" on > s390. > > MEM_FINISH_OFFLINE memory notifier shifts the memory block to an > inaccessible state via sclp unassign command. > > Implementation considerations: > * When MHP_MEMMAP_ON_MEMORY is disabled, the system retains the old > behavior. This means the memory map is allocated from default memory. > * If MACHINE_HAS_EDAT1 is unavailable, MHP_MEMMAP_ON_MEMORY is > automatically disabled. This ensures that vmemmap pagetables do not > consume additional memory from the default memory allocator. > * The MEM_GOING_ONLINE notifier has been modified to perform no > operation, as MEM_PREPARE_ONLINE already executes the sclp assign > command. > * The MEM_CANCEL_ONLINE/MEM_OFFLINE notifier now performs no operation, as > MEM_FINISH_OFFLINE already executes the sclp unassign command. > > Reviewed-by: Gerald Schaefer <gerald.schaefer@...ux.ibm.com> > Signed-off-by: Sumanth Korikkar <sumanthk@...ux.ibm.com> > --- > drivers/s390/char/sclp_cmd.c | 47 +++++++++++++++++++++++++++++++----- > 1 file changed, 41 insertions(+), 6 deletions(-) > > diff --git a/drivers/s390/char/sclp_cmd.c b/drivers/s390/char/sclp_cmd.c > index 355e63e44e95..c551dc6734fe 100644 > --- a/drivers/s390/char/sclp_cmd.c > +++ b/drivers/s390/char/sclp_cmd.c > @@ -18,6 +18,7 @@ > #include <linux/mm.h> > #include <linux/mmzone.h> > #include <linux/memory.h> > +#include <linux/memory_hotplug.h> > #include <linux/module.h> > #include <asm/ctlreg.h> > #include <asm/chpid.h> > @@ -26,6 +27,7 @@ > #include <asm/sclp.h> > #include <asm/numa.h> > #include <asm/facility.h> > +#include <asm/page-states.h> > > #include "sclp.h" > > @@ -319,6 +321,7 @@ static bool contains_standby_increment(unsigned long start, unsigned long end) > static int sclp_mem_notifier(struct notifier_block *nb, > unsigned long action, void *data) > { > + unsigned long altmap_start, altmap_size; > unsigned long start, size; > struct memory_notify *arg; > unsigned char id; > @@ -340,13 +343,43 @@ static int sclp_mem_notifier(struct notifier_block *nb, > if (contains_standby_increment(start, start + size)) > rc = -EPERM; > break; > - case MEM_GOING_ONLINE: > + case MEM_PREPARE_ONLINE: > + /* > + * Access the altmap_start_pfn and altmap_nr_pages fields > + * within the struct memory_notify specifically when dealing > + * with only MEM_PREPARE_ONLINE/MEM_PREPARE_OFFLINE notifiers. > + */ > + altmap_start = arg->altmap_start_pfn << PAGE_SHIFT; > + altmap_size = arg->altmap_nr_pages << PAGE_SHIFT; PFN_PHYS(), maybe you can directly do: if (arg->altmap_start_pfn) { start = PFN_PHYS(arg->altmap_start_pfn); size += PFN_PHYS(arg->altmap_nr_pages); } ... and avoid the variables completely. Reviewed-by: David Hildenbrand <david@...hat.com> > default: > @@ -397,7 +430,9 @@ static void __init add_memory_merged(u16 rn) > if (!size) > goto skip_add; > for (addr = start; addr < start + size; addr += block_size) > - add_memory(0, addr, block_size, MHP_NONE); > + add_memory(0, addr, block_size, > + MACHINE_HAS_EDAT1 ? > + MHP_MEMMAP_ON_MEMORY | MHP_OFFLINE_INACCESSIBLE : MHP_NONE); > skip_add: > first_rn = rn; > num = 1; That hunk is likely better moved to the last enabling patch. -- Cheers, David / dhildenb
Powered by blists - more mailing lists