Re: [PATCH v6 2/8] cpufreq: Add boost frequency support in core

Viresh Kumar
2013-07-26T09:33:35Z

On 26 July 2013 14:03, Lukasz Majewski <l.majewski@samsung.com> wrote:
> On Fri, 26 Jul 2013 12:47:15 +0530 Viresh Kumar wrote,
>> On 25 July 2013 22:03, Lukasz Majewski <l.majewski@samsung.com> wrote:

>> > +int cpufreq_boost_trigger_state(int state)
>> > +{
>> > + unsigned long flags;
>> > + int ret = 0;
>> > +
>> > + if (cpufreq_driver->boost_enabled == state)
>> > + return 0;
>> > +
>> > + write_lock_irqsave(&cpufreq_driver_lock, flags);
>> > + cpufreq_driver->boost_enabled = state;
>> > + write_unlock_irqrestore(&cpufreq_driver_lock, flags);
> ^^^^^^^^^^^^^^^^^^^^ [*]
>>
>> Not sure if we should leave the lock at this point of time, as we
>> haven't enabled boost until now.
>
> The problem here is with the cpufreq_driver->set_boost() call.
>
> I tried to avoid acquiring lock at one function and release it at
> another (in this case cpufreq_boost_set_sw), especially since the
> __cpufreq_governor() acquires its own lock - good place for deadlock.
>
> Is it OK for you to grab lock at one function
> (cpufreq_boost_trigger_state()) and then at other function
> (cpufreq_boost_set_sw) release it before calling __cpufreq_governor()
> and grab it again after its completion?

>> > + ret = cpufreq_driver->set_boost(state);
>> > + if (ret) {
>> > + write_lock_irqsave(&cpufreq_driver_lock, flags);
>> > + cpufreq_driver->boost_enabled = 0;
>>
>> should be:
>> cpufreq_driver->boost_enabled = !state;
>
> For me = 0 (or = false) is more readable.
> If you wish, I will change it to = !state.

Its not about readability but logic... What if boost was enabled
earlier and we are disabling it now.. and we reach here.. We
need to enable boost again, whereas you are disabling it.

>> > +int cpufreq_boost_supported(void)
>> > +{
>> > + if (cpufreq_driver)
>>
>> This routine is always called from places where cpufreq_driver
>> can't be NULL..
>
> It is also called from thermal. And it happens that thermal is
> initialized earlier.
> Then "NULL pointer dereference" happens.

Ok.. Put a likely() around this check for cpufreq_driver..

> In my opinion at [1] we don't need the if (cpufreq_driver) check.
> But it is up to you to decide.

leave it as is.

> If we agree about above comments, I will post v7 ASAP.

Don't post it ASAP, wait for few more days for others to give
comments.. And also I haven't finished reviewing it until
now.