VT-d: drop ownership checking from domain_context_mapping_one()

Despite putting in quite a bit of effort it was not possible to
establish why exactly this code exists (beyond possibly sanity
checking). Instead of a subsequent change further complicating this
logic, simply get rid of it.

Take the opportunity and move the respective unmap_vtd_domain_page() out
of the locked region.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Paul Durrant <paul@xen.org>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
master commit: a680b8134b
master date: 2022-04-05 14:17:21 +0200
This commit is contained in:
Jan Beulich committed 2022-04-05 15:12:11 +02:00
1 parent 419a09377d
commit bff4c690b2
1 file changed
+2 -62
+2 -62
View File
@@ -120,28 +120,6 @@ static int context_set_domain_id(struct context_entry *context,
return 0;
}
static int context_get_domain_id(struct context_entry *context,
struct vtd_iommu *iommu)
{
unsigned long dom_index, nr_dom;
int domid = -1;
if (iommu && context)
{
nr_dom = cap_ndoms(iommu->cap);
dom_index = context_domain_id(*context);
if ( dom_index < nr_dom && iommu->domid_map )
domid = iommu->domid_map[dom_index];
else
dprintk(XENLOG_DEBUG VTDPREFIX,
"dom_index %lu exceeds nr_dom %lu or iommu has no domid_map\n",
dom_index, nr_dom);
}
return domid;
}
static void cleanup_domid_map(struct domain *domain, struct vtd_iommu *iommu)
{
int iommu_domid = domain_iommu_domid(domain, iommu);
@@ -1395,47 +1373,9 @@ int domain_context_mapping_one(
if ( context_present(*context) )
{
int res = 0;
/* Try to get domain ownership from device structure. If that's
* not available, try to read it from the context itself. */
if ( pdev )
{
if ( pdev->domain != domain )
{
printk(XENLOG_G_INFO VTDPREFIX
"%pd: %04x:%02x:%02x.%u owned by %pd\n",
domain, seg, bus, PCI_SLOT(devfn), PCI_FUNC(devfn),
pdev->domain);
res = -EINVAL;
}
}
else
{
int cdomain;
cdomain = context_get_domain_id(context, iommu);
if ( cdomain < 0 )
{
printk(XENLOG_G_WARNING VTDPREFIX
"%pd: %04x:%02x:%02x.%u mapped, but can't find owner\n",
domain, seg, bus, PCI_SLOT(devfn), PCI_FUNC(devfn));
res = -EINVAL;
}
else if ( cdomain != domain->domain_id )
{
printk(XENLOG_G_INFO VTDPREFIX
"%pd: %04x:%02x:%02x.%u already mapped to d%d\n",
domain,
seg, bus, PCI_SLOT(devfn), PCI_FUNC(devfn),
cdomain);
res = -EINVAL;
}
}
unmap_vtd_domain_page(context_entries);
spin_unlock(&iommu->lock);
return res;
unmap_vtd_domain_page(context_entries);
return 0;
}
if ( iommu_hwdom_passthrough && is_hardware_domain(domain) )
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.