From: Zhang Rui <rui.zhang@intel.com>
To: Yi Zeng <yizeng@asrmicro.com>,
edubezval@gmail.com, linux-pm@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] thermal: power_allocator: fix one race condition issue for thermal_instances list
Date: Wed, 27 Dec 2017 10:14:31 +0800 [thread overview]
Message-ID: <1514340871.2755.6.camel@intel.com> (raw)
In-Reply-To: <1514287346-6224-1-git-send-email-yizeng@asrmicro.com>
On Tue, 2017-12-26 at 19:22 +0800, Yi Zeng wrote:
> When invoking allow_maximum_power and traverse tz->thermal_instances,
> we should grab thermal_zone_device->lock to avoid race condition. For
> example, during the system reboot, if the mali GPU device implements
> device shutdown callback and unregister GPU devfreq cooling device,
> the deleted list head may be accessed to cause panic, as the
> following
> log shows:
>
> [ 33.551070] c3 25 (kworker/3:0) Unable to handle kernel paging
> request at virtual address dead000000000070
> [ 33.566708] c3 25 (kworker/3:0) pgd = ffffffc0ed290000
> [ 33.572071] c3 25 (kworker/3:0) [dead000000000070]
> *pgd=00000001ed292003, *pud=00000001ed292003, *pmd=0000000000000000
> [ 33.581515] c3 25 (kworker/3:0) Internal error: Oops: 96000004
> [#1] PREEMPT SMP
> [ 33.599761] c3 25 (kworker/3:0) CPU: 3 PID: 25 Comm: kworker/3:0
> Not tainted 4.4.35+ #912
> [ 33.614137] c3 25 (kworker/3:0) Workqueue: events_freezable
> thermal_zone_device_check
> [ 33.620245] c3 25 (kworker/3:0) task: ffffffc0f32e4200 ti:
> ffffffc0f32f0000 task.ti: ffffffc0f32f0000
> [ 33.629466] c3 25 (kworker/3:0) PC is at
> power_allocator_throttle+0x7c8/0x8a4
> [ 33.636609] c3 25 (kworker/3:0) LR is at
> power_allocator_throttle+0x808/0x8a4
> [ 33.643742] c3 25 (kworker/3:0) pc : [<ffffff8008683dd0>] lr :
> [<ffffff8008683e10>] pstate: 20000145
> [ 33.652874] c3 25 (kworker/3:0) sp : ffffffc0f32f3bb0
> [ 34.468519] c3 25 (kworker/3:0) Process kworker/3:0 (pid: 25,
> stack limit = 0xffffffc0f32f0020)
> [ 34.477220] c3 25 (kworker/3:0) Stack: (0xffffffc0f32f3bb0 to
> 0xffffffc0f32f4000)
> [ 34.819822] c3 25 (kworker/3:0) Call trace:
> [ 34.824021] c3 25 (kworker/3:0) Exception stack(0xffffffc0f32f39c0
> to 0xffffffc0f32f3af0)
> [ 34.924993] c3 25 (kworker/3:0) [<ffffff8008683dd0>]
> power_allocator_throttle+0x7c8/0x8a4
> [ 34.933184] c3 25 (kworker/3:0) [<ffffff80086807f4>]
> handle_thermal_trip.part.25+0x70/0x224
> [ 34.941545] c3 25 (kworker/3:0) [<ffffff8008680a68>]
> thermal_zone_device_update+0xc0/0x20c
> [ 34.949818] c3 25 (kworker/3:0) [<ffffff8008680bd4>]
> thermal_zone_device_check+0x20/0x2c
> [ 34.957924] c3 25 (kworker/3:0) [<ffffff80080b93a4>]
> process_one_work+0x168/0x458
> [ 34.965414] c3 25 (kworker/3:0) [<ffffff80080ba068>]
> worker_thread+0x13c/0x4b4
> [ 34.972650] c3 25 (kworker/3:0) [<ffffff80080c0a4c>]
> kthread+0xe8/0xfc
> [ 34.979187] c3 25 (kworker/3:0) [<ffffff8008084e90>]
> ret_from_fork+0x10/0x40
> [ 34.986244] c3 25 (kworker/3:0) Code: f9405e73 eb1302bf d102e273
> 54ffc460 (b9402a61)
> [ 34.994339] c3 25 (kworker/3:0) ---[ end trace 32057901e3b7e1db ]-
> --
>
> Signed-off-by: Yi Zeng <yizeng@asrmicro.com>
applied.
thanks,
rui
> ---
> drivers/thermal/power_allocator.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/thermal/power_allocator.c
> b/drivers/thermal/power_allocator.c
> index b4d3116..3055f9a 100644
> --- a/drivers/thermal/power_allocator.c
> +++ b/drivers/thermal/power_allocator.c
> @@ -523,6 +523,7 @@ static void allow_maximum_power(struct
> thermal_zone_device *tz)
> struct thermal_instance *instance;
> struct power_allocator_params *params = tz->governor_data;
>
> + mutex_lock(&tz->lock);
> list_for_each_entry(instance, &tz->thermal_instances,
> tz_node) {
> if ((instance->trip != params-
> >trip_max_desired_temperature) ||
> (!cdev_is_power_actor(instance->cdev)))
> @@ -534,6 +535,7 @@ static void allow_maximum_power(struct
> thermal_zone_device *tz)
> mutex_unlock(&instance->cdev->lock);
> thermal_cdev_update(instance->cdev);
> }
> + mutex_unlock(&tz->lock);
> }
>
> /**
prev parent reply other threads:[~2017-12-27 2:14 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-26 11:22 [PATCH] thermal: power_allocator: fix one race condition issue for thermal_instances list Yi Zeng
2017-12-26 11:22 ` Yi Zeng
2017-12-27 2:14 ` Zhang Rui [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1514340871.2755.6.camel@intel.com \
--to=rui.zhang@intel.com \
--cc=edubezval@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=yizeng@asrmicro.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.