[SMP patch] (ALDER boot-hang fixed), io-apic-2.1.98-D

MOLNAR Ingo (mingo@chiara.csoma.elte.hu)
Mon, 27 Apr 1998 02:09:03 +0200 (CEST)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

---1247997369-998972824-893635743=:17280
Content-Type: TEXT/PLAIN; charset=US-ASCII

the attached patch fixes the rather nasty ALDER hang which has haunted us
since 2.1.93. It finally turned out to be a bug in the APIC_BASE stuff
(me...). I'm glad this is fixed, many thanks to Steve Hsieh for the hard
debugging/reporting work. (to those who have reported it too, is it really
gone with this patch?)

anyone around with other boot problems? (the current IOAPIC code is
vanilla 2.1.98 + io-apic-patch-2.1.97-A + io-apic-patch-2.1.98-B +
io-apic-patch-2.1.98-D.)

-- mingo

--- linux/arch/i386/mm/init.c.orig2 Sat May 2 13:54:57 1998
+++ linux/arch/i386/mm/init.c Sat May 2 13:58:42 1998
@@ -257,6 +257,7 @@
}
#ifdef __SMP__
{
+ extern unsigned long mp_lapic_addr;
pte_t pte;
unsigned long apic_area = (unsigned long)APIC_BASE;

@@ -267,10 +268,13 @@

if (smp_found_config) {
/*
- * Map the local APIC to FEE00000.
+ * Map the local APIC to FEE00000. (it's only the default
+ * value, thanks to Steve Hsieh for finding this out. We
+ * now save the real local-APIC physical address in smp_scan(),
+ * and use it here)
*/
pg_table = pte_offset((pmd_t *)pg_dir, apic_area);
- pte = mk_pte(__va(apic_area), PAGE_KERNEL);
+ pte = mk_pte(__va(mp_lapic_addr), PAGE_KERNEL);
set_pte(pg_table, pte);

/*
--- linux/arch/i386/kernel/smp.c.orig2 Sat May 2 13:51:54 1998
+++ linux/arch/i386/kernel/smp.c Sat May 2 13:54:07 1998
@@ -150,6 +150,7 @@
extern int mpc_default_type;
int mp_bus_id_to_pci_bus [MAX_MP_BUSSES] = { -1, };
int mp_current_pci_id = 0;
+unsigned long mp_lapic_addr = 0;

/* #define SMP_DEBUG */

@@ -270,9 +271,8 @@

printk("APIC at: 0x%lX\n",mpc->mpc_lapic);

- /* check the local APIC address */
- if ((char *)phys_to_virt((unsigned long)mpc->mpc_lapic) != APIC_BASE)
- panic("unexpected APIC address");
+ /* save the local APIC address, it might be non-default */
+ mp_lapic_addr = mpc->mpc_lapic;

/*
* Now process the configuration blocks.
@@ -453,7 +453,7 @@
*/

cfg=pg0[0];
- pg0[0] = ((unsigned long)APIC_BASE | 7);
+ pg0[0] = (mp_lapic_addr | 7);
local_flush_tlb();

boot_cpu_id = GET_APIC_ID(*((volatile unsigned long *) APIC_ID));

---1247997369-998972824-893635743=:17280
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="io-apic-patch-2.1.98-D"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.96.980427020903.17280C@chiara.csoma.elte.hu>
Content-Description:

LS0tIGxpbnV4L2FyY2gvaTM4Ni9tbS9pbml0LmMub3JpZzIJU2F0IE1heSAg
MiAxMzo1NDo1NyAxOTk4DQorKysgbGludXgvYXJjaC9pMzg2L21tL2luaXQu
YwlTYXQgTWF5ICAyIDEzOjU4OjQyIDE5OTgNCkBAIC0yNTcsNiArMjU3LDcg
QEANCiAJfQ0KICNpZmRlZiBfX1NNUF9fDQogew0KKwlleHRlcm4gdW5zaWdu
ZWQgbG9uZyBtcF9sYXBpY19hZGRyOw0KIAlwdGVfdCBwdGU7DQogCXVuc2ln
bmVkIGxvbmcgYXBpY19hcmVhID0gKHVuc2lnbmVkIGxvbmcpQVBJQ19CQVNF
Ow0KIA0KQEAgLTI2NywxMCArMjY4LDEzIEBADQogDQogCWlmIChzbXBfZm91
bmRfY29uZmlnKSB7DQogCQkvKg0KLQkJICogTWFwIHRoZSBsb2NhbCBBUElD
IHRvIEZFRTAwMDAwLg0KKwkJICogTWFwIHRoZSBsb2NhbCBBUElDIHRvIEZF
RTAwMDAwLiAoaXQncyBvbmx5IHRoZSBkZWZhdWx0DQorCQkgKiB2YWx1ZSwg
dGhhbmtzIHRvIFN0ZXZlIEhzaWVoIGZvciBmaW5kaW5nIHRoaXMgb3V0LiBX
ZQ0KKwkJICogbm93IHNhdmUgdGhlIHJlYWwgbG9jYWwtQVBJQyBwaHlzaWNh
bCBhZGRyZXNzIGluIHNtcF9zY2FuKCksDQorCQkgKiBhbmQgdXNlIGl0IGhl
cmUpDQogCQkgKi8NCiAJCXBnX3RhYmxlID0gcHRlX29mZnNldCgocG1kX3Qg
KilwZ19kaXIsIGFwaWNfYXJlYSk7DQotCQlwdGUgPSBta19wdGUoX192YShh
cGljX2FyZWEpLCBQQUdFX0tFUk5FTCk7DQorCQlwdGUgPSBta19wdGUoX192
YShtcF9sYXBpY19hZGRyKSwgUEFHRV9LRVJORUwpOw0KIAkJc2V0X3B0ZShw
Z190YWJsZSwgcHRlKTsNCiANCiAJCS8qDQotLS0gbGludXgvYXJjaC9pMzg2
L2tlcm5lbC9zbXAuYy5vcmlnMglTYXQgTWF5ICAyIDEzOjUxOjU0IDE5OTgN
CisrKyBsaW51eC9hcmNoL2kzODYva2VybmVsL3NtcC5jCVNhdCBNYXkgIDIg
MTM6NTQ6MDcgMTk5OA0KQEAgLTE1MCw2ICsxNTAsNyBAQA0KIGV4dGVybiBp
bnQgbXBjX2RlZmF1bHRfdHlwZTsNCiBpbnQgbXBfYnVzX2lkX3RvX3BjaV9i
dXMgW01BWF9NUF9CVVNTRVNdID0geyAtMSwgfTsNCiBpbnQgbXBfY3VycmVu
dF9wY2lfaWQgPSAwOw0KK3Vuc2lnbmVkIGxvbmcgbXBfbGFwaWNfYWRkciA9
IDA7DQogDQogLyogI2RlZmluZSBTTVBfREVCVUcgKi8NCiANCkBAIC0yNzAs
OSArMjcxLDggQEANCiANCiAJcHJpbnRrKCJBUElDIGF0OiAweCVsWFxuIixt
cGMtPm1wY19sYXBpYyk7DQogDQotCS8qIGNoZWNrIHRoZSBsb2NhbCBBUElD
IGFkZHJlc3MgKi8NCi0JaWYgKChjaGFyICopcGh5c190b192aXJ0KCh1bnNp
Z25lZCBsb25nKW1wYy0+bXBjX2xhcGljKSAhPSBBUElDX0JBU0UpDQotCQlw
YW5pYygidW5leHBlY3RlZCBBUElDIGFkZHJlc3MiKTsNCisJLyogc2F2ZSB0
aGUgbG9jYWwgQVBJQyBhZGRyZXNzLCBpdCBtaWdodCBiZSBub24tZGVmYXVs
dCAqLw0KKwltcF9sYXBpY19hZGRyID0gbXBjLT5tcGNfbGFwaWM7DQogDQog
CS8qDQogCSAqCU5vdyBwcm9jZXNzIHRoZSBjb25maWd1cmF0aW9uIGJsb2Nr
cy4NCkBAIC00NTMsNyArNDUzLDcgQEANCiAJCQkJCSAqLw0KIAkJCQ0KIAkJ
CQkJY2ZnPXBnMFswXTsNCi0JCQkJCXBnMFswXSA9ICgodW5zaWduZWQgbG9u
ZylBUElDX0JBU0UgfCA3KTsNCisJCQkJCXBnMFswXSA9IChtcF9sYXBpY19h
ZGRyIHwgNyk7DQogCQkJCQlsb2NhbF9mbHVzaF90bGIoKTsNCiANCiAJCQkJ
CWJvb3RfY3B1X2lkID0gR0VUX0FQSUNfSUQoKigodm9sYXRpbGUgdW5zaWdu
ZWQgbG9uZyAqKSBBUElDX0lEKSk7DQo=
---1247997369-998972824-893635743=:17280--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu