Parent repository is bk://kernel.bkbits.net/gregkh/linux/driver-2.6 torvalds@ppc970.osdl.org|ChangeSet|20040311025244|00000 torvalds diff -Nru a/drivers/base/Makefile b/drivers/base/Makefile --- a/drivers/base/Makefile Wed Mar 10 20:38:38 2004 +++ b/drivers/base/Makefile Wed Mar 10 20:38:38 2004 @@ -6,3 +6,8 @@ obj-y += power/ obj-$(CONFIG_FW_LOADER) += firmware_class.o obj-$(CONFIG_NUMA) += node.o + +ifeq ($(CONFIG_DEBUG_DRIVER),y) +EXTRA_CFLAGS += -DDEBUG +endif + diff -Nru a/drivers/base/bus.c b/drivers/base/bus.c --- a/drivers/base/bus.c Wed Mar 10 20:38:38 2004 +++ b/drivers/base/bus.c Wed Mar 10 20:38:38 2004 @@ -9,10 +9,6 @@ */ #include -#ifdef CONFIG_DEBUG_DRIVER -#define DEBUG 1 -#endif - #include #include #include diff -Nru a/drivers/base/class.c b/drivers/base/class.c --- a/drivers/base/class.c Wed Mar 10 20:38:38 2004 +++ b/drivers/base/class.c Wed Mar 10 20:38:38 2004 @@ -11,10 +11,6 @@ */ #include -#ifdef CONFIG_DEBUG_DRIVER -#define DEBUG 1 -#endif - #include #include #include diff -Nru a/drivers/base/class_simple.c b/drivers/base/class_simple.c --- a/drivers/base/class_simple.c Wed Mar 10 20:38:38 2004 +++ b/drivers/base/class_simple.c Wed Mar 10 20:38:38 2004 @@ -9,10 +9,6 @@ */ #include -#ifdef CONFIG_DEBUG_DRIVER -#define DEBUG 1 -#endif - #include #include #include diff -Nru a/drivers/base/core.c b/drivers/base/core.c --- a/drivers/base/core.c Wed Mar 10 20:38:38 2004 +++ b/drivers/base/core.c Wed Mar 10 20:38:38 2004 @@ -9,10 +9,6 @@ */ #include -#ifdef CONFIG_DEBUG_DRIVER -#define DEBUG 1 -#endif - #include #include #include diff -Nru a/drivers/base/driver.c b/drivers/base/driver.c --- a/drivers/base/driver.c Wed Mar 10 20:38:38 2004 +++ b/drivers/base/driver.c Wed Mar 10 20:38:38 2004 @@ -9,10 +9,6 @@ */ #include -#ifdef CONFIG_DEBUG_DRIVER -#define DEBUG 1 -#endif - #include #include #include diff -Nru a/drivers/base/power/Makefile b/drivers/base/power/Makefile --- a/drivers/base/power/Makefile Wed Mar 10 20:38:38 2004 +++ b/drivers/base/power/Makefile Wed Mar 10 20:38:38 2004 @@ -1,2 +1,6 @@ obj-y := shutdown.o obj-$(CONFIG_PM) += main.o suspend.o resume.o runtime.o sysfs.o + +ifeq ($(CONFIG_DEBUG_DRIVER),y) +EXTRA_CFLAGS += -DDEBUG +endif diff -Nru a/drivers/base/power/main.c b/drivers/base/power/main.c --- a/drivers/base/power/main.c Wed Mar 10 20:38:38 2004 +++ b/drivers/base/power/main.c Wed Mar 10 20:38:38 2004 @@ -20,10 +20,6 @@ */ #include -#ifdef CONFIG_DEBUG_DRIVER -#define DEBUG 1 -#endif - #include #include "power.h" diff -Nru a/drivers/base/power/shutdown.c b/drivers/base/power/shutdown.c --- a/drivers/base/power/shutdown.c Wed Mar 10 20:38:38 2004 +++ b/drivers/base/power/shutdown.c Wed Mar 10 20:38:38 2004 @@ -9,10 +9,6 @@ */ #include -#ifdef CONFIG_DEBUG_DRIVER -#define DEBUG 1 -#endif - #include #include diff -Nru a/drivers/base/sys.c b/drivers/base/sys.c --- a/drivers/base/sys.c Wed Mar 10 20:38:38 2004 +++ b/drivers/base/sys.c Wed Mar 10 20:38:38 2004 @@ -13,10 +13,6 @@ */ #include -#ifdef CONFIG_DEBUG_DRIVER -#define DEBUG 1 -#endif - #include #include #include diff -Nru a/drivers/char/lp.c b/drivers/char/lp.c --- a/drivers/char/lp.c Wed Mar 10 20:38:38 2004 +++ b/drivers/char/lp.c Wed Mar 10 20:38:38 2004 @@ -869,7 +869,7 @@ int __init lp_init (void) { - int i; + int i, err = 0; if (parport_nr[0] == LP_PARPORT_OFF) return 0; @@ -900,10 +900,15 @@ devfs_mk_dir("printers"); lp_class = class_simple_create(THIS_MODULE, "printer"); + if (IS_ERR(lp_class)) { + err = PTR_ERR(lp_class); + goto out_devfs; + } if (parport_register_driver (&lp_driver)) { printk (KERN_ERR "lp: unable to register with parport\n"); - return -EIO; + err = -EIO; + goto out_class; } if (!lp_count) { @@ -915,6 +920,13 @@ } return 0; + +out_class: + class_simple_destroy(lp_class); +out_devfs: + devfs_remove("printers"); + unregister_chrdev(LP_MAJOR, "lp"); + return err; } static int __init lp_init_module (void) diff -Nru a/drivers/char/misc.c b/drivers/char/misc.c --- a/drivers/char/misc.c Wed Mar 10 20:38:38 2004 +++ b/drivers/char/misc.c Wed Mar 10 20:38:38 2004 @@ -342,6 +342,7 @@ if (register_chrdev(MISC_MAJOR,"misc",&misc_fops)) { printk("unable to get major %d for misc devices\n", MISC_MAJOR); + class_simple_destroy(misc_class); return -EIO; } return 0; diff -Nru a/drivers/input/input.c b/drivers/input/input.c --- a/drivers/input/input.c Wed Mar 10 20:38:38 2004 +++ b/drivers/input/input.c Wed Mar 10 20:38:38 2004 @@ -727,6 +727,8 @@ int retval = -ENOMEM; input_class = class_simple_create(THIS_MODULE, "input"); + if (IS_ERR(input_class)) + return PTR_ERR(input_class); input_proc_init(); retval = register_chrdev(INPUT_MAJOR, "input", &input_fops); if (retval) { @@ -734,6 +736,7 @@ remove_proc_entry("devices", proc_bus_input_dir); remove_proc_entry("handlers", proc_bus_input_dir); remove_proc_entry("input", proc_bus); + class_simple_destroy(input_class); return retval; } @@ -743,6 +746,7 @@ remove_proc_entry("handlers", proc_bus_input_dir); remove_proc_entry("input", proc_bus); unregister_chrdev(INPUT_MAJOR, "input"); + class_simple_destroy(input_class); } return retval; } diff -Nru a/drivers/net/ppp_generic.c b/drivers/net/ppp_generic.c --- a/drivers/net/ppp_generic.c Wed Mar 10 20:38:38 2004 +++ b/drivers/net/ppp_generic.c Wed Mar 10 20:38:38 2004 @@ -45,6 +45,7 @@ #include #include #include +#include #include #include @@ -271,6 +272,8 @@ static int ppp_disconnect_channel(struct channel *pch); static void ppp_destroy_channel(struct channel *pch); +static struct class_simple *ppp_class; + /* Translates a PPP protocol number to a NP index (NP == network protocol) */ static inline int proto_to_npindex(int proto) { @@ -804,15 +807,29 @@ printk(KERN_INFO "PPP generic driver version " PPP_VERSION "\n"); err = register_chrdev(PPP_MAJOR, "ppp", &ppp_device_fops); if (!err) { + ppp_class = class_simple_create(THIS_MODULE, "ppp"); + if (IS_ERR(ppp_class)) { + err = PTR_ERR(ppp_class); + goto out_chrdev; + } + class_simple_device_add(ppp_class, MKDEV(PPP_MAJOR, 0), NULL, "ppp"); err = devfs_mk_cdev(MKDEV(PPP_MAJOR, 0), S_IFCHR|S_IRUSR|S_IWUSR, "ppp"); if (err) - unregister_chrdev(PPP_MAJOR, "ppp"); + goto out_class; } +out: if (err) printk(KERN_ERR "failed to register PPP device (%d)\n", err); return err; + +out_class: + class_simple_device_remove(MKDEV(PPP_MAJOR,0)); + class_simple_destroy(ppp_class); +out_chrdev: + unregister_chrdev(PPP_MAJOR, "ppp"); + goto out; } /* @@ -2545,6 +2562,8 @@ if (unregister_chrdev(PPP_MAJOR, "ppp") != 0) printk(KERN_ERR "PPP: failed to unregister PPP device\n"); devfs_remove("ppp"); + class_simple_device_remove(MKDEV(PPP_MAJOR, 0)); + class_simple_destroy(ppp_class); } /* diff -Nru a/drivers/scsi/sg.c b/drivers/scsi/sg.c --- a/drivers/scsi/sg.c Wed Mar 10 20:38:38 2004 +++ b/drivers/scsi/sg.c Wed Mar 10 20:38:38 2004 @@ -1439,7 +1439,7 @@ MKDEV(SCSI_GENERIC_MAJOR, k), cl_dev->dev, "%s", disk->disk_name); - if (NULL == sg_class_member) + if (IS_ERR(sg_class_member)) printk(KERN_WARNING "sg_add: " "class_simple_device_add failed\n"); class_set_devdata(sg_class_member, sdp); diff -Nru a/net/netlink/netlink_dev.c b/net/netlink/netlink_dev.c --- a/net/netlink/netlink_dev.c Wed Mar 10 20:38:38 2004 +++ b/net/netlink/netlink_dev.c Wed Mar 10 20:38:38 2004 @@ -27,6 +27,7 @@ #include #include #include +#include #include #include @@ -34,6 +35,7 @@ static long open_map; static struct socket *netlink_user[MAX_LINKS]; +static struct class_simple *netlink_class; /* * Device operations @@ -229,17 +231,26 @@ return -EIO; } + netlink_class = class_simple_create(THIS_MODULE, "netlink"); + if (IS_ERR(netlink_class)) { + printk (KERN_ERR "Error creating netlink class.\n"); + unregister_chrdev(NETLINK_MAJOR, "netlink"); + return PTR_ERR(netlink_class); + } + devfs_mk_dir("netlink"); /* Someone tell me the official names for the uppercase ones */ for (i = 0; i < ARRAY_SIZE(entries); i++) { devfs_mk_cdev(MKDEV(NETLINK_MAJOR, entries[i].minor), S_IFCHR|S_IRUSR|S_IWUSR, "netlink/%s", entries[i].name); + class_simple_device_add(netlink_class, MKDEV(NETLINK_MAJOR, entries[i].minor), NULL, "%s", entries[i].name); } for (i = 0; i < 16; i++) { devfs_mk_cdev(MKDEV(NETLINK_MAJOR, i + 16), S_IFCHR|S_IRUSR|S_IWUSR, "netlink/tap%d", i); + class_simple_device_add(netlink_class, MKDEV(NETLINK_MAJOR, i + 16), NULL, "tap%d", i); } return 0; @@ -249,11 +260,16 @@ { int i; - for (i = 0; i < ARRAY_SIZE(entries); i++) + for (i = 0; i < ARRAY_SIZE(entries); i++) { devfs_remove("netlink/%s", entries[i].name); - for (i = 0; i < 16; i++) + class_simple_device_remove(MKDEV(NETLINK_MAJOR, entries[i].minor)); + } + for (i = 0; i < 16; i++) { devfs_remove("netlink/tap%d", i); + class_simple_device_remove(MKDEV(NETLINK_MAJOR, i + 16)); + } devfs_remove("netlink"); + class_simple_destroy(netlink_class); unregister_chrdev(NETLINK_MAJOR, "netlink"); }