| .. | .. |
|---|
| 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 | |
|---|