From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2994627AbcBTLd1 (ORCPT ); Sat, 20 Feb 2016 06:33:27 -0500 Received: from mail-pf0-f172.google.com ([209.85.192.172]:35214 "EHLO mail-pf0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2994042AbcBTLdX (ORCPT ); Sat, 20 Feb 2016 06:33:23 -0500 From: Pingbo Wen To: eas-dev@lists.linaro.org Cc: mturquette@baylibre.com, smuckle@linaro.org, linux-kernel@vger.kernel.org, Pingbo Wen Subject: [PATCH] cpufreq_sched: set governor_data before waking up kschedfreq Date: Sat, 20 Feb 2016 19:32:46 +0800 Message-Id: <1455967966-11911-1-git-send-email-pingbo.wen@linaro.org> X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Fix null pointer dereference error liked below. This BUG can be easily re-produced by 'monkey --throttle 50' in android 6.0. Unable to handle kernel NULL pointer dereference at virtual address 00000010 [KERN Warning] check backtrace: CPU: 0 PID: 10714 Comm: kschedfreq:0 Tainted: Call trace: [] dump_backtrace+0x0/0x15c [] show_stack+0x10/0x1c [] dump_stack+0x74/0xb8 [] debug_locks_off+0x4c/0x7c [] oops_enter+0xc/0x28 [] die+0x2c/0x1a4 [] __do_kernel_fault.part.5+0x70/0x84 [] do_page_fault+0x344/0x348 [] do_translation_fault+0xbc/0xf0 [] do_mem_abort+0x38/0x9c [] el1_da+0x14/0x80 [] kthread+0xd4/0xec Signed-off-by: Pingbo Wen --- kernel/sched/cpufreq_sched.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kernel/sched/cpufreq_sched.c b/kernel/sched/cpufreq_sched.c index e1d208e..93731ef 100644 --- a/kernel/sched/cpufreq_sched.c +++ b/kernel/sched/cpufreq_sched.c @@ -265,6 +265,8 @@ static int cpufreq_sched_policy_init(struct cpufreq_policy *policy) pr_debug("%s: throttle threshold = %u [ns]\n", __func__, gd->throttle_nsec); + policy->governor_data = gd; + if (cpufreq_driver_is_slow()) { cpufreq_driver_slow = true; gd->task = kthread_create(cpufreq_sched_thread, policy, @@ -281,7 +283,6 @@ static int cpufreq_sched_policy_init(struct cpufreq_policy *policy) init_irq_work(&gd->irq_work, cpufreq_sched_irq_work); } - policy->governor_data = gd; set_sched_freq(); return 0; -- 1.9.1