@@ -691,6 +691,12 @@ static pcibus_t pci_bridge_get_limit(PCIDevice *bridge, uint8_t type)
return limit;
}
+static void pci_bridge_filter_nomap(pcibus_t *addr, pcibus_t *size)
+{
+ *addr = PCI_BAR_UNMAPPED;
+ *size = 0;
+}
+
static void pci_bridge_filter(PCIDevice *d, pcibus_t *addr, pcibus_t *size,
uint8_t type)
{
@@ -703,11 +709,13 @@ static void pci_bridge_filter(PCIDevice *d, pcibus_t *addr, pcibus_t *size,
if (type & PCI_BASE_ADDRESS_SPACE_IO) {
if (!(cmd & PCI_COMMAND_IO)) {
- goto no_map;
+ pci_bridge_filter_nomap(addr, size);
+ return;
}
} else {
if (!(cmd & PCI_COMMAND_MEMORY)) {
- goto no_map;
+ pci_bridge_filter_nomap(addr, size);
+ return;
}
}
@@ -716,9 +724,7 @@ static void pci_bridge_filter(PCIDevice *d, pcibus_t *addr, pcibus_t *size,
}
if (base > limit) {
- no_map:
- *addr = PCI_BAR_UNMAPPED;
- *size = 0;
+ pci_bridge_filter_nomap(addr, size);
} else {
*addr = base;
*size = limit - base + 1;
This patch removes ugly goto in pci_bridge_filter() by introducing subfunction, pci_bridge_filter_nomap(). Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> --- hw/pci.c | 16 +++++++++++----- 1 files changed, 11 insertions(+), 5 deletions(-)