On Fri, Oct 31, 2003 at 05:42:07PM +0800, Michael Clark wrote:
Strangely making the quirk and its data __devinit solves the problem
(as is most of the other stuff in pci/quirks.c). Not sure if it is
the correct fix but it works for me. ie. why did I get the oops
in the first place? as the quirks data was global and not marked
for an __init section.
The function was marked as __init. I'd strongly recommend against
marking the data with __devinitdata since its used elsewhere in the
kernel by non-init code.
--- linux-2.6.0-test9/drivers/pci/quirks.c 2003-10-31 16:49:25.000000000 +0800
+++ linux-2.6.0-test9-mc/drivers/pci/quirks.c 2003-10-31 16:49:57.000000000 +0800
@@ -644,9 +644,9 @@
* VIA northbridges care about PCI_INTERRUPT_LINE
*/
-int interrupt_line_quirk;
+__devinitdata int interrupt_line_quirk;
-static void __init quirk_via_bridge(struct pci_dev *pdev)
+static void __devinit quirk_via_bridge(struct pci_dev *pdev)
{
if(pdev->devfn == 0)
interrupt_line_quirk = 1;