[PATCH 2/4] Update phys_index to [start|end]_section_nr

2011-01-20 Thread Nathan Fontenot
Update the 'phys_index' property of a the memory_block struct to be
called start_section_nr, and add a end_section_nr property.  The
data tracked here is the same but the updated naming is more in line
with what is stored here, namely the first and last section number
that the memory block spans.

The names presented to userspace remain the same, phys_index for
start_section_nr and end_phys_index for end_section_nr, to avoid breaking
anything in userspace.

This also updates the node sysfs code to be aware of the new capability for
a memory block to contain multiple memory sections and be aware of the memory
block structure name changes (start_section_nr).  This requires an additional
parameter to unregister_mem_sect_under_nodes so that we know which memory
section of the memory block to unregister.

Signed-off-by: Nathan Fontenot nf...@austin.ibm.com
Reviewed-by: Robin Holt h...@sgi.com
Reviewed-by: KAMEZAWA Hiroyuki kamezawa.hir...@jp.fujitsu.com

---
 drivers/base/memory.c  |   41 +++--
 drivers/base/node.c|   12 
 include/linux/memory.h |3 ++-
 include/linux/node.h   |6 --
 4 files changed, 45 insertions(+), 17 deletions(-)

Index: linux-2.6/drivers/base/memory.c
===
--- linux-2.6.orig/drivers/base/memory.c2011-01-20 08:20:54.0 
-0600
+++ linux-2.6/drivers/base/memory.c 2011-01-20 08:20:56.0 -0600
@@ -97,7 +97,7 @@ int register_memory(struct memory_block
int error;
 
memory-sysdev.cls = memory_sysdev_class;
-   memory-sysdev.id = memory-phys_index / sections_per_block;
+   memory-sysdev.id = memory-start_section_nr / sections_per_block;
 
error = sysdev_register(memory-sysdev);
return error;
@@ -138,12 +138,26 @@ static unsigned long get_memory_block_si
  * uses.
  */
 
-static ssize_t show_mem_phys_index(struct sys_device *dev,
+static ssize_t show_mem_start_phys_index(struct sys_device *dev,
struct sysdev_attribute *attr, char *buf)
 {
struct memory_block *mem =
container_of(dev, struct memory_block, sysdev);
-   return sprintf(buf, %08lx\n, mem-phys_index / sections_per_block);
+   unsigned long phys_index;
+
+   phys_index = mem-start_section_nr / sections_per_block;
+   return sprintf(buf, %08lx\n, phys_index);
+}
+
+static ssize_t show_mem_end_phys_index(struct sys_device *dev,
+   struct sysdev_attribute *attr, char *buf)
+{
+   struct memory_block *mem =
+   container_of(dev, struct memory_block, sysdev);
+   unsigned long phys_index;
+
+   phys_index = mem-end_section_nr / sections_per_block;
+   return sprintf(buf, %08lx\n, phys_index);
 }
 
 /*
@@ -158,7 +172,7 @@ static ssize_t show_mem_removable(struct
container_of(dev, struct memory_block, sysdev);
 
for (i = 0; i  sections_per_block; i++) {
-   pfn = section_nr_to_pfn(mem-phys_index + i);
+   pfn = section_nr_to_pfn(mem-start_section_nr + i);
ret = is_mem_section_removable(pfn, PAGES_PER_SECTION);
}
 
@@ -275,14 +289,15 @@ static int memory_block_change_state(str
mem-state = MEM_GOING_OFFLINE;
 
for (i = 0; i  sections_per_block; i++) {
-   ret = memory_section_action(mem-phys_index + i, to_state);
+   ret = memory_section_action(mem-start_section_nr + i,
+   to_state);
if (ret)
break;
}
 
if (ret) {
for (i = 0; i  sections_per_block; i++)
-   memory_section_action(mem-phys_index + i,
+   memory_section_action(mem-start_section_nr + i,
  from_state_req);
 
mem-state = from_state_req;
@@ -330,7 +345,8 @@ static ssize_t show_phys_device(struct s
return sprintf(buf, %d\n, mem-phys_device);
 }
 
-static SYSDEV_ATTR(phys_index, 0444, show_mem_phys_index, NULL);
+static SYSDEV_ATTR(phys_index, 0444, show_mem_start_phys_index, NULL);
+static SYSDEV_ATTR(end_phys_index, 0444, show_mem_end_phys_index, NULL);
 static SYSDEV_ATTR(state, 0644, show_mem_state, store_mem_state);
 static SYSDEV_ATTR(phys_device, 0444, show_phys_device, NULL);
 static SYSDEV_ATTR(removable, 0444, show_mem_removable, NULL);
@@ -522,17 +538,21 @@ static int init_memory_block(struct memo
return -ENOMEM;
 
scn_nr = __section_nr(section);
-   mem-phys_index = base_memory_block_id(scn_nr) * sections_per_block;
+   mem-start_section_nr =
+   base_memory_block_id(scn_nr) * sections_per_block;
+   mem-end_section_nr = mem-start_section_nr + sections_per_block - 1;
mem-state = state;
mem-section_count++;
mutex_init(mem-state_mutex);
-   start_pfn = 

[PATCH 2/4] Update phys_index to [start|end]_section_nr

2011-01-10 Thread Nathan Fontenot
Update the 'phys_index' property of a the memory_block struct to be
called start_section_nr, and add a end_section_nr property.  The
data tracked here is the same but the updated naming is more in line
with what is stored here, namely the first and last section number
that the memory block spans.

The names presented to userspace remain the same, phys_index for
start_section_nr and end_phys_index for end_section_nr, to avoid breaking
anything in userspace.

This also updates the node sysfs code to be aware of the new capability for
a memory block to contain multiple memory sections and be aware of the memory
block structure name changes (start_section_nr).  This requires an additional
parameter to unregister_mem_sect_under_nodes so that we know which memory
section of the memory block to unregister.

Signed-off-by: Nathan Fontenot nf...@austin.ibm.com
Reviewed-by: Robin Holt h...@sgi.com
Reviewed-by: KAMEZAWA Hiroyuki kamezawa.hir...@jp.fujitsu.com

---
 drivers/base/memory.c  |   41 +++--
 drivers/base/node.c|   12 
 include/linux/memory.h |3 ++-
 include/linux/node.h   |6 --
 4 files changed, 45 insertions(+), 17 deletions(-)

Index: linux-2.6/drivers/base/memory.c
===
--- linux-2.6.orig/drivers/base/memory.c2011-01-05 10:17:37.0 
-0600
+++ linux-2.6/drivers/base/memory.c 2011-01-05 10:17:46.0 -0600
@@ -97,7 +97,7 @@ int register_memory(struct memory_block
int error;
 
memory-sysdev.cls = memory_sysdev_class;
-   memory-sysdev.id = memory-phys_index / sections_per_block;
+   memory-sysdev.id = memory-start_section_nr / sections_per_block;
 
error = sysdev_register(memory-sysdev);
return error;
@@ -138,12 +138,26 @@ static unsigned long get_memory_block_si
  * uses.
  */
 
-static ssize_t show_mem_phys_index(struct sys_device *dev,
+static ssize_t show_mem_start_phys_index(struct sys_device *dev,
struct sysdev_attribute *attr, char *buf)
 {
struct memory_block *mem =
container_of(dev, struct memory_block, sysdev);
-   return sprintf(buf, %08lx\n, mem-phys_index / sections_per_block);
+   unsigned long phys_index;
+
+   phys_index = mem-start_section_nr / sections_per_block;
+   return sprintf(buf, %08lx\n, phys_index);
+}
+
+static ssize_t show_mem_end_phys_index(struct sys_device *dev,
+   struct sysdev_attribute *attr, char *buf)
+{
+   struct memory_block *mem =
+   container_of(dev, struct memory_block, sysdev);
+   unsigned long phys_index;
+
+   phys_index = mem-end_section_nr / sections_per_block;
+   return sprintf(buf, %08lx\n, phys_index);
 }
 
 /*
@@ -158,7 +172,7 @@ static ssize_t show_mem_removable(struct
container_of(dev, struct memory_block, sysdev);
 
for (i = 0; i  sections_per_block; i++) {
-   pfn = section_nr_to_pfn(mem-phys_index + i);
+   pfn = section_nr_to_pfn(mem-start_section_nr + i);
ret = is_mem_section_removable(pfn, PAGES_PER_SECTION);
}
 
@@ -275,14 +289,15 @@ static int memory_block_change_state(str
mem-state = MEM_GOING_OFFLINE;
 
for (i = 0; i  sections_per_block; i++) {
-   ret = memory_section_action(mem-phys_index + i, to_state);
+   ret = memory_section_action(mem-start_section_nr + i,
+   to_state);
if (ret)
break;
}
 
if (ret) {
for (i = 0; i  sections_per_block; i++)
-   memory_section_action(mem-phys_index + i,
+   memory_section_action(mem-start_section_nr + i,
  from_state_req);
 
mem-state = from_state_req;
@@ -330,7 +345,8 @@ static ssize_t show_phys_device(struct s
return sprintf(buf, %d\n, mem-phys_device);
 }
 
-static SYSDEV_ATTR(phys_index, 0444, show_mem_phys_index, NULL);
+static SYSDEV_ATTR(phys_index, 0444, show_mem_start_phys_index, NULL);
+static SYSDEV_ATTR(end_phys_index, 0444, show_mem_end_phys_index, NULL);
 static SYSDEV_ATTR(state, 0644, show_mem_state, store_mem_state);
 static SYSDEV_ATTR(phys_device, 0444, show_phys_device, NULL);
 static SYSDEV_ATTR(removable, 0444, show_mem_removable, NULL);
@@ -522,17 +538,21 @@ static int init_memory_block(struct memo
return -ENOMEM;
 
scn_nr = __section_nr(section);
-   mem-phys_index = base_memory_block_id(scn_nr) * sections_per_block;
+   mem-start_section_nr =
+   base_memory_block_id(scn_nr) * sections_per_block;
+   mem-end_section_nr = mem-start_section_nr + sections_per_block - 1;
mem-state = state;
mem-section_count++;
mutex_init(mem-state_mutex);
-   start_pfn =