Lines Matching full:domain
21 static int intel_nested_attach_dev(struct iommu_domain *domain, in intel_nested_attach_dev() argument
25 struct dmar_domain *dmar_domain = to_dmar_domain(domain); in intel_nested_attach_dev()
33 * Stage-1 domain cannot work alone, it is nested on a s2_domain. in intel_nested_attach_dev()
37 ret = paging_domain_compatible(&dmar_domain->s2_domain->domain, dev); in intel_nested_attach_dev()
39 dev_err_ratelimited(dev, "s2 domain is not compatible\n"); in intel_nested_attach_dev()
45 dev_err_ratelimited(dev, "Failed to attach domain to iommu\n"); in intel_nested_attach_dev()
53 ret = iopf_for_domain_set(domain, dev); in intel_nested_attach_dev()
62 info->domain = dmar_domain; in intel_nested_attach_dev()
70 iopf_for_domain_remove(domain, dev); in intel_nested_attach_dev()
79 static void intel_nested_domain_free(struct iommu_domain *domain) in intel_nested_domain_free() argument
81 struct dmar_domain *dmar_domain = to_dmar_domain(domain); in intel_nested_domain_free()
91 static int intel_nested_cache_invalidate_user(struct iommu_domain *domain, in intel_nested_cache_invalidate_user() argument
94 struct dmar_domain *dmar_domain = to_dmar_domain(domain); in intel_nested_cache_invalidate_user()
135 struct dmar_domain *domain, in domain_setup_nested() argument
142 return intel_pasid_setup_nested(iommu, dev, pasid, domain); in domain_setup_nested()
145 static int intel_nested_set_dev_pasid(struct iommu_domain *domain, in intel_nested_set_dev_pasid() argument
150 struct dmar_domain *dmar_domain = to_dmar_domain(domain); in intel_nested_set_dev_pasid()
161 ret = paging_domain_compatible(&dmar_domain->s2_domain->domain, dev); in intel_nested_set_dev_pasid()
165 dev_pasid = domain_add_dev_pasid(domain, dev, pasid); in intel_nested_set_dev_pasid()
169 ret = iopf_for_domain_replace(domain, old, dev); in intel_nested_set_dev_pasid()
182 iopf_for_domain_replace(old, domain, dev); in intel_nested_set_dev_pasid()
184 domain_remove_dev_pasid(domain, dev, pasid); in intel_nested_set_dev_pasid()
204 struct dmar_domain *domain; in intel_iommu_domain_alloc_nested() local
210 /* Must be nested domain */ in intel_iommu_domain_alloc_nested()
221 domain = kzalloc_obj(*domain, GFP_KERNEL_ACCOUNT); in intel_iommu_domain_alloc_nested()
222 if (!domain) in intel_iommu_domain_alloc_nested()
225 domain->s2_domain = s2_domain; in intel_iommu_domain_alloc_nested()
226 domain->s1_cfg = vtd; in intel_iommu_domain_alloc_nested()
227 domain->domain.ops = &intel_nested_domain_ops; in intel_iommu_domain_alloc_nested()
228 domain->domain.type = IOMMU_DOMAIN_NESTED; in intel_iommu_domain_alloc_nested()
229 INIT_LIST_HEAD(&domain->devices); in intel_iommu_domain_alloc_nested()
230 INIT_LIST_HEAD(&domain->dev_pasids); in intel_iommu_domain_alloc_nested()
231 INIT_LIST_HEAD(&domain->cache_tags); in intel_iommu_domain_alloc_nested()
232 spin_lock_init(&domain->lock); in intel_iommu_domain_alloc_nested()
233 spin_lock_init(&domain->cache_lock); in intel_iommu_domain_alloc_nested()
234 xa_init(&domain->iommu_array); in intel_iommu_domain_alloc_nested()
237 list_add(&domain->s2_link, &s2_domain->s1_domains); in intel_iommu_domain_alloc_nested()
240 return &domain->domain; in intel_iommu_domain_alloc_nested()