Commit
ec6cb17f (pci: enable RedHat PCI bridges to reserve additional
resources on PCI init)
added a new vendor specific PCI capability for RedHat PCI bridges
allowing them to reserve additional buses and/or IO/MEM space.
When adding the IO hints PCI capability to the pcie-root-port
without specifying a value for bus reservation, the subordinate bus
computation is wrong and the guest kernel gets messed up.
Fix it by returning to prev code if the value for bus
reservation is not set.
Removed also a wrong debug print "PCI: invalid QEMU resource reserve
cap offset" which appears if the 'IO hints' capability is not present.
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Marcel Apfelbaum <marcel@redhat.com>
dprintf(1, "PCI: QEMU resource reserve cap length %d is invalid\n",
cap_len);
}
- } else {
- dprintf(1, "PCI: invalid QEMU resource reserve cap offset\n");
}
return cap;
} else {
res_bus);
res_bus = 0;
}
- }
- if (secbus + res_bus > *pci_bus) {
- dprintf(1, "PCI: QEMU resource reserve cap: bus = %u\n",
- res_bus);
- res_bus = secbus + res_bus;
- } else {
- res_bus = *pci_bus;
+ if (secbus + res_bus > *pci_bus) {
+ dprintf(1, "PCI: QEMU resource reserve cap: bus = %u\n",
+ res_bus);
+ res_bus = secbus + res_bus;
+ }
}
}
dprintf(1, "PCI: subordinate bus = 0x%x -> 0x%x\n",