.. | .. |
---|
327 | 327 | struct vm_area_struct *mpnt; |
---|
328 | 328 | unsigned long offset; |
---|
329 | 329 | unsigned long addr, old_addr = 0; |
---|
| 330 | + unsigned long flags; |
---|
330 | 331 | pgoff_t pgoff; |
---|
331 | 332 | |
---|
332 | 333 | if (mapping && !mapping_mapped(mapping)) { |
---|
.. | .. |
---|
346 | 347 | * declared as MAP_PRIVATE or MAP_SHARED), so we only need |
---|
347 | 348 | * to flush one address here for them all to become coherent */ |
---|
348 | 349 | |
---|
349 | | - flush_dcache_mmap_lock(mapping); |
---|
| 350 | + flush_dcache_mmap_lock_irqsave(mapping, flags); |
---|
350 | 351 | vma_interval_tree_foreach(mpnt, &mapping->i_mmap, pgoff, pgoff) { |
---|
351 | 352 | offset = (pgoff - mpnt->vm_pgoff) << PAGE_SHIFT; |
---|
352 | 353 | addr = mpnt->vm_start + offset; |
---|
.. | .. |
---|
369 | 370 | old_addr = addr; |
---|
370 | 371 | } |
---|
371 | 372 | } |
---|
372 | | - flush_dcache_mmap_unlock(mapping); |
---|
| 373 | + flush_dcache_mmap_unlock_irqrestore(mapping, flags); |
---|
373 | 374 | } |
---|
374 | 375 | EXPORT_SYMBOL(flush_dcache_page); |
---|
375 | 376 | |
---|