There is no point in unpacking associativity, if
H_HOME_NODE_ASSOCIATIVITY hcall has returned an error.

Also added error messages for H_PARAMETER and default case in
vphn_get_associativity.

Signed-off-by: Srikar Dronamraju <sri...@linux.vnet.ibm.com>
Cc: Michael Ellerman <m...@ellerman.id.au>
Cc: Nicholas Piggin <npig...@gmail.com>
Cc: Nathan Lynch <nath...@linux.ibm.com>
Cc: linuxppc-dev@lists.ozlabs.org
Reported-by: Satheesh Rajendran <sathn...@linux.vnet.ibm.com>
Reported-by: Abdul Haleem <abdha...@linux.vnet.ibm.com>
---
 arch/powerpc/mm/numa.c                | 16 +++++++++++++---
 arch/powerpc/platforms/pseries/vphn.c |  3 ++-
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
index 50d68d2..88b5157 100644
--- a/arch/powerpc/mm/numa.c
+++ b/arch/powerpc/mm/numa.c
@@ -1191,6 +1191,10 @@ static long vphn_get_associativity(unsigned long cpu,
                                VPHN_FLAG_VCPU, associativity);
 
        switch (rc) {
+       case H_SUCCESS:
+               dbg("VPHN hcall succeeded. Reset polling...\n");
+               timed_topology_update(0);
+               break;
        case H_FUNCTION:
                printk_once(KERN_INFO
                        "VPHN is not supported. Disabling polling...\n");
@@ -1202,9 +1206,15 @@ static long vphn_get_associativity(unsigned long cpu,
                        "preventing VPHN. Disabling polling...\n");
                stop_topology_update();
                break;
-       case H_SUCCESS:
-               dbg("VPHN hcall succeeded. Reset polling...\n");
-               timed_topology_update(0);
+       case H_PARAMETER:
+               printk(KERN_ERR
+                       "hcall_vphn() was passed an invalid parameter."
+                       "Disabling polling...\n");
+               break;
+       default:
+               printk(KERN_ERR
+                       "hcall_vphn() returned %ld. Disabling polling \n", rc);
+               stop_topology_update();
                break;
        }
 
diff --git a/arch/powerpc/platforms/pseries/vphn.c 
b/arch/powerpc/platforms/pseries/vphn.c
index 3f07bf6..cca474a 100644
--- a/arch/powerpc/platforms/pseries/vphn.c
+++ b/arch/powerpc/platforms/pseries/vphn.c
@@ -82,7 +82,8 @@ long hcall_vphn(unsigned long cpu, u64 flags, __be32 
*associativity)
        long retbuf[PLPAR_HCALL9_BUFSIZE] = {0};
 
        rc = plpar_hcall9(H_HOME_NODE_ASSOCIATIVITY, retbuf, flags, cpu);
-       vphn_unpack_associativity(retbuf, associativity);
+       if (rc == H_SUCCESS)
+               vphn_unpack_associativity(retbuf, associativity);
 
        return rc;
 }
-- 
1.8.3.1

Reply via email to