mm: do not rely on preempt_count in print_vma_addr
[platform/kernel/linux-rpi.git] / mm / memory.c
index 6dec21b..85e7a87 100644 (file)
@@ -4485,17 +4485,15 @@ void print_vma_addr(char *prefix, unsigned long ip)
        struct vm_area_struct *vma;
 
        /*
-        * Do not print if we are in atomic
-        * contexts (in exception stacks, etc.):
+        * we might be running from an atomic context so we cannot sleep
         */
-       if (preempt_count())
+       if (!down_read_trylock(&mm->mmap_sem))
                return;
 
-       down_read(&mm->mmap_sem);
        vma = find_vma(mm, ip);
        if (vma && vma->vm_file) {
                struct file *f = vma->vm_file;
-               char *buf = (char *)__get_free_page(GFP_KERNEL);
+               char *buf = (char *)__get_free_page(GFP_NOWAIT);
                if (buf) {
                        char *p;