Message ID | 20230808153510.4170-1-yi.l.liu@intel.com |
---|---|
Headers | show |
Series | iommufd: Add iommu hardware info reporting | expand |
On Wed, Aug 09, 2023 at 06:16:19PM +0800, Baolu Lu wrote: > On 2023/8/8 23:35, Yi Liu wrote: > > +static int iommufd_fill_hw_info(struct device *dev, void __user *user_ptr, > > + unsigned int *length, u32 *type) > > +{ > > + const struct iommu_ops *ops; > > + unsigned int data_len; > > + void *data; > > + int rc = 0; > > + > > + ops = dev_iommu_ops(dev); > > + if (!ops->hw_info) { > > + *length = 0; > > + *type = IOMMU_HW_INFO_TYPE_NONE; > > + return 0; > > + } > > + > > + data = ops->hw_info(dev, &data_len, type); > > + if (IS_ERR(data)) > > + return PTR_ERR(data); > > + > > + /* > > + * drivers that have hw_info callback should have a unique > > + * iommu_hw_info_type. > > + */ > > + if (WARN_ON_ONCE(*type == IOMMU_HW_INFO_TYPE_NONE)) { > > + rc = -ENODEV; > > + goto err_free; > > + } > > + > > + *length = min(*length, data_len); > > + if (copy_to_user(user_ptr, data, *length)) { > > copy_to_user() returns the number of bytes that were successfully > copied, right? It returns length on failure and 0 on success Jason
On Tue, Aug 08, 2023 at 08:35:09AM -0700, Yi Liu wrote: > +static int iommufd_zero_fill_user(void __user *ptr, size_t bytes) > +{ > + int index = 0; > + > + for (; index < bytes; index++) { > + if (put_user(0, (uint8_t __user *)(ptr + index))) > + return -EFAULT; > + } I've recently learned this routine is spelled 'clear_user()' Jason