[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 27/28] tests: add specialized device_find function
From: |
Marc-André Lureau |
Subject: |
[Qemu-devel] [PULL 27/28] tests: add specialized device_find function |
Date: |
Wed, 1 Mar 2017 13:04:52 +0400 |
Allow specifying which slot to look for the device.
This will be used in the following patch to avoid leaking when multiple
devices exists and we want to lookup the hotplug one.
Signed-off-by: Marc-André Lureau <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
tests/libqos/virtio-pci.h | 4 ++--
tests/libqos/virtio-pci.c | 29 +++++++++++++++++++++++++----
2 files changed, 27 insertions(+), 6 deletions(-)
diff --git a/tests/libqos/virtio-pci.h b/tests/libqos/virtio-pci.h
index 0fab916cf8..6ef19094cb 100644
--- a/tests/libqos/virtio-pci.h
+++ b/tests/libqos/virtio-pci.h
@@ -31,9 +31,9 @@ typedef struct QVirtQueuePCI {
extern const QVirtioBus qvirtio_pci;
-void qvirtio_pci_foreach(QPCIBus *bus, uint16_t device_type,
- void (*func)(QVirtioDevice *d, void *data), void *data);
QVirtioPCIDevice *qvirtio_pci_device_find(QPCIBus *bus, uint16_t device_type);
+QVirtioPCIDevice *qvirtio_pci_device_find_slot(QPCIBus *bus,
+ uint16_t device_type, int slot);
void qvirtio_pci_device_free(QVirtioPCIDevice *dev);
void qvirtio_pci_device_enable(QVirtioPCIDevice *d);
diff --git a/tests/libqos/virtio-pci.c b/tests/libqos/virtio-pci.c
index 456cccdc7b..808365e8ca 100644
--- a/tests/libqos/virtio-pci.c
+++ b/tests/libqos/virtio-pci.c
@@ -24,6 +24,8 @@
typedef struct QVirtioPCIForeachData {
void (*func)(QVirtioDevice *d, void *data);
uint16_t device_type;
+ bool has_slot;
+ int slot;
void *user_data;
} QVirtioPCIForeachData;
@@ -55,7 +57,8 @@ static void qvirtio_pci_foreach_callback(
QVirtioPCIForeachData *d = data;
QVirtioPCIDevice *vpcidev = qpcidevice_to_qvirtiodevice(dev);
- if (vpcidev->vdev.device_type == d->device_type) {
+ if (vpcidev->vdev.device_type == d->device_type &&
+ (!d->has_slot || vpcidev->pdev->devfn == d->slot << 3)) {
d->func(&vpcidev->vdev, d->user_data);
} else {
g_free(vpcidev);
@@ -290,21 +293,39 @@ const QVirtioBus qvirtio_pci = {
.virtqueue_kick = qvirtio_pci_virtqueue_kick,
};
-void qvirtio_pci_foreach(QPCIBus *bus, uint16_t device_type,
+static void qvirtio_pci_foreach(QPCIBus *bus, uint16_t device_type,
+ bool has_slot, int slot,
void (*func)(QVirtioDevice *d, void *data), void *data)
{
QVirtioPCIForeachData d = { .func = func,
.device_type = device_type,
+ .has_slot = has_slot,
+ .slot = slot,
.user_data = data };
qpci_device_foreach(bus, PCI_VENDOR_ID_REDHAT_QUMRANET, -1,
- qvirtio_pci_foreach_callback, &d);
+ qvirtio_pci_foreach_callback, &d);
}
QVirtioPCIDevice *qvirtio_pci_device_find(QPCIBus *bus, uint16_t device_type)
{
QVirtioPCIDevice *dev = NULL;
- qvirtio_pci_foreach(bus, device_type, qvirtio_pci_assign_device, &dev);
+
+ qvirtio_pci_foreach(bus, device_type, false, 0,
+ qvirtio_pci_assign_device, &dev);
+
+ dev->vdev.bus = &qvirtio_pci;
+
+ return dev;
+}
+
+QVirtioPCIDevice *qvirtio_pci_device_find_slot(QPCIBus *bus,
+ uint16_t device_type, int slot)
+{
+ QVirtioPCIDevice *dev = NULL;
+
+ qvirtio_pci_foreach(bus, device_type, true, slot,
+ qvirtio_pci_assign_device, &dev);
dev->vdev.bus = &qvirtio_pci;
--
2.12.0.rc2.3.gc93709801
- [Qemu-devel] [PULL 18/28] tests: fix e1000-test leak, (continued)
- [Qemu-devel] [PULL 18/28] tests: fix e1000-test leak, Marc-André Lureau, 2017/03/01
- [Qemu-devel] [PULL 17/28] tests: fix tco-test leaks, Marc-André Lureau, 2017/03/01
- [Qemu-devel] [PULL 19/28] tests: fix i440fx-test leaks, Marc-André Lureau, 2017/03/01
- [Qemu-devel] [PULL 20/28] tests: fix e1000e leaks, Marc-André Lureau, 2017/03/01
- [Qemu-devel] [PULL 21/28] tests: fix virtio-scsi-test leak, Marc-André Lureau, 2017/03/01
- [Qemu-devel] [PULL 22/28] tests: fix virtio-9p-test leaks, Marc-André Lureau, 2017/03/01
- [Qemu-devel] [PULL 23/28] bus: do not unref hotplug handler, Marc-André Lureau, 2017/03/01
- [Qemu-devel] [PULL 24/28] usb: release the created buses, Marc-André Lureau, 2017/03/01
- [Qemu-devel] [PULL 25/28] tests: allows to run single test in usb-hcd-ehci-test, Marc-André Lureau, 2017/03/01
- [Qemu-devel] [PULL 26/28] tests: fix usb-test leaks, Marc-André Lureau, 2017/03/01
- [Qemu-devel] [PULL 27/28] tests: add specialized device_find function,
Marc-André Lureau <=
- [Qemu-devel] [PULL 28/28] tests: fix virtio-blk-test leaks, Marc-André Lureau, 2017/03/01
- Re: [Qemu-devel] [PULL 00/28] Leak patches, Peter Maydell, 2017/03/02