Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff166cb5 authored by Suresh Siddha's avatar Suresh Siddha Committed by Ingo Molnar
Browse files

x86: x2apic, IR: remove reinit_intr_remapped_IO_APIC()



When interrupt-remapping is enabled, we are relying on
setup_IO_APIC_irqs() to configure remapped entries in the
IO-APIC, which comes little bit later after enabling
interrupt-remapping.

Meanwhile, restoration of old io-apic entries after enabling
interrupt-remapping will not make the interrupts through
io-apic functional anyway.

So remove the unnecessary reinit_intr_remapped_IO_APIC() step.

The longer story:

When interrupt-remapping is enabled, IO-APIC entries need to be
setup in the re-mappable format (pointing to
interrupt-remapping table entries setup by the OS). This
remapping configuration is happening in the same place where we
traditionally configure IO-APIC (i.e., in
setup_IO_APIC_irqs()).

So when we enable interrupt-remapping successfully, there is no
need to restore old io-apic RTE entries before we actually do a
complete configuration shortly in setup_IO_APIC_irqs(). Old
IO-APIC RTE's may be in traditional format (non re-mappable) or
in re-mappable format pointing to interrupt-remapping table
entries setup by BIOS. Restoring both of these will not make
IO-APIC functional. We have to rely on setup_IO_APIC_irqs() for
proper configuration by OS.

So I am removing this unnecessary and broken step.

[ Impact: remove unnecessary/broken IO-APIC setup step ]

Signed-off-by: default avatarSuresh Siddha <suresh.b.siddha@intel.com>
Acked-by: default avatarWeidong Han <weidong.han@intel.com>
Cc: dwmw2@infradead.org
LKML-Reference: <20090420200450.552359000@linux-os.sc.intel.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 9d6c26e7
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -166,8 +166,6 @@ extern void free_ioapic_entries(struct IO_APIC_route_entry **ioapic_entries);
extern int save_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries);
extern void mask_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries);
extern int restore_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries);
extern void reinit_intr_remapped_IO_APIC(int intr_remapping,
	struct IO_APIC_route_entry **ioapic_entries);

extern void probe_nr_irqs_gsi(void);

+0 −2
Original line number Diff line number Diff line
@@ -1412,8 +1412,6 @@ end_restore:
		 * IR enabling failed
		 */
		restore_IO_APIC_setup(ioapic_entries);
	else
		reinit_intr_remapped_IO_APIC(x2apic_preenabled, ioapic_entries);

	unmask_8259A();
	local_irq_restore(flags);
+0 −14
Original line number Diff line number Diff line
@@ -833,20 +833,6 @@ int restore_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries)
	return 0;
}

void reinit_intr_remapped_IO_APIC(int intr_remapping,
	struct IO_APIC_route_entry **ioapic_entries)

{
	/*
	 * for now plain restore of previous settings.
	 * TBD: In the case of OS enabling interrupt-remapping,
	 * IO-APIC RTE's need to be setup to point to interrupt-remapping
	 * table entries. for now, do a plain restore, and wait for
	 * the setup_IO_APIC_irqs() to do proper initialization.
	 */
	restore_IO_APIC_setup(ioapic_entries);
}

void free_ioapic_entries(struct IO_APIC_route_entry **ioapic_entries)
{
	int apic;