I think if you're going to poke into drivers/base/memory.c we should let the -mm guys know that you're creating a new interface. The ACPI part looks fine to me. cc added. /ac * Prarit Bhargava <prarit@xxxxxxxxxx>: > New sockets have on-die memory controllers. This means that in certain > HW configurations the memory behind the socket comes and goes as the socket > is physically enabled and disabled. > > Since the cpu bringup code does on node memory allocations, the memory on the > added socket must be onlined first. > > Add a .config option to automatically online hot added memory, and enable it > in the acpi memory add path. > > Signed-off-by: Prarit Bhargava <prarit@xxxxxxxxxx> > > diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig > index 93d2c79..dece6bd 100644 > --- a/drivers/acpi/Kconfig > +++ b/drivers/acpi/Kconfig > @@ -350,6 +350,14 @@ config ACPI_HOTPLUG_MEMORY > To compile this driver as a module, choose M here: > the module will be called acpi_memhotplug. > > +config ACPI_HOTPLUG_MEMORY_AUTO_ONLINE > + bool "Automatically online hotplugged memory" > + depends on ACPI_HOTPLUG_MEMORY > + default n > + help > + This forces memory that is brought into service by ACPI > + to be automatically onlined. > + > config ACPI_SBS > tristate "Smart Battery System" > depends on X86 > diff --git a/drivers/acpi/acpi_memhotplug.c b/drivers/acpi/acpi_memhotplug.c > index 3597d73..9814c50 100644 > --- a/drivers/acpi/acpi_memhotplug.c > +++ b/drivers/acpi/acpi_memhotplug.c > @@ -30,6 +30,7 @@ > #include <linux/init.h> > #include <linux/types.h> > #include <linux/memory_hotplug.h> > +#include <linux/memory.h> > #include <acpi/acpi_drivers.h> > > #define ACPI_MEMORY_DEVICE_CLASS "memory" > @@ -252,6 +253,19 @@ static int acpi_memory_enable_device(struct acpi_memory_device *mem_device) > result = add_memory(node, info->start_addr, info->length); > if (result) > continue; > +#ifdef CONFIG_ACPI_HOTPLUG_MEMORY_AUTO_ONLINE > + /* > + * New processors require memory to be online before cpus. > + * No notifications are required here as "we" are the only > + * ones who know about the new memory right now. > + */ > + result = online_pages(info->start_addr >> PAGE_SHIFT, > + info->length >> PAGE_SHIFT); > + if (!result) > + set_memory_state(info->start_addr, MEM_ONLINE); > + else > + printk("Memory online failed.\n"); > +#endif > info->enabled = 1; > num_enabled++; > } > diff --git a/drivers/base/memory.c b/drivers/base/memory.c > index 2f86915..fb465d5 100644 > --- a/drivers/base/memory.c > +++ b/drivers/base/memory.c > @@ -510,6 +510,20 @@ int remove_memory_block(unsigned long node_id, struct mem_section *section, > } > > /* > + * need an interface for the VM to mark sections on and offline when hot-adding > + * memory. > + */ > +void set_memory_state(unsigned long addr, unsigned long state) > +{ > + struct mem_section *section; > + struct memory_block *mem; > + > + section = __pfn_to_section(addr >> PAGE_SHIFT); > + mem = find_memory_block(section); > + mem->state = state; > +} > + > +/* > * need an interface for the VM to add new memory regions, > * but without onlining it. > */ > diff --git a/include/linux/memory.h b/include/linux/memory.h > index 1adfe77..5d8d78c 100644 > --- a/include/linux/memory.h > +++ b/include/linux/memory.h > @@ -112,6 +112,7 @@ extern int remove_memory_block(unsigned long, struct mem_section *, int); > extern int memory_notify(unsigned long val, void *v); > extern int memory_isolate_notify(unsigned long val, void *v); > extern struct memory_block *find_memory_block(struct mem_section *); > +extern void set_memory_state(unsigned long, unsigned long); > #define CONFIG_MEM_BLOCK_SIZE (PAGES_PER_SECTION<<PAGE_SHIFT) > enum mem_add_context { BOOT, HOTPLUG }; > #endif /* CONFIG_MEMORY_HOTPLUG_SPARSE */ > -- > To unsubscribe from this list: send the line "unsubscribe linux-acpi" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>