qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Cédric Le Goater" <clg@redhat.com>
To: Joao Martins <joao.m.martins@oracle.com>, qemu-devel@nongnu.org
Cc: Yi Liu <yi.l.liu@intel.com>, Eric Auger <eric.auger@redhat.com>,
	Zhenzhong Duan <zhenzhong.duan@intel.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Jason Gunthorpe <jgg@nvidia.com>,
	Avihai Horon <avihaih@nvidia.com>
Subject: Re: [PATCH v3 05/10] vfio/iommufd: Probe and request hwpt dirty tracking capability
Date: Tue, 9 Jul 2024 08:28:40 +0200	[thread overview]
Message-ID: <a3f22b3b-e3bc-4dd6-b6fb-cfb726addfbe@redhat.com> (raw)
In-Reply-To: <20240708143420.16953-6-joao.m.martins@oracle.com>

On 7/8/24 4:34 PM, Joao Martins wrote:
> Probe hardware dirty tracking support by querying device hw capabilities via
> IOMMUFD_GET_HW_INFO.
> 
> In preparation to using the dirty tracking UAPI, request dirty tracking in the
> HWPT flags when the IOMMU supports dirty tracking.
> 
> The auto domain logic allows different IOMMU domains to be created when DMA
> dirty tracking is not desired (and VF can provide it) while others doesn't have
> it and want the IOMMU capability. This is not used in this way here given how
> VFIODevice migration capability checking takes place *after* the device
> attachment. But such granularity is a nice property that can be implemented
> later on.
> 
> Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
> ---
>   include/hw/vfio/vfio-common.h |  1 +
>   hw/vfio/iommufd.c             | 26 ++++++++++++++++++++++++++
>   2 files changed, 27 insertions(+)
> 
> diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h
> index 82c5a4aaa61e..7ce925cfab19 100644
> --- a/include/hw/vfio/vfio-common.h
> +++ b/include/hw/vfio/vfio-common.h
> @@ -97,6 +97,7 @@ typedef struct IOMMUFDBackend IOMMUFDBackend;
>   
>   typedef struct VFIOIOASHwpt {
>       uint32_t hwpt_id;
> +    uint32_t hwpt_flags;
>       QLIST_HEAD(, VFIODevice) device_list;
>       QLIST_ENTRY(VFIOIOASHwpt) next;
>   } VFIOIOASHwpt;
> diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c
> index 2ca9a32cc7b6..1b5b46d28ed6 100644
> --- a/hw/vfio/iommufd.c
> +++ b/hw/vfio/iommufd.c
> @@ -212,6 +212,20 @@ static bool iommufd_cdev_detach_ioas_hwpt(VFIODevice *vbasedev, Error **errp)
>       return true;
>   }
>   
> +static bool iommufd_device_dirty_tracking(IOMMUFDBackend *iommufd,
> +                                          VFIODevice *vbasedev)
> +{
> +    enum iommu_hw_info_type type;
> +    uint64_t caps;
> +
> +    if (!iommufd_backend_get_device_info(iommufd, vbasedev->devid, &type,
> +                                         NULL, 0, &caps, NULL)) {

I think we should report the error and not ignore it.

That said, since we are probing the hw features of the host IOMMU device,
could we use the data cached in the HostIOMMUDevice struct instead ?
This means would need to move the ->realize() call doing the probing
before attaching the device in vfio_attach_device(). That way we would
catch probing errors in one place. Does this make sense ?

Thanks,

C.




> +        return false;
> +    }
> +
> +    return caps & IOMMU_HW_CAP_DIRTY_TRACKING;
> +}
> +
>   static bool iommufd_cdev_autodomains_get(VFIODevice *vbasedev,
>                                            VFIOIOMMUFDContainer *container,
>                                            Error **errp)
> @@ -239,6 +253,15 @@ static bool iommufd_cdev_autodomains_get(VFIODevice *vbasedev,
>           }
>       }
>   
> +    /*
> +     * This is quite early and VFIODevice isn't yet fully initialized,
> +     * thus rely on IOMMU hardware capabilities as to whether IOMMU dirty
> +     * tracking is going to be needed.
> +     */
> +    if (iommufd_device_dirty_tracking(iommufd, vbasedev)) {
> +        flags = IOMMU_HWPT_ALLOC_DIRTY_TRACKING;
> +    }
> +
>       ret = iommufd_backend_alloc_hwpt(iommufd,
>                                        vbasedev->devid,
>                                        container->ioas_id, flags,
> @@ -255,6 +278,7 @@ static bool iommufd_cdev_autodomains_get(VFIODevice *vbasedev,
>   
>       hwpt = g_malloc0(sizeof(*hwpt));
>       hwpt->hwpt_id = hwpt_id;
> +    hwpt->hwpt_flags = flags;
>       QLIST_INIT(&hwpt->device_list);
>   
>       ret = iommufd_cdev_attach_ioas_hwpt(vbasedev, hwpt->hwpt_id, errp);
> @@ -267,6 +291,8 @@ static bool iommufd_cdev_autodomains_get(VFIODevice *vbasedev,
>       vbasedev->hwpt = hwpt;
>       QLIST_INSERT_HEAD(&hwpt->device_list, vbasedev, hwpt_next);
>       QLIST_INSERT_HEAD(&container->hwpt_list, hwpt, next);
> +    container->bcontainer.dirty_pages_supported |=
> +                              (flags & IOMMU_HWPT_ALLOC_DIRTY_TRACKING);
>       return true;
>   }
>   



  reply	other threads:[~2024-07-09  6:29 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-08 14:34 [PATCH v3 00/10] hw/vfio: IOMMUFD Dirty Tracking Joao Martins
2024-07-08 14:34 ` [PATCH v3 01/10] vfio/iommufd: Don't fail to realize on IOMMU_GET_HW_INFO failure Joao Martins
2024-07-09  3:43   ` Duan, Zhenzhong
2024-07-09  8:56     ` Joao Martins
2024-07-09 11:45       ` Joao Martins
2024-07-09 11:50         ` Joao Martins
2024-07-10  2:53           ` Duan, Zhenzhong
2024-07-10  9:29             ` Joao Martins
2024-07-10  9:54               ` Duan, Zhenzhong
2024-07-10  9:56                 ` Joao Martins
2024-07-08 14:34 ` [PATCH v3 02/10] backends/iommufd: Extend iommufd_backend_get_device_info() to fetch HW capabilities Joao Martins
2024-07-09  6:13   ` Duan, Zhenzhong
2024-07-08 14:34 ` [PATCH v3 03/10] vfio/iommufd: Return errno in iommufd_cdev_attach_ioas_hwpt() Joao Martins
2024-07-08 15:28   ` Cédric Le Goater
2024-07-08 15:32     ` Joao Martins
2024-07-08 16:28       ` Joao Martins
2024-07-09  6:20       ` Cédric Le Goater
2024-07-09  8:56         ` Joao Martins
2024-07-08 14:34 ` [PATCH v3 04/10] vfio/iommufd: Introduce auto domain creation Joao Martins
2024-07-09  6:26   ` Duan, Zhenzhong
2024-07-09  9:00     ` Joao Martins
2024-07-09  6:50   ` Cédric Le Goater
2024-07-09  9:09     ` Joao Martins
2024-07-08 14:34 ` [PATCH v3 05/10] vfio/iommufd: Probe and request hwpt dirty tracking capability Joao Martins
2024-07-09  6:28   ` Cédric Le Goater [this message]
2024-07-09  9:04     ` Joao Martins
2024-07-09 12:47       ` Joao Martins
2024-07-09 16:53         ` Joao Martins
2024-07-08 14:34 ` [PATCH v3 06/10] vfio/iommufd: Implement VFIOIOMMUClass::set_dirty_tracking support Joao Martins
2024-07-09  7:07   ` Cédric Le Goater
2024-07-09  9:13     ` Joao Martins
2024-07-08 14:34 ` [PATCH v3 07/10] vfio/iommufd: Implement VFIOIOMMUClass::query_dirty_bitmap support Joao Martins
2024-07-09  7:05   ` Cédric Le Goater
2024-07-09  9:13     ` Joao Martins
2024-07-09 12:41       ` Joao Martins
2024-07-08 14:34 ` [PATCH v3 08/10] vfio/iommufd: Parse hw_caps and store dirty tracking support Joao Martins
2024-07-08 14:34 ` [PATCH v3 09/10] vfio/migration: Don't block migration device dirty tracking is unsupported Joao Martins
2024-07-09  7:02   ` Cédric Le Goater
2024-07-09  9:09     ` Joao Martins
2024-07-10 10:38   ` Duan, Zhenzhong
2024-07-10 10:59     ` Joao Martins
2024-07-08 14:34 ` [PATCH v3 10/10] vfio/common: Allow disabling device dirty page tracking Joao Martins
2024-07-10 10:42   ` Duan, Zhenzhong
2024-07-10 10:51     ` Joao Martins
2024-07-11  7:41 ` [PATCH v3 00/10] hw/vfio: IOMMUFD Dirty Tracking Cédric Le Goater
2024-07-11  8:33   ` Joao Martins
2024-07-11 10:22     ` Duan, Zhenzhong
2024-07-11 10:44       ` Joao Martins

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=a3f22b3b-e3bc-4dd6-b6fb-cfb726addfbe@redhat.com \
    --to=clg@redhat.com \
    --cc=alex.williamson@redhat.com \
    --cc=avihaih@nvidia.com \
    --cc=eric.auger@redhat.com \
    --cc=jgg@nvidia.com \
    --cc=joao.m.martins@oracle.com \
    --cc=qemu-devel@nongnu.org \
    --cc=yi.l.liu@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).