ns558 pci/isa change
My joystick stopped working at 2.4.0-test10 due to a patch to drivers/char/joystick/ns558.c that moves pci probing ahead of isa probing.
The problem is that pci_module_init can return -ENODEV into i, which is then used to index the ISA portlist. ISA probing assumes that i is initialized to zero.
Trivial fix attached, with plenty of context.
-- Pete
char/joystick/ns558.c renamed from char/joystick/ns558.c.orig +2 -1
@@ -299,37 +299,38 @@ deactivate:if (dev->deactivate) dev->deactivate (dev);return next; }#endif int __init ns558_init (void ) { -int i =0 ; +int i;#ifdef NSS558_ISAPNP struct pci_dev *dev =NULL ;struct pnp_devid *devid;#endif /* * Probe for PCI ports. Always probe for PCI first, * it is the least-invasive probe. */ i =pci_module_init (&ns558_pci_driver);if (i ==0 ) have_pci_devices =1 ;/* * Probe for ISA ports. */ + i =0 ;while (ns558_isa_portlist[i]) ns558 =ns558_isa_probe (ns558_isa_portlist[i++], ns558);/* * Probe for PnP ports. */ #ifdef NSS558_ISAPNP for (devid = pnp_devids; devid->vendor; devid++) {
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/
Quoted 9 lines · Pete Wyckoff
i = pci_module_init(&ns558_pci_driver); if (i == 0) have_pci_devices = 1;/*
* Probe for ISA ports.
*/+ i = 0;
you don't want to lose the error code. what you want to do is something like the attached patch...
Signature · 3 lines
Jeff Garzik | Building 1024 | The chief enemy of creativity is "good" sense MandrakeSoft | -- Picasso
Index: drivers/char/joystick/ns558.c
===================================================================
RCS file: /cvsroot/gkernel/linux_2_4/drivers/char/joystick/ns558.c,v retrieving revision 1.1.1.3
char/joystick/ns558.c +4 -7
@@ -58,7 +58,6 @@ };static struct ns558 *ns558; -static int have_pci_devices;/* * ns558_isa_probe() tries to find an isa gameport at the
@@ -316,9 +315,8 @@* it is the least-invasive probe. */ - i =pci_module_init (&ns558_pci_driver); -if (i ==0 ) - have_pci_devices =1 ; + i =pci_register_driver (&ns558_pci_driver); +if (i <0 )return i;/* * Probe for ISA ports.
@@ -339,7 +337,7 @@ }#endif -return ns558 ?0 : -ENODEV ; +return 0 ; } void __exit ns558_exit(void)
@@ -368,8 +366,7 @@ port = port->next; } -if (have_pci_devices) -pci_unregister_driver (&ns558_pci_driver); +pci_unregister_driver (&ns558_pci_driver); }module_init (ns558_init);