|
@@ -2887,37 +2887,11 @@ static int __init io_apic_bug_finalize(void)
|
|
|
|
|
|
late_initcall(io_apic_bug_finalize);
|
|
|
|
|
|
-static void suspend_ioapic(int ioapic_id)
|
|
|
+static void resume_ioapic_id(int ioapic_id)
|
|
|
{
|
|
|
- struct IO_APIC_route_entry *saved_data = ioapic_saved_data[ioapic_id];
|
|
|
- int i;
|
|
|
-
|
|
|
- if (!saved_data)
|
|
|
- return;
|
|
|
-
|
|
|
- for (i = 0; i < nr_ioapic_registers[ioapic_id]; i++)
|
|
|
- saved_data[i] = ioapic_read_entry(ioapic_id, i);
|
|
|
-}
|
|
|
-
|
|
|
-static int ioapic_suspend(void)
|
|
|
-{
|
|
|
- int ioapic_id;
|
|
|
-
|
|
|
- for (ioapic_id = 0; ioapic_id < nr_ioapics; ioapic_id++)
|
|
|
- suspend_ioapic(ioapic_id);
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-static void resume_ioapic(int ioapic_id)
|
|
|
-{
|
|
|
- struct IO_APIC_route_entry *saved_data = ioapic_saved_data[ioapic_id];
|
|
|
unsigned long flags;
|
|
|
union IO_APIC_reg_00 reg_00;
|
|
|
- int i;
|
|
|
|
|
|
- if (!saved_data)
|
|
|
- return;
|
|
|
|
|
|
raw_spin_lock_irqsave(&ioapic_lock, flags);
|
|
|
reg_00.raw = io_apic_read(ioapic_id, 0);
|
|
@@ -2926,8 +2900,6 @@ static void resume_ioapic(int ioapic_id)
|
|
|
io_apic_write(ioapic_id, 0, reg_00.raw);
|
|
|
}
|
|
|
raw_spin_unlock_irqrestore(&ioapic_lock, flags);
|
|
|
- for (i = 0; i < nr_ioapic_registers[ioapic_id]; i++)
|
|
|
- ioapic_write_entry(ioapic_id, i, saved_data[i]);
|
|
|
}
|
|
|
|
|
|
static void ioapic_resume(void)
|
|
@@ -2935,11 +2907,13 @@ static void ioapic_resume(void)
|
|
|
int ioapic_id;
|
|
|
|
|
|
for (ioapic_id = nr_ioapics - 1; ioapic_id >= 0; ioapic_id--)
|
|
|
- resume_ioapic(ioapic_id);
|
|
|
+ resume_ioapic_id(ioapic_id);
|
|
|
+
|
|
|
+ restore_ioapic_entries();
|
|
|
}
|
|
|
|
|
|
static struct syscore_ops ioapic_syscore_ops = {
|
|
|
- .suspend = ioapic_suspend,
|
|
|
+ .suspend = save_ioapic_entries,
|
|
|
.resume = ioapic_resume,
|
|
|
};
|
|
|
|