All of lore.kernel.org
 help / color / mirror / Atom feed
From: Saravana Kannan <skannan@codeaurora.org>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: Viresh Kumar <viresh.kumar@linaro.org>,
	"Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>,
	"linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	linux-arm-msm@vger.kernel.org,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH] cpufreq: Set policy to non-NULL only after all hotplug online work is done
Date: Tue, 25 Feb 2014 13:11:27 -0800	[thread overview]
Message-ID: <530D06FF.201@codeaurora.org> (raw)
In-Reply-To: <15001517.xLHO8lGdWr@vostro.rjw.lan>

On 02/25/2014 05:04 AM, Rafael J. Wysocki wrote:
> On Tuesday, February 25, 2014 02:20:57 PM Viresh Kumar wrote:
>> On 25 February 2014 01:53, Saravana Kannan <skannan@codeaurora.org> wrote:
>>> I was simplifying the scenario that causes it. We change the min/max using
>>> ADJUST notifiers for multiple reasons -- thermal being one of them.
>>>
>>> thermal/cpu_cooling is one example of it.
>>
>> Just to understand the clear picture, you are actually hitting this bug? Or
>> is this only a theoretical bug?
>>
This is a real bug. But the actual caller of cpufreq_update_policy() is 
a driver that's local to our tree. I'm just giving examples of upstream 
code that act in a similar way.

>>> So, cpufreq_update_policy() can be called on any CPU. If that races with
>>> someone offlining a CPU and onlining it, you'll get this crash.
>>
>> Then shouldn't that be fixed by locks? I think yes. That makes me agree with
>> Srivatsa more here.
>>
>> Though I would say that your argument was also valid that 'policy' shouldn't be
>> up for sale unless it is prepared to. And for that reason only I
>> floated that question
>> earlier: What exactly we need to make sure is initialized in policy? Because
>> policy might keep changing in future as well and that needs locks to protect
>> that stuff. Like min/max/governor/ etc..
>
> Well, that depends on what the current users expect it to look like initially.
> It should be initialized to the point in which all of them can handle it
> correctly.

Yes, so let's not make it available until all of it is initialized. I 
don't like the piece meal check. 6 months down the lane someone making 
changes might not remember this. The problem also applies for drivers 
that might not be upstreamed, etc.

>> So, probably a solution here might be a mix of both. Initialize policy to this
>> minimum level and then make sure locking is used correctly..
>
> Yes.

Rafael, It's not clear what you mean by the yes. Do you want to 
initialize it partly and make it available. I think that's always wrong.

>>> The idea would exist, but we can just call cpufreq_generic_get() and pass it
>>> policy->clk if it is not NULL. Does that work for you?
>>
>> No. Not all drivers implement clk interface. And so clk doesn't look to be the
>> right parameter. I thought maybe 'policy' can be the right parameter and
>> then people can get use policy->cpu to get cpu id out of it.
>>
>> But even that doesn't look to be a great idea. X86 drivers may share policy
>> structure for CPUs that don't actually share a clock line. And so they do need
>> right CPU number as parameter instead of policy. As they might be doing
>> some tricky stuff there. Also, we need to make sure that ->get() returns
>> the frequency at which CPU x is running.
>
> That's not going to work in at least some cases anyway, because for some types
> of HW we simply can't retrieve the current frequency in a non-racy way.

I think there's been a misunderstanding of what I'm proposing. The 
reference to policy->clk is only to get rid of the dependency that 
cpufreq_generic_get() has on the per cpu policy variable being filled. 
You can do that by just removing calls to get _IF_ clk is filled in.

Viresh,

I'll look at the patches later today and respond. Although, I would have 
been nice you had helped me fix any issues with my patch than coming up 
with new ones. Kinda removes to motivation for submitting patches upstream.

Regards,
Saravana

-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
hosted by The Linux Foundation

WARNING: multiple messages have this Message-ID (diff)
From: skannan@codeaurora.org (Saravana Kannan)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] cpufreq: Set policy to non-NULL only after all hotplug online work is done
Date: Tue, 25 Feb 2014 13:11:27 -0800	[thread overview]
Message-ID: <530D06FF.201@codeaurora.org> (raw)
In-Reply-To: <15001517.xLHO8lGdWr@vostro.rjw.lan>

On 02/25/2014 05:04 AM, Rafael J. Wysocki wrote:
> On Tuesday, February 25, 2014 02:20:57 PM Viresh Kumar wrote:
>> On 25 February 2014 01:53, Saravana Kannan <skannan@codeaurora.org> wrote:
>>> I was simplifying the scenario that causes it. We change the min/max using
>>> ADJUST notifiers for multiple reasons -- thermal being one of them.
>>>
>>> thermal/cpu_cooling is one example of it.
>>
>> Just to understand the clear picture, you are actually hitting this bug? Or
>> is this only a theoretical bug?
>>
This is a real bug. But the actual caller of cpufreq_update_policy() is 
a driver that's local to our tree. I'm just giving examples of upstream 
code that act in a similar way.

>>> So, cpufreq_update_policy() can be called on any CPU. If that races with
>>> someone offlining a CPU and onlining it, you'll get this crash.
>>
>> Then shouldn't that be fixed by locks? I think yes. That makes me agree with
>> Srivatsa more here.
>>
>> Though I would say that your argument was also valid that 'policy' shouldn't be
>> up for sale unless it is prepared to. And for that reason only I
>> floated that question
>> earlier: What exactly we need to make sure is initialized in policy? Because
>> policy might keep changing in future as well and that needs locks to protect
>> that stuff. Like min/max/governor/ etc..
>
> Well, that depends on what the current users expect it to look like initially.
> It should be initialized to the point in which all of them can handle it
> correctly.

Yes, so let's not make it available until all of it is initialized. I 
don't like the piece meal check. 6 months down the lane someone making 
changes might not remember this. The problem also applies for drivers 
that might not be upstreamed, etc.

>> So, probably a solution here might be a mix of both. Initialize policy to this
>> minimum level and then make sure locking is used correctly..
>
> Yes.

Rafael, It's not clear what you mean by the yes. Do you want to 
initialize it partly and make it available. I think that's always wrong.

>>> The idea would exist, but we can just call cpufreq_generic_get() and pass it
>>> policy->clk if it is not NULL. Does that work for you?
>>
>> No. Not all drivers implement clk interface. And so clk doesn't look to be the
>> right parameter. I thought maybe 'policy' can be the right parameter and
>> then people can get use policy->cpu to get cpu id out of it.
>>
>> But even that doesn't look to be a great idea. X86 drivers may share policy
>> structure for CPUs that don't actually share a clock line. And so they do need
>> right CPU number as parameter instead of policy. As they might be doing
>> some tricky stuff there. Also, we need to make sure that ->get() returns
>> the frequency at which CPU x is running.
>
> That's not going to work in at least some cases anyway, because for some types
> of HW we simply can't retrieve the current frequency in a non-racy way.

I think there's been a misunderstanding of what I'm proposing. The 
reference to policy->clk is only to get rid of the dependency that 
cpufreq_generic_get() has on the per cpu policy variable being filled. 
You can do that by just removing calls to get _IF_ clk is filled in.

Viresh,

I'll look at the patches later today and respond. Although, I would have 
been nice you had helped me fix any issues with my patch than coming up 
with new ones. Kinda removes to motivation for submitting patches upstream.

Regards,
Saravana

-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
hosted by The Linux Foundation

  parent reply	other threads:[~2014-02-25 21:11 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-24  6:57 [PATCH] cpufreq: Set policy to non-NULL only after all hotplug online work is done Saravana Kannan
2014-02-24  6:57 ` Saravana Kannan
2014-02-24  7:42 ` Srivatsa S. Bhat
2014-02-24  7:42   ` Srivatsa S. Bhat
2014-02-24  8:11   ` Viresh Kumar
2014-02-24  8:11     ` Viresh Kumar
2014-02-24  8:41     ` skannan
2014-02-24  8:41       ` skannan at codeaurora.org
2014-02-24  8:43       ` Viresh Kumar
2014-02-24  8:43         ` Viresh Kumar
2014-02-24  8:47         ` skannan
2014-02-24  8:47           ` skannan at codeaurora.org
2014-02-24  8:50           ` Viresh Kumar
2014-02-24  8:50             ` Viresh Kumar
2014-02-24  9:00             ` skannan
2014-02-24  9:00               ` skannan at codeaurora.org
2014-02-24  8:39   ` skannan
2014-02-24  8:39     ` skannan at codeaurora.org
2014-02-24 10:55     ` Viresh Kumar
2014-02-24 10:55       ` Viresh Kumar
2014-02-24 20:23       ` Saravana Kannan
2014-02-24 20:23         ` Saravana Kannan
2014-02-25  8:50         ` Viresh Kumar
2014-02-25  8:50           ` Viresh Kumar
2014-02-25 13:04           ` Rafael J. Wysocki
2014-02-25 13:04             ` Rafael J. Wysocki
2014-02-25 14:40             ` Viresh Kumar
2014-02-25 14:40               ` Viresh Kumar
2014-02-25 14:40               ` Viresh Kumar
2014-02-25 21:11             ` Saravana Kannan [this message]
2014-02-25 21:11               ` Saravana Kannan
2014-02-25 22:41               ` Rafael J. Wysocki
2014-02-25 22:41                 ` Rafael J. Wysocki
2014-02-26  1:48                 ` Saravana Kannan
2014-02-26  1:48                   ` Saravana Kannan
2014-02-26  6:02                   ` Viresh Kumar
2014-02-26  6:02                     ` Viresh Kumar
2014-02-26 20:20                     ` Saravana Kannan
2014-02-26 20:20                       ` Saravana Kannan
2014-02-26  3:38                 ` [PATCH 1/3] cpufreq: stats: Remove redundant cpufreq_cpu_get() call Saravana Kannan
2014-02-26  3:38                   ` Saravana Kannan
2014-02-26  5:06                   ` Viresh Kumar
2014-02-26  5:06                     ` Viresh Kumar
2014-02-26 20:04                     ` Saravana Kannan
2014-02-26 20:04                       ` Saravana Kannan
2014-02-26  3:38                 ` [PATCH 2/3] cpufreq: stats: Fix error handling in __cpufreq_stats_create_table() Saravana Kannan
2014-02-26  3:38                   ` Saravana Kannan
2014-02-26  3:38                   ` Saravana Kannan
2014-02-26  5:11                   ` Viresh Kumar
2014-02-26  5:11                     ` Viresh Kumar
2014-02-26  3:38                 ` [PATCH 3/3] cpufreq: Set policy to non-NULL only after all hotplug online work is done Saravana Kannan
2014-02-26  3:38                   ` Saravana Kannan
2014-02-26  6:14                   ` Viresh Kumar
2014-02-26  6:14                     ` Viresh Kumar
2014-02-26  5:20               ` [PATCH] " Viresh Kumar
2014-02-26  5:20                 ` Viresh Kumar

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=530D06FF.201@codeaurora.org \
    --to=skannan@codeaurora.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rjw@rjwysocki.net \
    --cc=srivatsa.bhat@linux.vnet.ibm.com \
    --cc=viresh.kumar@linaro.org \
    /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.