Skip to content

Commit

Permalink
x86, voyager: fix ioremap_nocache()
Browse files Browse the repository at this point in the history
James Bottomley reported that the following commit:

| commit 6371b49
| 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>
  • Loading branch information
Ingo Molnar committed Apr 30, 2008
1 parent fc3fbc4 commit ed5e233
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion arch/x86/mach-voyager/voyager_cat.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit ed5e233

Please sign in to comment.