I think the Fedora patch is wrong, or is fixing a different problem. The Fedora patch is never even reach in the failure case presented in this bug report. See my analysis here:
====== Cut from Vesa.c ========= pScrn->modePool = VBEGetModePool (pScrn, pVesa->pVbe, pVesa->vbeInfo, V_MODETYPE_VBE);
xf86ErrorFVerb(DEBUG_VERB, "\n"); xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, DEBUG_VERB, "Total Memory: %d 64KB banks (%dkB)\n", vbe->TotalMemory, (vbe->TotalMemory * 65536) / 1024);
pVesa->mapSize = vbe->TotalMemory * 65536; if (pScrn->modePool == NULL) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No matching modes\n"); vbeFree(pVesa->pVbe);
****** This is where the VESA driver bombs out ****** return (FALSE); }
VBESetModeNames(pScrn->modePool);
****** Fedora patch starts here !!! ******* i = VBEValidateModes(pScrn, NULL, pScrn->display->modes, NULL, NULL, 0, 2048, 1, 0, 2048, pScrn->display->virtualX, pScrn->display->virtualY, pVesa->mapSize, LOOKUP_BEST_REFRESH);
if (i <= 0) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No valid modes\n"); vbeFree(pVesa->pVbe); return (FALSE); }
I think the Fedora patch is wrong, or is fixing a different problem. The Fedora patch is never even reach in the failure case presented in this bug report.
See my analysis here:
====== Cut from Vesa.c =========
V_MODETYPE_ VBE);
pScrn->modePool = VBEGetModePool (pScrn, pVesa->pVbe, pVesa->vbeInfo,
xf86ErrorFV erb(DEBUG_ VERB, "\n"); erb(pScrn- >scrnIndex, X_INFO, DEBUG_VERB, >TotalMemory * 65536) / 1024);
xf86DrvMsgV
"Total Memory: %d 64KB banks (%dkB)\n", vbe->TotalMemory,
(vbe-
pVesa->mapSize = vbe->TotalMemory * 65536; pScrn-> scrnIndex, X_ERROR, "No matching modes\n");
vbeFree( pVesa-> pVbe);
if (pScrn->modePool == NULL) {
xf86DrvMsg(
****** This is where the VESA driver bombs out ******
return (FALSE);
}
VBESetModeN ames(pScrn- >modePool) ;
****** Fedora patch starts here !!! ******* s(pScrn, NULL, pScrn-> display- >modes, >display- >virtualX, >display- >virtualY, >mapSize, LOOKUP_ BEST_REFRESH) ;
i = VBEValidateMode
NULL, NULL, 0, 2048, 1, 0, 2048,
pScrn-
pScrn-
pVesa-
if (i <= 0) { pScrn-> scrnIndex, X_ERROR, "No valid modes\n");
vbeFree( pVesa-> pVbe);
xf86DrvMsg(
return (FALSE);
}