Correct, and the I8x00 is the prime example of that.
I have a fix, but it involves fairly major surgery:
- Implement bt_ioremap()/bt_iounmap() which work at early boot-time (the
normal ioremap doesn't work yet). This is done by adding 16 boot-time
only fixmap entries, and using those for temporary mappings. These
fixmap entries are reclaimed once vmalloc() is initialised, so they
don't steal address space permanently.
This would also help some other code which wants to scan arbitrary
physical memory at early boot-time.
- Move dmi_scan from main to the i386 setup_arch(). To permit this, ioremap()
is changed to bt_ioremap(), and vmalloc() to alloc_bootmem().
- Add a blacklist entry in dmi_scan, which sets a "don't enable local APIC"
flag if the I8000 or any problematic machine is found.
- Move init_apic_mappings() from setup_arch() to trap_init(). This is
so that kernel command-line parameters can be used to override stuff.
- Change detect_init_apic() to refuse to enable the local APIC if the
blacklist flag is set.
The patch is still _very_ rough, but it seems to work. Let me know if you want it.
/Mikael
-
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/