diff options
Diffstat (limited to 'arch/blackfin/kernel/traps.c')
-rw-r--r-- | arch/blackfin/kernel/traps.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c index 17d8e4172896..5b0667da8d05 100644 --- a/arch/blackfin/kernel/traps.c +++ b/arch/blackfin/kernel/traps.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/module.h> | 32 | #include <linux/module.h> |
33 | #include <linux/kallsyms.h> | 33 | #include <linux/kallsyms.h> |
34 | #include <linux/fs.h> | 34 | #include <linux/fs.h> |
35 | #include <linux/rbtree.h> | ||
35 | #include <asm/traps.h> | 36 | #include <asm/traps.h> |
36 | #include <asm/cacheflush.h> | 37 | #include <asm/cacheflush.h> |
37 | #include <asm/cplb.h> | 38 | #include <asm/cplb.h> |
@@ -83,6 +84,7 @@ static void decode_address(char *buf, unsigned long address) | |||
83 | struct mm_struct *mm; | 84 | struct mm_struct *mm; |
84 | unsigned long flags, offset; | 85 | unsigned long flags, offset; |
85 | unsigned char in_atomic = (bfin_read_IPEND() & 0x10) || in_atomic(); | 86 | unsigned char in_atomic = (bfin_read_IPEND() & 0x10) || in_atomic(); |
87 | struct rb_node *n; | ||
86 | 88 | ||
87 | #ifdef CONFIG_KALLSYMS | 89 | #ifdef CONFIG_KALLSYMS |
88 | unsigned long symsize; | 90 | unsigned long symsize; |
@@ -128,9 +130,10 @@ static void decode_address(char *buf, unsigned long address) | |||
128 | if (!mm) | 130 | if (!mm) |
129 | continue; | 131 | continue; |
130 | 132 | ||
131 | vml = mm->context.vmlist; | 133 | for (n = rb_first(&mm->mm_rb); n; n = rb_next(n)) { |
132 | while (vml) { | 134 | struct vm_area_struct *vma; |
133 | struct vm_area_struct *vma = vml->vma; | 135 | |
136 | vma = rb_entry(n, struct vm_area_struct, vm_rb); | ||
134 | 137 | ||
135 | if (address >= vma->vm_start && address < vma->vm_end) { | 138 | if (address >= vma->vm_start && address < vma->vm_end) { |
136 | char _tmpbuf[256]; | 139 | char _tmpbuf[256]; |
@@ -176,8 +179,6 @@ static void decode_address(char *buf, unsigned long address) | |||
176 | 179 | ||
177 | goto done; | 180 | goto done; |
178 | } | 181 | } |
179 | |||
180 | vml = vml->next; | ||
181 | } | 182 | } |
182 | if (!in_atomic) | 183 | if (!in_atomic) |
183 | mmput(mm); | 184 | mmput(mm); |