I don't know if this is specifically a problem with the AGP driver or with X, but basically the AGP driver detects an aperture base address different from that of the prefetchable memory area of the video card and the mtrr's are not in agreement. I'm using this with a Dual P3-500mhz and a Matrox 400 under XFree86 4.0.1 with the Matrox supplied driver. Both X and /proc/pci report the same frame buffer addresses: Bus 1, device 0, function 0: VGA compatible controller: Matrox Graphics, Inc. MGA G400 AGP (rev 5). IRQ 16. Master Capable. Latency=64. Min Gnt=16.Max Lat=32. Prefetchable 32 bit memory at 0xf6000000 [0xf7ffffff]. Non-prefetchable 32 bit memory at 0xfeafc000 [0xfeafffff]. Non-prefetchable 32 bit memory at 0xfe000000 [0xfe7fffff]. But agpgart sets up: agpgart: Maximum main memory to use for agp memory: 440M agpgart: Detected Intel 440BX chipset agpgart: AGP aperture is 32M @ 0xfa000000 Needless to say, the two disagree and direct rendering is disabled. Attached is my .config for 2.4.0-test11-pre7. I've been wading through the code for AGP and DRM support, but nothing jumps out at me. Attached is my .config. The hardware is: Dual P3-500 mhz Intel 440bx AGP set 512mb of RAM Matrox G400 dual head card XFree86 4.0.1 Matrox driver 1.00.003 (beta) (http://www.matrox.com/mga/support/drivers/latest/home.htm) This is with X configured to run multi-head, not Xinerama and the kernel built with egcs 1.1.2. Also, I noticed that in arch/i386/kernel/mtrr.c around line 1888 that the mtrr_add call for Intel chips falls through to the next case. When that happens, X cannot register the mtrr for the main display on the Matrox card, though it can register the secondary display. I slipped a break in there to bypass the fall through and the mtrr registered (with performance improvement). Is the fall through correct? I haven't had any failures or lockups since putting in the bypass, but I suspect that it is incorrect and related to the misdetection of the base address of the video card. John