|
@@ -60,6 +60,7 @@
|
|
#include <asm/trace/mpx.h>
|
|
#include <asm/trace/mpx.h>
|
|
#include <asm/mpx.h>
|
|
#include <asm/mpx.h>
|
|
#include <asm/vm86.h>
|
|
#include <asm/vm86.h>
|
|
|
|
+#include <asm/umip.h>
|
|
|
|
|
|
#ifdef CONFIG_X86_64
|
|
#ifdef CONFIG_X86_64
|
|
#include <asm/x86_init.h>
|
|
#include <asm/x86_init.h>
|
|
@@ -513,6 +514,11 @@ do_general_protection(struct pt_regs *regs, long error_code)
|
|
RCU_LOCKDEP_WARN(!rcu_is_watching(), "entry code didn't wake RCU");
|
|
RCU_LOCKDEP_WARN(!rcu_is_watching(), "entry code didn't wake RCU");
|
|
cond_local_irq_enable(regs);
|
|
cond_local_irq_enable(regs);
|
|
|
|
|
|
|
|
+ if (static_cpu_has(X86_FEATURE_UMIP)) {
|
|
|
|
+ if (user_mode(regs) && fixup_umip_exception(regs))
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
if (v8086_mode(regs)) {
|
|
if (v8086_mode(regs)) {
|
|
local_irq_enable();
|
|
local_irq_enable();
|
|
handle_vm86_fault((struct kernel_vm86_regs *) regs, error_code);
|
|
handle_vm86_fault((struct kernel_vm86_regs *) regs, error_code);
|