On Fri, Sep 28, 2018 at 10:48:57AM +0800, Baoquan He wrote: > On 09/27/18 at 04:31pm, Masayoshi Mizuma wrote: > > From: Masayoshi Mizuma <m.miz...@jp.fujitsu.com> > > > > Add warning message if the padding size for KASLR, > > rand_mem_physical_padding, is not enough. The message also > > says the suitable padding size. > > > > Signed-off-by: Masayoshi Mizuma <m.miz...@jp.fujitsu.com> > > --- > > arch/x86/include/asm/setup.h | 2 ++ > > drivers/acpi/numa.c | 14 ++++++++++++++ > > 2 files changed, 16 insertions(+) > > > > diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h > > index ae13bc9..65a5bf8 100644 > > --- a/arch/x86/include/asm/setup.h > > +++ b/arch/x86/include/asm/setup.h > > @@ -80,6 +80,8 @@ static inline unsigned long kaslr_offset(void) > > return (unsigned long)&_text - __START_KERNEL; > > } > > > > +extern int rand_mem_physical_padding; > > + > > /* > > * Do NOT EVER look at the BIOS memory size location. > > * It does not work on many machines. > > diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c > > index 8516760..9c3cc3c 100644 > > --- a/drivers/acpi/numa.c > > +++ b/drivers/acpi/numa.c > > @@ -32,6 +32,7 @@ > > #include <linux/numa.h> > > #include <linux/nodemask.h> > > #include <linux/topology.h> > > +#include <asm/setup.h> > > > > static nodemask_t nodes_found_map = NODE_MASK_NONE; > > > > @@ -435,6 +436,8 @@ acpi_table_parse_srat(enum acpi_srat_type id, > > int __init acpi_numa_init(void) > > { > > int cnt = 0; > > + u32 max_phys_addr_tb; > > + u64 max_phys_addr; > > > > if (acpi_disabled) > > return -EINVAL; > > @@ -463,6 +466,17 @@ int __init acpi_numa_init(void) > > > > cnt = acpi_table_parse_srat(ACPI_SRAT_TYPE_MEMORY_AFFINITY, > > acpi_parse_memory_affinity, 0); > > + > > + if (parsed_numa_memblks && kaslr_enabled()) { > > + max_phys_addr = PFN_PHYS(max_possible_pfn); > > + max_phys_addr_tb = (roundup(max_phys_addr, 1ULL << 40)) > > >> 40; > > + > > + if (max_phys_addr_tb > rand_mem_physical_padding) > > Here I assume max_phys_addr_tb is the end of the possible RAM in system.
Yes, correct. > rand_mem_physical_padding is the preserved space for later memory > extending. Don't we add the actual RAM size to the > rand_mem_physical_padding, then compare with max_phys_addr_tb? This is very good point! You are right, the padding should be adjusted to exceed the possible RAM size, like as follows. ADDRESS 0 : 1TB <= actual RAM size : 2TB <= possible RAM size 2TB and more <= actual + padding size (kaslr_regions[0].size_tb) I'll fix it, thanks! - Masa > > Please correct me if I am wrong. > > Thanks > Baoquan > > > + pr_warn("Set 'rand_mem_physical_padding=%d' " > > + "as the kernel parameter. " > > + "Otherwise, memory hotadd may be > > failed.\n", > > + max_phys_addr_tb); > > + } > > } > > > > /* SLIT: System Locality Information Table */ > > -- > > 2.18.0 > >