On 20-Mar-13, at 4:12 PM, John David Anglin wrote:
On 3/20/2013 1:27 PM, Jeroen Roovers wrote:
+CONFIG_PREEMPT_NONE=y
Given that CONFIG_PREEMPT is broken, we must be missing at least one
preempt_disable()/preempt_enable() pair.
You might try the attached change. My rp3440 booted with
CONFIG_PREEMPT=y
and CONFIG_PREEMPT_NONE=y with it. The fix is just a guess.
Dave
--
John David Anglin dave.anglin@xxxxxxxx
diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c
index 4b12890..1871724 100644
--- a/arch/parisc/kernel/cache.c
+++ b/arch/parisc/kernel/cache.c
@@ -372,10 +372,12 @@ void flush_kernel_dcache_page_addr(void *addr)
{
unsigned long flags;
+ preempt_disable();
flush_kernel_dcache_page_asm(addr);
purge_tlb_start(flags);
pdtlb_kernel(addr);
purge_tlb_end(flags);
+ preempt_enable();
}
EXPORT_SYMBOL(flush_kernel_dcache_page_addr);