浏览代码

Pull bugfix into test branch

Conflicts:

	kernel/power/disk.c
Len Brown 18 年之前
父节点
当前提交
cfee47f99b
共有 3 个文件被更改,包括 14 次插入12 次删除
  1. 8 8
      drivers/acpi/dock.c
  2. 5 3
      kernel/power/disk.c
  3. 1 1
      kernel/power/main.c

+ 8 - 8
drivers/acpi/dock.c

@@ -48,7 +48,7 @@ struct dock_station {
 	unsigned long last_dock_time;
 	unsigned long last_dock_time;
 	u32 flags;
 	u32 flags;
 	spinlock_t dd_lock;
 	spinlock_t dd_lock;
-	spinlock_t hp_lock;
+	struct mutex hp_lock;
 	struct list_head dependent_devices;
 	struct list_head dependent_devices;
 	struct list_head hotplug_devices;
 	struct list_head hotplug_devices;
 };
 };
@@ -118,9 +118,9 @@ static void
 dock_add_hotplug_device(struct dock_station *ds,
 dock_add_hotplug_device(struct dock_station *ds,
 			struct dock_dependent_device *dd)
 			struct dock_dependent_device *dd)
 {
 {
-	spin_lock(&ds->hp_lock);
+	mutex_lock(&ds->hp_lock);
 	list_add_tail(&dd->hotplug_list, &ds->hotplug_devices);
 	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,
 dock_del_hotplug_device(struct dock_station *ds,
 			struct dock_dependent_device *dd)
 			struct dock_dependent_device *dd)
 {
 {
-	spin_lock(&ds->hp_lock);
+	mutex_lock(&ds->hp_lock);
 	list_del(&dd->hotplug_list);
 	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;
 	struct dock_dependent_device *dd;
 
 
-	spin_lock(&ds->hp_lock);
+	mutex_lock(&ds->hp_lock);
 
 
 	/*
 	/*
 	 * First call driver specific hotplug functions
 	 * First call driver specific hotplug functions
@@ -321,7 +321,7 @@ static void hotplug_dock_devices(struct dock_station *ds, u32 event)
 		else
 		else
 			dock_create_acpi_device(dd->handle);
 			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)
 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->dependent_devices);
 	INIT_LIST_HEAD(&dock_station->hotplug_devices);
 	INIT_LIST_HEAD(&dock_station->hotplug_devices);
 	spin_lock_init(&dock_station->dd_lock);
 	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);
 	ATOMIC_INIT_NOTIFIER_HEAD(&dock_notifier_list);
 
 
 	/* initialize platform device stuff */
 	/* initialize platform device stuff */

+ 5 - 3
kernel/power/disk.c

@@ -60,9 +60,11 @@ static void power_down(suspend_disk_method_t mode)
 {
 {
 	switch(mode) {
 	switch(mode) {
 	case PM_DISK_PLATFORM:
 	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:
 	case PM_DISK_SHUTDOWN:
 		kernel_power_off();
 		kernel_power_off();
 		break;
 		break;

+ 1 - 1
kernel/power/main.c

@@ -29,7 +29,7 @@
 DEFINE_MUTEX(pm_mutex);
 DEFINE_MUTEX(pm_mutex);
 
 
 struct pm_ops *pm_ops;
 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. 
  *	pm_set_ops - Set the global power method table.