Messages in this thread Patch in this message | | | Date | Tue, 28 Aug 2001 01:44:40 +0200 | From | Kurt Garloff <> | Subject | [PATCH] disableapic option |
| |
Hi Pekka, Linus, Alan,
On Tue, Aug 28, 2001 at 01:42:11AM +0300, Pekka Pietikainen wrote: > Doesn't VA use one of those Intel boards which have the problem > with theis BIOS, which is seen as a hang with the adaptec driver? > > Tried the same work-around? (enabling the APIC)
Here's a patch that allows you to compile the kernel with APIC enabled always. Some machines need it, but others barf, when they find out that there is an MP table and an IOAPIC but no APIC on the CPU is found. (Plug a K6 in a dual Pentium board, e.g.)
Then you may pass the disableapic boot parameter, so you bypass APIC setup completely and the APIC compiled kernel works like compiled without. (For people who compile their own kernels, this is irrelevant, except for testing. That's not the majority of Linux users anymore, though.)
Another possibility might be to make apic.c:221 fail gracefully instead of BUG(), BTW.
Linus, Alan, please apply to your trees!
In theory, the compile time option could be removed now, but some people probably want to be able to save a few bytes.
Regards, -- Kurt Garloff <kurt@garloff.de> [Eindhoven, NL] Physics: Plasma simulations <K.Garloff@Phys.TUE.NL> [TU Eindhoven, NL] Linux: SCSI, Security <garloff@suse.de> [SuSE Nuernberg, DE] (See mail header or public key servers for PGP2 and GPG public keys.) --- linux-244.compile/arch/i386/kernel/io_apic.c.orig Mon Apr 30 17:12:43 2001 +++ linux-244.compile/arch/i386/kernel/io_apic.c Fri May 11 17:44:37 2001 @@ -182,6 +182,7 @@ int pirq_entries [MAX_PIRQS]; int pirqs_enabled; int skip_ioapic_setup; +int disable_apic; static int __init ioapic_setup(char *str) { @@ -191,6 +192,15 @@ __setup("noapic", ioapic_setup); +static int __init disable_apic_setup(char *str) +{ + skip_ioapic_setup = 1; + disable_apic = 1; + return 1; +} + +__setup("disableapic", disable_apic_setup); + static int __init ioapic_pirq_setup(char *str) { int i, max; @@ -1605,7 +1615,7 @@ */ void IO_APIC_init_uniprocessor (void) { - if (!smp_found_config) + if (!smp_found_config || disable_apic) return; connect_bsp_APIC(); setup_local_APIC();[unhandled content-type:application/pgp-signature] | |