|
@@ -342,9 +342,12 @@ static int handle_page_fault(struct pt_regs *regs,
|
|
|
/*
|
|
|
* If we're trying to touch user-space addresses, we must
|
|
|
* be either at PL0, or else with interrupts enabled in the
|
|
|
- * kernel, so either way we can re-enable interrupts here.
|
|
|
+ * kernel, so either way we can re-enable interrupts here
|
|
|
+ * unless we are doing atomic access to user space with
|
|
|
+ * interrupts disabled.
|
|
|
*/
|
|
|
- local_irq_enable();
|
|
|
+ if (!(regs->flags & PT_FLAGS_DISABLE_IRQ))
|
|
|
+ local_irq_enable();
|
|
|
|
|
|
mm = tsk->mm;
|
|
|
|