[patch] ns558 bug

matthieu castet
2005-02-04T20:04:22Z

[-- Attachment #1: Type: text/plain, Size: 205 bytes --]

Hi,

this patch is based on http://bugzilla.kernel.org/show_bug.cgi?id=2962
patch from adam belay.

It solve a oops when pnp_register_driver(&ns558_pnp_driver) failed.

Please apply this patch.

Matthieu

[-- Attachment #2: ns558.patch --]
[-- Type: text/x-patch, Size: 1015 bytes --]

Index: drivers/input/gameport/ns558.c
===================================================================
RCS file: /home/mat/dev/linux-cvs-rep/linux-cvs/drivers/input/gameport/ns558.c,v
retrieving revision 1.15
diff -u -u -r1.15 ns558.c
--- drivers/input/gameport/ns558.c 16 Sep 2004 14:04:04 -0000 1.15
+++ drivers/input/gameport/ns558.c 4 Feb 2005 19:53:20 -0000
@@ -261,6 +261,8 @@

#endif

+static int registered = 0;
+
int __init ns558_init(void)
{
int i = 0;
@@ -272,8 +274,10 @@
while (ns558_isa_portlist[i])
ns558_isa_probe(ns558_isa_portlist[i++]);

- pnp_register_driver(&ns558_pnp_driver);
- return list_empty(&ns558_list) ? -ENODEV : 0;
+ if (pnp_register_driver(&ns558_pnp_driver) >= 0)
+ registered = 1;
+
+ return (list_empty(&ns558_list) && !registered) ? -ENODEV : 0;
}

void __exit ns558_exit(void)
@@ -297,7 +301,8 @@
break;
}
}
- pnp_unregister_driver(&ns558_pnp_driver);
+ if (registered)
+ pnp_unregister_driver(&ns558_pnp_driver);
}

module_init(ns558_init);