diff -u --exclude-from /usr/src/exclude --new-file --recursive linux-2.5.29/drivers/pnp/pnpbios_core.c linux-2.5.29-ac1/drivers/pnp/pnpbios_core.c
--- linux-2.5.29/drivers/pnp/pnpbios_core.c 2002-07-20 20:11:06.000000000 +0100
+++ linux-2.5.29-ac1/drivers/pnp/pnpbios_core.c 2002-07-28 00:35:17.000000000 +0100
@@ -124,13 +124,13 @@
".previous \n"
);
-#define Q_SET_SEL(selname, address, size) \
-set_base (gdt [(selname) >> 3], __va((u32)(address))); \
-set_limit (gdt [(selname) >> 3], size)
-
-#define Q2_SET_SEL(selname, address, size) \
-set_base (gdt [(selname) >> 3], (u32)(address)); \
-set_limit (gdt [(selname) >> 3], size)
+#define Q_SET_SEL(cpu, selname, address, size) \
+set_base(cpu_gdt_table[cpu][(selname) >> 3], __va((u32)(address))); \
+_set_limit(&cpu_gdt_table[cpu][(selname) >> 3], size)
+
+#define Q2_SET_SEL(cpu, selname, address, size) \
+set_base(cpu_gdt_table[cpu][(selname) >> 3], (u32)(address)); \
+_set_limit((char *)&cpu_gdt_table[cpu][(selname) >> 3], size)
/*
* At some point we want to use this stack frame pointer to unwind
@@ -161,10 +161,11 @@
/* On some boxes IRQ's during PnP BIOS calls are deadly. */
spin_lock_irqsave(&pnp_bios_lock, flags);
+ /* The lock prevents us bouncing CPU here */
if (ts1_size)
- Q2_SET_SEL(PNP_TS1, ts1_base, ts1_size);
+ Q2_SET_SEL(smp_processor_id(), PNP_TS1, ts1_base, ts1_size);
if (ts2_size)
- Q2_SET_SEL(PNP_TS2, ts2_base, ts2_size);
+ Q2_SET_SEL(smp_processor_id(), PNP_TS2, ts2_base, ts2_size);
__asm__ __volatile__(
"pushl %%ebp\n\t"
@@ -1265,12 +1266,16 @@
check->fields.version >> 4, check->fields.version & 15,
check->fields.pm16cseg, check->fields.pm16offset,
check->fields.pm16dseg);
- Q2_SET_SEL(PNP_CS32, &pnp_bios_callfunc, 64 * 1024);
- Q_SET_SEL(PNP_CS16, check->fields.pm16cseg, 64 * 1024);
- Q_SET_SEL(PNP_DS, check->fields.pm16dseg, 64 * 1024);
pnp_bios_callpoint.offset = check->fields.pm16offset;
pnp_bios_callpoint.segment = PNP_CS16;
pnp_bios_hdr = check;
+
+ for(i=0; i < NR_CPUS; i++)
+ {
+ Q2_SET_SEL(i, PNP_CS32, &pnp_bios_callfunc, 64 * 1024);
+ Q_SET_SEL(i, PNP_CS16, check->fields.pm16cseg, 64 * 1024);
+ Q_SET_SEL(i, PNP_DS, check->fields.pm16dseg, 64 * 1024);
+ }
break;
}
if (!pnp_bios_present())
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/