Re: More info for DSM w/r/t sunffb on 2.6.15-rc6

From: David S. Miller
Date: Fri Dec 23 2005 - 14:18:30 EST


From: "Michael Bishop" <michael.bishop@xxxxxxxxx>
Date: Fri, 23 Dec 2005 11:23:36 -0500

> Bad pte = 1fa00600a88, process = X, vm_flags = 184473, vaddr = 7001e000
> Call Trace:

Strange, I thought we'd fixed this.

Aww crap....

Linus, X.org is doing a MAP_PRIVATE mmap() of these discontiguous
I/O mappings of the sparc frame buffer device it seems. So the
MAP_SHARED check in is_cow_mapping() doesn't pass.

Michael, does X.org work properly with your FFB card with 2.6.14 by
chance?

I really haven't used X.org on anything other than an ATI Radeon on
Sparc boxes, so it's highly possible that SunFFB support in X.org has
deteriorated into a non-working state due to not being looked after by
anyone.

Back to the MAP_SHARED issue, the culprit code in X.org can be fixed
but I know that this thing has been coded this way for years. It
goes like this (hw/xfree86/os-support/bus/Sbus.c:xf86MapSbusMem()):

ret = (pointer) mmap (NULL, len, PROT_READ | PROT_WRITE, MAP_PRIVATE,
psdp->fd, off);
if (ret == (pointer) -1) {
ret = (pointer) mmap (NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED,
psdp->fd, off);
}
if (ret == (pointer) -1)
return NULL;

and that should be fixed to just be:

ret = (pointer) mmap (NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED,
psdp->fd, off);
if (ret == (pointer) -1)
return NULL;

Ie. use MAP_SHARED unconditionally.
-
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/