85 lines
3.1 KiB
Diff
85 lines
3.1 KiB
Diff
References: bnc#787169
|
|
|
|
# HG changeset patch
|
|
# User Jan Beulich <jbeulich@suse.com>
|
|
# Date 1357559599 -3600
|
|
# Node ID 2a2c63f641ee3bda4ad552eb0b3ea479d37590cc
|
|
# Parent afb598bd0f5436bea15b7ef842e8ad5c6adefa1a
|
|
AMD IOMMU: adjust flush function parameters
|
|
|
|
... to use a (struct pci_dev *, devfn) pair.
|
|
|
|
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
|
Acked-by: "Zhang, Xiantao" <xiantao.zhang@intel.com>
|
|
|
|
--- a/xen/drivers/passthrough/amd/iommu_cmd.c
|
|
+++ b/xen/drivers/passthrough/amd/iommu_cmd.c
|
|
@@ -287,12 +287,12 @@ void invalidate_iommu_all(struct amd_iom
|
|
send_iommu_command(iommu, cmd);
|
|
}
|
|
|
|
-void amd_iommu_flush_iotlb(struct pci_dev *pdev,
|
|
+void amd_iommu_flush_iotlb(u8 devfn, const struct pci_dev *pdev,
|
|
uint64_t gaddr, unsigned int order)
|
|
{
|
|
unsigned long flags;
|
|
struct amd_iommu *iommu;
|
|
- unsigned int bdf, req_id, queueid, maxpend;
|
|
+ unsigned int req_id, queueid, maxpend;
|
|
struct pci_ats_dev *ats_pdev;
|
|
|
|
if ( !ats_enabled )
|
|
@@ -305,8 +305,8 @@ void amd_iommu_flush_iotlb(struct pci_de
|
|
if ( !pci_ats_enabled(ats_pdev->seg, ats_pdev->bus, ats_pdev->devfn) )
|
|
return;
|
|
|
|
- bdf = PCI_BDF2(ats_pdev->bus, ats_pdev->devfn);
|
|
- iommu = find_iommu_for_device(ats_pdev->seg, bdf);
|
|
+ iommu = find_iommu_for_device(ats_pdev->seg,
|
|
+ PCI_BDF2(ats_pdev->bus, ats_pdev->devfn));
|
|
|
|
if ( !iommu )
|
|
{
|
|
@@ -319,7 +319,7 @@ void amd_iommu_flush_iotlb(struct pci_de
|
|
if ( !iommu_has_cap(iommu, PCI_CAP_IOTLB_SHIFT) )
|
|
return;
|
|
|
|
- req_id = get_dma_requestor_id(iommu->seg, bdf);
|
|
+ req_id = get_dma_requestor_id(iommu->seg, PCI_BDF2(ats_pdev->bus, devfn));
|
|
queueid = req_id;
|
|
maxpend = ats_pdev->ats_queue_depth & 0xff;
|
|
|
|
@@ -339,7 +339,7 @@ static void amd_iommu_flush_all_iotlbs(s
|
|
return;
|
|
|
|
for_each_pdev( d, pdev )
|
|
- amd_iommu_flush_iotlb(pdev, gaddr, order);
|
|
+ amd_iommu_flush_iotlb(pdev->devfn, pdev, gaddr, order);
|
|
}
|
|
|
|
/* Flush iommu cache after p2m changes. */
|
|
--- a/xen/drivers/passthrough/amd/pci_amd_iommu.c
|
|
+++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c
|
|
@@ -138,7 +138,7 @@ static void amd_iommu_setup_domain_devic
|
|
if ( devfn == pdev->devfn )
|
|
enable_ats_device(iommu->seg, bus, devfn);
|
|
|
|
- amd_iommu_flush_iotlb(pdev, INV_IOMMU_ALL_PAGES_ADDRESS, 0);
|
|
+ amd_iommu_flush_iotlb(devfn, pdev, INV_IOMMU_ALL_PAGES_ADDRESS, 0);
|
|
}
|
|
}
|
|
|
|
--- a/xen/include/asm-x86/hvm/svm/amd-iommu-proto.h
|
|
+++ b/xen/include/asm-x86/hvm/svm/amd-iommu-proto.h
|
|
@@ -78,8 +78,8 @@ void iommu_dte_set_guest_cr3(u32 *dte, u
|
|
void amd_iommu_flush_all_pages(struct domain *d);
|
|
void amd_iommu_flush_pages(struct domain *d, unsigned long gfn,
|
|
unsigned int order);
|
|
-void amd_iommu_flush_iotlb(struct pci_dev *pdev, uint64_t gaddr,
|
|
- unsigned int order);
|
|
+void amd_iommu_flush_iotlb(u8 devfn, const struct pci_dev *pdev,
|
|
+ uint64_t gaddr, unsigned int order);
|
|
void amd_iommu_flush_device(struct amd_iommu *iommu, uint16_t bdf);
|
|
void amd_iommu_flush_intremap(struct amd_iommu *iommu, uint16_t bdf);
|
|
void amd_iommu_flush_all_caches(struct amd_iommu *iommu);
|