diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2006-05-08 13:55:52 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-05-08 13:55:52 -0700 |
commit | d0bb6c8fdd5a5224383304c0e46a4d60ed8b8b38 (patch) | |
tree | 6c249eaadcafec83b10b8fc387ce4df9fc7d192d /driver | |
parent | 934ae08e56eddae2a8d5810ae1eaf0315653be96 (diff) | |
download | patches-d0bb6c8fdd5a5224383304c0e46a4d60ed8b8b38.tar.gz |
2.6.17-rc3-git15 update
Diffstat (limited to 'driver')
-rw-r--r-- | driver/class-device-add-attribute_group-creation.patch | 97 | ||||
-rw-r--r-- | driver/netdev-create-attribute_groups-with-class_device_add.patch | 128 | ||||
-rw-r--r-- | driver/sysfs-crash-debugging.patch | 2 |
3 files changed, 1 insertions, 226 deletions
diff --git a/driver/class-device-add-attribute_group-creation.patch b/driver/class-device-add-attribute_group-creation.patch deleted file mode 100644 index 4bf2a0d9523f1..0000000000000 --- a/driver/class-device-add-attribute_group-creation.patch +++ /dev/null @@ -1,97 +0,0 @@ -From shemminger@osdl.org Fri Apr 21 13:03:59 2006 -Date: Fri, 21 Apr 2006 12:52:55 -0700 -From: Stephen Hemminger <shemminger@osdl.org> -To: Greg KH <greg@kroah.com>, "David S. Miller" <davem@davemloft.net> -Subject: class device: add attribute_group creation -Message-ID: <20060421125255.3451959f@localhost.localdomain> - -Extend the support of attribute groups in class_device's to allow groups -to be created as part of the registration process. This allows network device's -to avoid race between registration and creating groups. - -Note that unlike attributes that are a property of the class object, the groups -are a property of the class_device object. This is done because there are different -types of network devices (wireless for example). - -Signed-off-by: Stephen Hemminger <shemminger@osdl.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/base/class.c | 32 ++++++++++++++++++++++++++++++++ - include/linux/device.h | 2 ++ - 2 files changed, 34 insertions(+) - ---- gregkh-2.6.orig/drivers/base/class.c -+++ gregkh-2.6/drivers/base/class.c -@@ -456,6 +456,35 @@ static void class_device_remove_attrs(st - } - } - -+static int class_device_add_groups(struct class_device * cd) -+{ -+ int i; -+ int error = 0; -+ -+ if (cd->groups) { -+ for (i = 0; cd->groups[i]; i++) { -+ error = sysfs_create_group(&cd->kobj, cd->groups[i]); -+ if (error) { -+ while (--i >= 0) -+ sysfs_remove_group(&cd->kobj, cd->groups[i]); -+ goto out; -+ } -+ } -+ } -+out: -+ return error; -+} -+ -+static void class_device_remove_groups(struct class_device * cd) -+{ -+ int i; -+ if (cd->groups) { -+ for (i = 0; cd->groups[i]; i++) { -+ sysfs_remove_group(&cd->kobj, cd->groups[i]); -+ } -+ } -+} -+ - static ssize_t show_dev(struct class_device *class_dev, char *buf) - { - return print_dev_t(buf, class_dev->devt); -@@ -559,6 +588,8 @@ int class_device_add(struct class_device - class_name); - } - -+ class_device_add_groups(class_dev); -+ - kobject_uevent(&class_dev->kobj, KOBJ_ADD); - - /* notify any interfaces this device is now here */ -@@ -672,6 +703,7 @@ void class_device_del(struct class_devic - if (class_dev->devt_attr) - class_device_remove_file(class_dev, class_dev->devt_attr); - class_device_remove_attrs(class_dev); -+ class_device_remove_groups(class_dev); - - kobject_uevent(&class_dev->kobj, KOBJ_REMOVE); - kobject_del(&class_dev->kobj); ---- gregkh-2.6.orig/include/linux/device.h -+++ gregkh-2.6/include/linux/device.h -@@ -200,6 +200,7 @@ extern int class_device_create_file(stru - * @node: for internal use by the driver core only. - * @kobj: for internal use by the driver core only. - * @devt_attr: for internal use by the driver core only. -+ * @groups: optional additional groups to be created - * @dev: if set, a symlink to the struct device is created in the sysfs - * directory for this struct class device. - * @class_data: pointer to whatever you want to store here for this struct -@@ -228,6 +229,7 @@ struct class_device { - struct device * dev; /* not necessary, but nice to have */ - void * class_data; /* class-specific data */ - struct class_device *parent; /* parent of this child device, if there is one */ -+ struct attribute_group ** groups; /* optional groups */ - - void (*release)(struct class_device *dev); - int (*uevent)(struct class_device *dev, char **envp, diff --git a/driver/netdev-create-attribute_groups-with-class_device_add.patch b/driver/netdev-create-attribute_groups-with-class_device_add.patch deleted file mode 100644 index 2e03ee7bca403..0000000000000 --- a/driver/netdev-create-attribute_groups-with-class_device_add.patch +++ /dev/null @@ -1,128 +0,0 @@ -From shemminger@osdl.org Fri Apr 21 13:03:59 2006 -Date: Fri, 21 Apr 2006 12:54:38 -0700 -From: Stephen Hemminger <shemminger@osdl.org> -To: Greg KH <greg@kroah.com>, "David S. Miller" <davem@davemloft.net> -Subject: netdev: create attribute_groups with class_device_add -Message-ID: <20060421125438.50f93a34@localhost.localdomain> - -Atomically create attributes when class device is added. This avoids the -race between registering class_device (which generates hotplug event), -and the creation of attribute groups. - -Signed-off-by: Stephen Hemminger <shemminger@osdl.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - include/linux/netdevice.h | 2 + - net/core/dev.c | 2 - - net/core/net-sysfs.c | 49 +++++++++++----------------------------------- - 3 files changed, 15 insertions(+), 38 deletions(-) - ---- gregkh-2.6.orig/include/linux/netdevice.h -+++ gregkh-2.6/include/linux/netdevice.h -@@ -506,6 +506,8 @@ struct net_device - - /* class/net/name entry */ - struct class_device class_dev; -+ /* space for optional statistics and wireless sysfs groups */ -+ struct attribute_group *sysfs_groups[3]; - }; - - #define NETDEV_ALIGN 32 ---- gregkh-2.6.orig/net/core/dev.c -+++ gregkh-2.6/net/core/dev.c -@@ -3043,11 +3043,11 @@ void netdev_run_todo(void) - - switch(dev->reg_state) { - case NETREG_REGISTERING: -- dev->reg_state = NETREG_REGISTERED; - err = netdev_register_sysfs(dev); - if (err) - printk(KERN_ERR "%s: failed sysfs registration (%d)\n", - dev->name, err); -+ dev->reg_state = NETREG_REGISTERED; - break; - - case NETREG_UNREGISTERING: ---- gregkh-2.6.orig/net/core/net-sysfs.c -+++ gregkh-2.6/net/core/net-sysfs.c -@@ -29,7 +29,7 @@ static const char fmt_ulong[] = "%lu\n"; - - static inline int dev_isalive(const struct net_device *dev) - { -- return dev->reg_state == NETREG_REGISTERED; -+ return dev->reg_state <= NETREG_REGISTERED; - } - - /* use same locking rules as GIF* ioctl's */ -@@ -445,58 +445,33 @@ static struct class net_class = { - - void netdev_unregister_sysfs(struct net_device * net) - { -- struct class_device * class_dev = &(net->class_dev); -- -- if (net->get_stats) -- sysfs_remove_group(&class_dev->kobj, &netstat_group); -- --#ifdef WIRELESS_EXT -- if (net->get_wireless_stats || (net->wireless_handlers && -- net->wireless_handlers->get_wireless_stats)) -- sysfs_remove_group(&class_dev->kobj, &wireless_group); --#endif -- class_device_del(class_dev); -- -+ class_device_del(&(net->class_dev)); - } - - /* Create sysfs entries for network device. */ - int netdev_register_sysfs(struct net_device *net) - { - struct class_device *class_dev = &(net->class_dev); -- int ret; -+ struct attribute_group **groups = net->sysfs_groups; - -+ class_device_initialize(class_dev); - class_dev->class = &net_class; - class_dev->class_data = net; -+ class_dev->groups = groups; - -+ BUILD_BUG_ON(BUS_ID_SIZE < IFNAMSIZ); - strlcpy(class_dev->class_id, net->name, BUS_ID_SIZE); -- if ((ret = class_device_register(class_dev))) -- goto out; - -- if (net->get_stats && -- (ret = sysfs_create_group(&class_dev->kobj, &netstat_group))) -- goto out_unreg; -+ if (net->get_stats) -+ *groups++ = &netstat_group; - - #ifdef WIRELESS_EXT -- if (net->get_wireless_stats || (net->wireless_handlers && -- net->wireless_handlers->get_wireless_stats)) { -- ret = sysfs_create_group(&class_dev->kobj, &wireless_group); -- if (ret) -- goto out_cleanup; -- } -- return 0; --out_cleanup: -- if (net->get_stats) -- sysfs_remove_group(&class_dev->kobj, &netstat_group); --#else -- return 0; -+ if (net->get_wireless_stats -+ || (net->wireless_handlers && net->wireless_handlers->get_wireless_stats)) -+ *groups++ = &wireless_group; - #endif - --out_unreg: -- printk(KERN_WARNING "%s: sysfs attribute registration failed %d\n", -- net->name, ret); -- class_device_unregister(class_dev); --out: -- return ret; -+ return class_device_add(class_dev); - } - - int netdev_sysfs_init(void) diff --git a/driver/sysfs-crash-debugging.patch b/driver/sysfs-crash-debugging.patch index d305a4e419a18..7cb020e65747c 100644 --- a/driver/sysfs-crash-debugging.patch +++ b/driver/sysfs-crash-debugging.patch @@ -35,7 +35,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> NOTIFY_STOP) { --- gregkh-2.6.orig/arch/x86_64/kernel/traps.c +++ gregkh-2.6/arch/x86_64/kernel/traps.c -@@ -428,6 +428,7 @@ void __kprobes __die(const char * str, s +@@ -436,6 +436,7 @@ void __kprobes __die(const char * str, s printk("DEBUG_PAGEALLOC"); #endif printk("\n"); |