Messages in this thread | | | Subject | Re: [patch] spinlocks: remove 'volatile' | From | Benjamin Herrenschmidt <> | Date | Sun, 09 Jul 2006 14:19:27 +1000 |
| |
> I didn't suggest the compiler could or should do it, just that it would > be possible (for the _user_) to write portable ISO C code to access PCI > mmio registers, if volatile's implementation serialized access.
That isn't possible neither. How to actually serialize access can require different set of primitives depending on the storage class of the memory you are accessing, which the C compiler has 0 knowledge about. (For example, cacheable storage vs. write-through vs. non-cacheable guarded vs. non-cacheable non-guarded on powerpc, there are different issues on other architectures).
> With the current implementation of volatile in gcc, it is impossible - > you need to resort to inline assembly for some architectures, which is > not an ISO C feature.
ISO C has never been about writing device drivers. There is simply no choice here. You need an atchitecture specific set of accessors. If you want portable code, then pick a library like libpci and make sure it contains all you need on all the architectures you need. Then write portable code on top of it.
> And I'm not suggesting that it would be a good idea to use volatile even > if it was corrected - it would have to take a worst-case approach and > thus would generate very bad code.
So what is the point ?
Ben.
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |