[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v2 08/12] VT-d: move ats_device() to the sole file it's used from
..., thus allowing it to become static, and thus reducing scope overlap between it and pci_ats_device(). There's nothing x86-specific about this function anyway. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> --- a/xen/drivers/passthrough/vtd/extern.h +++ b/xen/drivers/passthrough/vtd/extern.h @@ -65,8 +65,6 @@ struct acpi_drhd_unit *ioapic_to_drhd(un struct acpi_drhd_unit *hpet_to_drhd(unsigned int hpet_id); struct acpi_rhsa_unit *drhd_to_rhsa(const struct acpi_drhd_unit *drhd); -int ats_device(const struct pci_dev *, const struct acpi_drhd_unit *); - int dev_invalidate_iotlb(struct vtd_iommu *iommu, u16 did, u64 addr, unsigned int size_order, u64 type); --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -1455,6 +1455,38 @@ static void __hwdom_init cf_check intel_ } } +static int ats_device(const struct pci_dev *pdev, + const struct acpi_drhd_unit *drhd) +{ + unsigned int pos, expfl = 0; + const struct acpi_satc_unit *satc; + + if ( !opt_ats || !iommu_qinval ) + return 0; + + if ( !ecap_queued_inval(drhd->iommu->ecap) || + !ecap_dev_iotlb(drhd->iommu->ecap) ) + return 0; + + pos = pci_find_cap_offset(pdev->sbdf, PCI_CAP_ID_EXP); + if ( pos ) + expfl = pci_conf_read16(pdev->sbdf, pos + PCI_EXP_FLAGS); + + if ( MASK_EXTR(expfl, PCI_EXP_FLAGS_TYPE) != PCI_EXP_TYPE_RC_END && + !acpi_find_matched_atsr_unit(pdev) ) + return 0; + + satc = acpi_find_matched_satc_unit(pdev); + if ( opt_ats < 0 && (!satc || !satc->atc_required) ) + return 0; + + pos = pci_find_ext_capability(pdev->sbdf, PCI_EXT_CAP_ID_ATS); + if ( pos ) + drhd->iommu->flush_dev_iotlb = true; + + return pos; +} + /* * This function returns * - a negative errno value upon error, --- a/xen/drivers/passthrough/vtd/x86/ats.c +++ b/xen/drivers/passthrough/vtd/x86/ats.c @@ -28,37 +28,6 @@ #include "../extern.h" #include "../../ats.h" -int ats_device(const struct pci_dev *pdev, const struct acpi_drhd_unit *drhd) -{ - unsigned int pos, expfl = 0; - const struct acpi_satc_unit *satc; - - if ( !opt_ats || !iommu_qinval ) - return 0; - - if ( !ecap_queued_inval(drhd->iommu->ecap) || - !ecap_dev_iotlb(drhd->iommu->ecap) ) - return 0; - - pos = pci_find_cap_offset(pdev->sbdf, PCI_CAP_ID_EXP); - if ( pos ) - expfl = pci_conf_read16(pdev->sbdf, pos + PCI_EXP_FLAGS); - - if ( MASK_EXTR(expfl, PCI_EXP_FLAGS_TYPE) != PCI_EXP_TYPE_RC_END && - !acpi_find_matched_atsr_unit(pdev) ) - return 0; - - satc = acpi_find_matched_satc_unit(pdev); - if ( opt_ats < 0 && (!satc || !satc->atc_required) ) - return 0; - - pos = pci_find_ext_capability(pdev->sbdf, PCI_EXT_CAP_ID_ATS); - if ( pos ) - drhd->iommu->flush_dev_iotlb = true; - - return pos; -} - static bool device_in_domain(const struct vtd_iommu *iommu, const struct pci_dev *pdev, uint16_t did) {
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |