[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] VT-d: section placement and type adjustments
commit 245a0cc2ba7559942424b8b4fcc16bfbcf83a964 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Tue Oct 13 17:17:16 2015 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Tue Oct 13 17:17:16 2015 +0200 VT-d: section placement and type adjustments With x2APIC requiring iommu_supports_eim() to return true, we can adjust a few conditonals such that both it and platform_supports_x2apic() can be marked __init. For the latter as well as for platform_supports_intremap() also change the return types to bool_t. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Acked-by: Yang Zhang <yang.z.zhang@xxxxxxxxx> --- xen/drivers/passthrough/vtd/dmar.c | 9 +++++---- xen/drivers/passthrough/vtd/extern.h | 4 ++-- xen/drivers/passthrough/vtd/intremap.c | 18 ++++++++++++------ 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/xen/drivers/passthrough/vtd/dmar.c b/xen/drivers/passthrough/vtd/dmar.c index 34ec4c7..7cad593 100644 --- a/xen/drivers/passthrough/vtd/dmar.c +++ b/xen/drivers/passthrough/vtd/dmar.c @@ -901,16 +901,17 @@ void acpi_dmar_zap(void) write_atomic((uint32_t*)&dmar_table->signature[0], sig); } -int platform_supports_intremap(void) +bool_t platform_supports_intremap(void) { - unsigned int mask = ACPI_DMAR_INTR_REMAP; + const unsigned int mask = ACPI_DMAR_INTR_REMAP; return (dmar_flags & mask) == ACPI_DMAR_INTR_REMAP; } -int platform_supports_x2apic(void) +bool_t __init platform_supports_x2apic(void) { - unsigned int mask = ACPI_DMAR_INTR_REMAP | ACPI_DMAR_X2APIC_OPT_OUT; + const unsigned int mask = ACPI_DMAR_INTR_REMAP | ACPI_DMAR_X2APIC_OPT_OUT; + return cpu_has_x2apic && ((dmar_flags & mask) == ACPI_DMAR_INTR_REMAP); } diff --git a/xen/drivers/passthrough/vtd/extern.h b/xen/drivers/passthrough/vtd/extern.h index fbfd9a6..cbe0286 100644 --- a/xen/drivers/passthrough/vtd/extern.h +++ b/xen/drivers/passthrough/vtd/extern.h @@ -93,8 +93,8 @@ void vtd_ops_preamble_quirk(struct iommu* iommu); void vtd_ops_postamble_quirk(struct iommu* iommu); void me_wifi_quirk(struct domain *domain, u8 bus, u8 devfn, int map); void pci_vtd_quirk(const struct pci_dev *); -int platform_supports_intremap(void); -int platform_supports_x2apic(void); +bool_t platform_supports_intremap(void); +bool_t platform_supports_x2apic(void); void vtd_set_hwdom_mapping(struct domain *d); diff --git a/xen/drivers/passthrough/vtd/intremap.c b/xen/drivers/passthrough/vtd/intremap.c index f9ba0ce..776ec54 100644 --- a/xen/drivers/passthrough/vtd/intremap.c +++ b/xen/drivers/passthrough/vtd/intremap.c @@ -143,7 +143,7 @@ static void set_hpet_source_id(unsigned int id, struct iremap_entry *ire) set_ire_sid(ire, SVT_VERIFY_SID_SQ, SQ_13_IGNORE_3, hpetid_to_bdf(id)); } -bool_t iommu_supports_eim(void) +bool_t __init iommu_supports_eim(void) { struct acpi_drhd_unit *drhd; unsigned int apic; @@ -832,11 +832,16 @@ int iommu_enable_x2apic_IR(void) struct acpi_drhd_unit *drhd; struct iommu *iommu; - if ( !iommu_supports_eim() ) - return -EOPNOTSUPP; + if ( system_state < SYS_STATE_active ) + { + if ( !iommu_supports_eim() ) + return -EOPNOTSUPP; - if ( !platform_supports_x2apic() ) - return -ENXIO; + if ( !platform_supports_x2apic() ) + return -ENXIO; + } + else if ( !x2apic_enabled ) + return -EOPNOTSUPP; for_each_drhd_unit ( drhd ) { @@ -888,7 +893,8 @@ void iommu_disable_x2apic_IR(void) { struct acpi_drhd_unit *drhd; - if ( !iommu_supports_eim() ) + /* x2apic_enabled implies iommu_supports_eim(). */ + if ( !x2apic_enabled ) return; for_each_drhd_unit ( drhd ) -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |