Re: [PATCH v3 08/19] iommufd: Add IOMMU_HWPT_SET_DIRTY

Jason Gunthorpe
2023-10-13T16:19:28Z

On Sat, Sep 23, 2023 at 02:25:00AM +0100, Joao Martins wrote:
> diff --git a/drivers/iommu/iommufd/hw_pagetable.c b/drivers/iommu/iommufd/hw_pagetable.c
> index 32e259245314..22354b0ba554 100644
> --- a/drivers/iommu/iommufd/hw_pagetable.c
> +++ b/drivers/iommu/iommufd/hw_pagetable.c
> @@ -198,3 +198,24 @@ int iommufd_hwpt_alloc(struct iommufd_ucmd *ucmd)
> iommufd_put_object(&idev->obj);
> return rc;
> }
> +
> +int iommufd_hwpt_set_dirty(struct iommufd_ucmd *ucmd)
> +{
> + struct iommu_hwpt_set_dirty *cmd = ucmd->cmd;
> + struct iommufd_hw_pagetable *hwpt;
> + struct iommufd_ioas *ioas;
> + int rc = -EOPNOTSUPP;

Default is never used?

> + bool enable;
> +
> + hwpt = iommufd_get_hwpt(ucmd, cmd->hwpt_id);
> + if (IS_ERR(hwpt))
> + return PTR_ERR(hwpt);
> +
> + ioas = hwpt->ioas;
> + enable = cmd->flags & IOMMU_DIRTY_TRACKING_ENABLED;

Check that incoming flags are not invalid

if (cmd->flags & ~IOMMU_DIRTY_TRACKING_ENABLED)
return -EOPNOTSUPP

> diff --git a/drivers/iommu/iommufd/main.c b/drivers/iommu/iommufd/main.c
> index e71523cbd0de..ec0c34086af3 100644
> --- a/drivers/iommu/iommufd/main.c
> +++ b/drivers/iommu/iommufd/main.c
> @@ -315,6 +315,7 @@ union ucmd_buffer {
> struct iommu_ioas_unmap unmap;
> struct iommu_option option;
> struct iommu_vfio_ioas vfio_ioas;
> + struct iommu_hwpt_set_dirty set_dirty;
> #ifdef CONFIG_IOMMUFD_TEST
> struct iommu_test_cmd test;
> #endif
> @@ -358,6 +359,8 @@ static const struct iommufd_ioctl_op iommufd_ioctl_ops[] = {
> val64),
> IOCTL_OP(IOMMU_VFIO_IOAS, iommufd_vfio_ioas, struct iommu_vfio_ioas,
> __reserved),
> + IOCTL_OP(IOMMU_HWPT_SET_DIRTY, iommufd_hwpt_set_dirty,
> + struct iommu_hwpt_set_dirty, __reserved),
> #ifdef CONFIG_IOMMUFD_TEST
> IOCTL_OP(IOMMU_TEST_CMD, iommufd_test, struct iommu_test_cmd, last),
> #endif

These two lists of things are sorted
> +
> +/*

/** ?

> + * enum iommufd_set_dirty_flags - Flags for steering dirty tracking
> + * @IOMMU_DIRTY_TRACKING_DISABLED: Disables dirty tracking
> + * @IOMMU_DIRTY_TRACKING_ENABLED: Enables dirty tracking
> + */
> +enum iommufd_hwpt_set_dirty_flags {
> + IOMMU_DIRTY_TRACKING_DISABLED = 0,
> + IOMMU_DIRTY_TRACKING_ENABLED = 1,
> +};

Probably get rid of disabled and call it _ENABLE so it is actualy a
flag

Jason