From: Alex Shi <alex.shi@linaro.org>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>,
Peter Zijlstra <peterz@infradead.org>
Cc: Mike Galbraith <efault@gmx.de>,
LKML <linux-kernel@vger.kernel.org>,
Rik van Riel <riel@redhat.com>
Subject: Re: 9908859acaa9 cpuidle/menu: add per CPU PM QoS resume latency consideration
Date: Thu, 23 Feb 2017 21:55:17 +0800 [thread overview]
Message-ID: <e8261472-4338-eab2-98e1-5dd6039899f7@linaro.org> (raw)
In-Reply-To: <2050688.jCOqd8xbcD@aspire.rjw.lan>
On 02/23/2017 08:15 PM, Rafael J. Wysocki wrote:
> On Wednesday, February 22, 2017 10:55:04 PM Alex Shi wrote:
>>>
>>> Its not hard; spinlock_t ends up being a mutex, and this is ran from the
>>> idle thread. What thread do you think we ought to run when we block
>>> idle?
>>>
>>
>> Straight right.
>> Thanks for explanations! :)
>
> I overlooked that, sorry.
>
> Shall we revert?
>
> I don't want RT to be broken because of this.
>
The RT kernel had a fix already. :)
This feature is very useful to save power of cpu. We could have a better fix
to keep this feature and good for RT.
>From cfe82c555628f7197ecd91d3b8092a98b34a371a Mon Sep 17 00:00:00 2001
From: Alex Shi <alex.shi@linaro.org>
Date: Thu, 23 Feb 2017 21:27:09 +0800
Subject: [PATCH] cpuidle/menu: skip lock in per cpu resume latency reading
dev_pm_qos_read_value using a lock to proctect the concurrent device
latency reading, that is useful for multiple cpu access a global device.
But it's not necessary for a per cpu data reading here. And furthermore,
RT kernel using mutex to replace spinlock causes fake panic here.
So, skip the lock using is nice for this per cpu value reading.
Signed-off-by: Alex Shi <alex.shi@linaro.org>
---
| 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
--git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c
index 8d6d25c..b852d99 100644
--- a/drivers/cpuidle/governors/menu.c
+++ b/drivers/cpuidle/governors/menu.c
@@ -273,6 +273,14 @@ static unsigned int get_typical_interval(struct menu_device *data)
goto again;
}
+int read_per_cpu_resume_latency(int cpu)
+{
+ struct device *dev = get_cpu_device(cpu);
+
+ return IS_ERR_OR_NULL(dev->power.qos) ?
+ 0 : pm_qos_read_value(&dev->power.qos->resume_latency);
+}
+
/**
* menu_select - selects the next idle state to enter
* @drv: cpuidle driver containing state data
@@ -281,13 +289,12 @@ static unsigned int get_typical_interval(struct menu_device *data)
static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev)
{
struct menu_device *data = this_cpu_ptr(&menu_devices);
- struct device *device = get_cpu_device(dev->cpu);
int latency_req = pm_qos_request(PM_QOS_CPU_DMA_LATENCY);
int i;
unsigned int interactivity_req;
unsigned int expected_interval;
unsigned long nr_iowaiters, cpu_load;
- int resume_latency = dev_pm_qos_read_value(device);
+ int resume_latency = read_per_cpu_resume_latency(dev->cpu);
if (data->needs_update) {
menu_update(drv, dev);
--
2.8.1.101.g72d917a
next prev parent reply other threads:[~2017-02-23 14:02 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-22 12:56 Mike Galbraith
2017-02-22 13:12 ` Peter Zijlstra
2017-02-22 13:19 ` Mike Galbraith
2017-02-22 14:31 ` Alex Shi
2017-02-22 14:39 ` Peter Zijlstra
2017-02-22 14:55 ` Alex Shi
2017-02-23 12:15 ` Rafael J. Wysocki
2017-02-23 13:08 ` Mike Galbraith
2017-02-23 13:58 ` Alex Shi
2017-02-23 13:55 ` Alex Shi [this message]
2017-02-23 22:34 ` Rafael J. Wysocki
2017-02-24 1:49 ` Alex Shi
2017-02-24 12:25 ` [PATCH] cpuidle: menu: Avoid taking spinlock for accessing QoS values Rafael J. Wysocki
2017-02-22 14:46 ` 9908859acaa9 cpuidle/menu: add per CPU PM QoS resume latency consideration Mike Galbraith
2017-02-22 14:53 ` Alex Shi
2017-02-22 15:03 ` Mike Galbraith
2017-02-22 15:36 ` Alex Shi
2017-02-22 15:46 ` Mike Galbraith
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=e8261472-4338-eab2-98e1-5dd6039899f7@linaro.org \
--to=alex.shi@linaro.org \
--cc=efault@gmx.de \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=riel@redhat.com \
--cc=rjw@rjwysocki.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®