> From: Jason Gunthorpe <jgg@xxxxxxxxxx> > Sent: Tuesday, July 25, 2023 1:50 AM > > 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 Above two comments well received. Thanks, Yi Liu