On Mon, Jul 24, 2023 at 03:59:35AM -0700, Yi Liu wrote: > diff --git a/drivers/iommu/iommufd/main.c b/drivers/iommu/iommufd/main.c > index 94c498b8fdf6..bd3efc1d8509 100644 > --- a/drivers/iommu/iommufd/main.c > +++ b/drivers/iommu/iommufd/main.c > @@ -17,6 +17,7 @@ > #include <linux/bug.h> > #include <uapi/linux/iommufd.h> > #include <linux/iommufd.h> > +#include "../iommu-priv.h" > > #include "io_pagetable.h" > #include "iommufd_private.h" > @@ -177,6 +178,78 @@ static int iommufd_destroy(struct iommufd_ucmd *ucmd) > return 0; > } > > +static int iommufd_zero_fill_user(u64 ptr, int bytes) (void __user * ptr, size_t bytes) > +{ > + int index = 0; > + > + for (; index < bytes; index++) { > + if (put_user(0, (uint8_t __user *)u64_to_user_ptr(ptr + index))) > + return -EFAULT; > + } > + return 0; > +} > + > +static int iommufd_get_hw_info(struct iommufd_ucmd *ucmd) > +{ > + struct iommu_hw_info *cmd = ucmd->cmd; > + unsigned int length = 0, data_len; > + struct iommufd_device *idev; > + const struct iommu_ops *ops; > + void *data = NULL; > + int rc = 0; > + > + if (cmd->flags || cmd->__reserved || !cmd->data_len) > + return -EOPNOTSUPP; > + > + idev = iommufd_get_device(ucmd, cmd->dev_id); > + if (IS_ERR(idev)) > + return PTR_ERR(idev); > + > + ops = dev_iommu_ops(idev->dev); > + if (!ops->hw_info) > + goto done; > + > + /* driver has hw_info callback should have a unique hw_info_type */ > + if (WARN_ON_ONCE(ops->hw_info_type == IOMMU_HW_INFO_TYPE_NONE)) { > + pr_warn_ratelimited("iommu driver set an invalid type\n"); Don't really need both a WARN and pr_warn(), just keep the WARN_ON Jason