This patch prepares for the incoming patch which swaps the order of KOBJ_
uevent and dt's updating.

It has no functional effect, just groups lmb operation and memblock's in
order to insert dt updating operation easily, and makes it easier to
review.

Signed-off-by: Pingfan Liu <[email protected]>
Cc: Michael Ellerman <[email protected]>
Cc: Benjamin Herrenschmidt <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Hari Bathini <[email protected]>
Cc: Leonardo Bras <[email protected]>
Cc: Libor Pechacek <[email protected]>
Cc: Nathan Fontenot <[email protected]>
To: [email protected]
Cc: [email protected]
---
 arch/powerpc/platforms/pseries/hotplug-memory.c | 26 ++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c 
b/arch/powerpc/platforms/pseries/hotplug-memory.c
index b2cde17..4bd9004 100644
--- a/arch/powerpc/platforms/pseries/hotplug-memory.c
+++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
@@ -377,7 +377,8 @@ static int dlpar_add_lmb(struct drmem_lmb *);
 static int dlpar_remove_lmb(struct drmem_lmb *lmb)
 {
        unsigned long block_sz;
-       int rc;
+       phys_addr_t base_addr;
+       int rc, nid;
 
        if (!lmb_is_removable(lmb))
                return -EINVAL;
@@ -386,17 +387,19 @@ static int dlpar_remove_lmb(struct drmem_lmb *lmb)
        if (rc)
                return rc;
 
+       base_addr = lmb->base_addr;
+       nid = lmb->nid;
        block_sz = pseries_memory_block_size();
 
-       __remove_memory(lmb->nid, lmb->base_addr, block_sz);
-
-       /* Update memory regions for memory remove */
-       memblock_remove(lmb->base_addr, block_sz);
-
        invalidate_lmb_associativity_index(lmb);
        lmb_clear_nid(lmb);
        lmb->flags &= ~DRCONF_MEM_ASSIGNED;
 
+       __remove_memory(nid, base_addr, block_sz);
+
+       /* Update memory regions for memory remove */
+       memblock_remove(base_addr, block_sz);
+
        return 0;
 }
 
@@ -663,6 +666,8 @@ static int dlpar_add_lmb(struct drmem_lmb *lmb)
        }
 
        lmb_set_nid(lmb);
+       lmb->flags |= DRCONF_MEM_ASSIGNED;
+
        block_sz = memory_block_size_bytes();
 
        /* Add the memory */
@@ -674,11 +679,14 @@ static int dlpar_add_lmb(struct drmem_lmb *lmb)
 
        rc = dlpar_online_lmb(lmb);
        if (rc) {
-               __remove_memory(lmb->nid, lmb->base_addr, block_sz);
+               int nid = lmb->nid;
+               phys_addr_t base_addr = lmb->base_addr;
+
                invalidate_lmb_associativity_index(lmb);
                lmb_clear_nid(lmb);
-       } else {
-               lmb->flags |= DRCONF_MEM_ASSIGNED;
+               lmb->flags &= ~DRCONF_MEM_ASSIGNED;
+
+               __remove_memory(nid, base_addr, block_sz);
        }
 
        return rc;
-- 
2.7.5


_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to