Commit ce0f1eef authored by Thomas Gleixner's avatar Thomas Gleixner

powerpc-decouple-page-fault-logic.patch

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 6408db29
...@@ -159,7 +159,7 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address, ...@@ -159,7 +159,7 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address,
} }
#endif /* !(CONFIG_4xx || CONFIG_BOOKE)*/ #endif /* !(CONFIG_4xx || CONFIG_BOOKE)*/
if (in_atomic() || mm == NULL) { if (in_atomic() || mm == NULL || current->pagefault_disabled) {
if (!user_mode(regs)) if (!user_mode(regs))
return SIGSEGV; return SIGSEGV;
/* in_atomic() in user mode is really bad, /* in_atomic() in user mode is really bad,
......
...@@ -35,6 +35,7 @@ void *kmap_atomic_prot(struct page *page, enum km_type type, pgprot_t prot) ...@@ -35,6 +35,7 @@ void *kmap_atomic_prot(struct page *page, enum km_type type, pgprot_t prot)
unsigned long vaddr; unsigned long vaddr;
/* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */ /* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */
preempt_disable();
pagefault_disable(); pagefault_disable();
if (!PageHighMem(page)) if (!PageHighMem(page))
return page_address(page); return page_address(page);
...@@ -73,5 +74,6 @@ void kunmap_atomic(void *kvaddr, enum km_type type) ...@@ -73,5 +74,6 @@ void kunmap_atomic(void *kvaddr, enum km_type type)
local_flush_tlb_page(NULL, vaddr); local_flush_tlb_page(NULL, vaddr);
#endif #endif
pagefault_enable(); pagefault_enable();
preempt_enable();
} }
EXPORT_SYMBOL(kunmap_atomic); EXPORT_SYMBOL(kunmap_atomic);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment