| .. | .. |
|---|
| 9 | 9 | int fixup_exception(struct pt_regs *regs) |
|---|
| 10 | 10 | { |
|---|
| 11 | 11 | const struct exception_table_entry *fixup; |
|---|
| 12 | + unsigned long addr; |
|---|
| 12 | 13 | |
|---|
| 13 | | - fixup = search_exception_tables(instruction_pointer(regs)); |
|---|
| 14 | + addr = instruction_pointer(regs); |
|---|
| 15 | + |
|---|
| 16 | + /* Search the BPF tables first, these are formatted differently */ |
|---|
| 17 | + fixup = search_bpf_extables(addr); |
|---|
| 14 | 18 | if (fixup) |
|---|
| 15 | | - regs->pc = (unsigned long)&fixup->fixup + fixup->fixup; |
|---|
| 19 | + return arm64_bpf_fixup_exception(fixup, regs); |
|---|
| 16 | 20 | |
|---|
| 17 | | - return fixup != NULL; |
|---|
| 21 | + fixup = search_exception_tables(addr); |
|---|
| 22 | + if (!fixup) |
|---|
| 23 | + return 0; |
|---|
| 24 | + |
|---|
| 25 | + regs->pc = (unsigned long)&fixup->fixup + fixup->fixup; |
|---|
| 26 | + return 1; |
|---|
| 18 | 27 | } |
|---|