The validation done at the start of dlpar_memory_add_by_ic() is an all
of nothing scenario - if any LMBs in the range is marked as RESERVED we
can fail right away.

We then can remove the 'lmbs_available' var and its check with
'lmbs_to_add' since the whole LMB range was already validated in the
previous step.

Signed-off-by: Daniel Henrique Barboza <danielhb...@gmail.com>
---
 arch/powerpc/platforms/pseries/hotplug-memory.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c 
b/arch/powerpc/platforms/pseries/hotplug-memory.c
index c0a03e1537cb..377d852f5a9a 100644
--- a/arch/powerpc/platforms/pseries/hotplug-memory.c
+++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
@@ -796,7 +796,6 @@ static int dlpar_memory_add_by_index(u32 drc_index)
 static int dlpar_memory_add_by_ic(u32 lmbs_to_add, u32 drc_index)
 {
        struct drmem_lmb *lmb, *start_lmb, *end_lmb;
-       int lmbs_available = 0;
        int rc;
 
        pr_info("Attempting to hot-add %u LMB(s) at index %x\n",
@@ -811,15 +810,14 @@ static int dlpar_memory_add_by_ic(u32 lmbs_to_add, u32 
drc_index)
 
        /* Validate that the LMBs in this range are not reserved */
        for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) {
-               if (lmb->flags & DRCONF_MEM_RESERVED)
-                       break;
-
-               lmbs_available++;
+               /* Fail immediately if the whole range can't be hot-added */
+               if (lmb->flags & DRCONF_MEM_RESERVED) {
+                       pr_err("Memory at %llx (drc index %x) is reserved\n",
+                                       lmb->base_addr, lmb->drc_index);
+                       return -EINVAL;
+               }
        }
 
-       if (lmbs_available < lmbs_to_add)
-               return -EINVAL;
-
        for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) {
                if (lmb->flags & DRCONF_MEM_ASSIGNED)
                        continue;
-- 
2.31.1

Reply via email to