Skip to contentSkip to conversation

ns558 pci/isa change

PATCH Pete Wyckoff 2 participants 2 messages Nov 13, 2000 – Nov 14, 2000

lore
Share & tools
lore
#0 lore raw

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/

#1 lore raw
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
diff -u -r1.1.1.3 ns558.c
@@ -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);