OSDN Git Service

signal/arm64: Consolidate the two hwpoison cases in do_page_fault
authorEric W. Biederman <ebiederm@xmission.com>
Sat, 22 Sep 2018 07:46:39 +0000 (09:46 +0200)
committerEric W. Biederman <ebiederm@xmission.com>
Thu, 27 Sep 2018 19:54:02 +0000 (21:54 +0200)
These two cases are practically the same and use siginfo differently
from the other signals sent from do_page_fault.  So consolidate them
to make future changes easier.

Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Tested-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
arch/arm64/mm/fault.c

index 654a861..0ddc8c6 100644 (file)
@@ -577,16 +577,16 @@ retry:
                 */
                si.si_signo     = SIGBUS;
                si.si_code      = BUS_ADRERR;
-       } else if (fault & VM_FAULT_HWPOISON_LARGE) {
-               unsigned int hindex = VM_FAULT_GET_HINDEX(fault);
+       } else if (fault & (VM_FAULT_HWPOISON_LARGE | VM_FAULT_HWPOISON)) {
+               unsigned int lsb;
+
+               lsb = PAGE_SHIFT;
+               if (fault & VM_FAULT_HWPOISON_LARGE)
+                       lsb = hstate_index_to_shift(VM_FAULT_GET_HINDEX(fault));
 
                si.si_signo     = SIGBUS;
                si.si_code      = BUS_MCEERR_AR;
-               si.si_addr_lsb  = hstate_index_to_shift(hindex);
-       } else if (fault & VM_FAULT_HWPOISON) {
-               si.si_signo     = SIGBUS;
-               si.si_code      = BUS_MCEERR_AR;
-               si.si_addr_lsb  = PAGE_SHIFT;
+               si.si_addr_lsb  = lsb;
        } else {
                /*
                 * Something tried to access memory that isn't in our memory