[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] VT-d/ATS: cleanup
# HG changeset patch # User Jan Beulich <jbeulich@xxxxxxxx> # Date 1320238288 -3600 # Node ID 6da8953b7a902f9ea186bffdc169b9e0e97c277d # Parent 068d3d55ce6e0862e83b443d4e1c83c84b26754d VT-d/ATS: cleanup - make acpi_find_matched_atsr_unit() consistent with acpi_find_matched_drhd_unit() (and constify their parameter) - make ats_device() take a struct pci_dev * instead of seg:bus:devfn and additionally the matching DRHD (as its callers already worked that out) - remove a stale prototype Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: "Kay, Allen M" <allen.m.kay@xxxxxxxxx> --- diff -r 068d3d55ce6e -r 6da8953b7a90 xen/drivers/passthrough/vtd/dmar.c --- a/xen/drivers/passthrough/vtd/dmar.c Tue Nov 01 19:03:38 2011 +0000 +++ b/xen/drivers/passthrough/vtd/dmar.c Wed Nov 02 13:51:28 2011 +0100 @@ -160,7 +160,7 @@ return 0; } -struct acpi_drhd_unit * acpi_find_matched_drhd_unit(struct pci_dev *pdev) +struct acpi_drhd_unit *acpi_find_matched_drhd_unit(const struct pci_dev *pdev) { u8 bus, devfn; struct acpi_drhd_unit *drhd; @@ -204,17 +204,17 @@ return include_all; } -struct acpi_atsr_unit * acpi_find_matched_atsr_unit(u16 seg, u8 bus, u8 devfn) +struct acpi_atsr_unit *acpi_find_matched_atsr_unit(const struct pci_dev *pdev) { struct acpi_atsr_unit *atsr; struct acpi_atsr_unit *all_ports = NULL; list_for_each_entry ( atsr, &acpi_atsr_units, list ) { - if ( atsr->segment != seg ) + if ( atsr->segment != pdev->seg ) continue; - if ( test_bit(bus, atsr->scope.buses) ) + if ( test_bit(pdev->bus, atsr->scope.buses) ) return atsr; if ( atsr->all_ports ) diff -r 068d3d55ce6e -r 6da8953b7a90 xen/drivers/passthrough/vtd/dmar.h --- a/xen/drivers/passthrough/vtd/dmar.h Tue Nov 01 19:03:38 2011 +0000 +++ b/xen/drivers/passthrough/vtd/dmar.h Wed Nov 02 13:51:28 2011 +0100 @@ -86,8 +86,8 @@ for (idx = 0; (bdf = rmrr->scope.devices[idx]) && \ idx < rmrr->scope.devices_cnt; idx++) -struct acpi_drhd_unit * acpi_find_matched_drhd_unit(struct pci_dev *pdev); -struct acpi_atsr_unit * acpi_find_matched_atsr_unit(u16 seg, u8 bus, u8 devfn); +struct acpi_drhd_unit *acpi_find_matched_drhd_unit(const struct pci_dev *); +struct acpi_atsr_unit *acpi_find_matched_atsr_unit(const struct pci_dev *); #define DMAR_TYPE 1 #define RMRR_TYPE 2 diff -r 068d3d55ce6e -r 6da8953b7a90 xen/drivers/passthrough/vtd/extern.h --- a/xen/drivers/passthrough/vtd/extern.h Tue Nov 01 19:03:38 2011 +0000 +++ b/xen/drivers/passthrough/vtd/extern.h Wed Nov 02 13:51:28 2011 +0100 @@ -61,10 +61,9 @@ struct acpi_drhd_unit * find_ats_dev_drhd(struct iommu *iommu); -int ats_device(int seg, int bus, int devfn); +int ats_device(const struct pci_dev *, const struct acpi_drhd_unit *); int enable_ats_device(int seg, int bus, int devfn); void disable_ats_device(int seg, int bus, int devfn); -int invalidate_ats_tcs(struct iommu *iommu); int dev_invalidate_iotlb(struct iommu *iommu, u16 did, u64 addr, unsigned int size_order, u64 type); @@ -76,7 +75,8 @@ return NULL; } -static inline int ats_device(int seg, int bus, int devfn) +static inline int ats_device(const struct pci_dev *pdev, + const struct acpi_drhd_unit *drhd) { return 0; } diff -r 068d3d55ce6e -r 6da8953b7a90 xen/drivers/passthrough/vtd/iommu.c --- a/xen/drivers/passthrough/vtd/iommu.c Tue Nov 01 19:03:38 2011 +0000 +++ b/xen/drivers/passthrough/vtd/iommu.c Wed Nov 02 13:51:28 2011 +0100 @@ -1410,7 +1410,7 @@ domain->domain_id, seg, bus, PCI_SLOT(devfn), PCI_FUNC(devfn)); ret = domain_context_mapping_one(domain, drhd->iommu, bus, devfn); - if ( !ret && ats_device(seg, bus, devfn) ) + if ( !ret && ats_device(pdev, drhd) > 0 ) enable_ats_device(seg, bus, devfn); break; @@ -1541,7 +1541,7 @@ domain->domain_id, seg, bus, PCI_SLOT(devfn), PCI_FUNC(devfn)); ret = domain_context_unmap_one(domain, iommu, bus, devfn); - if ( !ret && ats_device(seg, bus, devfn) ) + if ( !ret && ats_device(pdev, drhd) > 0 ) disable_ats_device(seg, bus, devfn); break; diff -r 068d3d55ce6e -r 6da8953b7a90 xen/drivers/passthrough/vtd/x86/ats.c --- a/xen/drivers/passthrough/vtd/x86/ats.c Tue Nov 01 19:03:38 2011 +0000 +++ b/xen/drivers/passthrough/vtd/x86/ats.c Wed Nov 02 13:51:28 2011 +0100 @@ -83,40 +83,32 @@ return NULL; } -int ats_device(int seg, int bus, int devfn) +int ats_device(const struct pci_dev *pdev, const struct acpi_drhd_unit *drhd) { - struct acpi_drhd_unit *drhd, *ats_drhd, *new_drhd; - struct pci_dev *pdev; - int pos = 0; + struct acpi_drhd_unit *ats_drhd; + int pos; if ( !ats_enabled || !iommu_qinval ) return 0; - pdev = pci_get_pdev(seg, bus, devfn); - if ( !pdev ) - return 0; - - drhd = acpi_find_matched_drhd_unit(pdev); - if ( !drhd ) - return 0; - if ( !ecap_queued_inval(drhd->iommu->ecap) || !ecap_dev_iotlb(drhd->iommu->ecap) ) return 0; - if ( !acpi_find_matched_atsr_unit(seg, bus, devfn) ) + if ( !acpi_find_matched_atsr_unit(pdev) ) return 0; ats_drhd = find_ats_dev_drhd(drhd->iommu); - pos = pci_find_ext_capability(seg, bus, devfn, PCI_EXT_CAP_ID_ATS); + pos = pci_find_ext_capability(pdev->seg, pdev->bus, pdev->devfn, + PCI_EXT_CAP_ID_ATS); if ( pos && (ats_drhd == NULL) ) { - new_drhd = xmalloc(struct acpi_drhd_unit); - if ( !new_drhd ) - return 0; - memcpy(new_drhd, drhd, sizeof(struct acpi_drhd_unit)); - list_add_tail(&new_drhd->list, &ats_dev_drhd_units); + ats_drhd = xmalloc(struct acpi_drhd_unit); + if ( !ats_drhd ) + return -ENOMEM; + *ats_drhd = *drhd; + list_add_tail(&ats_drhd->list, &ats_dev_drhd_units); } return pos; } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |