The DRI code makes invalid assumptions about page size being
4k. Most (all?) non x86 architectures use page sizes larger
than 4k (alpha, ia64, etc..).
I don't know how portable the patch is, but it has worked fine in
Red Hat Linux for quite some time now. An alternative to using
getpagesize() would be to have compile time conditional code,
however that is a problem on some architectures, since some
architectures have pagesize that is variable depending on the
kernel you're using, etc.
So I'm not sure if this is the best/most flexible solution or
not, but it has at least worked now for us for quite a while,
needing only slight changes with new XFree86 releases to patch
cleanly.
Please apply.
--
Mike A. Harris Shipping/mailing address:
OS Systems Engineer 190 Pittsburgh Ave., Sault Ste. Marie,
XFree86 maintainer Ontario, Canada, P6C 5B3
Red Hat Inc.
http://www.redhat.com ftp://people.redhat.com/mharris
--- xc/programs/Xserver/hw/xfree86/drivers/glint/glint_dri.c.foo Sun Aug 5
16:23:24 2001
+++ xc/programs/Xserver/hw/xfree86/drivers/glint/glint_dri.c Sun Aug 5 16:23:41
+2001
@@ -405,7 +405,7 @@
* for SAREA mapping that includes a device private record
*/
pDRIInfo->SAREASize =
- ((sizeof(XF86DRISAREARec) + 0xfff) & 0x1000); /* round to page */
+ ((sizeof(XF86DRISAREARec) + getpagesize() -1) & getpagesize()); /* round to
+page */
/* + shared memory device private rec */
#else
/* For now the mapping works by using a fixed size defined
--- xc/programs/Xserver/hw/xfree86/drivers/sis/sis_dri.c.foo Sun Aug 5 16:22:27
2001
+++ xc/programs/Xserver/hw/xfree86/drivers/sis/sis_dri.c Sun Aug 5 16:17:10
+2001
@@ -237,7 +237,7 @@
* for SAREA mapping that includes a device private record
*/
pDRIInfo->SAREASize =
- ((sizeof(XF86DRISAREARec) + 0xfff) & 0x1000); /* round to page */
+ ((sizeof(XF86DRISAREARec) + getpagesize() - 1) & getpagesize()); /* round to page
+*/
/* + shared memory device private rec */
#else
/* For now the mapping works by using a fixed size defined
--- xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_dri.c.foo Sun Aug 5 16:21:32
2001
+++ xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_dri.c Sun Aug 5 16:23:13
+2001
@@ -357,7 +357,7 @@
* for SAREA mapping that includes a device private record
*/
pDRIInfo->SAREASize =
- ((sizeof(XF86DRISAREARec) + 0xfff) & 0x1000); /* round to page */
+ ((sizeof(XF86DRISAREARec) + getpagesize() - 1) & getpagesize()); /* round to page
+*/
/* + shared memory device private rec */
#else
/* For now the mapping works by using a fixed size defined