Re: [Nouveau] [PATCH 3/3] drm/nouveau/therm: use workqueue to shutdown the machine

2013-02-08 Thread Martin Peres

On 03/02/2013 21:07, Marcin Slusarz wrote:

orderly_poweroff cannot be called from atomic context.

Signed-off-by: Marcin Slusarz marcin.slus...@gmail.com

Oops, my bad. Please add my signed-off-by.

___
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau


[Nouveau] [PATCH 3/3] drm/nouveau/therm: use workqueue to shutdown the machine

2013-02-03 Thread Marcin Slusarz
orderly_poweroff cannot be called from atomic context.

Signed-off-by: Marcin Slusarz marcin.slus...@gmail.com
---
 drivers/gpu/drm/nouveau/core/subdev/therm/temp.c | 18 --
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/core/subdev/therm/temp.c 
b/drivers/gpu/drm/nouveau/core/subdev/therm/temp.c
index 8f27b44..b37624a 100644
--- a/drivers/gpu/drm/nouveau/core/subdev/therm/temp.c
+++ b/drivers/gpu/drm/nouveau/core/subdev/therm/temp.c
@@ -90,6 +90,13 @@ nouveau_therm_sensor_get_threshold_state(struct 
nouveau_therm *therm,
return priv-sensor.alarm_state[thrs];
 }
 
+static void
+nv_poweroff_work(struct work_struct *work)
+{
+   orderly_poweroff(true);
+   kfree(work);
+}
+
 void nouveau_therm_sensor_event(struct nouveau_therm *therm,
enum nouveau_therm_thrs thrs,
enum nouveau_therm_thrs_direction dir)
@@ -128,8 +135,15 @@ void nouveau_therm_sensor_event(struct nouveau_therm 
*therm,
priv-emergency.pause(therm, active);
break;
case NOUVEAU_THERM_THRS_SHUTDOWN:
-   if (active)
-   orderly_poweroff(true);
+   if (active) {
+   struct work_struct *work;
+
+   work = kmalloc(sizeof(*work), GFP_ATOMIC);
+   if (work) {
+   INIT_WORK(work, nv_poweroff_work);
+   schedule_work(work);
+   }
+   }
break;
case NOUVEAU_THERM_THRS_NR:
break;
-- 
1.8.1

___
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau