x86, voyager: fix ioremap_nocache()
James Bottomley reported that the following commit:
| commit 6371b49599
| Author: Ingo Molnar <mingo@elte.hu>
| Date: Wed Jan 30 13:33:40 2008 +0100
|
| x86: change ioremap() to default to uncached
broke Voyager.
James says:
" it broke a class of voyager machines: those which
rely on the quad interrupt controller (QIC). The precis of why they
broke is because the QIC does IPIs (or CPIs in its terminology) via
cache line interference: you interrupt a processor by moving a
designated memory area to write exclusive in the cache (by simply
writing to the line) and the CPU acks the interrupt by moving it back to
read shared (by reading from it). That area, is, of course, mapped by
ioremap, so reversing the ioremap semantics and adding the uncached bit
completely breaks the QIC. "
Sorry about that!
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
fc3fbc4509
commit
ed5e233284
|
@ -877,7 +877,7 @@ void __init voyager_cat_init(void)
|
|||
request_resource(&iomem_resource, res);
|
||||
}
|
||||
|
||||
qic_addr = (unsigned long)ioremap(qic_addr, 0x400);
|
||||
qic_addr = (unsigned long)ioremap_cache(qic_addr, 0x400);
|
||||
|
||||
for (j = 0; j < 4; j++) {
|
||||
__u8 cpu;
|
||||
|
|
Loading…
Reference in New Issue