From 533d7de8c0ee5d4fb4cff414af04174aff9474c7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E9=99=88=E4=BA=AE?= Date: Thu, 26 Jun 2014 04:27:24 -0700 Subject: [PATCH] fix BUG: sleeping function called from invalid context at kernel/mutex.c --- arch/arm/mach-rockchip/dvfs.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/arch/arm/mach-rockchip/dvfs.c b/arch/arm/mach-rockchip/dvfs.c index d6c70be7a862..6b12e0338b3c 100644 --- a/arch/arm/mach-rockchip/dvfs.c +++ b/arch/arm/mach-rockchip/dvfs.c @@ -62,26 +62,28 @@ static int clk_pd_gpu_notifier_call(struct notifier_block *nb, { int ret; - mutex_lock(&switch_vdd_gpu_mutex); switch (event) { case RK_CLK_PD_PREPARE: + mutex_lock(&switch_vdd_gpu_mutex); pd_gpu_off = 0; if (early_suspend) { if (!regulator_is_enabled(vdd_gpu_regulator)) ret = regulator_enable(vdd_gpu_regulator); } + mutex_unlock(&switch_vdd_gpu_mutex); break; case RK_CLK_PD_UNPREPARE: + mutex_lock(&switch_vdd_gpu_mutex); pd_gpu_off = 1; if (early_suspend) { if (regulator_is_enabled(vdd_gpu_regulator)) ret = regulator_disable(vdd_gpu_regulator); } + mutex_unlock(&switch_vdd_gpu_mutex); break; default: break; } - mutex_unlock(&switch_vdd_gpu_mutex); return NOTIFY_OK; } @@ -136,7 +138,6 @@ static struct notifier_block early_suspend_notifier = { .notifier_call = early_suspend_notifier_call, }; - static void dvfs_volt_up_delay(struct vd_node *vd, int new_volt, int old_volt) { int u_time; -- 2.34.1