diff options
author | Len Brown <len.brown@intel.com> | 2006-12-16 01:01:18 -0500 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2006-12-16 01:01:18 -0500 |
commit | cfee47f99bc14a6d7c6b0be2284db2cef310a815 (patch) | |
tree | 2974594b06534c199ea9c4b39492d5a708bb539a | |
parent | 7e244322cd4ea361ef9ee623b3fcb4d9f4ff841c (diff) | |
parent | 9185cfa92507d07ac787bc73d06c42222eec7239 (diff) |
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 215f5b30a1f1..54ce12ab43d7 100644 --- a/drivers/acpi/dock.c +++ b/drivers/acpi/dock.c | |||
@@ -48,7 +48,7 @@ struct dock_station { | |||
48 | unsigned long last_dock_time; | 48 | unsigned long last_dock_time; |
49 | u32 flags; | 49 | u32 flags; |
50 | spinlock_t dd_lock; | 50 | spinlock_t dd_lock; |
51 | spinlock_t hp_lock; | 51 | struct mutex hp_lock; |
52 | struct list_head dependent_devices; | 52 | struct list_head dependent_devices; |
53 | struct list_head hotplug_devices; | 53 | struct list_head hotplug_devices; |
54 | }; | 54 | }; |
@@ -118,9 +118,9 @@ static void | |||
118 | dock_add_hotplug_device(struct dock_station *ds, | 118 | dock_add_hotplug_device(struct dock_station *ds, |
119 | struct dock_dependent_device *dd) | 119 | struct dock_dependent_device *dd) |
120 | { | 120 | { |
121 | spin_lock(&ds->hp_lock); | 121 | mutex_lock(&ds->hp_lock); |
122 | list_add_tail(&dd->hotplug_list, &ds->hotplug_devices); | 122 | list_add_tail(&dd->hotplug_list, &ds->hotplug_devices); |
123 | spin_unlock(&ds->hp_lock); | 123 | mutex_unlock(&ds->hp_lock); |
124 | } | 124 | } |
125 | 125 | ||
126 | /** | 126 | /** |
@@ -134,9 +134,9 @@ static void | |||
134 | dock_del_hotplug_device(struct dock_station *ds, | 134 | dock_del_hotplug_device(struct dock_station *ds, |
135 | struct dock_dependent_device *dd) | 135 | struct dock_dependent_device *dd) |
136 | { | 136 | { |
137 | spin_lock(&ds->hp_lock); | 137 | mutex_lock(&ds->hp_lock); |
138 | list_del(&dd->hotplug_list); | 138 | list_del(&dd->hotplug_list); |
139 | spin_unlock(&ds->hp_lock); | 139 | mutex_unlock(&ds->hp_lock); |
140 | } | 140 | } |
141 | 141 | ||
142 | /** | 142 | /** |
@@ -299,7 +299,7 @@ static void hotplug_dock_devices(struct dock_station *ds, u32 event) | |||
299 | { | 299 | { |
300 | struct dock_dependent_device *dd; | 300 | struct dock_dependent_device *dd; |
301 | 301 | ||
302 | spin_lock(&ds->hp_lock); | 302 | mutex_lock(&ds->hp_lock); |
303 | 303 | ||
304 | /* | 304 | /* |
305 | * First call driver specific hotplug functions | 305 | * First call driver specific hotplug functions |
@@ -321,7 +321,7 @@ static void hotplug_dock_devices(struct dock_station *ds, u32 event) | |||
321 | else | 321 | else |
322 | dock_create_acpi_device(dd->handle); | 322 | dock_create_acpi_device(dd->handle); |
323 | } | 323 | } |
324 | spin_unlock(&ds->hp_lock); | 324 | mutex_unlock(&ds->hp_lock); |
325 | } | 325 | } |
326 | 326 | ||
327 | static void dock_event(struct dock_station *ds, u32 event, int num) | 327 | static void dock_event(struct dock_station *ds, u32 event, int num) |
@@ -681,7 +681,7 @@ static int dock_add(acpi_handle handle) | |||
681 | INIT_LIST_HEAD(&dock_station->dependent_devices); | 681 | INIT_LIST_HEAD(&dock_station->dependent_devices); |
682 | INIT_LIST_HEAD(&dock_station->hotplug_devices); | 682 | INIT_LIST_HEAD(&dock_station->hotplug_devices); |
683 | spin_lock_init(&dock_station->dd_lock); | 683 | spin_lock_init(&dock_station->dd_lock); |
684 | spin_lock_init(&dock_station->hp_lock); | 684 | mutex_init(&dock_station->hp_lock); |
685 | ATOMIC_INIT_NOTIFIER_HEAD(&dock_notifier_list); | 685 | ATOMIC_INIT_NOTIFIER_HEAD(&dock_notifier_list); |
686 | 686 | ||
687 | /* initialize platform device stuff */ | 687 | /* initialize platform device stuff */ |
diff --git a/kernel/power/disk.c b/kernel/power/disk.c index 0b00f56c2ad0..88fc5d7ac737 100644 --- a/kernel/power/disk.c +++ b/kernel/power/disk.c | |||
@@ -60,9 +60,11 @@ static void power_down(suspend_disk_method_t mode) | |||
60 | { | 60 | { |
61 | switch(mode) { | 61 | switch(mode) { |
62 | case PM_DISK_PLATFORM: | 62 | case PM_DISK_PLATFORM: |
63 | kernel_shutdown_prepare(SYSTEM_SUSPEND_DISK); | 63 | if (pm_ops && pm_ops->enter) { |
64 | pm_ops->enter(PM_SUSPEND_DISK); | 64 | kernel_shutdown_prepare(SYSTEM_SUSPEND_DISK); |
65 | break; | 65 | pm_ops->enter(PM_SUSPEND_DISK); |
66 | break; | ||
67 | } | ||
66 | case PM_DISK_SHUTDOWN: | 68 | case PM_DISK_SHUTDOWN: |
67 | kernel_power_off(); | 69 | kernel_power_off(); |
68 | break; | 70 | break; |
diff --git a/kernel/power/main.c b/kernel/power/main.c index 500eb87f643d..ff3a6182f5f0 100644 --- a/kernel/power/main.c +++ b/kernel/power/main.c | |||
@@ -29,7 +29,7 @@ | |||
29 | DEFINE_MUTEX(pm_mutex); | 29 | DEFINE_MUTEX(pm_mutex); |
30 | 30 | ||
31 | struct pm_ops *pm_ops; | 31 | struct pm_ops *pm_ops; |
32 | suspend_disk_method_t pm_disk_mode = PM_DISK_SHUTDOWN; | 32 | suspend_disk_method_t pm_disk_mode = PM_DISK_PLATFORM; |
33 | 33 | ||
34 | /** | 34 | /** |
35 | * pm_set_ops - Set the global power method table. | 35 | * pm_set_ops - Set the global power method table. |