From mboxrd@z Thu Jan 1 00:00:00 1970 From: Noboru Iwamatsu Subject: Re: Re: [PATCH][RFC] gfx_passthru: warning when vgabios rom has invalid checksum Date: Mon, 22 Feb 2010 18:47:17 +0900 Message-ID: <4B8252A5.4020008@jp.fujitsu.com> References: <4B8219F1.5040301@jp.fujitsu.com> <4B823088.8090706@intel.com> <4B82398B.6020109@jp.fujitsu.com> <4B8246C5.4090005@intel.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------050209000302020304010705" Return-path: In-Reply-To: <4B8246C5.4090005@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: weidong.han@intel.com Cc: xen-devel@lists.xensource.com, Ian.Jackson@eu.citrix.com List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------050209000302020304010705 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi Weidong, > How did you recalculate it? is it possible to recalculate it when detect > invalid checksum? Checking and recalculating the VGABIOS checksum is being processed in setup_vga_pt() in hw/pass-through.c. I thought you have written that part. If the checksum is invalid, current setup_vga_pt() always overwrites it with the recalculated value. What I mention is: the VGABIOS checksum must have been already recalculated by system BIOS. So, when setup_vga_pt() detects the invalid one, something might be wrong. But, I'm not sure all BIOS should work as described in PCIFW Spec. Actually, my Q35 had invalid checksum. I attach another patch: This stops loading vgabios if the checksum is wrong. Signed-off-by: Noboru Iwamatsu > Noboru Iwamatsu wrote: >> Hi, >> >> >> Intel DX58SO + GeForce GTS250: checksum is OK. >> >> Intel DX58SO + GeForce 9600GT: checksum is OK. >> >> Fujitsu Q35 M/B + IGD: checksum is bad. >> >> >> > What does "checksum is bad" mean here? >> >> It means shadowed VGABIOS has invalid checksum >> and requires recalculating. >> >> >> What do you think, Weidong? >> >> Is just warning enough? Or, should we stop loading the rom? >> >> >> >> >> > Does it still work or not when checksum is bad? If it works, we should >> > not stop loading the rom. >> >> When the checksum is bad, >> if it is not recalculated, guest has some trouble about handling the >> VGA (unable to show BIOS screen, unable to load the gfx driver >> properly, ...). > For this case, it's reasonable to warning and stop loading rom. We > didn't encounter this issue. >> If it is recalculated, it seems to work fine. > How did you recalculate it? is it possible to recalculate it when detect > invalid checksum? > > Regards, > Weidong > >> Regards, >> Noboru. >> >>> Noboru Iwamatsu wrote: >>>> Hi, >>>> >>>> According to the "PCI Firmware Spec Rev 3.0", >>>> the system firmware have to write the new checksum after resizing >>>> the expansion ROM area. >>>> >>>> So, when re-using the shadowed VGABIOS, the checksum must >>>> be valid, and if it is invalid, we should consider the BIOS has >>>> a bug or memory area is corrupted. >>>> >>>> This patch just add the warning message when checksum requires >>>> recalculation. >>>> >>>> I tried this following environments. >>>> >>>> Intel DX58SO + GeForce GTS250: checksum is OK. >>>> Intel DX58SO + GeForce 9600GT: checksum is OK. >>>> Fujitsu Q35 M/B + IGD: checksum is bad. >>>> >>> What does "checksum is bad" mean here? >>>> What do you think, Weidong? >>>> Is just warning enough? Or, should we stop loading the rom? >>>> >>>> >>> Does it still work or not when checksum is bad? If it works, we should >>> not stop loading the rom. >>> >>> Regards, >>> Weidong >>>> Regards, >>>> Noboru. >>>> >> >> > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel --------------050209000302020304010705 Content-Type: text/plain; name="vgabios-checksum-validation.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="vgabios-checksum-validation.patch" diff --git a/hw/pass-through.c b/hw/pass-through.c index ecb3d6f..8775956 100644 --- a/hw/pass-through.c +++ b/hw/pass-through.c @@ -4258,11 +4258,15 @@ static int setup_vga_pt(void) goto out; } - /* Adjust the bios checksum */ + /* Validate the bios checksum */ for ( c = (char*)bios; c < ((char*)bios + bios_size); c++ ) checksum += *c; if ( checksum ) - bios[bios_size - 1] -= checksum; + { + PT_LOG("vga bios checksum is invalid!\n"); + rc = -1; + goto out; + } cpu_physical_memory_rw(0xc0000, bios, bios_size, 1); --------------050209000302020304010705 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------050209000302020304010705--