diff options
-rw-r--r-- | arch/powerpc/mm/gup.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/powerpc/mm/gup.c b/arch/powerpc/mm/gup.c index 6936547018b8..c5f734e20b0f 100644 --- a/arch/powerpc/mm/gup.c +++ b/arch/powerpc/mm/gup.c | |||
@@ -123,6 +123,7 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write, | |||
123 | struct mm_struct *mm = current->mm; | 123 | struct mm_struct *mm = current->mm; |
124 | unsigned long addr, len, end; | 124 | unsigned long addr, len, end; |
125 | unsigned long next; | 125 | unsigned long next; |
126 | unsigned long flags; | ||
126 | pgd_t *pgdp; | 127 | pgd_t *pgdp; |
127 | int nr = 0; | 128 | int nr = 0; |
128 | 129 | ||
@@ -156,7 +157,7 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write, | |||
156 | * So long as we atomically load page table pointers versus teardown, | 157 | * So long as we atomically load page table pointers versus teardown, |
157 | * we can follow the address down to the the page and take a ref on it. | 158 | * we can follow the address down to the the page and take a ref on it. |
158 | */ | 159 | */ |
159 | local_irq_disable(); | 160 | local_irq_save(flags); |
160 | 161 | ||
161 | pgdp = pgd_offset(mm, addr); | 162 | pgdp = pgd_offset(mm, addr); |
162 | do { | 163 | do { |
@@ -179,7 +180,7 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write, | |||
179 | break; | 180 | break; |
180 | } while (pgdp++, addr = next, addr != end); | 181 | } while (pgdp++, addr = next, addr != end); |
181 | 182 | ||
182 | local_irq_enable(); | 183 | local_irq_restore(flags); |
183 | 184 | ||
184 | return nr; | 185 | return nr; |
185 | } | 186 | } |