#define EX_TYPE_UA_STORE       3
 #define EX_TYPE_UA_LOAD_MEM    4
 #define EX_TYPE_UA_LOAD_REG    5
+#define EX_TYPE_UA_LOAD_REGPAIR        6
 
 #define EX_DATA_REG_ERR_SHIFT  0
 #define EX_DATA_REG_ERR                GENMASK(3, 0)
 #define EX_TABLE_UA_LOAD_REG(_fault, _target, _regerr, _regzero)       \
        __EX_TABLE_UA(__ex_table, _fault, _target, EX_TYPE_UA_LOAD_REG, _regerr, _regzero, 0)
 
+#define EX_TABLE_UA_LOAD_REGPAIR(_fault, _target, _regerr, _regzero)   \
+       __EX_TABLE_UA(__ex_table, _fault, _target, EX_TYPE_UA_LOAD_REGPAIR, _regerr, _regzero, 0)
+
 #endif /* __ASM_EXTABLE_H */
 
        return true;
 }
 
-static bool ex_handler_ua_load_reg(const struct exception_table_entry *ex, struct pt_regs *regs)
+static bool ex_handler_ua_load_reg(const struct exception_table_entry *ex,
+                                  bool pair, struct pt_regs *regs)
 {
        unsigned int reg_zero = FIELD_GET(EX_DATA_REG_ADDR, ex->data);
        unsigned int reg_err = FIELD_GET(EX_DATA_REG_ERR, ex->data);
 
        regs->gprs[reg_err] = -EFAULT;
        regs->gprs[reg_zero] = 0;
+       if (pair)
+               regs->gprs[reg_zero + 1] = 0;
        regs->psw.addr = extable_fixup(ex);
        return true;
 }
        case EX_TYPE_UA_LOAD_MEM:
                return ex_handler_ua_load_mem(ex, regs);
        case EX_TYPE_UA_LOAD_REG:
-               return ex_handler_ua_load_reg(ex, regs);
+               return ex_handler_ua_load_reg(ex, false, regs);
+       case EX_TYPE_UA_LOAD_REGPAIR:
+               return ex_handler_ua_load_reg(ex, true, regs);
        }
        panic("invalid exception table entry");
 }