|
@@ -58,11 +58,17 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write,
|
|
* only copy the information from the master page table,
|
|
* only copy the information from the master page table,
|
|
* nothing more.
|
|
* nothing more.
|
|
*/
|
|
*/
|
|
|
|
+#ifdef CONFIG_64BIT
|
|
|
|
+# define VMALLOC_FAULT_TARGET no_context
|
|
|
|
+#else
|
|
|
|
+# define VMALLOC_FAULT_TARGET vmalloc_fault
|
|
|
|
+#endif
|
|
|
|
+
|
|
if (unlikely(address >= VMALLOC_START && address <= VMALLOC_END))
|
|
if (unlikely(address >= VMALLOC_START && address <= VMALLOC_END))
|
|
- goto vmalloc_fault;
|
|
|
|
|
|
+ goto VMALLOC_FAULT_TARGET;
|
|
#ifdef MODULE_START
|
|
#ifdef MODULE_START
|
|
if (unlikely(address >= MODULE_START && address < MODULE_END))
|
|
if (unlikely(address >= MODULE_START && address < MODULE_END))
|
|
- goto vmalloc_fault;
|
|
|
|
|
|
+ goto VMALLOC_FAULT_TARGET;
|
|
#endif
|
|
#endif
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -203,6 +209,7 @@ do_sigbus:
|
|
force_sig_info(SIGBUS, &info, tsk);
|
|
force_sig_info(SIGBUS, &info, tsk);
|
|
|
|
|
|
return;
|
|
return;
|
|
|
|
+#ifndef CONFIG_64BIT
|
|
vmalloc_fault:
|
|
vmalloc_fault:
|
|
{
|
|
{
|
|
/*
|
|
/*
|
|
@@ -241,4 +248,5 @@ vmalloc_fault:
|
|
goto no_context;
|
|
goto no_context;
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
+#endif
|
|
}
|
|
}
|