[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] x86, ioapic: Fix S3 suspend error.
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1235917028 0 # Node ID 9cad48ba52b0dd83dfeae014aaac7a16af0585dc # Parent f8187a343ad2bdbfe3166d7ee7e3d55a9f157fdc x86, ioapic: Fix S3 suspend error. Invoke ioapic_pm_state_alloc() earlier, thus avoiding check_lock() BUG_ON() in spin_lock(). Signed-off-by: Guanqun Lu <guanqun.lu@xxxxxxxxx> --- xen/arch/x86/io_apic.c | 71 ++++++++++++++---------------------------- xen/include/asm-x86/io_apic.h | 8 ++-- 2 files changed, 29 insertions(+), 50 deletions(-) diff -r f8187a343ad2 -r 9cad48ba52b0 xen/arch/x86/io_apic.c --- a/xen/arch/x86/io_apic.c Fri Feb 20 17:02:36 2009 +0000 +++ b/xen/arch/x86/io_apic.c Sun Mar 01 14:17:08 2009 +0000 @@ -1779,6 +1779,20 @@ static inline void check_timer(void) */ #define PIC_IRQS (1 << PIC_CASCADE_IR) +static struct IO_APIC_route_entry *ioapic_pm_state; + +void ioapic_pm_state_alloc(void) +{ + int i, nr_entry = 0; + + for (i = 0; i < nr_ioapics; i++) + nr_entry += nr_ioapic_registers[i]; + + ioapic_pm_state = _xmalloc(sizeof(struct IO_APIC_route_entry)*nr_entry, + sizeof(struct IO_APIC_route_entry)); + BUG_ON(ioapic_pm_state == NULL); +} + void __init setup_IO_APIC(void) { enable_IO_APIC(); @@ -1801,40 +1815,16 @@ void __init setup_IO_APIC(void) init_IO_APIC_traps(); check_timer(); print_IO_APIC(); + ioapic_pm_state_alloc(); register_keyhandler('z', print_IO_APIC_keyhandler, "print ioapic info"); } -struct IO_APIC_route_entry *ioapic_pm_state=NULL; - -void ioapic_pm_state_alloc(void) -{ - int i, nr_entry = 0; - - if (ioapic_pm_state != NULL) - return; - - for (i = 0; i < nr_ioapics; i++) - nr_entry += nr_ioapic_registers[i]; - - ioapic_pm_state = _xmalloc(sizeof(struct IO_APIC_route_entry)*nr_entry, - sizeof(struct IO_APIC_route_entry)); -} - -int ioapic_suspend(void) -{ - struct IO_APIC_route_entry *entry; +void ioapic_suspend(void) +{ + struct IO_APIC_route_entry *entry = ioapic_pm_state; unsigned long flags; - int apic,i; - - ioapic_pm_state_alloc(); - - if (ioapic_pm_state == NULL) { - printk("Cannot suspend ioapic due to lack of memory\n"); - return 1; - } - - entry = ioapic_pm_state; + int apic, i; spin_lock_irqsave(&ioapic_lock, flags); for (apic = 0; apic < nr_ioapics; apic++) { @@ -1844,23 +1834,14 @@ int ioapic_suspend(void) } } spin_unlock_irqrestore(&ioapic_lock, flags); - - return 0; -} - -int ioapic_resume(void) -{ - struct IO_APIC_route_entry *entry; +} + +void ioapic_resume(void) +{ + struct IO_APIC_route_entry *entry = ioapic_pm_state; unsigned long flags; union IO_APIC_reg_00 reg_00; - int i,apic; - - if (ioapic_pm_state == NULL){ - printk("Cannot resume ioapic due to lack of memory\n"); - return 1; - } - - entry = ioapic_pm_state; + int i, apic; spin_lock_irqsave(&ioapic_lock, flags); for (apic = 0; apic < nr_ioapics; apic++){ @@ -1875,8 +1856,6 @@ int ioapic_resume(void) } } spin_unlock_irqrestore(&ioapic_lock, flags); - - return 0; } /* -------------------------------------------------------------------------- diff -r f8187a343ad2 -r 9cad48ba52b0 xen/include/asm-x86/io_apic.h --- a/xen/include/asm-x86/io_apic.h Fri Feb 20 17:02:36 2009 +0000 +++ b/xen/include/asm-x86/io_apic.h Sun Mar 01 14:17:08 2009 +0000 @@ -182,13 +182,13 @@ extern int timer_uses_ioapic_pin_0; #endif /*CONFIG_ACPI_BOOT*/ extern int (*ioapic_renumber_irq)(int ioapic, int irq); -extern int ioapic_suspend(void); -extern int ioapic_resume(void); +extern void ioapic_suspend(void); +extern void ioapic_resume(void); #else /* !CONFIG_X86_IO_APIC */ #define io_apic_assign_pci_irqs 0 -static inline int ioapic_suspend(void) {return 0}; -static inline int ioapic_resume(void) {return 0}; +static inline void ioapic_suspend(void) {} +static inline void ioapic_resume(void) {} #endif extern int assign_irq_vector(int irq); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |