On Tue, 27 Dec 2011 16:29:57 -0500 Joshua Kinard <kumba@xxxxxxxxxx> wrote: > MIPS I/O registers are always memory-mapped, and to prevent the compiler > from trying to over-optimize, volatile is used to make sure we always read a > value from the hardware and not from some cached value. Almost every other network driver had memory mapped register. The problem is volatile is that the compiler is stupid and wrong. Using explicit barriers is preferred and ensures correct and fast code.