All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Auger <eric.auger@redhat.com>
To: "Cédric Le Goater" <clg@redhat.com>,
	eric.auger.pro@gmail.com, qemu-devel@nongnu.org,
	zhenzhong.duan@intel.com, alex.williamson@redhat.com,
	jgg@nvidia.com, nicolinc@nvidia.com, joao.m.martins@oracle.com,
	peterx@redhat.com, kevin.tian@intel.com, yi.l.liu@intel.com,
	yi.y.sun@intel.com, chao.p.peng@intel.com,
	mjrosato@linux.ibm.com
Subject: Re: [PATCH v3 14/15] vfio/common: Introduce a global VFIODevice list
Date: Wed, 4 Oct 2023 15:54:19 +0200	[thread overview]
Message-ID: <43fa4606-1d03-ff89-42e6-04d3ee4e71b9@redhat.com> (raw)
In-Reply-To: <2bcff7f9-b4d0-4942-953c-1b25533217d1@redhat.com>

Hi Cédric,

On 10/3/23 17:56, Cédric Le Goater wrote:
> On 10/3/23 12:14, Eric Auger wrote:
>> From: Zhenzhong Duan <zhenzhong.duan@intel.com>
>>
>> Some functions iterate over all the VFIODevices. This is currently
>> achieved by iterating over all groups/devices. Let's
>> introduce a global list of VFIODevices simplifying that scan.
>
> Maybe we should move the qemu_register_reset() when the first device
> is added to the list, in vfio_attach_device() ?

Well at the moment this is done on the first address space addition to
vfio_address_spaces. I think it is quite similar and I would be tempted
to leave it there atm except if you or anybody has a strong opinion here.

Eric
>
> Thanks,
>
> C.
>
>>
>> This will also be useful while migrating to IOMMUFD by hiding the
>> group specificity.
>>
>> Signed-off-by: Eric Auger <eric.auger@redhat.com>
>> Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
>> Suggested-by: Alex Williamson <alex.williamson@redhat.com>
>> ---
>>   include/hw/vfio/vfio-common.h |  2 ++
>>   hw/vfio/common.c              | 45 +++++++++++++++--------------------
>>   2 files changed, 21 insertions(+), 26 deletions(-)
>>
>> diff --git a/include/hw/vfio/vfio-common.h
>> b/include/hw/vfio/vfio-common.h
>> index bf12e40667..54905b9dd4 100644
>> --- a/include/hw/vfio/vfio-common.h
>> +++ b/include/hw/vfio/vfio-common.h
>> @@ -131,6 +131,7 @@ typedef struct VFIODeviceOps VFIODeviceOps;
>>   typedef struct VFIODevice {
>>       QLIST_ENTRY(VFIODevice) next;
>>       QLIST_ENTRY(VFIODevice) container_next;
>> +    QLIST_ENTRY(VFIODevice) global_next;
>>       struct VFIOGroup *group;
>>       VFIOContainer *container;
>>       char *sysfsdev;
>> @@ -232,6 +233,7 @@ int vfio_kvm_device_del_fd(int fd, Error **errp);
>>     extern const MemoryRegionOps vfio_region_ops;
>>   typedef QLIST_HEAD(VFIOGroupList, VFIOGroup) VFIOGroupList;
>> +typedef QLIST_HEAD(VFIODeviceList, VFIODevice) VFIODeviceList;
>>   extern VFIOGroupList vfio_group_list;
>>     bool vfio_mig_active(void);
>> diff --git a/hw/vfio/common.c b/hw/vfio/common.c
>> index 55f8a113ea..95bc50bcda 100644
>> --- a/hw/vfio/common.c
>> +++ b/hw/vfio/common.c
>> @@ -48,6 +48,8 @@
>>     VFIOGroupList vfio_group_list =
>>       QLIST_HEAD_INITIALIZER(vfio_group_list);
>> +static VFIODeviceList vfio_device_list =
>> +    QLIST_HEAD_INITIALIZER(vfio_device_list);
>>   static QLIST_HEAD(, VFIOAddressSpace) vfio_address_spaces =
>>       QLIST_HEAD_INITIALIZER(vfio_address_spaces);
>>   @@ -94,18 +96,15 @@ static int vfio_get_dirty_bitmap(VFIOContainer
>> *container, uint64_t iova,
>>     bool vfio_mig_active(void)
>>   {
>> -    VFIOGroup *group;
>>       VFIODevice *vbasedev;
>>   -    if (QLIST_EMPTY(&vfio_group_list)) {
>> +    if (QLIST_EMPTY(&vfio_device_list)) {
>>           return false;
>>       }
>>   -    QLIST_FOREACH(group, &vfio_group_list, next) {
>> -        QLIST_FOREACH(vbasedev, &group->device_list, next) {
>> -            if (vbasedev->migration_blocker) {
>> -                return false;
>> -            }
>> +    QLIST_FOREACH(vbasedev, &vfio_device_list, next) {
>> +        if (vbasedev->migration_blocker) {
>> +            return false;
>>           }
>>       }
>>       return true;
>> @@ -120,19 +119,16 @@ static Error *multiple_devices_migration_blocker;
>>    */
>>   static bool vfio_multiple_devices_migration_is_supported(void)
>>   {
>> -    VFIOGroup *group;
>>       VFIODevice *vbasedev;
>>       unsigned int device_num = 0;
>>       bool all_support_p2p = true;
>>   -    QLIST_FOREACH(group, &vfio_group_list, next) {
>> -        QLIST_FOREACH(vbasedev, &group->device_list, next) {
>> -            if (vbasedev->migration) {
>> -                device_num++;
>> +    QLIST_FOREACH(vbasedev, &vfio_device_list, next) {
>> +        if (vbasedev->migration) {
>> +            device_num++;
>>   -                if (!(vbasedev->migration->mig_flags &
>> VFIO_MIGRATION_P2P)) {
>> -                    all_support_p2p = false;
>> -                }
>> +            if (!(vbasedev->migration->mig_flags &
>> VFIO_MIGRATION_P2P)) {
>> +                all_support_p2p = false;
>>               }
>>           }
>>       }
>> @@ -1777,22 +1773,17 @@ bool vfio_get_info_dma_avail(struct
>> vfio_iommu_type1_info *info,
>>     void vfio_reset_handler(void *opaque)
>>   {
>> -    VFIOGroup *group;
>>       VFIODevice *vbasedev;
>>   -    QLIST_FOREACH(group, &vfio_group_list, next) {
>> -        QLIST_FOREACH(vbasedev, &group->device_list, next) {
>> -            if (vbasedev->dev->realized) {
>> -                vbasedev->ops->vfio_compute_needs_reset(vbasedev);
>> -            }
>> +    QLIST_FOREACH(vbasedev, &vfio_device_list, next) {
>> +        if (vbasedev->dev->realized) {
>> +            vbasedev->ops->vfio_compute_needs_reset(vbasedev);
>>           }
>>       }
>>   -    QLIST_FOREACH(group, &vfio_group_list, next) {
>> -        QLIST_FOREACH(vbasedev, &group->device_list, next) {
>> -            if (vbasedev->dev->realized && vbasedev->needs_reset) {
>> -                vbasedev->ops->vfio_hot_reset_multi(vbasedev);
>> -            }
>> +    QLIST_FOREACH(vbasedev, &vfio_device_list, next) {
>> +        if (vbasedev->dev->realized && vbasedev->needs_reset) {
>> +            vbasedev->ops->vfio_hot_reset_multi(vbasedev);
>>           }
>>       }
>>   }
>> @@ -2657,6 +2648,7 @@ int vfio_attach_device(char *name, VFIODevice
>> *vbasedev,
>>       container = group->container;
>>       vbasedev->container = container;
>>       QLIST_INSERT_HEAD(&container->device_list, vbasedev,
>> container_next);
>> +    QLIST_INSERT_HEAD(&vfio_device_list, vbasedev, global_next);
>>         return ret;
>>   }
>> @@ -2669,6 +2661,7 @@ void vfio_detach_device(VFIODevice *vbasedev)
>>           return;
>>       }
>>   +    QLIST_REMOVE(vbasedev, global_next);
>>       QLIST_REMOVE(vbasedev, container_next);
>>       vbasedev->container = NULL;
>>       trace_vfio_detach_device(vbasedev->name, group->groupid);
>



  reply	other threads:[~2023-10-04 13:54 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-03 10:13 [PATCH v3 00/15] Prerequisite changes for IOMMUFD support Eric Auger
2023-10-03 10:13 ` [PATCH v3 01/15] scripts/update-linux-headers: Add iommufd.h Eric Auger
2023-10-03 13:50   ` Cédric Le Goater
2023-10-03 14:09     ` Eric Auger
2023-10-03 10:13 ` [PATCH v3 02/15] linux-headers: " Eric Auger
2023-10-03 10:14 ` [PATCH v3 03/15] vfio/common: Move IOMMU agnostic helpers to a separate file Eric Auger
2023-10-04  5:35   ` Cédric Le Goater
2023-10-03 10:14 ` [PATCH v3 04/15] vfio/common: Propagate KVM_SET_DEVICE_ATTR error if any Eric Auger
2023-10-03 14:53   ` Cédric Le Goater
2023-10-04  9:44     ` Eric Auger
2023-10-03 10:14 ` [PATCH v3 05/15] vfio/common: Introduce vfio_container_add|del_section_window() Eric Auger
2023-10-03 10:14 ` [PATCH v3 06/15] vfio/common: Extract out vfio_kvm_device_[add/del]_fd Eric Auger
2023-10-03 10:14 ` [PATCH v3 07/15] vfio/pci: Introduce vfio_[attach/detach]_device Eric Auger
2023-10-03 15:14   ` Cédric Le Goater
2023-10-03 10:14 ` [PATCH v3 08/15] vfio/platform: Use vfio_[attach/detach]_device Eric Auger
2023-10-03 15:15   ` Cédric Le Goater
2023-10-03 10:14 ` [PATCH v3 09/15] vfio/ap: " Eric Auger
2023-10-03 15:25   ` Cédric Le Goater
2023-10-03 23:08     ` Matthew Rosato
2023-10-04  9:55       ` Eric Auger
2023-10-04  9:58     ` Eric Auger
2023-10-04 13:41       ` Matthew Rosato
2023-10-04 13:48         ` Eric Auger
2023-10-03 10:14 ` [PATCH v3 10/15] vfio/ccw: " Eric Auger
2023-10-03 15:45   ` Cédric Le Goater
2023-10-04 12:30     ` Eric Auger
2023-10-03 23:01   ` Matthew Rosato
2023-10-04 12:32     ` Eric Auger
2023-10-03 10:14 ` [PATCH v3 11/15] vfio/common: Move VFIO reset handler registration to a group agnostic function Eric Auger
2023-10-03 15:46   ` Cédric Le Goater
2023-10-03 10:14 ` [PATCH v3 12/15] vfio/common: Introduce a per container device list Eric Auger
2023-10-03 15:52   ` Cédric Le Goater
2023-10-03 10:14 ` [PATCH v3 13/15] vfio/common: Store the parent container in VFIODevice Eric Auger
2023-10-03 15:59   ` Cédric Le Goater
2023-10-04 13:03     ` Eric Auger
2023-10-04 16:55       ` Cédric Le Goater
2023-10-04 17:00         ` Eric Auger
2023-10-03 10:14 ` [PATCH v3 14/15] vfio/common: Introduce a global VFIODevice list Eric Auger
2023-10-03 15:56   ` Cédric Le Goater
2023-10-04 13:54     ` Eric Auger [this message]
2023-10-03 10:14 ` [PATCH v3 15/15] vfio/common: Move legacy VFIO backend code into separate container.c Eric Auger
2023-10-03 16:08   ` Cédric Le Goater

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=43fa4606-1d03-ff89-42e6-04d3ee4e71b9@redhat.com \
    --to=eric.auger@redhat.com \
    --cc=alex.williamson@redhat.com \
    --cc=chao.p.peng@intel.com \
    --cc=clg@redhat.com \
    --cc=eric.auger.pro@gmail.com \
    --cc=jgg@nvidia.com \
    --cc=joao.m.martins@oracle.com \
    --cc=kevin.tian@intel.com \
    --cc=mjrosato@linux.ibm.com \
    --cc=nicolinc@nvidia.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=yi.l.liu@intel.com \
    --cc=yi.y.sun@intel.com \
    --cc=zhenzhong.duan@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.