diff options
author | Len Brown <len.brown@intel.com> | 2006-12-16 06:01:18 (GMT) |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2006-12-16 06:01:18 (GMT) |
commit | cfee47f99bc14a6d7c6b0be2284db2cef310a815 (patch) | |
tree | 2974594b06534c199ea9c4b39492d5a708bb539a | |
parent | 7e244322cd4ea361ef9ee623b3fcb4d9f4ff841c (diff) | |
parent | 9185cfa92507d07ac787bc73d06c42222eec7239 (diff) | |
download | linux-cfee47f99bc14a6d7c6b0be2284db2cef310a815.tar.xz |
Pull bugfix into test branch
Conflicts:
kernel/power/disk.c
-rw-r--r-- | drivers/acpi/dock.c | 16 | ||||
-rw-r--r-- | kernel/power/disk.c | 8 | ||||
-rw-r--r-- | kernel/power/main.c | 2 |
3 files changed, 14 insertions, 12 deletions
diff --git a/drivers/acpi/dock.c b/drivers/acpi/dock.c index 215f5b3..54ce12a 100644 --- a/drivers/acpi/dock.c +++ b/drivers/acpi/dock.c @@ -48,7 +48,7 @@ struct dock_station { unsigned long last_dock_time; u32 flags; spinlock_t dd_lock; - spinlock_t hp_lock; + struct mutex hp_lock; struct list_head dependent_devices; struct list_head hotplug_devices; }; @@ -118,9 +118,9 @@ static void dock_add_hotplug_device(struct dock_station *ds, struct dock_dependent_device *dd) { - spin_lock(&ds->hp_lock); + mutex_lock(&ds->hp_lock); list_add_tail(&dd->hotplug_list, &ds->hotplug_devices); - spin_unlock(&ds->hp_lock); + mutex_unlock(&ds->hp_lock); } /** @@ -134,9 +134,9 @@ static void dock_del_hotplug_device(struct dock_station *ds, struct dock_dependent_device *dd) { - spin_lock(&ds->hp_lock); + mutex_lock(&ds->hp_lock); list_del(&dd->hotplug_list); - spin_unlock(&ds->hp_lock); + mutex_unlock(&ds->hp_lock); } /** @@ -299,7 +299,7 @@ static void hotplug_dock_devices(struct dock_station *ds, u32 event) { struct dock_dependent_device *dd; - spin_lock(&ds->hp_lock); + mutex_lock(&ds->hp_lock); /* * First call driver specific hotplug functions @@ -321,7 +321,7 @@ static void hotplug_dock_devices(struct dock_station *ds, u32 event) else dock_create_acpi_device(dd->handle); } - spin_unlock(&ds->hp_lock); + mutex_unlock(&ds->hp_lock); } static void dock_event(struct dock_station *ds, u32 event, int num) @@ -681,7 +681,7 @@ static int dock_add(acpi_handle handle) INIT_LIST_HEAD(&dock_station->dependent_devices); INIT_LIST_HEAD(&dock_station->hotplug_devices); spin_lock_init(&dock_station->dd_lock); - spin_lock_init(&dock_station->hp_lock); + mutex_init(&dock_station->hp_lock); ATOMIC_INIT_NOTIFIER_HEAD(&dock_notifier_list); /* initialize platform device stuff */ diff --git a/kernel/power/disk.c b/kernel/power/disk.c index 0b00f56..88fc5d7 100644 --- a/kernel/power/disk.c +++ b/kernel/power/disk.c @@ -60,9 +60,11 @@ static void power_down(suspend_disk_method_t mode) { switch(mode) { case PM_DISK_PLATFORM: - kernel_shutdown_prepare(SYSTEM_SUSPEND_DISK); - pm_ops->enter(PM_SUSPEND_DISK); - break; + if (pm_ops && pm_ops->enter) { + kernel_shutdown_prepare(SYSTEM_SUSPEND_DISK); + pm_ops->enter(PM_SUSPEND_DISK); + break; + } case PM_DISK_SHUTDOWN: kernel_power_off(); break; diff --git a/kernel/power/main.c b/kernel/power/main.c index 500eb87..ff3a618 100644 --- a/kernel/power/main.c +++ b/kernel/power/main.c @@ -29,7 +29,7 @@ DEFINE_MUTEX(pm_mutex); struct pm_ops *pm_ops; -suspend_disk_method_t pm_disk_mode = PM_DISK_SHUTDOWN; +suspend_disk_method_t pm_disk_mode = PM_DISK_PLATFORM; /** * pm_set_ops - Set the global power method table. |