Re: Opinion on ordering of writel vs. stores to RAM



Linus Torvalds wrote:

On Sat, 9 Sep 2006, Paul Mackerras wrote:
Do you have an opinion about whether the MMIO write in writel() should
be ordered with respect to preceding writes to normal memory?

It shouldn't. It's too expensive. The fact that PC's have nice memory consistency models means that most of the testing is going to be with the PC memory ordering, but the same way we have "smp_wmb()" (which is also a no-op on x86) we should probably have a "mmiowb()" there.

Gaah. Right now, mmiowb() is actually broken on x86 (it's an empty define, so it may cause compiler warnings about statements with no effects or something).

I don't think anyting but a few SCSI drivers that are used on some ia64 boxes use mmiowb(). And it's currently a no-op not only on x86 but also on powerpc. Probably because it's defined to be a barrier between _two_ MMIO operations, while we should probably have things like

it seems to be a growing virus with network drivers too. bnx2, s2io, tg3 and bcm43xx (which has like 40 of them) are already resorting to it. We're even planning on putting one in to e1000.

I'm not sure what bcm43xx chip will work with IA64, or if people actually have itanium laptops(!) or MIPS, but for e1000 it definately fixes ordering problems on IA64.

Auke

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



Relevant Pages

  • Re: 16/32 processor operating mode
    ... Okay, x86 it is. ... hardware perspective, as I already mentioned, most memory accesses are ... called a "cache line") in a single operation. ... much of the data bus is active when accessing stuff on the bus. ...
    (alt.lang.asm)
  • Re: Zones in Linux
    ... called as NORMAL, DMA, HIGH memory zones. ... In that author specified that x86 won't be able to access above 868MB. ... All 32 bit x86 processors are able to access at least 4 GB of physical memory. ... With PAE, x86 processors are able to address 64GB of physical memory, although in all cases, 4GB is the virtual address range. ...
    (comp.os.linux.development.system)
  • [PATCH 3/7] Have x86 use add_active_range() and free_area_init_nodes
    ... Size zones and holes in an architecture independent manner for x86. ... -/* For each node run the memory list to determine whether there are ...
    (Linux-Kernel)
  • Re: cardbus driver
    ... NTOS on x86 system. ... can do a memory read multiple or memory read line? ... you are not going to see a burst read because: ... PCI memory-mapped registers are non-cacheable since PCI 2.2 (cacheable is ...
    (microsoft.public.development.device.drivers)
  • MMIO and gcc re-ordering (Was: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code)
    ... to some MMIO, then another memory write, can those be re-ordered with ... the same thing can happen on x86. ... For consistent memory, should we mandate a wmb between write to some dma ... trying to relax a bit the barriers we have in our MMIO accessors on ...
    (Linux-Kernel)