driver core fixes against 2.6.25-rc3 git
Subsystems (6)
PATCH 1/1 driver core fixes against 2.6.25-rc3 git
Here are a few driver core fixes against your current git tree that fix some more problems that have cropped up:
- suspend/resume bugfixes
- ksets were not getting properly initialized
- CONFIG_SYSFS_DEPRECATED was catching people with old userspace versions of LVM now that the block core is changed to use struct device.
- other driver core bugs on error paths.
Please pull from:
master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6.git/
Patches will be sent as a follow-on to this message to lkml for people to see.
thanks,
greg k-h
------------
drivers/base/core.c | 14 +----- drivers/base/power/main.c | 108 +++++++-------------------------------------- drivers/usb/core/usb.c | 2 +- fs/debugfs/inode.c | 4 -- include/linux/debugfs.h | 5 ++ init/Kconfig | 11 +++- lib/kobject.c | 11 ++--- 7 files changed, 39 insertions(+), 116 deletions(-)
---------------
Alan Stern (1):
PM: fix new mutex-locking bug in the PM core
Cornelia Huck (1):
Driver core: Fix cleanup when failing device_add().
Greg Kroah-Hartman (2):
driver core: fix up Kconfig text for CONFIG_SYSFS_DEPRECATED
kobject: properly initialize ksets
Harvey Harrison (1):
debugfs: fix sparse warnings
Ingo Molnar (1):
sysfs: CONFIG_SYSFS_DEPRECATED fix
Rafael J. Wysocki (2):
PM: Do not acquire device semaphores upfront during suspend driver core: Remove dpm_sysfs_remove() from error path of device_add()
PATCH 1/8 driver core: fix up Kconfig text for CONFIG_SYSFS_DEPRECATED
As things get moved into this config option, the hard date of 2006 does not work anymore, so update the text to be more descriptive.
--- init/Kconfig | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-)
init/Kconfig +4 -3
@@ -382,10 +382,11 @@ config SYSFS_DEPRECATED If enabled, this option will also move any device structures that belong to a class, back into the /sys/class hierarchy, in - order to support older versions of udev. + order to support older versions of udev and some userspace + programs. - If you are using a distro that was released in 2006 or later, - it should be safe to say N here. + If you are using a distro with the most recent userspace + packages, it should be safe to say N here. config CGROUP_MEM_CONT bool "Memory controller for cgroups"
Signature · 1 line
1.5.4.3
Re: [PATCH 1/8] driver core: fix up Kconfig text for CONFIG_SYSFS_DEPRECATED
init/Kconfig config SYSFS_DEPRECATED · line 389
Quoted 4 lines · Greg Kroah-Hartman
init/Kconfig +2
-2- If you are using a distro that was released in 2006 or later, - it should be safe to say N here. + If you are using a distro with the most recent userspace + packages, it should be safe to say N here.
Might want to be a bit more specific here - I *think* udev, lvm, and nash were the common ones that broke this time around. Speaking of which, did anybody rev Documentation/Changes to mention the currently required releases of stuff?
Re: [PATCH 1/8] driver core: fix up Kconfig text for CONFIG_SYSFS_DEPRECATED
Quoted 9 lines · On Wed, Mar 05, 2008 at 10:58:13AM -0500, [email protected] wrote:
init/Kconfig config SYSFS_DEPRECATED · line 389
Quoted 4 lines · Greg Kroah-Hartman
init/Kconfig +2
-2- If you are using a distro that was released in 2006 or later, - it should be safe to say N here. + If you are using a distro with the most recent userspace + packages, it should be safe to say N here.Might want to be a bit more specific here - I *think* udev, lvm, and nash were the common ones that broke this time around.
udev did not break, and nash is a shell, so it would have a hard time "breaking" :)
Quoted 2 lines
Speaking of which, did anybody rev
Documentation/Changesto mention the currently required releases of stuff?
The versions "required" did not change if you just enable that config option.
thanks,
greg k-h
Re: [PATCH 1/8] driver core: fix up Kconfig text for CONFIG_SYSFS_DEPRECATED
Quoted 11 lines · Greg KH
Quoted 9 lines · On Wed, Mar 05, 2008 at 10:58:13AM -0500, [email protected] wrote:
init/Kconfig config SYSFS_DEPRECATED · line 389
Quoted 4 lines · Greg Kroah-Hartman
init/Kconfig +2
-2- If you are using a distro that was released in 2006 or later, - it should be safe to say N here. + If you are using a distro with the most recent userspace + packages, it should be safe to say N here.Might want to be a bit more specific here - I *think* udev, lvm, and nash were the common ones that broke this time around.
Quoted 2 lines
udev did not break, and nash is a shell, so it would have a hard time "breaking" :)
The problem with nash was that it has some builtins for creating entries in /dev (basically, a subset of udev).
And you're right, this time was nash, the others were the *last* time we busticated /sys. ;)
PATCH 2/8 sysfs: CONFIG_SYSFS_DEPRECATED fix
In reply to Greg KHFrom: Ingo Molnar <[email protected]>
CONFIG_SYSFS_DEPRECATED=y changed its meaning recently and causes regressions in working setups that had SYSFS_DEPRECATED disabled.
so rename it to SYSFS_DEPRECATED_V2 so that testers pick up the new default via 'make oldconfig', even if their old .config's disabled CONFIG_SYSFS_DEPRECATED ...
--- init/Kconfig | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-)
init/Kconfig +4 -0
@@ -367,9 +367,13 @@ config RESOURCE_COUNTERS depends on CGROUPS config SYSFS_DEPRECATED + bool + +config SYSFS_DEPRECATED_V2 bool "Create deprecated sysfs files" depends on SYSFS default y + select SYSFS_DEPRECATED help This option creates deprecated symlinks such as the "device"-link, the <subsystem>:<name>-link, and the
Signature · 1 line
1.5.4.3
PATCH 3/8 kobject: properly initialize ksets
In reply to Greg KHkset_initialize was calling kobject_init_internal() which didn't initialize the kobject as well as kobject_init() was. So have kobject_init() call kobject_init_internal() and move the logic to initalize the kobject there.
--- lib/kobject.c | 11 +++++------ 1 files changed, 5 insertions(+), 6 deletions(-)
lib/kobject.c +5 -6
@@ -153,6 +153,10 @@ static void kobject_init_internal(struct kobject *kobj)return ;kref_init (&kobj->kref);INIT_LIST_HEAD (&kobj->entry); + kobj->state_in_sysfs =0 ; + kobj->state_add_uevent_sent =0 ; + kobj->state_remove_uevent_sent =0 ; + kobj->state_initialized =1 ; }
@@ -289,13 +293,8 @@ void kobject_init(struct kobject *kobj, struct kobj_type *ktype)dump_stack (); } -kref_init (&kobj->kref); -INIT_LIST_HEAD (&kobj->entry); +kobject_init_internal (kobj); kobj->ktype = ktype; - kobj->state_in_sysfs =0 ; - kobj->state_add_uevent_sent =0 ; - kobj->state_remove_uevent_sent =0 ; - kobj->state_initialized =1 ;return ; error:
Signature · 1 line
1.5.4.3
PATCH 4/8 PM: Do not acquire device semaphores upfront during suspend
In reply to Greg KHFrom: Rafael J. Wysocki <[email protected]>
Remove the code that acquires all device semaphores from the suspend code path as it causes multiple problems to appear (most notably,
http://bugzilla.kernel.org/show_bug.cgi?id=10030) and revert the change introduced by commit 4145ed6dc597a9bea5f6ae8c574653b2de10620f depending on the code being removed.
Remove pm_sleep_lock()/pm_sleep_unlock() from device_add() to avoid the issue reported at http://bugzilla.kernel.org/show_bug.cgi?id=9874.
It should fix the regreesions reported at:
http://bugzilla.kernel.org/show_bug.cgi?id=9874 http://bugzilla.kernel.org/show_bug.cgi?id=10030
--- drivers/base/core.c | 8 --- drivers/base/power/main.c | 106 +++++++-------------------------------------- drivers/usb/core/usb.c | 2 +- 3 files changed, 17 insertions(+), 99 deletions(-)
drivers/base/core.c +0 -8
@@ -770,13 +770,6 @@ int device_add(struct device *dev)struct class_interface *class_intf;int error; - error =pm_sleep_lock (); -if (error) { -dev_warn (dev,"Suspicious %s during suspend\n" , __FUNCTION__); -dump_stack (); -return error; - } - dev =get_device (dev);if (!dev || !strlen (dev->bus_id)) { error = -EINVAL ;
@@ -843,7 +836,6 @@ int device_add(struct device *dev) } Done:put_device (dev); -pm_sleep_unlock ();return error; BusError:device_pm_remove (dev);
drivers/base/power/main.c +16 -90
214 lines not on this page · raw message
drivers/usb/core/usb.c +1 -1
@@ -233,7 +233,7 @@ static int ksuspend_usb_init(void)* singlethreaded. Its job doesn't justify running on more * than one CPU. */ - ksuspend_usb_wq =create_singlethread_workqueue ("ksuspend_usbd" ); + ksuspend_usb_wq =create_freezeable_workqueue ("ksuspend_usbd" );if (!ksuspend_usb_wq)return -ENOMEM ;return 0 ;
Signature · 1 line
1.5.4.3
PATCH 5/8 PM: fix new mutex-locking bug in the PM core
In reply to Greg KHFrom: Alan Stern <[email protected]>
This patch (as1041) fixes a bug introduced by the acquire-all-device-semaphores reversion. The error pathway of dpm_suspend() fails to reacquire a mutex it should be holding.
--- drivers/base/power/main.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/base/power/main.c +1 -1
@@ -428,6 +428,7 @@ static int dpm_suspend(pm_message_t state)mutex_unlock (&dpm_list_mtx); error =suspend_device (dev, state); +mutex_lock (&dpm_list_mtx);if (error) { printk(KERN_ERR "Could not suspend device %s: " "error %d%s\n",
@@ -438,7 +439,6 @@ static int dpm_suspend(pm_message_t state) ""));break ; } -mutex_lock (&dpm_list_mtx);if (!list_empty (&dev->power.entry))list_move (&dev->power.entry, &dpm_off); }
Signature · 1 line
1.5.4.3
PATCH 6/8 driver core: Remove dpm_sysfs_remove() from error path of device_add()
In reply to Greg KHFrom: Rafael J. Wysocki <[email protected]>
Since device_pm_remove(dev) calls dpm_sysfs_remove(dev), it's incorrect to call the latter after the former in the device_add() error path.
--- drivers/base/core.c | 1 - 1 files changed, 0 insertions(+), 1 deletions(-)
drivers/base/core.c +0 -1
@@ -839,7 +839,6 @@ int device_add(struct device *dev)return error; BusError:device_pm_remove (dev); -dpm_sysfs_remove (dev); PMError:if (dev->bus) blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
Signature · 1 line
1.5.4.3
PATCH 7/8 Driver core: Fix cleanup when failing device_add().
In reply to Greg KHFrom: Cornelia Huck <[email protected]>
Driver core: Fix cleanup when failing device_add().
- Don't call cleanup_device_parent() if we didn't call setup_parent().
- dev->kobj.parent may be NULL when cleanup_device_parent() is called, so we need to handle glue_dir == NULL in cleanup_glue_dir().
--- drivers/base/core.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
drivers/base/core.c +3 -2
@@ -621,7 +621,8 @@ static struct kobject *get_device_parent(struct device *dev,static void cleanup_glue_dir (struct device *dev,struct kobject *glue_dir) {/* see if we live in a "glue" directory */ -if (!dev->class || glue_dir->kset != &dev->class->class_dirs) +if (!glue_dir || !dev->class || + glue_dir->kset != &dev->class->class_dirs)return ;kobject_put (glue_dir);
@@ -773,7 +774,7 @@ int device_add(struct device *dev) dev =get_device (dev);if (!dev || !strlen (dev->bus_id)) { error = -EINVAL ; - goto Error; + goto Done; }pr_debug ("device: '%s': %s\n" , dev->bus_id, __FUNCTION__);
Signature · 1 line
1.5.4.3
PATCH 8/8 debugfs: fix sparse warnings
In reply to Greg KHFrom: Harvey Harrison <[email protected]>
extern does not belong in C files, move declaration to linux/debugfs.h fs/debugfs/file.c:42:30: warning: symbol 'debugfs_file_operations' was not declared. Should it be static? fs/debugfs/file.c:54:31: warning: symbol 'debugfs_link_operations' was not declared. Should it be static?
--- fs/debugfs/inode.c | 4 ---- include/linux/debugfs.h | 5 +++++ 2 files changed, 5 insertions(+), 4 deletions(-)
fs/debugfs/inode.c +0 -4
@@ -29,10 +29,6 @@#define DEBUGFS_MAGIC 0x64626720 -/* declared over in file.c */ -extern struct file_operations debugfs_file_operations; -extern struct inode_operations debugfs_link_operations; -static struct vfsmount *debugfs_mount;static int debugfs_mount_count;
include/linux/debugfs.h +5 -0
@@ -27,6 +27,11 @@ struct debugfs_blob_wrapper { };#if defined(CONFIG_DEBUG_FS ) + +/* declared over in file.c */ +extern const struct file_operations debugfs_file_operations; +extern const struct inode_operations debugfs_link_operations; +struct dentry *debugfs_create_file (const char *name,mode_t mode,struct dentry *parent,void *data,const struct file_operations *fops);
Signature · 1 line
1.5.4.3