[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC v10 08/19] vfio: add ref for group to support own affe
From: |
Chen Fan |
Subject: |
[Qemu-devel] [RFC v10 08/19] vfio: add ref for group to support own affected groups |
Date: |
Tue, 16 Jun 2015 16:10:52 +0800 |
Signed-off-by: Chen Fan <address@hidden>
---
hw/vfio/common.c | 14 +++++++++++++-
include/hw/vfio/vfio-common.h | 1 +
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/hw/vfio/common.c b/hw/vfio/common.c
index b1045da..67881f7 100644
--- a/hw/vfio/common.c
+++ b/hw/vfio/common.c
@@ -795,6 +795,7 @@ VFIOGroup *vfio_get_group(int groupid, AddressSpace *as)
if (group->groupid == groupid) {
/* Found it. Now is it already in the right context? */
if (group->container->space->as == as) {
+ group->ref++;
return group;
} else {
error_report("vfio: group %d used in multiple address spaces",
@@ -825,6 +826,7 @@ VFIOGroup *vfio_get_group(int groupid, AddressSpace *as)
goto close_fd_exit;
}
+ group->ref = 1;
group->groupid = groupid;
QLIST_INIT(&group->device_list);
@@ -854,7 +856,17 @@ free_group_exit:
void vfio_put_group(VFIOGroup *group)
{
- if (!group || !QLIST_EMPTY(&group->device_list)) {
+ if (!group) {
+ return;
+ }
+
+ group->ref--;
+ assert(group->ref >= 0);
+ if (!QLIST_EMPTY(&group->device_list)) {
+ return;
+ }
+
+ if (group->ref) {
return;
}
diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h
index 0d1fb80..3eb042e 100644
--- a/include/hw/vfio/vfio-common.h
+++ b/include/hw/vfio/vfio-common.h
@@ -117,6 +117,7 @@ struct VFIODeviceOps {
typedef struct VFIOGroup {
int fd;
int groupid;
+ int ref;
VFIOContainer *container;
QLIST_HEAD(, VFIODevice) device_list;
QLIST_ENTRY(VFIOGroup) next;
--
1.9.3
- [Qemu-devel] [RFC v10 00/19] vfio-pci: pass the aer error to guest, Chen Fan, 2015/06/16
- [Qemu-devel] [RFC v10 01/19] vfio: extract vfio_get_hot_reset_info as a single function, Chen Fan, 2015/06/16
- [Qemu-devel] [RFC v10 03/19] pcie: modify the capability size assert, Chen Fan, 2015/06/16
- [Qemu-devel] [RFC v10 02/19] vfio: squeeze out vfio_pci_do_hot_reset for support bus reset, Chen Fan, 2015/06/16
- [Qemu-devel] [RFC v10 04/19] vfio: make the 4 bytes aligned for capability size, Chen Fan, 2015/06/16
- [Qemu-devel] [RFC v10 06/19] aer: impove pcie_aer_init to support vfio device, Chen Fan, 2015/06/16
- [Qemu-devel] [RFC v10 08/19] vfio: add ref for group to support own affected groups,
Chen Fan <=
- [Qemu-devel] [RFC v10 05/19] vfio: add pcie extanded capability support, Chen Fan, 2015/06/16
- [Qemu-devel] [RFC v10 10/19] vfio: improve vfio_get_group to support adding as is NULL., Chen Fan, 2015/06/16
- [Qemu-devel] [RFC v10 07/19] vfio: add aer support for vfio device, Chen Fan, 2015/06/16
- [Qemu-devel] [RFC v10 09/19] vfio: extract vfio_register_container_listener from vfio_connect_container, Chen Fan, 2015/06/16
- [Qemu-devel] [RFC v10 11/19] get all affected groups for each device support aer, Chen Fan, 2015/06/16
- [Qemu-devel] [RFC v10 12/19] vfio: add check host bus reset is support or not, Chen Fan, 2015/06/16
- [Qemu-devel] [RFC v10 14/19] vfio: add sec_bus_reset notifier to notify physical bus reset is needed, Chen Fan, 2015/06/16
- [Qemu-devel] [RFC v10 15/19] vfio: improve vfio_pci_hot_reset to support more case, Chen Fan, 2015/06/16
- [Qemu-devel] [RFC v10 16/19] vfio: do hot bus reset when do virtual secondary bus reset, Chen Fan, 2015/06/16