Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:GA
xen.8005
561d2046-VT-d-use-proper-error-codes-in-iommu_e...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 561d2046-VT-d-use-proper-error-codes-in-iommu_enable_x2apic_IR.patch of Package xen.8005
# Commit 6851e979874ebc05d270ea94360c49d920d3eaf4 # Date 2015-10-13 17:16:22 +0200 # Author Jan Beulich <jbeulich@suse.com> # Committer Jan Beulich <jbeulich@suse.com> VT-d: use proper error codes in iommu_enable_x2apic_IR() ... allowing to suppress a confusing message combination: When ACPI_DMAR_X2APIC_OPT_OUT is set, so far we first logged a message that IR could not be enabled (hence not using x2APIC), followed by one indicating successful initialization of IR (if no other problems prevented that). Also adjust the return type of iommu_supports_eim() and fix some broken indentation in the function. Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Yang Zhang <yang.z.zhang@intel.com> --- a/xen/arch/x86/apic.c +++ b/xen/arch/x86/apic.c @@ -964,8 +964,18 @@ void __init x2apic_bsp_setup(void) mask_8259A(); mask_IO_APIC_setup(ioapic_entries); - if ( iommu_enable_x2apic_IR() ) + switch ( iommu_enable_x2apic_IR() ) { + case 0: + break; + case -ENXIO: /* ACPI_DMAR_X2APIC_OPT_OUT set */ + if ( !x2apic_enabled ) + { + printk("Not enabling x2APIC (upon firmware request)\n"); + goto restore_out; + } + /* fall through */ + default: if ( x2apic_enabled ) panic("Interrupt remapping could not be enabled while " "x2APIC is already enabled by BIOS"); --- a/xen/drivers/passthrough/vtd/intremap.c +++ b/xen/drivers/passthrough/vtd/intremap.c @@ -144,10 +144,10 @@ static void set_hpet_source_id(unsigned set_ire_sid(ire, SVT_VERIFY_SID_SQ, SQ_13_IGNORE_3, hpetid_to_bdf(id)); } -int iommu_supports_eim(void) +bool_t iommu_supports_eim(void) { struct acpi_drhd_unit *drhd; - int apic; + unsigned int apic; if ( !iommu_qinval || !iommu_intremap || list_empty(&acpi_drhd_units) ) return 0; @@ -155,12 +155,12 @@ int iommu_supports_eim(void) /* We MUST have a DRHD unit for each IOAPIC. */ for ( apic = 0; apic < nr_ioapics; apic++ ) if ( !ioapic_to_drhd(IO_APIC_ID(apic)) ) - { + { dprintk(XENLOG_WARNING VTDPREFIX, "There is not a DRHD for IOAPIC %#x (id: %#x)!\n", apic, IO_APIC_ID(apic)); return 0; - } + } for_each_drhd_unit ( drhd ) if ( !ecap_queued_inval(drhd->iommu->ecap) || @@ -836,10 +836,10 @@ int iommu_enable_x2apic_IR(void) struct iommu *iommu; if ( !iommu_supports_eim() ) - return -1; + return -EOPNOTSUPP; if ( !platform_supports_x2apic() ) - return -1; + return -ENXIO; for_each_drhd_unit ( drhd ) { @@ -864,7 +864,7 @@ int iommu_enable_x2apic_IR(void) { dprintk(XENLOG_INFO VTDPREFIX, "Failed to enable Queued Invalidation!\n"); - return -1; + return -EIO; } } @@ -876,7 +876,7 @@ int iommu_enable_x2apic_IR(void) { dprintk(XENLOG_INFO VTDPREFIX, "Failed to enable Interrupt Remapping!\n"); - return -1; + return -EIO; } } --- a/xen/include/xen/iommu.h +++ b/xen/include/xen/iommu.h @@ -47,7 +47,7 @@ extern bool_t amd_iommu_perdev_intremap; #define PAGE_ALIGN_4K(addr) (((addr) + PAGE_SIZE_4K - 1) & PAGE_MASK_4K) int iommu_setup(void); -int iommu_supports_eim(void); +bool_t iommu_supports_eim(void); int iommu_enable_x2apic_IR(void); void iommu_disable_x2apic_IR(void);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor