linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Nathan Fontenot <nfont@austin.ibm.com>
To: linuxppc-dev@ozlabs.org
Subject: [PATCH 2/5] Use the base address of lmbs instead of drc index for dlpar
Date: Fri, 20 Jun 2008 16:30:47 -0500	[thread overview]
Message-ID: <485C2187.2040700@austin.ibm.com> (raw)
In-Reply-To: <485C2033.20101@austin.ibm.com>

Use the base address of the lmb to get the starting page frame number
instead of trying to extract it from the drc index of the lmb.

In the previous representations of memory in the device tree, the drc index
of a lmb would match up with the base address of the lmb.  For example a
lmb woulf have a drc index of 8000000a and a base address of a0000000.  This
allowed the starting page frame number to be extracted from the drc index.

The lmbs represented under the ibm,dynamic-reconfiguration-memory nodein the
device tree do not always have a drc index that matches, thus we need to
get the starting page frame number from the base address of an lmb instead
of the drc index.

Signed-off-by: Nathan Fontenot <nfont@austin.ibm.com>
---

Index: linux-2.6.git/arch/powerpc/platforms/pseries/hotplug-memory.c
===================================================================
--- linux-2.6.git.orig/arch/powerpc/platforms/pseries/hotplug-memory.c	2008-06-20 
12:08:41.000000000 -0500
+++ linux-2.6.git/arch/powerpc/platforms/pseries/hotplug-memory.c	2008-06-20 
12:40:21.000000000 -0500
@@ -18,8 +18,9 @@
  static int pseries_remove_memory(struct device_node *np)
  {
  	const char *type;
-	const unsigned int *my_index;
  	const unsigned int *regs;
+	unsigned long base;
+	unsigned int lmb_size;
  	u64 start_pfn, start;
  	struct zone *zone;
  	int ret = -EINVAL;
@@ -32,17 +33,16 @@
  		return 0;

  	/*
-	 * Find the memory index and size of the removing section
+	 * Find the base address and size of the lmb
  	 */
-	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 & 0xffff);
+	base = *(unsigned long *)regs;
+	lmb_size = regs[3];
+
+	start_pfn = base >> PFN_SECTION_SHIFT;
  	zone = page_zone(pfn_to_page(start_pfn));

  	/*
@@ -54,29 +54,29 @@
  	 * 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);
+	ret = __remove_pages(zone, start_pfn, lmb_size >> PAGE_SHIFT);
  	if (ret)
  		return ret;

  	/*
  	 * Update memory regions for memory remove
  	 */
-	lmb_remove(start_pfn << PAGE_SHIFT, regs[3]);
+	lmb_remove(base, lmb_size);

  	/*
  	 * 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]);
+	start = (unsigned long)__va(base);
+	ret = remove_section_mapping(start, start + lmb_size);
  	return ret;
  }

  static int pseries_add_memory(struct device_node *np)
  {
  	const char *type;
-	const unsigned int *my_index;
  	const unsigned int *regs;
-	u64 start_pfn;
+	unsigned long base;
+	unsigned int lmb_size;
  	int ret = -EINVAL;

  	/*
@@ -87,22 +87,19 @@
  		return 0;

  	/*
-	 * Find the memory index and size of the added section
+	 * Find the base and size of the lmb
  	 */
-	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 & 0xffff);
+	base = *(unsigned long *)regs;
+	lmb_size = regs[3];

  	/*
  	 * Update memory region to represent the memory add
  	 */
-	lmb_add(start_pfn << PAGE_SHIFT, regs[3]);
+	lmb_add(base, lmb_size);
  	return 0;
  }

  parent reply	other threads:[~2008-06-20 21:30 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-20 21:25 [PATCH 0/5] Updates for memory dlpar and dynamic reconfiguration memory Nathan Fontenot
2008-06-20 21:29 ` [PATCH 1/5] Allow drc indexes to be specified in formats other than decimal Nathan Fontenot
2008-06-20 23:18   ` Sergei Shtylyov
2008-06-23  2:58     ` Nathan Fontenot
2008-06-20 21:30 ` Nathan Fontenot [this message]
2008-06-20 21:32 ` [PATCH 3/5] Update device tree correctly for drconf memory add/remove Nathan Fontenot
2008-06-20 21:34 ` [PATCH 4/5] Helper routines for parsing drconf memory Nathan Fontenot
2008-06-30 12:41   ` Paul Mackerras
2008-07-01 13:54     ` Nathan Fontenot
2008-06-20 21:36 ` [PATCH 5/5] Add ability to associate drconf memory sections in hotplug memory add Nathan Fontenot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=485C2187.2040700@austin.ibm.com \
    --to=nfont@austin.ibm.com \
    --cc=linuxppc-dev@ozlabs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).