aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/traps_64.c4
-rw-r--r--mm/memory.c7
2 files changed, 9 insertions, 2 deletions
diff --git a/arch/x86/kernel/traps_64.c b/arch/x86/kernel/traps_64.c
index efc66df728b6..045466681911 100644
--- a/arch/x86/kernel/traps_64.c
+++ b/arch/x86/kernel/traps_64.c
@@ -84,7 +84,7 @@ static inline void conditional_sti(struct pt_regs *regs)
84 84
85static inline void preempt_conditional_sti(struct pt_regs *regs) 85static inline void preempt_conditional_sti(struct pt_regs *regs)
86{ 86{
87 preempt_disable(); 87 inc_preempt_count();
88 if (regs->flags & X86_EFLAGS_IF) 88 if (regs->flags & X86_EFLAGS_IF)
89 local_irq_enable(); 89 local_irq_enable();
90} 90}
@@ -95,7 +95,7 @@ static inline void preempt_conditional_cli(struct pt_regs *regs)
95 local_irq_disable(); 95 local_irq_disable();
96 /* Make sure to not schedule here because we could be running 96 /* Make sure to not schedule here because we could be running
97 on an exception stack. */ 97 on an exception stack. */
98 preempt_enable_no_resched(); 98 dec_preempt_count();
99} 99}
100 100
101int kstack_depth_to_print = 12; 101int kstack_depth_to_print = 12;
diff --git a/mm/memory.c b/mm/memory.c
index 717aa0e3be2d..55b97ef6de11 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -2711,6 +2711,13 @@ void print_vma_addr(char *prefix, unsigned long ip)
2711 struct mm_struct *mm = current->mm; 2711 struct mm_struct *mm = current->mm;
2712 struct vm_area_struct *vma; 2712 struct vm_area_struct *vma;
2713 2713
2714 /*
2715 * Do not print if we are in atomic
2716 * contexts (in exception stacks, etc.):
2717 */
2718 if (preempt_count())
2719 return;
2720
2714 down_read(&mm->mmap_sem); 2721 down_read(&mm->mmap_sem);
2715 vma = find_vma(mm, ip); 2722 vma = find_vma(mm, ip);
2716 if (vma && vma->vm_file) { 2723 if (vma && vma->vm_file) {