Back in April we had a discussion about problems with the memory area used for
I/O operations being mapped with caching enabled. Here's an extract from one
of my posts about this issue:
>The way ioperm works on the ARM is that we open /dev/mem and mmap the
>appropriate range to get access to the ISA ports, then use mprotect to turn
>individual pages on and off to give at least some semblance of individual
>access control. This was actually inherited from the Alpha port.
>
>Now, the problem is that if you call mprotect(PROT_READ) this
>ends up being translated to a protection value of PAGE_READONLY (via the
>protection_map[] stuff). And, surprise, PAGE_READONLY is actually
>PTE_TYPE_SMALL | PTE_YOUNG | PTE_CACHEABLE. Oops.
Now, at the time this sparked the effort that led to separating the Linux
pagetables from those actually used by the hardware. But I'm starting to
doubt that the original problem was actually fixed. As far as I can tell,
the protection value you give to mprotect() is always translated through
protection_map[], and all the relevant values in that table seem to include
PTE_CACHEABLE.
I haven't done a great deal more investigation than that, yet. Does anybody
else have any thoughts? (What started me looking is that isapnp has stopped
working again on my machine.)
p.
unsubscribe: body of `unsubscribe linux-arm' to [EMAIL PROTECTED]
++ Please use [EMAIL PROTECTED] for ++
++ kernel-related discussions. ++