Driver Core patches for 2.6.12-rc4
Subsystems (5)
PATCH 1/1 Driver Core patches for 2.6.12-rc4
Here are 2 patches for the 2.6.12-rc4 tree that clean up some driver core stuff. Both of these patches have been in the -mm tree for a while.
Please pull from:
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6.git/
Full patches will be sent to the linux-kernel mailing list, if anyone wants to see them.
thanks,
greg k-h
Documentation/filesystems/sysfs-pci.txt | 6 +-- Documentation/power/devices.txt | 21 ------------- Documentation/powerpc/hvcs.txt | 4 +- drivers/base/Makefile | 2 - drivers/base/bus.c | 1 drivers/base/core.c | 3 - drivers/base/interface.c | 51 -------------------------------- drivers/base/power/power.h | 11 ------ drivers/base/power/resume.c | 11 ++++++ drivers/base/power/shutdown.c | 29 ++++-------------- drivers/base/power/suspend.c | 17 +++++++++- include/linux/device.h | 3 - kernel/power/main.c | 6 +-- 13 files changed, 40 insertions(+), 125 deletions(-)
David Brownell:
o Driver Core: remove driver model detach_state
o Driver Core: pm diagnostics update, check for errors
PATCH 1/1 Driver Core: pm diagnostics update, check for errors
[PATCH] Driver Core: pm diagnostics update, check for errors
This patch includes various tweaks in the messaging that appears during system pm state transitions:
* Warn about certain illegal calls in the device tree, like resuming child before parent or suspending parent before child. This could happen easily enough through sysfs, or in some cases when drivers use device_pm_set_parent().
* Be more consistent about dev_dbg() tracing ... do it for resume() and shutdown() too, and never if the driver doesn't have that method.
* Say which type of system sleep state is being entered.
Except for the warnings, these only affect debug messaging.
---
commit 82428b62aa6294ea640c7e920a9224ecaf46db65
tree f9e9bfd1f86f739ee16968378057060417f52bb4
parent ff0d2f90fdc4b564d47a7c26b16de81a16cfa28e
author David Brownell <[email protected]> Mon, 09 May 2005 08:07:00 -0700 committer Greg KH <[email protected]> Tue, 17 May 2005 14:54:54 -0700
drivers/base/power/resume.c | 11 ++++++++++- drivers/base/power/shutdown.c | 13 +++++++------ drivers/base/power/suspend.c | 17 +++++++++++++++-- kernel/power/main.c | 6 +++--- 4 files changed, 35 insertions(+), 12 deletions(-)
drivers/base/power/resume.c (mode:100644) +10 -1
@@ -22,8 +22,17 @@ int resume_device(struct device * dev) { - if (dev->bus && dev->bus->resume) + if (dev->power.pm_parent + && dev->power.pm_parent->power.power_state) { + dev_err(dev, "PM: resume from %d, parent %s still %d\n", + dev->power.power_state, + dev->power.pm_parent->bus_id, + dev->power.pm_parent->power.power_state); + } + if (dev->bus && dev->bus->resume) { + dev_dbg(dev,"resuming\n"); return dev->bus->resume(dev); + } return 0; }
drivers/base/power/shutdown.c (mode:100644) +7 -6
@@ -25,8 +25,10 @@ return 0; if (dev->detach_state == DEVICE_PM_OFF) { - if (dev->driver && dev->driver->shutdown) + if (dev->driver && dev->driver->shutdown) { + dev_dbg(dev, "shutdown\n"); dev->driver->shutdown(dev); + } return 0; } return dpm_runtime_suspend(dev, dev->detach_state);
@@ -52,13 +54,12 @@ struct device * dev; down_write(&devices_subsys.rwsem); - list_for_each_entry_reverse(dev, &devices_subsys.kset.list, kobj.entry) { - pr_debug("shutting down %s: ", dev->bus_id); + list_for_each_entry_reverse(dev, &devices_subsys.kset.list, + kobj.entry) { if (dev->driver && dev->driver->shutdown) { - pr_debug("Ok\n"); + dev_dbg(dev, "shutdown\n"); dev->driver->shutdown(dev); - } else - pr_debug("Ignored.\n"); + } } up_write(&devices_subsys.rwsem);
drivers/base/power/suspend.c (mode:100644) +15 -2
@@ -39,12 +39,25 @@ { int error = 0; - dev_dbg(dev, "suspending\n"); + if (dev->power.power_state) { + dev_dbg(dev, "PM: suspend %d-->%d\n", + dev->power.power_state, state); + } + if (dev->power.pm_parent + && dev->power.pm_parent->power.power_state) { + dev_err(dev, + "PM: suspend %d->%d, parent %s already %d\n", + dev->power.power_state, state, + dev->power.pm_parent->bus_id, + dev->power.pm_parent->power.power_state); + } dev->power.prev_state = dev->power.power_state; - if (dev->bus && dev->bus->suspend && !dev->power.power_state) + if (dev->bus && dev->bus->suspend && !dev->power.power_state) { + dev_dbg(dev, "suspending\n"); error = dev->bus->suspend(dev, state); + } return error; }
kernel/power/main.c (mode:100644) +3 -3
@@ -156,14 +156,14 @@ goto Unlock; } - pr_debug("PM: Preparing system for suspend\n"); + pr_debug("PM: Preparing system for %s sleep\n", pm_states[state]); if ((error = suspend_prepare(state))) goto Unlock; - pr_debug("PM: Entering state.\n"); + pr_debug("PM: Entering %s sleep\n", pm_states[state]); error = suspend_enter(state); - pr_debug("PM: Finishing up.\n"); + pr_debug("PM: Finishing wakeup.\n"); suspend_finish(state); Unlock: up(&pm_sem);
PATCH 1/1 Driver Core: remove driver model detach_state
[PATCH] Driver Core: remove driver model detach_state
The driver model has a "detach_state" mechanism that:
- Has never been used by any in-kernel drive;
- Is superfluous, since driver remove() methods can do the same thing;
- Became buggy when the suspend() parameter changed semantics and type;
- Could self-deadlock when called from certain suspend contexts;
- Is effectively wasted documentation, object code, and headspace.
This removes that "detach_state" mechanism; net code shrink, as well as a per-device saving in the driver model and sysfs.
---
commit 0b405a0f7e4d4d18fd1fe46ddf5ff465443036ab
tree 49d74df6eddfdd095c650e0af34cde7f4548a2d5
parent 82428b62aa6294ea640c7e920a9224ecaf46db65
author David Brownell <[email protected]> Thu, 12 May 2005 12:06:27 -0700 committer Greg KH <[email protected]> Tue, 17 May 2005 14:54:55 -0700
Documentation/filesystems/sysfs-pci.txt | 6 +-- Documentation/power/devices.txt | 21 ------------- Documentation/powerpc/hvcs.txt | 4 +- drivers/base/Makefile | 2 - drivers/base/bus.c | 1 drivers/base/core.c | 3 - drivers/base/interface.c | 51 -------------------------------- drivers/base/power/power.h | 11 ------ drivers/base/power/shutdown.c | 16 ---------- include/linux/device.h | 3 - 10 files changed, 5 insertions(+), 113 deletions(-)
Documentation/filesystems/sysfs-pci.txt (mode:100644) +2 -4
@@ -7,7 +7,6 @@ |-- 0000:17:00.0 | |-- class | |-- config - | |-- detach_state | |-- device | |-- irq | |-- local_cpus
@@ -19,7 +18,7 @@ | |-- subsystem_device | |-- subsystem_vendor | `-- vendor - `-- detach_state + `-- ... The topmost element describes the PCI domain and bus number. In this case, the domain number is 0000 and the bus number is 17 (both values are in hex).
@@ -31,7 +30,6 @@ ---- -------- class PCI class (ascii, ro) config PCI config space (binary, rw) - detach_state connection status (bool, rw) device PCI device (ascii, ro) irq IRQ number (ascii, ro) local_cpus nearby CPU mask (cpumask, ro)
@@ -85,4 +83,4 @@ Legacy resources are protected by the HAVE_PCI_LEGACY define. Platforms wishing to support legacy functionality should define it and provide -pci_legacy_read, pci_legacy_write and pci_mmap_legacy_page_range functions. +pci_legacy_read, pci_legacy_write and pci_mmap_legacy_page_range functions.
Documentation/power/devices.txt (mode:100644) +0 -21
@@ -207,27 +207,6 @@ #READY_AFTER_RESUME # -Driver Detach Power Management - -The kernel now supports the ability to place a device in a low-power -state when it is detached from its driver, which happens when its -module is removed. - -Each device contains a 'detach_state' file in its sysfs directory -which can be used to control this state. Reading from this file -displays what the current detach state is set to. This is 0 (On) by -default. A user may write a positive integer value to this file in the -range of 1-4 inclusive. - -A value of 1-3 will indicate the device should be placed in that -low-power state, which will cause ->suspend() to be called for that -device. A value of 4 indicates that the device should be shutdown, so -->shutdown() will be called for that device. - -The driver is responsible for reinitializing the device when the -module is re-inserted during it's ->probe() (or equivalent) method. -The driver core will not call any extra functions when binding the -device to the driver. pm_message_t meaning
Documentation/powerpc/hvcs.txt (mode:100644) +2 -2
@@ -347,8 +347,8 @@ looks like the following: Pow5:/sys/bus/vio/drivers/hvcs/30000004 # ls - . current_vty devspec name partner_vtys - .. detach_state index partner_clcs vterm_state + . current_vty devspec name partner_vtys + .. index partner_clcs vterm_state Each entry is provided, by default with a "name" attribute. Reading the "name" attribute will reveal the device type as shown in the following
drivers/base/Makefile (mode:100644) +1 -1
@@ -1,6 +1,6 @@ # Makefile for the Linux device tree -obj-y := core.o sys.o interface.o bus.o \ +obj-y := core.o sys.o bus.o \ driver.o class.o class_simple.o platform.o \ cpu.o firmware.o init.o map.o dmapool.o \ attribute_container.o transport_class.o
drivers/base/bus.c (mode:100644) +0 -1
@@ -390,7 +390,6 @@ sysfs_remove_link(&drv->kobj, kobject_name(&dev->kobj)); sysfs_remove_link(&dev->kobj, "driver"); list_del_init(&dev->driver_list); - device_detach_shutdown(dev); if (drv->remove) drv->remove(dev); dev->driver = NULL;
drivers/base/core.c (mode:100644) +0 -3
@@ -31,8 +31,6 @@ #define to_dev(obj) container_of(obj, struct device, kobj) #define to_dev_attr(_attr) container_of(_attr, struct device_attribute, attr) -extern struct attribute * dev_default_attrs[]; - static ssize_t dev_attr_show(struct kobject * kobj, struct attribute * attr, char * buf) {
@@ -89,7 +87,6 @@ static struct kobj_type ktype_device = { .release = device_release, .sysfs_ops = &dev_sysfs_ops, - .default_attrs = dev_default_attrs, };
dev/null (tree:49d74df6eddfdd095c650e0af34cde7f4548a2d5) renamed from drivers/base/interface.c (mode:100644) +0 -51
51 lines not on this page · raw message
drivers/base/power/power.h (mode:100644) +0 -11
@@ -1,18 +1,7 @@ - - -enum { - DEVICE_PM_ON, - DEVICE_PM1, - DEVICE_PM2, - DEVICE_PM3, - DEVICE_PM_OFF, -}; - /* * shutdown.c */ -extern int device_detach_shutdown(struct device *); extern void device_shutdown(void);
drivers/base/power/shutdown.c (mode:100644) +0 -16
@@ -19,22 +19,6 @@ extern struct subsystem devices_subsys; -int device_detach_shutdown(struct device * dev) -{ - if (!dev->detach_state) - return 0; - - if (dev->detach_state == DEVICE_PM_OFF) { - if (dev->driver && dev->driver->shutdown) { - dev_dbg(dev, "shutdown\n"); - dev->driver->shutdown(dev); - } - return 0; - } - return dpm_runtime_suspend(dev, dev->detach_state); -} - - /** * We handle system devices differently - we suspend and shut them * down last and resume them first. That way, we don't do anything stupid like
include/linux/device.h (mode:100644) +0 -3
@@ -273,9 +273,6 @@ BIOS data relevant to device) */ struct dev_pm_info power; - u32 detach_state; /* State to enter when device is - detached from its driver. */ - u64 *dma_mask; /* dma mask (if dma'able device) */ u64 coherent_dma_mask;/* Like dma_mask, but for alloc_coherent mappings as
Re: [PATCH] Driver Core: remove driver model detach_state
Quoted 4 lines · Greg KH
[PATCH] Driver Core: remove driver model
detach_stateThe driver model has a "
detach_state" mechanism that:
Quoted 8 lines
- Has never been used by any in-kernel drive;
- Is superfluous, since driverremove()methods can do the same thing;
- Became buggy when thesuspend()parameter changed semantics and type;
- Could self-deadlock when called from certain suspend contexts;
- Is effectively wasted documentation, object code, and headspace.This removes that "
detach_state" mechanism; net code shrink, as well as a per-device saving in the driver model and sysfs.
Huh, we need to fix a lot of userspace programs now. libsysfs depends on finding that file, udev waits for this to recognize sysfs population. I will go fix this where I know this is used, but be prepared for stupid failures... :)
Thanks,
Kay
Re: [PATCH] Driver Core: remove driver model detach_state
Quoted 11 lines · Kay Sievers
Quoted 10 lines · Greg KH
[PATCH] Driver Core: remove driver model
detach_stateThe driver model has a "
detach_state" mechanism that:- Has never been used by any in-kernel drive;
- Is superfluous, since driverremove()methods can do the same thing;
- Became buggy when thesuspend()parameter changed semantics and type;
- Could self-deadlock when called from certain suspend contexts;
- Is effectively wasted documentation, object code, and headspace.
Quoted 7 lines
Quoted 2 lines
This removes that "
detach_state" mechanism; net code shrink, as well as a per-device saving in the driver model and sysfs.Huh, we need to fix a lot of userspace programs now. libsysfs depends on finding that file, udev waits for this to recognize sysfs population. I will go fix this where I know this is used, but be prepared for stupid failures... :)
Yeah, good catch, so that's why udev stoped working for me on some custom rules...
Anyway, I think it was pretty stupid for libsysfs to depend on that file, I'll work on fixing that up. Luckily, no one uses libsysfs :)
thanks,
greg k-h
Quoted 9 lines · Greg KH
Here are 2 patches for the 2.6.12-rc4 tree that clean up some driver core stuff. Both of these patches have been in the -mm tree for a while.
Please pull from:
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6.git/Full patches will be sent to the linux-kernel mailing list, if anyone wants to see them.
Oh crap, I updated the rsync tree, but never did the HEAD file, sorry about that. I'll not use the --ignore-existing flag to rsync again...
So, could you please pull from this repo again?
thanks,
greg k-h
Quoted 2 lines · Greg KH
So, could you please pull from this repo again?
Done.
Linus