# HG changeset patch
# User Keir Fraser <keir@xxxxxxx>
# Date 1289397496 0
# Node ID cba667fb80cfdadb8fb9da8b4224e116a12ec1b4
# Parent a15b0a2dc276ae8eb8cff4cc58d5563848a39b9b
hvmloader: fix off-by-one-bit error when initialising PCI devices
hvmloader is responsible for - amoungst other things - initialising
the PCI device BARs prior to loading the guest BIOS. The previous
code only probed for devfn up to 128. The lower 3 bits are function
IDs so this meant that only devices in slots 0-15 were actually being
initialized.
Signed-off-by: Alex Zeffertt <alex.zeffertt@xxxxxxxxxxxxx>
Acked-by: Gianni Tedesco <gianni.tedesco@xxxxxxxxxx>
---
tools/firmware/hvmloader/hvmloader.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff -r a15b0a2dc276 -r cba667fb80cf tools/firmware/hvmloader/hvmloader.c
--- a/tools/firmware/hvmloader/hvmloader.c Tue Nov 09 20:37:46 2010 +0000
+++ b/tools/firmware/hvmloader/hvmloader.c Wed Nov 10 13:58:16 2010 +0000
@@ -197,7 +197,7 @@ static void pci_setup(void)
outb(0x4d1, (uint8_t)(PCI_ISA_IRQ_MASK >> 8));
/* Scan the PCI bus and map resources. */
- for ( devfn = 0; devfn < 128; devfn++ )
+ for ( devfn = 0; devfn < 256; devfn++ )
{
class = pci_readw(devfn, PCI_CLASS_DEVICE);
vendor_id = pci_readw(devfn, PCI_VENDOR_ID);
@@ -474,7 +474,7 @@ static int scan_etherboot_nic(uint32_t c
uint16_t class, vendor_id, device_id;
int rom_size = 0;
- for ( devfn = 0; (devfn < 128) && !rom_size; devfn++ )
+ for ( devfn = 0; (devfn < 256) && !rom_size; devfn++ )
{
class = pci_readw(devfn, PCI_CLASS_DEVICE);
vendor_id = pci_readw(devfn, PCI_VENDOR_ID);
@@ -501,7 +501,7 @@ static int pci_load_option_roms(uint32_t
uint16_t vendor_id, device_id;
uint8_t devfn, class;
- for ( devfn = 0; devfn < 128; devfn++ )
+ for ( devfn = 0; devfn < 256; devfn++ )
{
class = pci_readb(devfn, PCI_CLASS_DEVICE + 1);
vendor_id = pci_readw(devfn, PCI_VENDOR_ID);
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|