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.

Signed-off-by: "Eric W. Biederman" <ebied...@xmission.com>
---
 arch/arm64/mm/fault.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
index 654a861c4bd0..0ddc8c6ba53b 100644
--- a/arch/arm64/mm/fault.c
+++ b/arch/arm64/mm/fault.c
@@ -577,16 +577,16 @@ static int __kprobes do_page_fault(unsigned long addr, 
unsigned int esr,
                 */
                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
-- 
2.17.1

Reply via email to