powerpc/pseries: Use lmb_is_removable() to check removability
authorNathan Fontenot <nfont@linux.vnet.ibm.com>
Mon, 28 Nov 2016 16:50:45 +0000 (11:50 -0500)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 1 Dec 2016 09:49:42 +0000 (20:49 +1100)
We should be using lmb_is_removable() to validate that enough LMBs
are available to remove when doing a remove by count. This will check
that the LMB is owned by the system and it is considered removable.
This patch also adds a pr_info() notification to report the LMB count
to remove was not satisfied.

What we do now is just check that there are enough LMBs owned by the
system when validating there are enough LMBs to remove. This can
lead to situations where there are enough LMBs owned by the system
but not enough that are considered removable. This results in having
to bail out of the remove operation instead of just failing the request
that we should have known wouldn't succeed.

Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/platforms/pseries/hotplug-memory.c

index 76ec104e88beea0e89e3473d988e23fbdb7312c1..2617f9f356bde2f224fb9501b139b901e15ff11a 100644 (file)
@@ -472,12 +472,15 @@ static int dlpar_memory_remove_by_count(u32 lmbs_to_remove,
 
        /* Validate that there are enough LMBs to satisfy the request */
        for (i = 0; i < num_lmbs; i++) {
-               if (lmbs[i].flags & DRCONF_MEM_ASSIGNED)
+               if (lmb_is_removable(&lmbs[i]))
                        lmbs_available++;
        }
 
-       if (lmbs_available < lmbs_to_remove)
+       if (lmbs_available < lmbs_to_remove) {
+               pr_info("Not enough LMBs available (%d of %d) to satisfy request\n",
+                       lmbs_available, lmbs_to_remove);
                return -EINVAL;
+       }
 
        for (i = 0; i < num_lmbs && lmbs_removed < lmbs_to_remove; i++) {
                rc = dlpar_remove_lmb(&lmbs[i]);