patch-2.4.23 linux-2.4.23/arch/i386/kernel/io_apic.c
Next file: linux-2.4.23/arch/i386/kernel/irq.c
Previous file: linux-2.4.23/arch/i386/kernel/i386_ksyms.c
Back to the patch index
Back to the overall index
- Lines: 57
- Date:
2003-11-28 10:26:19.000000000 -0800
- Orig file:
linux-2.4.22/arch/i386/kernel/io_apic.c
- Orig date:
2003-08-25 04:44:39.000000000 -0700
diff -urN linux-2.4.22/arch/i386/kernel/io_apic.c linux-2.4.23/arch/i386/kernel/io_apic.c
@@ -169,6 +169,14 @@
{
struct IO_APIC_route_entry entry;
unsigned long flags;
+
+ /* Check delivery_mode to be sure we're not clearing an SMI pin */
+ spin_lock_irqsave(&ioapic_lock, flags);
+ *(((int*)&entry) + 0) = io_apic_read(apic, 0x10 + 2 * pin);
+ *(((int*)&entry) + 1) = io_apic_read(apic, 0x11 + 2 * pin);
+ spin_unlock_irqrestore(&ioapic_lock, flags);
+ if (entry.delivery_mode == dest_SMI)
+ return;
/*
* Disable it in the IO-APIC irq-routing table:
@@ -1080,10 +1088,6 @@
unsigned char old_id;
unsigned long flags;
- if (acpi_ioapic)
- /* This gets done during IOAPIC enumeration for ACPI. */
- return;
-
if (clustered_apic_mode)
/* We don't have a good way to do this yet - hack */
phys_id_present_map = (u_long) 0xf;
@@ -1365,6 +1369,13 @@
static void set_ioapic_affinity (unsigned int irq, unsigned long mask)
{
unsigned long flags;
+
+ /* pick a single cpu for clustered xapics */
+ if(clustered_apic_mode == CLUSTERED_APIC_XAPIC){
+ int cpu = ffs(mask)-1;
+ mask = cpu_to_physical_apicid(cpu);
+ }
+
/*
* Only the first 8 bits are valid.
*/
@@ -1705,12 +1716,14 @@
/*
* Set up IO-APIC IRQ routing.
*/
- setup_ioapic_ids_from_mpc();
+ if (!acpi_ioapic)
+ setup_ioapic_ids_from_mpc();
sync_Arb_IDs();
setup_IO_APIC_irqs();
init_IO_APIC_traps();
check_timer();
- print_IO_APIC();
+ if (!acpi_ioapic)
+ print_IO_APIC();
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)