Pull bugfix into test branch

Conflicts:

kernel/power/disk.c

Len Brown cfee47f9 7e244322

+14 -12
+8 -8
drivers/acpi/dock.c
··· 48 48 unsigned long last_dock_time; 49 49 u32 flags; 50 50 spinlock_t dd_lock; 51 - spinlock_t hp_lock; 51 + struct mutex hp_lock; 52 52 struct list_head dependent_devices; 53 53 struct list_head hotplug_devices; 54 54 }; ··· 118 118 dock_add_hotplug_device(struct dock_station *ds, 119 119 struct dock_dependent_device *dd) 120 120 { 121 - spin_lock(&ds->hp_lock); 121 + mutex_lock(&ds->hp_lock); 122 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 134 dock_del_hotplug_device(struct dock_station *ds, 135 135 struct dock_dependent_device *dd) 136 136 { 137 - spin_lock(&ds->hp_lock); 137 + mutex_lock(&ds->hp_lock); 138 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 299 { 300 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 305 * First call driver specific hotplug functions ··· 321 321 else 322 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 327 static void dock_event(struct dock_station *ds, u32 event, int num) ··· 681 681 INIT_LIST_HEAD(&dock_station->dependent_devices); 682 682 INIT_LIST_HEAD(&dock_station->hotplug_devices); 683 683 spin_lock_init(&dock_station->dd_lock); 684 - spin_lock_init(&dock_station->hp_lock); 684 + mutex_init(&dock_station->hp_lock); 685 685 ATOMIC_INIT_NOTIFIER_HEAD(&dock_notifier_list); 686 686 687 687 /* initialize platform device stuff */
+5 -3
kernel/power/disk.c
··· 60 60 { 61 61 switch(mode) { 62 62 case PM_DISK_PLATFORM: 63 - kernel_shutdown_prepare(SYSTEM_SUSPEND_DISK); 64 - pm_ops->enter(PM_SUSPEND_DISK); 65 - break; 63 + if (pm_ops && pm_ops->enter) { 64 + kernel_shutdown_prepare(SYSTEM_SUSPEND_DISK); 65 + pm_ops->enter(PM_SUSPEND_DISK); 66 + break; 67 + } 66 68 case PM_DISK_SHUTDOWN: 67 69 kernel_power_off(); 68 70 break;
+1 -1
kernel/power/main.c
··· 29 29 DEFINE_MUTEX(pm_mutex); 30 30 31 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 35 * pm_set_ops - Set the global power method table.