ARC: [SMP] Enable icache coherency
authorVineet Gupta <vgupta@synopsys.com>
Sun, 17 Feb 2013 10:51:42 +0000 (12:51 +0200)
committerVineet Gupta <vgupta@synopsys.com>
Thu, 26 Jun 2014 06:29:01 +0000 (11:59 +0530)
commit2328af0c9ce89d3ec121ba832c4e6faeff9e70ac
treea76007060d64b0f37627e1094bbae30c32657e1c
parent7e5122190b47c2574eda26aa0bbda693b2821449
ARC: [SMP] Enable icache coherency

icaches are not snooped hence not cohrent in SMP setups which means
kernel has to do cross core calls to ensure the same.

The leaf routine __ic_line_inv_vaddr() now does cross core calls.

__sync_icache_dcache() is affected due to this:

* local dcache line flushed ahead of remote icache inv requests
* can't disable interrupts anymore, since
      __ic_line_inv_vaddr()->on_each_cpu() can deadlock.

| WARNING: CPU: 0 PID: 1 at kernel/smp.c:374
| smp_call_function_many+0x25a/0x2c4()
|
|  init_kprobes+0x90/0xc8
|     register_kprobe+0x1d6/0x510
| __sync_icache_dcache+0x28/0x80
|
|     DISABLE IRQ
|
|     __ic_line_inv_vaddr
| on_each_cpu
|      smp_call_function_many+0x25a/0x2c4   --> WARN
| __ic_line_inv_vaddr_local
|     __dc_line_op

* TODO: Needs to use mask of relevant CPUs to avoid broadcasting

Signed-off-by: Noam Camus <noamc@ezchip.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
arch/arc/mm/cache_arc700.c