]> git.baikalelectronics.ru Git - kernel.git/commitdiff
powerpc/numa: Handle extra hcall_vphn error cases
authorSrikar Dronamraju <srikar@linux.vnet.ibm.com>
Wed, 29 Jan 2020 13:52:58 +0000 (19:22 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 4 Mar 2020 11:44:30 +0000 (22:44 +1100)
Currently code handles H_FUNCTION, H_SUCCESS, H_HARDWARE return codes.
However hcall_vphn can return other return codes. Now it also handles
H_PARAMETER return code.  Also the rest return codes are handled under the
default case.

Signed-off-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Reported-by: Abdul Haleem <abdhalee@linux.vnet.ibm.com>
Reviewed-by: Nathan Lynch <nathanl@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200129135301.24739-3-srikar@linux.vnet.ibm.com
arch/powerpc/mm/numa.c

index 3c7dec70cda093a90a2753e9db208401692ab6cb..2cb87c9a05441699004238c863d07a8ee46e53f9 100644 (file)
@@ -1191,23 +1191,30 @@ 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);
+               goto out;
+
        case H_FUNCTION:
-               printk_once(KERN_INFO
-                       "VPHN is not supported. Disabling polling...\n");
-               stop_topology_update();
+               pr_err_ratelimited("VPHN unsupported. Disabling polling...\n");
                break;
        case H_HARDWARE:
-               printk(KERN_ERR
-                       "hcall_vphn() experienced a hardware fault "
+               pr_err_ratelimited("hcall_vphn() experienced a hardware fault "
                        "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:
+               pr_err_ratelimited("hcall_vphn() was passed an invalid parameter. "
+                       "Disabling polling...\n");
+               break;
+       default:
+               pr_err_ratelimited("hcall_vphn() returned %ld. Disabling polling...\n"
+                       , rc);
                break;
        }
 
+       stop_topology_update();
+out:
        return rc;
 }