pci_add_capability appears most PCI devices. Its error handling required lots of code, and led to inconsistent behaviors such as: - passing error_abort - passing error_fatal - asserting the returned value - propagating the error to the caller - skipping the rest of the function - just ignoring
The code generating errors in pci_add_capability had a comment which says: > Verify that capabilities don't overlap. Note: device assignment > depends on this check to verify that the device is not broken. > Should never trigger for emulated devices, but it's helpful for > debugging these. Indeed vfio has some code that passes capability offsets and sizes from a physical device, but it explicitly pays attention so that the capabilities never overlap. Therefore, we can always assert that capabilities never overlap when pci_add_capability is called, resolving these inconsistencies. v3: - Correct patch split between virtio-pci and pci (Markus Armbruster) - Add messages for individual patches (Markus Armbruster) - Acked-by: Jonathan Cameron <jonathan.came...@huawei.com> v2: Split the patch (Markus Armbruster) Akihiko Odaki (16): pci: Allow to omit errp for pci_add_capability hw/i386/amd_iommu: Omit errp for pci_add_capability ahci: Omit errp for pci_add_capability e1000e: Omit errp for pci_add_capability eepro100: Omit errp for pci_add_capability hw/nvme: Omit errp for pci_add_capability msi: Omit errp for pci_add_capability hw/pci/pci_bridge: Omit errp for pci_add_capability pcie: Omit errp for pci_add_capability pci/shpc: Omit errp for pci_add_capability msix: Omit errp for pci_add_capability pci/slotid: Omit errp for pci_add_capability hw/pci-bridge/pcie_pci_bridge: Omit errp for pci_add_capability hw/vfio/pci: Omit errp for pci_add_capability virtio-pci: Omit errp for pci_add_capability pci: Remove legacy errp from pci_add_capability docs/pcie_sriov.txt | 4 +-- hw/display/bochs-display.c | 4 +-- hw/i386/amd_iommu.c | 21 +++--------- hw/ide/ich.c | 8 ++--- hw/net/e1000e.c | 22 +++---------- hw/net/eepro100.c | 7 +--- hw/nvme/ctrl.c | 14 ++------ hw/pci-bridge/cxl_downstream.c | 9 ++---- hw/pci-bridge/cxl_upstream.c | 8 ++--- hw/pci-bridge/i82801b11.c | 14 ++------ hw/pci-bridge/pci_bridge_dev.c | 2 +- hw/pci-bridge/pcie_pci_bridge.c | 19 +++-------- hw/pci-bridge/pcie_root_port.c | 16 ++------- hw/pci-bridge/xio3130_downstream.c | 15 ++------- hw/pci-bridge/xio3130_upstream.c | 15 ++------- hw/pci-host/designware.c | 3 +- hw/pci-host/xilinx-pcie.c | 4 +-- hw/pci/msi.c | 9 +----- hw/pci/msix.c | 8 ++--- hw/pci/pci.c | 29 ++++------------- hw/pci/pci_bridge.c | 21 ++++-------- hw/pci/pcie.c | 52 ++++++++---------------------- hw/pci/shpc.c | 23 ++++--------- hw/pci/slotid_cap.c | 8 ++--- hw/usb/hcd-xhci-pci.c | 3 +- hw/vfio/pci-quirks.c | 15 ++------- hw/vfio/pci.c | 14 +++----- hw/virtio/virtio-pci.c | 12 ++----- include/hw/pci/pci.h | 5 ++- include/hw/pci/pci_bridge.h | 5 ++- include/hw/pci/pcie.h | 11 +++---- include/hw/pci/shpc.h | 3 +- include/hw/virtio/virtio-pci.h | 2 +- 33 files changed, 99 insertions(+), 306 deletions(-) -- 2.37.3