|
@@ -12,6 +12,7 @@
|
|
|
#include <linux/highmem.h>
|
|
|
#include <linux/kernel.h>
|
|
|
#include <linux/linkage.h>
|
|
|
+#include <linux/preempt.h>
|
|
|
#include <linux/sched.h>
|
|
|
#include <linux/smp.h>
|
|
|
#include <linux/mm.h>
|
|
@@ -601,6 +602,7 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
|
|
/* Catch bad driver code */
|
|
|
BUG_ON(size == 0);
|
|
|
|
|
|
+ preempt_disable();
|
|
|
if (cpu_has_inclusive_pcaches) {
|
|
|
if (size >= scache_size)
|
|
|
r4k_blast_scache();
|
|
@@ -621,6 +623,7 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
|
|
R4600_HIT_CACHEOP_WAR_IMPL;
|
|
|
blast_dcache_range(addr, addr + size);
|
|
|
}
|
|
|
+ preempt_enable();
|
|
|
|
|
|
bc_wback_inv(addr, size);
|
|
|
__sync();
|
|
@@ -631,6 +634,7 @@ static void r4k_dma_cache_inv(unsigned long addr, unsigned long size)
|
|
|
/* Catch bad driver code */
|
|
|
BUG_ON(size == 0);
|
|
|
|
|
|
+ preempt_disable();
|
|
|
if (cpu_has_inclusive_pcaches) {
|
|
|
if (size >= scache_size)
|
|
|
r4k_blast_scache();
|
|
@@ -655,6 +659,7 @@ static void r4k_dma_cache_inv(unsigned long addr, unsigned long size)
|
|
|
R4600_HIT_CACHEOP_WAR_IMPL;
|
|
|
blast_inv_dcache_range(addr, addr + size);
|
|
|
}
|
|
|
+ preempt_enable();
|
|
|
|
|
|
bc_inv(addr, size);
|
|
|
__sync();
|