linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] kernel/sched/core.c: Avoid unused variable on non-SMP configs
@ 2018-09-08 19:05 Miguel Ojeda
  2018-09-09  9:36 ` Borislav Petkov
  0 siblings, 1 reply; 10+ messages in thread
From: Miguel Ojeda @ 2018-09-08 19:05 UTC (permalink / raw)
  To: Ingo Molnar, Peter Zijlstra; +Cc: linux-kernel

On non-SMP configs, when only one of CONFIG_{PARAVIRT,IRQ_TIME}_ACCOUNTING
is defined, we are declaring a variable (irq_delta or steal) which
is not used:

    kernel/sched/core.c: In function ‘update_rq_clock_task’:
    kernel/sched/core.c:139:17: warning: unused variable ‘irq_delta’ [-Wunused-variable]
      s64 steal = 0, irq_delta = 0;

The reason is that CONFIG_SMP guards HAVE_SCHED_AVG_IRQ, which in turn
disables the code guarded by HAVE_SCHED_AVG_IRQ.

Cc: Ingo Molnar <mingo@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
---
 kernel/sched/core.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 625bc9897f62..d662d1e11843 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -135,8 +135,11 @@ static void update_rq_clock_task(struct rq *rq, s64 delta)
  * In theory, the compile should just see 0 here, and optimize out the call
  * to sched_rt_avg_update. But I don't trust it...
  */
-#if defined(CONFIG_IRQ_TIME_ACCOUNTING) || defined(CONFIG_PARAVIRT_TIME_ACCOUNTING)
-	s64 steal = 0, irq_delta = 0;
+#if defined(HAVE_SCHED_AVG_IRQ) || defined(CONFIG_IRQ_TIME_ACCOUNTING)
+	s64 irq_delta = 0;
+#endif
+#if defined(HAVE_SCHED_AVG_IRQ) || defined(CONFIG_PARAVIRT_TIME_ACCOUNTING)
+	s64 steal = 0;
 #endif
 #ifdef CONFIG_IRQ_TIME_ACCOUNTING
 	irq_delta = irq_time_read(cpu_of(rq)) - rq->prev_irq_time;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH] kernel/sched/core.c: Avoid unused variable on non-SMP configs
  2018-09-08 19:05 [PATCH] kernel/sched/core.c: Avoid unused variable on non-SMP configs Miguel Ojeda
@ 2018-09-09  9:36 ` Borislav Petkov
  2018-09-09 14:48   ` Miguel Ojeda
  0 siblings, 1 reply; 10+ messages in thread
From: Borislav Petkov @ 2018-09-09  9:36 UTC (permalink / raw)
  To: Miguel Ojeda; +Cc: Ingo Molnar, Peter Zijlstra, linux-kernel

On Sat, Sep 08, 2018 at 09:05:53PM +0200, Miguel Ojeda wrote:
> On non-SMP configs, when only one of CONFIG_{PARAVIRT,IRQ_TIME}_ACCOUNTING
> is defined, we are declaring a variable (irq_delta or steal) which
> is not used:
> 
>     kernel/sched/core.c: In function ‘update_rq_clock_task’:
>     kernel/sched/core.c:139:17: warning: unused variable ‘irq_delta’ [-Wunused-variable]
>       s64 steal = 0, irq_delta = 0;
> 
> The reason is that CONFIG_SMP guards HAVE_SCHED_AVG_IRQ, which in turn
> disables the code guarded by HAVE_SCHED_AVG_IRQ.
> 
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: Peter Zijlstra <peterz@infradead.org>
> Signed-off-by: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
> ---
>  kernel/sched/core.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index 625bc9897f62..d662d1e11843 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -135,8 +135,11 @@ static void update_rq_clock_task(struct rq *rq, s64 delta)
>   * In theory, the compile should just see 0 here, and optimize out the call
>   * to sched_rt_avg_update. But I don't trust it...
>   */
> -#if defined(CONFIG_IRQ_TIME_ACCOUNTING) || defined(CONFIG_PARAVIRT_TIME_ACCOUNTING)
> -	s64 steal = 0, irq_delta = 0;
> +#if defined(HAVE_SCHED_AVG_IRQ) || defined(CONFIG_IRQ_TIME_ACCOUNTING)
> +	s64 irq_delta = 0;
> +#endif
> +#if defined(HAVE_SCHED_AVG_IRQ) || defined(CONFIG_PARAVIRT_TIME_ACCOUNTING)
> +	s64 steal = 0;
>  #endif
>  #ifdef CONFIG_IRQ_TIME_ACCOUNTING
>  	irq_delta = irq_time_read(cpu_of(rq)) - rq->prev_irq_time;
> -- 

Alternatively, if you don't want to let the crazy ifdeffery in that
function grow even more, you can simply do:

---
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 625bc9897f62..1728743360d4 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -136,7 +136,7 @@ static void update_rq_clock_task(struct rq *rq, s64 delta)
  * to sched_rt_avg_update. But I don't trust it...
  */
 #if defined(CONFIG_IRQ_TIME_ACCOUNTING) || defined(CONFIG_PARAVIRT_TIME_ACCOUNTING)
-	s64 steal = 0, irq_delta = 0;
+	s64 steal __maybe_unused = 0, irq_delta = 0;
 #endif
 #ifdef CONFIG_IRQ_TIME_ACCOUNTING
 	irq_delta = irq_time_read(cpu_of(rq)) - rq->prev_irq_time;

-- 
Regards/Gruss,
    Boris.

Good mailing practices for 400: avoid top-posting and trim the reply.

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH] kernel/sched/core.c: Avoid unused variable on non-SMP configs
  2018-09-09  9:36 ` Borislav Petkov
@ 2018-09-09 14:48   ` Miguel Ojeda
  2018-09-09 16:06     ` Borislav Petkov
  0 siblings, 1 reply; 10+ messages in thread
From: Miguel Ojeda @ 2018-09-09 14:48 UTC (permalink / raw)
  To: Borislav Petkov; +Cc: Ingo Molnar, Peter Zijlstra, linux-kernel

On Sun, Sep 9, 2018 at 11:36 AM, Borislav Petkov <bp@alien8.de> wrote:
>
> Alternatively, if you don't want to let the crazy ifdeffery in that
> function grow even more, you can simply do:
>
> ---
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index 625bc9897f62..1728743360d4 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -136,7 +136,7 @@ static void update_rq_clock_task(struct rq *rq, s64 delta)
>   * to sched_rt_avg_update. But I don't trust it...
>   */
>  #if defined(CONFIG_IRQ_TIME_ACCOUNTING) || defined(CONFIG_PARAVIRT_TIME_ACCOUNTING)
> -       s64 steal = 0, irq_delta = 0;
> +       s64 steal __maybe_unused = 0, irq_delta = 0;
>  #endif

Indeed. But note that the attribute needs to be written before the
variable name so that it applies to both variables (or write it twice)
--- see https://godbolt.org/z/cwOeXZ

Also, if we go that route, I would simply remove the #ifdef entirely.

Cheers,
Miguel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] kernel/sched/core.c: Avoid unused variable on non-SMP configs
  2018-09-09 14:48   ` Miguel Ojeda
@ 2018-09-09 16:06     ` Borislav Petkov
  2018-09-09 16:36       ` Miguel Ojeda
  0 siblings, 1 reply; 10+ messages in thread
From: Borislav Petkov @ 2018-09-09 16:06 UTC (permalink / raw)
  To: Miguel Ojeda; +Cc: Ingo Molnar, Peter Zijlstra, linux-kernel

On Sun, Sep 09, 2018 at 04:48:19PM +0200, Miguel Ojeda wrote:
> Indeed. But note that the attribute needs to be written before the
> variable name so that it applies to both variables (or write it twice)

It warns only about 'steal' - not the other one.

> Also, if we go that route, I would simply remove the #ifdef entirely.

Even better. The less ifdeffery the better.

-- 
Regards/Gruss,
    Boris.

Good mailing practices for 400: avoid top-posting and trim the reply.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] kernel/sched/core.c: Avoid unused variable on non-SMP configs
  2018-09-09 16:06     ` Borislav Petkov
@ 2018-09-09 16:36       ` Miguel Ojeda
  2018-09-09 16:45         ` Borislav Petkov
  0 siblings, 1 reply; 10+ messages in thread
From: Miguel Ojeda @ 2018-09-09 16:36 UTC (permalink / raw)
  To: Borislav Petkov; +Cc: Ingo Molnar, Peter Zijlstra, linux-kernel

Hi Borislav,

On Sun, Sep 9, 2018 at 6:06 PM, Borislav Petkov <bp@alien8.de> wrote:
> On Sun, Sep 09, 2018 at 04:48:19PM +0200, Miguel Ojeda wrote:
>> Indeed. But note that the attribute needs to be written before the
>> variable name so that it applies to both variables (or write it twice)
>
> It warns only about 'steal' - not the other one.

No, you get a different warning depending on whether you have enabled
CONFIG_PARAVIRT_TIME_ACCOUNTING or CONFIG_IRQ_TIME_ACCOUNTING.

In other words, !SMP && IRQ warns about "steal", while !SMP &&
PARAVIRT warns about "irq_delta" (the example warning I posted is for
this last case).

Cheers,
Miguel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] kernel/sched/core.c: Avoid unused variable on non-SMP configs
  2018-09-09 16:36       ` Miguel Ojeda
@ 2018-09-09 16:45         ` Borislav Petkov
  2018-09-09 16:59           ` Miguel Ojeda
  0 siblings, 1 reply; 10+ messages in thread
From: Borislav Petkov @ 2018-09-09 16:45 UTC (permalink / raw)
  To: Miguel Ojeda; +Cc: Ingo Molnar, Peter Zijlstra, linux-kernel

On Sun, Sep 09, 2018 at 06:36:01PM +0200, Miguel Ojeda wrote:
> No, you get a different warning depending on whether you have enabled
> CONFIG_PARAVIRT_TIME_ACCOUNTING or CONFIG_IRQ_TIME_ACCOUNTING.

Ok.

Still, adding __maybe_unused to both (or writing it before the name,
whatever works!) and dropping the ifdeffery is still better for
readability's sake than having more ifdeffery, IMO.

-- 
Regards/Gruss,
    Boris.

Good mailing practices for 400: avoid top-posting and trim the reply.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] kernel/sched/core.c: Avoid unused variable on non-SMP configs
  2018-09-09 16:45         ` Borislav Petkov
@ 2018-09-09 16:59           ` Miguel Ojeda
  2018-09-10  7:00             ` Vincent Guittot
  0 siblings, 1 reply; 10+ messages in thread
From: Miguel Ojeda @ 2018-09-09 16:59 UTC (permalink / raw)
  To: Borislav Petkov; +Cc: Ingo Molnar, Peter Zijlstra, linux-kernel

On Sun, Sep 9, 2018 at 6:45 PM, Borislav Petkov <bp@alien8.de> wrote:
> On Sun, Sep 09, 2018 at 06:36:01PM +0200, Miguel Ojeda wrote:
>> No, you get a different warning depending on whether you have enabled
>> CONFIG_PARAVIRT_TIME_ACCOUNTING or CONFIG_IRQ_TIME_ACCOUNTING.
>
> Ok.
>
> Still, adding __maybe_unused to both (or writing it before the name,
> whatever works!) and dropping the ifdeffery is still better for
> readability's sake than having more ifdeffery, IMO.

Agreed, it is quite confusing already. I tried to keep the style of
the code, but Ingo/Peter might prefer the cleanup. Let's see...

Cheers,
Miguel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] kernel/sched/core.c: Avoid unused variable on non-SMP configs
  2018-09-09 16:59           ` Miguel Ojeda
@ 2018-09-10  7:00             ` Vincent Guittot
  2018-09-10 10:32               ` Miguel Ojeda
  0 siblings, 1 reply; 10+ messages in thread
From: Vincent Guittot @ 2018-09-10  7:00 UTC (permalink / raw)
  To: miguel.ojeda.sandonis
  Cc: Borislav Petkov, Ingo Molnar, Peter Zijlstra, linux-kernel

On Sun, 9 Sep 2018 at 19:00, Miguel Ojeda
<miguel.ojeda.sandonis@gmail.com> wrote:
>
> On Sun, Sep 9, 2018 at 6:45 PM, Borislav Petkov <bp@alien8.de> wrote:
> > On Sun, Sep 09, 2018 at 06:36:01PM +0200, Miguel Ojeda wrote:
> >> No, you get a different warning depending on whether you have enabled
> >> CONFIG_PARAVIRT_TIME_ACCOUNTING or CONFIG_IRQ_TIME_ACCOUNTING.
> >
> > Ok.
> >
> > Still, adding __maybe_unused to both (or writing it before the name,
> > whatever works!) and dropping the ifdeffery is still better for
> > readability's sake than having more ifdeffery, IMO.
>
> Agreed, it is quite confusing already. I tried to keep the style of
> the code, but Ingo/Peter might prefer the cleanup. Let's see...

FYI, another patch has already been sent for this warning
https://lkml.org/lkml/2018/8/10/22


>
> Cheers,
> Miguel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] kernel/sched/core.c: Avoid unused variable on non-SMP configs
  2018-09-10  7:00             ` Vincent Guittot
@ 2018-09-10 10:32               ` Miguel Ojeda
  2018-09-10 12:34                 ` Vincent Guittot
  0 siblings, 1 reply; 10+ messages in thread
From: Miguel Ojeda @ 2018-09-10 10:32 UTC (permalink / raw)
  To: Vincent Guittot
  Cc: Borislav Petkov, Ingo Molnar, Peter Zijlstra, linux-kernel

Hi Vincent,

On Mon, Sep 10, 2018 at 9:00 AM, Vincent Guittot
<vincent.guittot@linaro.org> wrote:
> On Sun, 9 Sep 2018 at 19:00, Miguel Ojeda
> <miguel.ojeda.sandonis@gmail.com> wrote:
>>
>> On Sun, Sep 9, 2018 at 6:45 PM, Borislav Petkov <bp@alien8.de> wrote:
>> > On Sun, Sep 09, 2018 at 06:36:01PM +0200, Miguel Ojeda wrote:
>> >> No, you get a different warning depending on whether you have enabled
>> >> CONFIG_PARAVIRT_TIME_ACCOUNTING or CONFIG_IRQ_TIME_ACCOUNTING.
>> >
>> > Ok.
>> >
>> > Still, adding __maybe_unused to both (or writing it before the name,
>> > whatever works!) and dropping the ifdeffery is still better for
>> > readability's sake than having more ifdeffery, IMO.
>>
>> Agreed, it is quite confusing already. I tried to keep the style of
>> the code, but Ingo/Peter might prefer the cleanup. Let's see...
>
> FYI, another patch has already been sent for this warning
> https://lkml.org/lkml/2018/8/10/22

Indeed -- sorry, I didn't notice. The patches are different in
behavior, though; is the block there supposed to be there in non-SMP
cases? (I guess so, since originally it was there, but asking just in
case).

Cheers,
Miguel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] kernel/sched/core.c: Avoid unused variable on non-SMP configs
  2018-09-10 10:32               ` Miguel Ojeda
@ 2018-09-10 12:34                 ` Vincent Guittot
  0 siblings, 0 replies; 10+ messages in thread
From: Vincent Guittot @ 2018-09-10 12:34 UTC (permalink / raw)
  To: Miguel Ojeda
  Cc: Borislav Petkov, Ingo Molnar, Peter Zijlstra, linux-kernel, douly.fnst

On Mon, 10 Sep 2018 at 12:32, Miguel Ojeda
<miguel.ojeda.sandonis@gmail.com> wrote:
>
> Hi Vincent,
>
> On Mon, Sep 10, 2018 at 9:00 AM, Vincent Guittot
> <vincent.guittot@linaro.org> wrote:
> > On Sun, 9 Sep 2018 at 19:00, Miguel Ojeda
> > <miguel.ojeda.sandonis@gmail.com> wrote:
> >>
> >> On Sun, Sep 9, 2018 at 6:45 PM, Borislav Petkov <bp@alien8.de> wrote:
> >> > On Sun, Sep 09, 2018 at 06:36:01PM +0200, Miguel Ojeda wrote:
> >> >> No, you get a different warning depending on whether you have enabled
> >> >> CONFIG_PARAVIRT_TIME_ACCOUNTING or CONFIG_IRQ_TIME_ACCOUNTING.
> >> >
> >> > Ok.
> >> >
> >> > Still, adding __maybe_unused to both (or writing it before the name,
> >> > whatever works!) and dropping the ifdeffery is still better for
> >> > readability's sake than having more ifdeffery, IMO.
> >>
> >> Agreed, it is quite confusing already. I tried to keep the style of
> >> the code, but Ingo/Peter might prefer the cleanup. Let's see...
> >
> > FYI, another patch has already been sent for this warning
> > https://lkml.org/lkml/2018/8/10/22
>
> Indeed -- sorry, I didn't notice. The patches are different in
> behavior, though; is the block there supposed to be there in non-SMP
> cases? (I guess so, since originally it was there, but asking just in
> case).

Yes, i think it's worth keeping it for !SMP
That being said, the original goal of the code is to compute the
amount of capacity stolen to a guest or by interrupt in order to
reflect that int the CPU capacity. But on !SMP, the cpu_capacity is
not used as there is no load balance decision between CPU to do.
Now, the code has being recently updated and the irq time is now also
used in schedutil when selecting frequency which can also benefit to
!SMP
But the enable of irq tracking for !SMP hasn't been sent yet

Regards,
Vincent

>
> Cheers,
> Miguel

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2018-09-10 12:34 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-08 19:05 [PATCH] kernel/sched/core.c: Avoid unused variable on non-SMP configs Miguel Ojeda
2018-09-09  9:36 ` Borislav Petkov
2018-09-09 14:48   ` Miguel Ojeda
2018-09-09 16:06     ` Borislav Petkov
2018-09-09 16:36       ` Miguel Ojeda
2018-09-09 16:45         ` Borislav Petkov
2018-09-09 16:59           ` Miguel Ojeda
2018-09-10  7:00             ` Vincent Guittot
2018-09-10 10:32               ` Miguel Ojeda
2018-09-10 12:34                 ` Vincent Guittot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).