]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
powerpc/pseries: Don't attempt to acquire drc during memory hot add for assigned...
authorJohn Allen <jallen@linux.vnet.ibm.com>
Wed, 23 Aug 2017 17:18:43 +0000 (12:18 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 27 Sep 2017 12:43:15 +0000 (14:43 +0200)
commit afb5519fdb346201728040cab4e08ce53e7ff4fd upstream.

Check if an LMB is assigned before attempting to call dlpar_acquire_drc
in order to avoid any unnecessary rtas calls. This substantially
reduces the running time of memory hot add on lpars with large amounts
of memory.

[mpe: We need to explicitly set rc to 0 in the success case, otherwise
 the compiler might think we use rc without initialising it.]

Fixes: c21f515c7436 ("powerpc/pseries: Make the acquire/release of the drc for memory a seperate step")
Signed-off-by: John Allen <jallen@linux.vnet.ibm.com>
Reviewed-by: Nathan Fontenot <nfont@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/powerpc/platforms/pseries/hotplug-memory.c

index ca9b2f4aaa22f4107e08577b581bb0c813a1473a..bf2f43f7ac6a7e91b42564e2779fe1eeab3f0df4 100644 (file)
@@ -817,6 +817,9 @@ static int dlpar_memory_add_by_count(u32 lmbs_to_add, struct property *prop)
                return -EINVAL;
 
        for (i = 0; i < num_lmbs && lmbs_to_add != lmbs_added; i++) {
+               if (lmbs[i].flags & DRCONF_MEM_ASSIGNED)
+                       continue;
+
                rc = dlpar_acquire_drc(lmbs[i].drc_index);
                if (rc)
                        continue;
@@ -859,6 +862,7 @@ static int dlpar_memory_add_by_count(u32 lmbs_to_add, struct property *prop)
                                lmbs[i].base_addr, lmbs[i].drc_index);
                        lmbs[i].reserved = 0;
                }
+               rc = 0;
        }
 
        return rc;