mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
AMD/IOMMU: replace a few PCI_BDF2()
struct pci_dev has the wanted value directly available; use it. Note that this fixes a - imo benign - mistake in reassign_device(): The unity map removal ought to be based on the passed in devfn (as is the case on the establishing side). This is benign because the mappings would be removed anyway a little later, when the "main" device gets processed. While there also limit the scope of two variables in that function. Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
This commit is contained in:
1 parent
7115fa562f
commit
e687e72174
3 files changed
+10
-12
No files matched your search
@@ -287,7 +287,7 @@ void amd_iommu_flush_iotlb(u8 devfn, const struct pci_dev *pdev,
|
||||
if ( !pci_ats_enabled(pdev->seg, pdev->bus, pdev->devfn) )
|
||||
return;
|
||||
|
||||
iommu = find_iommu_for_device(pdev->seg, PCI_BDF2(pdev->bus, pdev->devfn));
|
||||
iommu = find_iommu_for_device(pdev->seg, pdev->sbdf.bdf);
|
||||
|
||||
if ( !iommu )
|
||||
{
|
||||
|
||||
@@ -617,7 +617,7 @@ int cf_check amd_iommu_msi_msg_update_ire(
|
||||
unsigned int i, nr = 1;
|
||||
u32 data;
|
||||
|
||||
bdf = pdev ? PCI_BDF2(pdev->bus, pdev->devfn) : hpet_sbdf.bdf;
|
||||
bdf = pdev ? pdev->sbdf.bdf : hpet_sbdf.bdf;
|
||||
seg = pdev ? pdev->seg : hpet_sbdf.seg;
|
||||
|
||||
iommu = _find_iommu_for_device(seg, bdf);
|
||||
|
||||
@@ -455,11 +455,9 @@ static int cf_check reassign_device(
|
||||
struct pci_dev *pdev)
|
||||
{
|
||||
struct amd_iommu *iommu;
|
||||
int bdf, rc;
|
||||
const struct ivrs_mappings *ivrs_mappings = get_ivrs_mappings(pdev->seg);
|
||||
int rc;
|
||||
|
||||
bdf = PCI_BDF2(pdev->bus, pdev->devfn);
|
||||
iommu = find_iommu_for_device(pdev->seg, bdf);
|
||||
iommu = find_iommu_for_device(pdev->seg, pdev->sbdf.bdf);
|
||||
if ( !iommu )
|
||||
{
|
||||
AMD_IOMMU_WARN("failed to find IOMMU: %pp cannot be assigned to %pd\n",
|
||||
@@ -489,6 +487,9 @@ static int cf_check reassign_device(
|
||||
*/
|
||||
if ( !is_hardware_domain(source) )
|
||||
{
|
||||
const struct ivrs_mappings *ivrs_mappings = get_ivrs_mappings(pdev->seg);
|
||||
unsigned int bdf = PCI_BDF2(pdev->bus, devfn);
|
||||
|
||||
rc = amd_iommu_reserve_domain_unity_unmap(
|
||||
source,
|
||||
ivrs_mappings[get_dma_requestor_id(pdev->seg, bdf)].unity_map);
|
||||
@@ -558,13 +559,11 @@ static int cf_check amd_iommu_add_device(u8 devfn, struct pci_dev *pdev)
|
||||
if ( !pdev->domain )
|
||||
return -EINVAL;
|
||||
|
||||
bdf = PCI_BDF2(pdev->bus, pdev->devfn);
|
||||
|
||||
for_each_amd_iommu(iommu)
|
||||
if ( pdev->seg == iommu->seg && bdf == iommu->bdf )
|
||||
if ( pdev->seg == iommu->seg && pdev->sbdf.bdf == iommu->bdf )
|
||||
return is_hardware_domain(pdev->domain) ? 0 : -ENODEV;
|
||||
|
||||
iommu = find_iommu_for_device(pdev->seg, bdf);
|
||||
iommu = find_iommu_for_device(pdev->seg, pdev->sbdf.bdf);
|
||||
if ( unlikely(!iommu) )
|
||||
{
|
||||
/* Filter bridge devices. */
|
||||
@@ -648,8 +647,7 @@ static int cf_check amd_iommu_remove_device(u8 devfn, struct pci_dev *pdev)
|
||||
if ( !pdev->domain )
|
||||
return -EINVAL;
|
||||
|
||||
bdf = PCI_BDF2(pdev->bus, pdev->devfn);
|
||||
iommu = find_iommu_for_device(pdev->seg, bdf);
|
||||
iommu = find_iommu_for_device(pdev->seg, pdev->sbdf.bdf);
|
||||
if ( !iommu )
|
||||
{
|
||||
AMD_IOMMU_WARN("failed to find IOMMU: %pp cannot be removed from %pd\n",
|
||||
|
||||