s390/extable: search amode31 extable last
authorHeiko Carstens <hca@linux.ibm.com>
Mon, 28 Feb 2022 09:53:34 +0000 (10:53 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Mon, 7 Mar 2022 23:33:00 +0000 (00:33 +0100)
It is very unlikely that an exception happens within the amode31 text
section, therefore safe a couple of cycles for the common case, and
search the amode31 extable last.

Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/mm/fault.c

index ff16ce0..1336541 100644 (file)
@@ -230,13 +230,13 @@ static noinline void do_sigsegv(struct pt_regs *regs, int si_code)
 const struct exception_table_entry *s390_search_extables(unsigned long addr)
 {
        const struct exception_table_entry *fixup;
+       size_t num;
 
-       fixup = search_extable(__start_amode31_ex_table,
-                              __stop_amode31_ex_table - __start_amode31_ex_table,
-                              addr);
-       if (!fixup)
-               fixup = search_exception_tables(addr);
-       return fixup;
+       fixup = search_exception_tables(addr);
+       if (fixup)
+               return fixup;
+       num = __stop_amode31_ex_table - __start_amode31_ex_table;
+       return search_extable(__start_amode31_ex_table, num, addr);
 }
 
 static noinline void do_no_context(struct pt_regs *regs)