x86, ioapic: Consolidate ioapic_saved_data[] into 'struct ioapic'
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Cc: daniel.blueman@gmail.com Link: http://lkml.kernel.org/r/20110518233157.830697056@sbsiddha-MOBL3.sc.intel.com Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
b69c6c3bec
commit
57a6f74023
1 changed files with 13 additions and 14 deletions
|
@ -81,6 +81,10 @@ static struct ioapic {
|
||||||
* # of IRQ routing registers
|
* # of IRQ routing registers
|
||||||
*/
|
*/
|
||||||
int nr_registers;
|
int nr_registers;
|
||||||
|
/*
|
||||||
|
* Saved state during suspend/resume, or while enabling intr-remap.
|
||||||
|
*/
|
||||||
|
struct IO_APIC_route_entry *saved_registers;
|
||||||
} ioapics[MAX_IO_APICS];
|
} ioapics[MAX_IO_APICS];
|
||||||
|
|
||||||
/* I/O APIC entries */
|
/* I/O APIC entries */
|
||||||
|
@ -102,11 +106,6 @@ int mp_irq_entries;
|
||||||
/* GSI interrupts */
|
/* GSI interrupts */
|
||||||
static int nr_irqs_gsi = NR_IRQS_LEGACY;
|
static int nr_irqs_gsi = NR_IRQS_LEGACY;
|
||||||
|
|
||||||
/*
|
|
||||||
* Saved I/O APIC state during suspend/resume, or while enabling intr-remap.
|
|
||||||
*/
|
|
||||||
static struct IO_APIC_route_entry *ioapic_saved_data[MAX_IO_APICS];
|
|
||||||
|
|
||||||
#if defined (CONFIG_MCA) || defined (CONFIG_EISA)
|
#if defined (CONFIG_MCA) || defined (CONFIG_EISA)
|
||||||
int mp_bus_id_to_type[MAX_MP_BUSSES];
|
int mp_bus_id_to_type[MAX_MP_BUSSES];
|
||||||
#endif
|
#endif
|
||||||
|
@ -187,10 +186,10 @@ int __init arch_early_irq_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < nr_ioapics; i++) {
|
for (i = 0; i < nr_ioapics; i++) {
|
||||||
ioapic_saved_data[i] =
|
ioapics[i].saved_registers =
|
||||||
kzalloc(sizeof(struct IO_APIC_route_entry) *
|
kzalloc(sizeof(struct IO_APIC_route_entry) *
|
||||||
ioapics[i].nr_registers, GFP_KERNEL);
|
ioapics[i].nr_registers, GFP_KERNEL);
|
||||||
if (!ioapic_saved_data[i])
|
if (!ioapics[i].saved_registers)
|
||||||
pr_err("IOAPIC %d: suspend/resume impossible!\n", i);
|
pr_err("IOAPIC %d: suspend/resume impossible!\n", i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -639,13 +638,13 @@ int save_ioapic_entries(void)
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
for (apic = 0; apic < nr_ioapics; apic++) {
|
for (apic = 0; apic < nr_ioapics; apic++) {
|
||||||
if (!ioapic_saved_data[apic]) {
|
if (!ioapics[apic].saved_registers) {
|
||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (pin = 0; pin < ioapics[apic].nr_registers; pin++)
|
for (pin = 0; pin < ioapics[apic].nr_registers; pin++)
|
||||||
ioapic_saved_data[apic][pin] =
|
ioapics[apic].saved_registers[pin] =
|
||||||
ioapic_read_entry(apic, pin);
|
ioapic_read_entry(apic, pin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -660,13 +659,13 @@ void mask_ioapic_entries(void)
|
||||||
int apic, pin;
|
int apic, pin;
|
||||||
|
|
||||||
for (apic = 0; apic < nr_ioapics; apic++) {
|
for (apic = 0; apic < nr_ioapics; apic++) {
|
||||||
if (!ioapic_saved_data[apic])
|
if (ioapics[apic].saved_registers)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for (pin = 0; pin < ioapics[apic].nr_registers; pin++) {
|
for (pin = 0; pin < ioapics[apic].nr_registers; pin++) {
|
||||||
struct IO_APIC_route_entry entry;
|
struct IO_APIC_route_entry entry;
|
||||||
|
|
||||||
entry = ioapic_saved_data[apic][pin];
|
entry = ioapics[apic].saved_registers[pin];
|
||||||
if (!entry.mask) {
|
if (!entry.mask) {
|
||||||
entry.mask = 1;
|
entry.mask = 1;
|
||||||
ioapic_write_entry(apic, pin, entry);
|
ioapic_write_entry(apic, pin, entry);
|
||||||
|
@ -676,19 +675,19 @@ void mask_ioapic_entries(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Restore IO APIC entries which was saved in ioapic_saved_data
|
* Restore IO APIC entries which was saved in the ioapic structure.
|
||||||
*/
|
*/
|
||||||
int restore_ioapic_entries(void)
|
int restore_ioapic_entries(void)
|
||||||
{
|
{
|
||||||
int apic, pin;
|
int apic, pin;
|
||||||
|
|
||||||
for (apic = 0; apic < nr_ioapics; apic++) {
|
for (apic = 0; apic < nr_ioapics; apic++) {
|
||||||
if (!ioapic_saved_data[apic])
|
if (ioapics[apic].saved_registers)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for (pin = 0; pin < ioapics[apic].nr_registers; pin++)
|
for (pin = 0; pin < ioapics[apic].nr_registers; pin++)
|
||||||
ioapic_write_entry(apic, pin,
|
ioapic_write_entry(apic, pin,
|
||||||
ioapic_saved_data[apic][pin]);
|
ioapics[apic].saved_registers[pin]);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue