--- r128_driver.c.orig 2009-04-17 10:47:51.000000000 -0400 +++ r128_driver.c 2009-04-17 11:41:52.000000000 -0400 @@ -234,6 +234,16 @@ if (info->FBDev) { info->MMIO = fbdevHWMapMMIO(pScrn); } else { + /* If the primary screen has already mapped the MMIO region, + use its pointer instead of mapping it a second time. */ + if (info->IsSecondary) { + DevUnion* pPriv = xf86GetEntityPrivate(pScrn->entityList[0], + getR128EntityIndex()); + R128EntPtr pR128Ent = pPriv->ptr; + R128InfoPtr info0 = R128PTR(pR128Ent->pPrimaryScrn); + info->MMIO=info0->MMIO; + if (info->MMIO) return TRUE; + } #ifndef XSERVER_LIBPCIACCESS info->MMIO = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_MMIO | VIDMEM_READSIDEEFFECT,