Commit a2249cba authored by Akinobu Mita's avatar Akinobu Mita Committed by Ingo Molnar

x86: use ioapic_read_entry() and ioapic_write_entry()

Remove duplicate code by using ioapic_read_entry() and ioapic_write_entry()
in io_apic_{32,64}.c
Signed-off-by: default avatarAkinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 9d25cb08
...@@ -1228,7 +1228,6 @@ static void __init setup_IO_APIC_irqs(void) ...@@ -1228,7 +1228,6 @@ static void __init setup_IO_APIC_irqs(void)
{ {
struct IO_APIC_route_entry entry; struct IO_APIC_route_entry entry;
int apic, pin, idx, irq, first_notcon = 1, vector; int apic, pin, idx, irq, first_notcon = 1, vector;
unsigned long flags;
apic_printk(APIC_VERBOSE, KERN_DEBUG "init IO_APIC IRQs\n"); apic_printk(APIC_VERBOSE, KERN_DEBUG "init IO_APIC IRQs\n");
...@@ -1294,9 +1293,7 @@ static void __init setup_IO_APIC_irqs(void) ...@@ -1294,9 +1293,7 @@ static void __init setup_IO_APIC_irqs(void)
if (!apic && (irq < 16)) if (!apic && (irq < 16))
disable_8259A_irq(irq); disable_8259A_irq(irq);
} }
spin_lock_irqsave(&ioapic_lock, flags); ioapic_write_entry(apic, pin, entry);
__ioapic_write_entry(apic, pin, entry);
spin_unlock_irqrestore(&ioapic_lock, flags);
} }
} }
...@@ -2760,7 +2757,6 @@ int __init io_apic_get_redir_entries (int ioapic) ...@@ -2760,7 +2757,6 @@ int __init io_apic_get_redir_entries (int ioapic)
int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int active_high_low) int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int active_high_low)
{ {
struct IO_APIC_route_entry entry; struct IO_APIC_route_entry entry;
unsigned long flags;
if (!IO_APIC_IRQ(irq)) { if (!IO_APIC_IRQ(irq)) {
printk(KERN_ERR "IOAPIC[%d]: Invalid reference to IRQ 0\n", printk(KERN_ERR "IOAPIC[%d]: Invalid reference to IRQ 0\n",
...@@ -2801,9 +2797,7 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int a ...@@ -2801,9 +2797,7 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int a
if (!ioapic && (irq < 16)) if (!ioapic && (irq < 16))
disable_8259A_irq(irq); disable_8259A_irq(irq);
spin_lock_irqsave(&ioapic_lock, flags); ioapic_write_entry(ioapic, pin, entry);
__ioapic_write_entry(ioapic, pin, entry);
spin_unlock_irqrestore(&ioapic_lock, flags);
return 0; return 0;
} }
......
...@@ -917,9 +917,8 @@ static void __init setup_IO_APIC_irqs(void) ...@@ -917,9 +917,8 @@ static void __init setup_IO_APIC_irqs(void)
static void __init setup_ExtINT_IRQ0_pin(unsigned int apic, unsigned int pin, int vector) static void __init setup_ExtINT_IRQ0_pin(unsigned int apic, unsigned int pin, int vector)
{ {
struct IO_APIC_route_entry entry; struct IO_APIC_route_entry entry;
unsigned long flags;
memset(&entry,0,sizeof(entry)); memset(&entry, 0, sizeof(entry));
disable_8259A_irq(0); disable_8259A_irq(0);
...@@ -947,10 +946,7 @@ static void __init setup_ExtINT_IRQ0_pin(unsigned int apic, unsigned int pin, in ...@@ -947,10 +946,7 @@ static void __init setup_ExtINT_IRQ0_pin(unsigned int apic, unsigned int pin, in
/* /*
* Add it to the IO-APIC irq-routing table: * Add it to the IO-APIC irq-routing table:
*/ */
spin_lock_irqsave(&ioapic_lock, flags); ioapic_write_entry(apic, pin, entry);
io_apic_write(apic, 0x11+2*pin, *(((int *)&entry)+1));
io_apic_write(apic, 0x10+2*pin, *(((int *)&entry)+0));
spin_unlock_irqrestore(&ioapic_lock, flags);
enable_8259A_irq(0); enable_8259A_irq(0);
} }
...@@ -1611,17 +1607,14 @@ static inline void unlock_ExtINT_logic(void) ...@@ -1611,17 +1607,14 @@ static inline void unlock_ExtINT_logic(void)
int apic, pin, i; int apic, pin, i;
struct IO_APIC_route_entry entry0, entry1; struct IO_APIC_route_entry entry0, entry1;
unsigned char save_control, save_freq_select; unsigned char save_control, save_freq_select;
unsigned long flags;
pin = find_isa_irq_pin(8, mp_INT); pin = find_isa_irq_pin(8, mp_INT);
apic = find_isa_irq_apic(8, mp_INT); apic = find_isa_irq_apic(8, mp_INT);
if (pin == -1) if (pin == -1)
return; return;
spin_lock_irqsave(&ioapic_lock, flags); entry0 = ioapic_read_entry(apic, pin);
*(((int *)&entry0) + 1) = io_apic_read(apic, 0x11 + 2 * pin);
*(((int *)&entry0) + 0) = io_apic_read(apic, 0x10 + 2 * pin);
spin_unlock_irqrestore(&ioapic_lock, flags);
clear_IO_APIC_pin(apic, pin); clear_IO_APIC_pin(apic, pin);
memset(&entry1, 0, sizeof(entry1)); memset(&entry1, 0, sizeof(entry1));
...@@ -1634,10 +1627,7 @@ static inline void unlock_ExtINT_logic(void) ...@@ -1634,10 +1627,7 @@ static inline void unlock_ExtINT_logic(void)
entry1.trigger = 0; entry1.trigger = 0;
entry1.vector = 0; entry1.vector = 0;
spin_lock_irqsave(&ioapic_lock, flags); ioapic_write_entry(apic, pin, entry1);
io_apic_write(apic, 0x11 + 2 * pin, *(((int *)&entry1) + 1));
io_apic_write(apic, 0x10 + 2 * pin, *(((int *)&entry1) + 0));
spin_unlock_irqrestore(&ioapic_lock, flags);
save_control = CMOS_READ(RTC_CONTROL); save_control = CMOS_READ(RTC_CONTROL);
save_freq_select = CMOS_READ(RTC_FREQ_SELECT); save_freq_select = CMOS_READ(RTC_FREQ_SELECT);
...@@ -1656,10 +1646,7 @@ static inline void unlock_ExtINT_logic(void) ...@@ -1656,10 +1646,7 @@ static inline void unlock_ExtINT_logic(void)
CMOS_WRITE(save_freq_select, RTC_FREQ_SELECT); CMOS_WRITE(save_freq_select, RTC_FREQ_SELECT);
clear_IO_APIC_pin(apic, pin); clear_IO_APIC_pin(apic, pin);
spin_lock_irqsave(&ioapic_lock, flags); ioapic_write_entry(apic, pin, entry0);
io_apic_write(apic, 0x11 + 2 * pin, *(((int *)&entry0) + 1));
io_apic_write(apic, 0x10 + 2 * pin, *(((int *)&entry0) + 0));
spin_unlock_irqrestore(&ioapic_lock, flags);
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment