Re: [PATCH 3/3] ppc64-specific memory notifier support

2008-03-03 Thread Nathan Lynch
Michael Ellerman wrote:
 On Thu, 2008-02-28 at 08:46 -0800, Badari Pulavarty wrote:
  Hotplug memory notifier for ppc64. This gets invoked by writing
  the device-node that needs to be removed to /proc/ppc64/ofdt.
  We need to adjust the sections and remove sysfs entries by
  calling __remove_pages(). Then call arch specific code to
  get rid of htab mappings for the section of memory.
  
  Signed-off-by: Badari Pulavarty [EMAIL PROTECTED]
  ---
   arch/powerpc/platforms/pseries/Makefile |1 
   arch/powerpc/platforms/pseries/hotplug-memory.c |   98 
  
   2 files changed, 99 insertions(+)
  
  Index: linux-2.6.25-rc2/arch/powerpc/platforms/pseries/hotplug-memory.c
  ===
  --- /dev/null   1970-01-01 00:00:00.0 +
  +++ linux-2.6.25-rc2/arch/powerpc/platforms/pseries/hotplug-memory.c
  2008-02-28 08:20:14.0 -0800
 
  +
  +static struct notifier_block pseries_smp_nb = {
  +   .notifier_call = pseries_memory_notifier,
  +};
  +
  +static int __init pseries_memory_hotplug_init(void)
  +{
  +   if (firmware_has_feature(FW_FEATURE_LPAR))
  +   pSeries_reconfig_notifier_register(pseries_smp_nb);
  +
  +   return 0;
  +}
  +arch_initcall(pseries_memory_hotplug_init);
 
 This is going to fire on non-pseries LPAR platforms, like iSeries and
 PS3. Which is not what you want I think.

Well, the notifier will be registered, yes, but it will never be
called because that path is reachable only from a write to
/proc/ppc64/ofdt, which is not created on non-pseries.

Maybe it should be

machine_device_initcall(pseries, pseries_memory_hotplug_init);

(and pseries_cpu_hotplug_init in hotplug-cpu.c should be changed to
machine_arch_initcall)
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: [PATCH 3/3] ppc64-specific memory notifier support

2008-03-02 Thread Michael Ellerman
On Fri, 2008-02-29 at 09:47 -0800, Badari Pulavarty wrote:
 Index: linux-2.6.25-rc2/arch/powerpc/platforms/pseries/hotplug-memory.c
 ===
 --- /dev/null 1970-01-01 00:00:00.0 +
 +++ linux-2.6.25-rc2/arch/powerpc/platforms/pseries/hotplug-memory.c  
 2008-02-29 09:25:14.0 -0800
 @@ -0,0 +1,98 @@

 +
 +static struct notifier_block pseries_mem_nb = {
 + .notifier_call = pseries_memory_notifier,
 +};
 +
 +static int __init pseries_memory_hotplug_init(void)
 +{
 + if (firmware_has_feature(FW_FEATURE_LPAR))
 + pSeries_reconfig_notifier_register(pseries_mem_nb);
 +
 + return 0;
 +}
 +machine_device_initcall(pseries, pseries_memory_hotplug_init);

Yep that looks good.

cheers

-- 
Michael Ellerman
OzLabs, IBM Australia Development Lab

wwweb: http://michael.ellerman.id.au
phone: +61 2 6212 1183 (tie line 70 21183)

We do not inherit the earth from our ancestors,
we borrow it from our children. - S.M.A.R.T Person


signature.asc
Description: This is a digitally signed message part
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Re: [PATCH 3/3] ppc64-specific memory notifier support

2008-02-29 Thread Badari Pulavarty
On Fri, 2008-02-29 at 12:03 +1100, Michael Ellerman wrote:
 On Thu, 2008-02-28 at 18:39 -0600, Nathan Lynch wrote:
  Michael Ellerman wrote:
   On Thu, 2008-02-28 at 08:46 -0800, Badari Pulavarty wrote:
Hotplug memory notifier for ppc64. This gets invoked by writing
the device-node that needs to be removed to /proc/ppc64/ofdt.
We need to adjust the sections and remove sysfs entries by
calling __remove_pages(). Then call arch specific code to
get rid of htab mappings for the section of memory.

Signed-off-by: Badari Pulavarty [EMAIL PROTECTED]
---
 arch/powerpc/platforms/pseries/Makefile |1 
 arch/powerpc/platforms/pseries/hotplug-memory.c |   98 

 2 files changed, 99 insertions(+)

Index: linux-2.6.25-rc2/arch/powerpc/platforms/pseries/hotplug-memory.c
===
--- /dev/null   1970-01-01 00:00:00.0 +
+++ linux-2.6.25-rc2/arch/powerpc/platforms/pseries/hotplug-memory.c
2008-02-28 08:20:14.0 -0800
   
+
+static struct notifier_block pseries_smp_nb = {
+   .notifier_call = pseries_memory_notifier,
+};
+
+static int __init pseries_memory_hotplug_init(void)
+{
+   if (firmware_has_feature(FW_FEATURE_LPAR))
+   pSeries_reconfig_notifier_register(pseries_smp_nb);
+
+   return 0;
+}
+arch_initcall(pseries_memory_hotplug_init);
   
   This is going to fire on non-pseries LPAR platforms, like iSeries and
   PS3. Which is not what you want I think.
  
  Well, the notifier will be registered, yes, but it will never be
  called because that path is reachable only from a write to
  /proc/ppc64/ofdt, which is not created on non-pseries.
 
 Sure. Still seems better not to register it in the first place.
 
  Maybe it should be
  
  machine_device_initcall(pseries, pseries_memory_hotplug_init);
 
 I think so.
 

Here is the latest for review. (just to make sure I didn't miss
anything).

Thanks,
Badari

Hotplug memory notifier for ppc64. This gets invoked by writing
the device-node that needs to be removed to /proc/ppc64/ofdt.
We need to adjust the sections and remove sysfs entries by
calling __remove_pages(). Then call arch specific code to
get rid of htab mappings for the section of memory.

Signed-off-by: Badari Pulavarty [EMAIL PROTECTED]
---
 arch/powerpc/platforms/pseries/Makefile |1 
 arch/powerpc/platforms/pseries/hotplug-memory.c |   98 
 2 files changed, 99 insertions(+)

Index: linux-2.6.25-rc2/arch/powerpc/platforms/pseries/hotplug-memory.c
===
--- /dev/null   1970-01-01 00:00:00.0 +
+++ linux-2.6.25-rc2/arch/powerpc/platforms/pseries/hotplug-memory.c
2008-02-29 09:25:14.0 -0800
@@ -0,0 +1,98 @@
+/*
+ * pseries Memory Hotplug infrastructure.
+ *
+ * Copyright (C) 2008 Badari Pulavarty, IBM Corporation
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  as published by the Free Software Foundation; either version
+ *  2 of the License, or (at your option) any later version.
+ */
+
+#include asm/prom.h
+#include asm/firmware.h
+#include asm/machdep.h
+#include asm/pSeries_reconfig.h
+
+static int pseries_remove_memory(struct device_node *np)
+{
+   const char *type;
+   const unsigned int *my_index;
+   const unsigned int *regs;
+   u64 start_pfn, start;
+   struct zone *zone;
+   int ret = -EINVAL;
+
+   /*
+* Check to see if we are actually removing memory
+*/
+   type = of_get_property(np, device_type, NULL);
+   if (type == NULL || strcmp(type, memory) != 0)
+   return 0;
+
+   /*
+* Find the memory index and size of the removing section
+*/
+   my_index = of_get_property(np, ibm,my-drc-index, NULL);
+   if (!my_index)
+   return ret;
+
+   regs = of_get_property(np, reg, NULL);
+   if (!regs)
+   return ret;
+
+   start_pfn = section_nr_to_pfn(*my_index  0x);
+   zone = page_zone(pfn_to_page(start_pfn));
+
+   /*
+* Remove section mappings and sysfs entries for the
+* section of the memory we are removing.
+*
+* NOTE: Ideally, this should be done in generic code like
+* remove_memory(). But remove_memory() gets called by writing
+* to sysfs state file and we can't remove sysfs entries
+* while writing to it. So we have to defer it to here.
+*/
+   ret = __remove_pages(zone, start_pfn, regs[3]  PAGE_SHIFT);
+   if (ret)
+   return ret;
+
+   /*
+* Remove htab bolted mappings for this section of memory
+*/
+   start = (unsigned long)__va(start_pfn  PAGE_SHIFT);
+   ret = 

Re: [PATCH 3/3] ppc64-specific memory notifier support

2008-02-29 Thread Stephen Rothwell
On Fri, 29 Feb 2008 09:47:16 -0800 Badari Pulavarty [EMAIL PROTECTED] wrote:

 Here is the latest for review. (just to make sure I didn't miss
 anything).

Sorry I didn't review the previous ones ... just a small thing.

 + type = of_get_property(np, device_type, NULL);

To use the of_ accessors, you need to include linux/of.h (currently
asm/prom.h include linux/of.h, but that may not always be true).  In
fact, I think you don't even need asm/prom.h.

-- 
Cheers,
Stephen Rothwell[EMAIL PROTECTED]
http://www.canb.auug.org.au/~sfr/


pgpGUYwVRxbSt.pgp
Description: PGP signature
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Re: [PATCH 3/3] ppc64-specific memory notifier support

2008-02-29 Thread Badari Pulavarty
Stephen Rothwell wrote:
 On Fri, 29 Feb 2008 09:47:16 -0800 Badari Pulavarty [EMAIL PROTECTED] wrote:
   
 Here is the latest for review. (just to make sure I didn't miss
 anything).
 

 Sorry I didn't review the previous ones ... just a small thing.

   
 +type = of_get_property(np, device_type, NULL);
 

 To use the of_ accessors, you need to include linux/of.h (currently
 asm/prom.h include linux/of.h, but that may not always be true).  In
 fact, I think you don't even need asm/prom.h.

   
Yes. linux/of.h is enough. Thank you for pointing it out.

Thanks,
Badari

___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[PATCH 3/3] ppc64-specific memory notifier support

2008-02-28 Thread Badari Pulavarty
Hotplug memory notifier for ppc64. This gets invoked by writing
the device-node that needs to be removed to /proc/ppc64/ofdt.
We need to adjust the sections and remove sysfs entries by
calling __remove_pages(). Then call arch specific code to
get rid of htab mappings for the section of memory.

Signed-off-by: Badari Pulavarty [EMAIL PROTECTED]
---
 arch/powerpc/platforms/pseries/Makefile |1 
 arch/powerpc/platforms/pseries/hotplug-memory.c |   98 
 2 files changed, 99 insertions(+)

Index: linux-2.6.25-rc2/arch/powerpc/platforms/pseries/hotplug-memory.c
===
--- /dev/null   1970-01-01 00:00:00.0 +
+++ linux-2.6.25-rc2/arch/powerpc/platforms/pseries/hotplug-memory.c
2008-02-28 08:20:14.0 -0800
@@ -0,0 +1,98 @@
+/*
+ * pseries Memory Hotplug infrastructure.
+ *
+ * Copyright (C) 2008 Badari Pulavarty, IBM Corporation
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  as published by the Free Software Foundation; either version
+ *  2 of the License, or (at your option) any later version.
+ */
+
+#include asm/prom.h
+#include asm/firmware.h
+#include asm/machdep.h
+#include asm/pSeries_reconfig.h
+
+static int pseries_remove_memory(struct device_node *np)
+{
+   const char *type;
+   const unsigned int *my_index;
+   const unsigned int *regs;
+   u64 start_pfn, start;
+   struct zone *zone;
+   int ret = -EINVAL;
+
+   /*
+* Check to see if we are actually removing memory
+*/
+   type = of_get_property(np, device_type, NULL);
+   if (type == NULL || strcmp(type, memory) != 0)
+   return 0;
+
+   /*
+* Find the memory index and size of the removing section
+*/
+   my_index = of_get_property(np, ibm,my-drc-index, NULL);
+   if (!my_index)
+   return ret;
+
+   regs = of_get_property(np, reg, NULL);
+   if (!regs)
+   return ret;
+
+   start_pfn = section_nr_to_pfn(*my_index  0x);
+   zone = page_zone(pfn_to_page(start_pfn));
+
+   /*
+* Remove section mappings and sysfs entries for the
+* section of the memory we are removing.
+*
+* NOTE: Ideally, this should be done in generic code like
+* remove_memory(). But remove_memory() gets called by writing
+* to sysfs state file and we can't remove sysfs entries
+* while writing to it. So we have to defer it to here.
+*/
+   ret = __remove_pages(zone, start_pfn, regs[3]  PAGE_SHIFT);
+   if (ret)
+   return ret;
+
+   /*
+* Remove htab bolted mappings for this section of memory
+*/
+   start = (unsigned long)__va(start_pfn  PAGE_SHIFT);
+   ret = remove_section_mapping(start, start + regs[3]);
+   return ret;
+}
+
+static int pseries_memory_notifier(struct notifier_block *nb,
+   unsigned long action, void *node)
+{
+   int err = NOTIFY_OK;
+
+   switch (action) {
+   case PSERIES_RECONFIG_ADD:
+   break;
+   case PSERIES_RECONFIG_REMOVE:
+   if (pseries_remove_memory(node))
+   err = NOTIFY_BAD;
+   break;
+   default:
+   err = NOTIFY_DONE;
+   break;
+   }
+   return err;
+}
+
+static struct notifier_block pseries_smp_nb = {
+   .notifier_call = pseries_memory_notifier,
+};
+
+static int __init pseries_memory_hotplug_init(void)
+{
+   if (firmware_has_feature(FW_FEATURE_LPAR))
+   pSeries_reconfig_notifier_register(pseries_smp_nb);
+
+   return 0;
+}
+arch_initcall(pseries_memory_hotplug_init);
Index: linux-2.6.25-rc2/arch/powerpc/platforms/pseries/Makefile
===
--- linux-2.6.25-rc2.orig/arch/powerpc/platforms/pseries/Makefile   
2008-02-28 08:15:53.0 -0800
+++ linux-2.6.25-rc2/arch/powerpc/platforms/pseries/Makefile2008-02-28 
08:17:57.0 -0800
@@ -14,6 +14,7 @@ obj-$(CONFIG_PCI) += pci.o pci_dlpar.o
 obj-$(CONFIG_PCI_MSI)  += msi.o
 
 obj-$(CONFIG_HOTPLUG_CPU)  += hotplug-cpu.o
+obj-$(CONFIG_MEMORY_HOTPLUG)   += hotplug-memory.o
 
 obj-$(CONFIG_HVC_CONSOLE)  += hvconsole.o
 obj-$(CONFIG_HVCS) += hvcserver.o


___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: [PATCH 3/3] ppc64-specific memory notifier support

2008-02-28 Thread Nathan Lynch
Badari Pulavarty wrote:

 +static struct notifier_block pseries_smp_nb = {

Rename this to pseries_mem_nb?

 + .notifier_call = pseries_memory_notifier,
 +};
 +
 +static int __init pseries_memory_hotplug_init(void)
 +{
 + if (firmware_has_feature(FW_FEATURE_LPAR))
 + pSeries_reconfig_notifier_register(pseries_smp_nb);
 +
 + return 0;
 +}
 +arch_initcall(pseries_memory_hotplug_init);

arch_initcall doesn't seem appropriate.  __initcall should be fine.

___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: [PATCH 3/3] ppc64-specific memory notifier support

2008-02-28 Thread Badari Pulavarty
On Thu, 2008-02-28 at 11:20 -0600, Nathan Lynch wrote:
 Badari Pulavarty wrote:
 
  +static struct notifier_block pseries_smp_nb = {
 
 Rename this to pseries_mem_nb?

Sure.

 
  +   .notifier_call = pseries_memory_notifier,
  +};
  +
  +static int __init pseries_memory_hotplug_init(void)
  +{
  +   if (firmware_has_feature(FW_FEATURE_LPAR))
  +   pSeries_reconfig_notifier_register(pseries_smp_nb);
  +
  +   return 0;
  +}
  +arch_initcall(pseries_memory_hotplug_init);
 
 arch_initcall doesn't seem appropriate.  __initcall should be fine.
 

Okay, if you say so :)

I based the code on arch/powerpc/platforms/pseries/hotplug-cpu.c 

Thanks,
Badari


___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: [PATCH 3/3] ppc64-specific memory notifier support

2008-02-28 Thread Michael Ellerman
On Thu, 2008-02-28 at 08:46 -0800, Badari Pulavarty wrote:
 Hotplug memory notifier for ppc64. This gets invoked by writing
 the device-node that needs to be removed to /proc/ppc64/ofdt.
 We need to adjust the sections and remove sysfs entries by
 calling __remove_pages(). Then call arch specific code to
 get rid of htab mappings for the section of memory.
 
 Signed-off-by: Badari Pulavarty [EMAIL PROTECTED]
 ---
  arch/powerpc/platforms/pseries/Makefile |1 
  arch/powerpc/platforms/pseries/hotplug-memory.c |   98 
 
  2 files changed, 99 insertions(+)
 
 Index: linux-2.6.25-rc2/arch/powerpc/platforms/pseries/hotplug-memory.c
 ===
 --- /dev/null 1970-01-01 00:00:00.0 +
 +++ linux-2.6.25-rc2/arch/powerpc/platforms/pseries/hotplug-memory.c  
 2008-02-28 08:20:14.0 -0800

 +
 +static struct notifier_block pseries_smp_nb = {
 + .notifier_call = pseries_memory_notifier,
 +};
 +
 +static int __init pseries_memory_hotplug_init(void)
 +{
 + if (firmware_has_feature(FW_FEATURE_LPAR))
 + pSeries_reconfig_notifier_register(pseries_smp_nb);
 +
 + return 0;
 +}
 +arch_initcall(pseries_memory_hotplug_init);

This is going to fire on non-pseries LPAR platforms, like iSeries and
PS3. Which is not what you want I think.

cheers

-- 
Michael Ellerman
OzLabs, IBM Australia Development Lab

wwweb: http://michael.ellerman.id.au
phone: +61 2 6212 1183 (tie line 70 21183)

We do not inherit the earth from our ancestors,
we borrow it from our children. - S.M.A.R.T Person


signature.asc
Description: This is a digitally signed message part
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Re: [PATCH 3/3] ppc64-specific memory notifier support

2008-02-28 Thread Michael Ellerman
On Thu, 2008-02-28 at 18:39 -0600, Nathan Lynch wrote:
 Michael Ellerman wrote:
  On Thu, 2008-02-28 at 08:46 -0800, Badari Pulavarty wrote:
   Hotplug memory notifier for ppc64. This gets invoked by writing
   the device-node that needs to be removed to /proc/ppc64/ofdt.
   We need to adjust the sections and remove sysfs entries by
   calling __remove_pages(). Then call arch specific code to
   get rid of htab mappings for the section of memory.
   
   Signed-off-by: Badari Pulavarty [EMAIL PROTECTED]
   ---
arch/powerpc/platforms/pseries/Makefile |1 
arch/powerpc/platforms/pseries/hotplug-memory.c |   98 
   
2 files changed, 99 insertions(+)
   
   Index: linux-2.6.25-rc2/arch/powerpc/platforms/pseries/hotplug-memory.c
   ===
   --- /dev/null 1970-01-01 00:00:00.0 +
   +++ linux-2.6.25-rc2/arch/powerpc/platforms/pseries/hotplug-memory.c  
   2008-02-28 08:20:14.0 -0800
  
   +
   +static struct notifier_block pseries_smp_nb = {
   + .notifier_call = pseries_memory_notifier,
   +};
   +
   +static int __init pseries_memory_hotplug_init(void)
   +{
   + if (firmware_has_feature(FW_FEATURE_LPAR))
   + pSeries_reconfig_notifier_register(pseries_smp_nb);
   +
   + return 0;
   +}
   +arch_initcall(pseries_memory_hotplug_init);
  
  This is going to fire on non-pseries LPAR platforms, like iSeries and
  PS3. Which is not what you want I think.
 
 Well, the notifier will be registered, yes, but it will never be
 called because that path is reachable only from a write to
 /proc/ppc64/ofdt, which is not created on non-pseries.

Sure. Still seems better not to register it in the first place.

 Maybe it should be
 
 machine_device_initcall(pseries, pseries_memory_hotplug_init);

I think so.

 (and pseries_cpu_hotplug_init in hotplug-cpu.c should be changed to
 machine_arch_initcall)

Yeah I noticed that was not guarded as well, and I think I'm culpable
for that :)

cheers

-- 
Michael Ellerman
OzLabs, IBM Australia Development Lab

wwweb: http://michael.ellerman.id.au
phone: +61 2 6212 1183 (tie line 70 21183)

We do not inherit the earth from our ancestors,
we borrow it from our children. - S.M.A.R.T Person


signature.asc
Description: This is a digitally signed message part
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev