}
 
 static struct iommu_domain *
-amd_iommu_domain_alloc_user(struct device *dev, u32 flags,
-                           struct iommu_domain *parent,
-                           const struct iommu_user_data *user_data)
+amd_iommu_domain_alloc_paging_flags(struct device *dev, u32 flags,
+                                   const struct iommu_user_data *user_data)
 
 {
        unsigned int type = IOMMU_DOMAIN_UNMANAGED;
        if (dev)
                iommu = get_amd_iommu_from_dev(dev);
 
-       if ((flags & ~supported_flags) || parent || user_data)
+       if ((flags & ~supported_flags) || user_data)
                return ERR_PTR(-EOPNOTSUPP);
 
        /* Allocate domain with v2 page table if IOMMU supports PASID. */
        .release_domain = &release_domain,
        .identity_domain = &identity_domain.domain,
        .domain_alloc = amd_iommu_domain_alloc,
-       .domain_alloc_user = amd_iommu_domain_alloc_user,
+       .domain_alloc_paging_flags = amd_iommu_domain_alloc_paging_flags,
        .domain_alloc_sva = amd_iommu_domain_alloc_sva,
        .probe_device = amd_iommu_probe_device,
        .release_device = amd_iommu_release_device,
 
 };
 
 static struct iommu_domain *
-arm_smmu_domain_alloc_user(struct device *dev, u32 flags,
-                          struct iommu_domain *parent,
-                          const struct iommu_user_data *user_data)
+arm_smmu_domain_alloc_paging_flags(struct device *dev, u32 flags,
+                                  const struct iommu_user_data *user_data)
 {
        struct arm_smmu_master *master = dev_iommu_priv_get(dev);
        const u32 PAGING_FLAGS = IOMMU_HWPT_ALLOC_DIRTY_TRACKING |
 
        if (flags & ~PAGING_FLAGS)
                return ERR_PTR(-EOPNOTSUPP);
-       if (parent || user_data)
+       if (user_data)
                return ERR_PTR(-EOPNOTSUPP);
 
        if (flags & IOMMU_HWPT_ALLOC_PASID)
        .hw_info                = arm_smmu_hw_info,
        .domain_alloc_paging    = arm_smmu_domain_alloc_paging,
        .domain_alloc_sva       = arm_smmu_sva_domain_alloc,
-       .domain_alloc_user      = arm_smmu_domain_alloc_user,
+       .domain_alloc_paging_flags = arm_smmu_domain_alloc_paging_flags,
        .probe_device           = arm_smmu_probe_device,
        .release_device         = arm_smmu_release_device,
        .device_group           = arm_smmu_device_group,
 
 }
 
 static struct iommu_domain *
-intel_iommu_domain_alloc_user(struct device *dev, u32 flags,
-                             struct iommu_domain *parent,
-                             const struct iommu_user_data *user_data)
+intel_iommu_domain_alloc_paging_flags(struct device *dev, u32 flags,
+                                     const struct iommu_user_data *user_data)
 {
        struct device_domain_info *info = dev_iommu_priv_get(dev);
        bool dirty_tracking = flags & IOMMU_HWPT_ALLOC_DIRTY_TRACKING;
        struct iommu_domain *domain;
        bool first_stage;
 
-       if (parent)
-               return ERR_PTR(-EOPNOTSUPP);
-
        if (flags &
            (~(IOMMU_HWPT_ALLOC_NEST_PARENT | IOMMU_HWPT_ALLOC_DIRTY_TRACKING
               | IOMMU_HWPT_FAULT_ID_VALID)))
        .identity_domain        = &identity_domain,
        .capable                = intel_iommu_capable,
        .hw_info                = intel_iommu_hw_info,
-       .domain_alloc_user      = intel_iommu_domain_alloc_user,
+       .domain_alloc_paging_flags = intel_iommu_domain_alloc_paging_flags,
        .domain_alloc_sva       = intel_svm_domain_alloc,
        .domain_alloc_paging    = intel_iommu_domain_alloc_paging,
        .domain_alloc_nested    = intel_iommu_domain_alloc_nested,
 
 
        if (ops->domain_alloc_paging && !flags)
                domain = ops->domain_alloc_paging(dev);
-       else if (ops->domain_alloc_user)
-               domain = ops->domain_alloc_user(dev, flags, NULL, NULL);
+       else if (ops->domain_alloc_paging_flags)
+               domain = ops->domain_alloc_paging_flags(dev, flags, NULL);
        else if (ops->domain_alloc && !flags)
                domain = ops->domain_alloc(IOMMU_DOMAIN_UNMANAGED);
        else
 
 
        lockdep_assert_held(&ioas->mutex);
 
-       if ((flags || user_data) && !ops->domain_alloc_user)
+       if ((flags || user_data) && !ops->domain_alloc_paging_flags)
                return ERR_PTR(-EOPNOTSUPP);
        if (flags & ~valid_flags)
                return ERR_PTR(-EOPNOTSUPP);
        hwpt_paging->ioas = ioas;
        hwpt_paging->nest_parent = flags & IOMMU_HWPT_ALLOC_NEST_PARENT;
 
-       if (ops->domain_alloc_user) {
-               hwpt->domain = ops->domain_alloc_user(idev->dev, flags, NULL,
-                                                     user_data);
+       if (ops->domain_alloc_paging_flags) {
+               hwpt->domain = ops->domain_alloc_paging_flags(idev->dev, flags,
+                                                             user_data);
                if (IS_ERR(hwpt->domain)) {
                        rc = PTR_ERR(hwpt->domain);
                        hwpt->domain = NULL;
 
 }
 
 static struct iommu_domain *
-mock_domain_alloc_user(struct device *dev, u32 flags,
-                      struct iommu_domain *parent,
-                      const struct iommu_user_data *user_data)
+mock_domain_alloc_paging_flags(struct device *dev, u32 flags,
+                              const struct iommu_user_data *user_data)
 {
        bool has_dirty_flag = flags & IOMMU_HWPT_ALLOC_DIRTY_TRACKING;
        const u32 PAGING_FLAGS = IOMMU_HWPT_ALLOC_DIRTY_TRACKING |
                            MOCK_FLAGS_DEVICE_NO_DIRTY;
        struct iommu_domain *domain;
 
-       if (parent)
-               return ERR_PTR(-EOPNOTSUPP);
-
        if (user_data)
                return ERR_PTR(-EOPNOTSUPP);
        if ((flags & ~PAGING_FLAGS) || (has_dirty_flag && no_dirty_ops))
        .pgsize_bitmap = MOCK_IO_PAGE_SIZE,
        .hw_info = mock_domain_hw_info,
        .domain_alloc_paging = mock_domain_alloc_paging,
-       .domain_alloc_user = mock_domain_alloc_user,
+       .domain_alloc_paging_flags = mock_domain_alloc_paging_flags,
        .domain_alloc_nested = mock_domain_alloc_nested,
        .capable = mock_domain_capable,
        .device_group = generic_device_group,
 
  * @domain_alloc: allocate and return an iommu domain if success. Otherwise
  *                NULL is returned. The domain is not fully initialized until
  *                the caller iommu_domain_alloc() returns.
- * @domain_alloc_user: Allocate an iommu domain corresponding to the input
- *                     parameters as defined in include/uapi/linux/iommufd.h.
- *                     The @user_data can be optionally provided, the
- *                     new domain must support __IOMMU_DOMAIN_PAGING.
- *                     Upon failure, ERR_PTR must be returned.
+ * @domain_alloc_paging_flags: Allocate an iommu domain corresponding to the
+ *                     input parameters as defined in
+ *                     include/uapi/linux/iommufd.h. The @user_data can be
+ *                     optionally provided, the new domain must support
+ *                     __IOMMU_DOMAIN_PAGING. Upon failure, ERR_PTR must be
+ *                     returned.
  * @domain_alloc_paging: Allocate an iommu_domain that can be used for
- *                       UNMANAGED, DMA, and DMA_FQ domain types.
+ *                       UNMANAGED, DMA, and DMA_FQ domain types. This is the
+ *                       same as invoking domain_alloc_paging_flags() with
+ *                       @flags=0, @user_data=NULL. A driver should implement
+ *                       only one of the two ops.
  * @domain_alloc_sva: Allocate an iommu_domain for Shared Virtual Addressing.
  * @domain_alloc_nested: Allocate an iommu_domain for nested translation.
  * @probe_device: Add device to iommu driver handling
 
        /* Domain allocation and freeing by the iommu driver */
        struct iommu_domain *(*domain_alloc)(unsigned iommu_domain_type);
-       struct iommu_domain *(*domain_alloc_user)(
-               struct device *dev, u32 flags, struct iommu_domain *parent,
+       struct iommu_domain *(*domain_alloc_paging_flags)(
+               struct device *dev, u32 flags,
                const struct iommu_user_data *user_data);
        struct iommu_domain *(*domain_alloc_paging)(struct device *dev);
        struct iommu_domain *(*domain_alloc_sva)(struct device *dev,