|
@@ -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;
|
|
|
|