Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:lafenghu
xen
23771-x86-ioapic-clear-pin.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 23771-x86-ioapic-clear-pin.patch of Package xen
References: bnc#701686 # HG changeset patch # User Jan Beulich <jbeulich@novell.com> # Date 1313503555 -3600 # Node ID fc2be6cb89ad49efd90fe1b650f7efaab72f61b2 # Parent 5c1ebc117f9901bc155d2b92ae902a4144767dfb x86: simplify (and fix) clear_IO_APIC{,_pin}() These are used during bootup and (emergency) shutdown only, and their only purpose is to get the actual IO-APIC's RTE(s) cleared. Consequently, only the "raw" accessors should be used (and the ones going through interrupt remapping code can be skipped), with the exception of determining the delivery mode: This one must always go through the interrupt remapping path, as in the VT-d case the actual IO-APIC's RTE will have the delivery mode always set to zero (which before possibly could have resulted in such an entry getting cleared in the "raw" pass, though I haven't observed this case in practice). Signed-off-by: Jan Beulich <jbeulich@novell.com> Index: xen-4.1.2-testing/xen/arch/x86/io_apic.c =================================================================== --- xen-4.1.2-testing.orig/xen/arch/x86/io_apic.c +++ xen-4.1.2-testing/xen/arch/x86/io_apic.c @@ -471,14 +471,12 @@ static void eoi_IO_APIC_irq(unsigned int spin_unlock_irqrestore(&ioapic_lock, flags); } -#define clear_IO_APIC_pin(a,p) __clear_IO_APIC_pin(a,p,0) -#define clear_IO_APIC_pin_raw(a,p) __clear_IO_APIC_pin(a,p,1) -static void __clear_IO_APIC_pin(unsigned int apic, unsigned int pin, int raw) +static void clear_IO_APIC_pin(unsigned int apic, unsigned int pin) { struct IO_APIC_route_entry entry; /* Check delivery_mode to be sure we're not clearing an SMI pin */ - entry = ioapic_read_entry(apic, pin, raw); + entry = __ioapic_read_entry(apic, pin, FALSE); if (entry.delivery_mode == dest_SMI) return; @@ -487,7 +485,7 @@ static void __clear_IO_APIC_pin(unsigned */ memset(&entry, 0, sizeof(entry)); entry.mask = 1; - ioapic_write_entry(apic, pin, raw, entry); + __ioapic_write_entry(apic, pin, TRUE, entry); } static void clear_IO_APIC (void) @@ -495,10 +493,8 @@ static void clear_IO_APIC (void) int apic, pin; for (apic = 0; apic < nr_ioapics; apic++) { - for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) { + for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) clear_IO_APIC_pin(apic, pin); - clear_IO_APIC_pin_raw(apic, pin); - } } }
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