All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rafael@kernel.org>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: Marc Zyngier <marc.zyngier@arm.com>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	"linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Viresh Kumar <viresh.kumar@linaro.org>,
	"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	linux-next@vger.kernel.org, Guenter Roeck <linux@roeck-us.net>,
	"linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>
Subject: Re: Crashes in arm qemu emulations due to 'cpufreq: governor: Replace timers with utilization ...'
Date: Mon, 15 Feb 2016 21:41:09 +0100	[thread overview]
Message-ID: <CAJZ5v0iC6H9Br21u4=3ykSHJzSJUb7ZMBY_iZNyu74WKO6gnYw@mail.gmail.com> (raw)
In-Reply-To: <20160215192316.GO10826@n2100.arm.linux.org.uk>

On Mon, Feb 15, 2016 at 8:23 PM, Russell King - ARM Linux
<linux@arm.linux.org.uk> wrote:
> On Mon, Feb 15, 2016 at 07:03:33PM +0000, Marc Zyngier wrote:
>> On 15/02/16 18:54, Rafael J. Wysocki wrote:
>> > That would explain it, thanks.
>> >
>> > So it looks like we should always use irq_work_queue() on UP even if
>> > CONFIG_SMP is set, shouldn't we?
>>
>> Something like that, yes. CONFIG_SMP is not an indication of an SMP
>> system anymore (we've even dropped the config option on arm64).
>>
>> Hopefully num_possible_cpus() is reliable enough to let you do the right
>> thing...
>
> CONFIG_SMP just says whether to include support for SMP.  It doesn't
> mandate running on a SMP system. :)
>
> I've been looking around the usages of irq_work_queue_on in kernel/
> in -rc4, and some places seem to check for "this CPU":
>
>         /*
>          * It is possible that a restart caused this CPU to be
>          * chosen again. Don't bother with an IPI, just see if we
>          * have more to push.
>          */
>         if (unlikely(cpu == rq->cpu))
>                 goto again;
>
>         /* Try the next RT overloaded CPU */
>         irq_work_queue_on(&rt_rq->push_work, cpu);
>
> I'm not sure about tell_cpu_to_push().
>
> It's also called via tick_nohz_full_kick_cpu(), and the core scheduler
> avoids calling this for the current CPU:
>
>         if (tick_nohz_full_cpu(cpu)) {
>                 if (cpu != smp_processor_id() ||
>                     tick_nohz_tick_stopped())
>                         tick_nohz_full_kick_cpu(cpu);
>
> I'm not sure about add_nr_running() in kernel/sched/sched.h - I think
> that _could_ be a problem even without Rafael's cpufreq change.
>
> So... the question is what do we do with irq_work_queue_on() in general
> when called on non-SMP systems.

I guess it might fall back to arch_irq_work_raise() when asked to
queue on the same CPU, so long as that will always do the right thing
(ie. actually queue on the same one).

Thanks,
Rafael

WARNING: multiple messages have this Message-ID (diff)
From: rafael@kernel.org (Rafael J. Wysocki)
To: linux-arm-kernel@lists.infradead.org
Subject: Crashes in arm qemu emulations due to 'cpufreq: governor: Replace timers with utilization ...'
Date: Mon, 15 Feb 2016 21:41:09 +0100	[thread overview]
Message-ID: <CAJZ5v0iC6H9Br21u4=3ykSHJzSJUb7ZMBY_iZNyu74WKO6gnYw@mail.gmail.com> (raw)
In-Reply-To: <20160215192316.GO10826@n2100.arm.linux.org.uk>

On Mon, Feb 15, 2016 at 8:23 PM, Russell King - ARM Linux
<linux@arm.linux.org.uk> wrote:
> On Mon, Feb 15, 2016 at 07:03:33PM +0000, Marc Zyngier wrote:
>> On 15/02/16 18:54, Rafael J. Wysocki wrote:
>> > That would explain it, thanks.
>> >
>> > So it looks like we should always use irq_work_queue() on UP even if
>> > CONFIG_SMP is set, shouldn't we?
>>
>> Something like that, yes. CONFIG_SMP is not an indication of an SMP
>> system anymore (we've even dropped the config option on arm64).
>>
>> Hopefully num_possible_cpus() is reliable enough to let you do the right
>> thing...
>
> CONFIG_SMP just says whether to include support for SMP.  It doesn't
> mandate running on a SMP system. :)
>
> I've been looking around the usages of irq_work_queue_on in kernel/
> in -rc4, and some places seem to check for "this CPU":
>
>         /*
>          * It is possible that a restart caused this CPU to be
>          * chosen again. Don't bother with an IPI, just see if we
>          * have more to push.
>          */
>         if (unlikely(cpu == rq->cpu))
>                 goto again;
>
>         /* Try the next RT overloaded CPU */
>         irq_work_queue_on(&rt_rq->push_work, cpu);
>
> I'm not sure about tell_cpu_to_push().
>
> It's also called via tick_nohz_full_kick_cpu(), and the core scheduler
> avoids calling this for the current CPU:
>
>         if (tick_nohz_full_cpu(cpu)) {
>                 if (cpu != smp_processor_id() ||
>                     tick_nohz_tick_stopped())
>                         tick_nohz_full_kick_cpu(cpu);
>
> I'm not sure about add_nr_running() in kernel/sched/sched.h - I think
> that _could_ be a problem even without Rafael's cpufreq change.
>
> So... the question is what do we do with irq_work_queue_on() in general
> when called on non-SMP systems.

I guess it might fall back to arch_irq_work_raise() when asked to
queue on the same CPU, so long as that will always do the right thing
(ie. actually queue on the same one).

Thanks,
Rafael

  reply	other threads:[~2016-02-15 20:41 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-15 17:05 Crashes in arm qemu emulations due to 'cpufreq: governor: Replace timers with utilization ...' Guenter Roeck
2016-02-15 17:05 ` Guenter Roeck
2016-02-15 18:41 ` Rafael J. Wysocki
2016-02-15 18:41   ` Rafael J. Wysocki
2016-02-15 18:41   ` Rafael J. Wysocki
2016-02-15 18:49   ` Rafael J. Wysocki
2016-02-15 18:49     ` Rafael J. Wysocki
2016-02-15 18:49     ` Rafael J. Wysocki
2016-02-15 18:49   ` Marc Zyngier
2016-02-15 18:49     ` Marc Zyngier
2016-02-15 18:49     ` Marc Zyngier
2016-02-15 18:54     ` Rafael J. Wysocki
2016-02-15 18:54       ` Rafael J. Wysocki
2016-02-15 18:54       ` Rafael J. Wysocki
2016-02-15 19:03       ` Marc Zyngier
2016-02-15 19:03         ` Marc Zyngier
2016-02-15 19:03         ` Marc Zyngier
2016-02-15 19:12         ` Rafael J. Wysocki
2016-02-15 19:12           ` Rafael J. Wysocki
2016-02-15 19:12           ` Rafael J. Wysocki
2016-02-15 19:28           ` Rafael J. Wysocki
2016-02-15 19:28             ` Rafael J. Wysocki
2016-02-15 19:28             ` Rafael J. Wysocki
2016-02-15 19:42             ` Tony Lindgren
2016-02-15 19:42               ` Tony Lindgren
2016-02-15 19:42               ` Tony Lindgren
2016-02-15 19:46               ` Guenter Roeck
2016-02-15 19:46                 ` Guenter Roeck
2016-02-15 19:46                 ` Guenter Roeck
2016-02-15 19:57                 ` Tony Lindgren
2016-02-15 19:57                   ` Tony Lindgren
2016-02-15 19:57                   ` Tony Lindgren
2016-02-15 19:23         ` Russell King - ARM Linux
2016-02-15 19:23           ` Russell King - ARM Linux
2016-02-15 19:23           ` Russell King - ARM Linux
2016-02-15 20:41           ` Rafael J. Wysocki [this message]
2016-02-15 20:41             ` Rafael J. Wysocki
2016-02-15 20:41             ` Rafael J. Wysocki
2016-02-15 19:07       ` Russell King - ARM Linux
2016-02-15 19:07         ` Russell King - ARM Linux
2016-02-15 19:07         ` Russell King - ARM Linux
2016-02-15 19:01   ` Tony Lindgren
2016-02-15 19:01     ` Tony Lindgren
2016-02-15 19:01     ` Tony Lindgren
2016-02-15 19:40     ` Guenter Roeck
2016-02-15 19:40       ` Guenter Roeck
2016-02-15 19:40       ` Guenter Roeck
2016-02-15 19:58       ` Tony Lindgren
2016-02-15 19:58         ` Tony Lindgren
2016-02-15 19:58         ` Tony Lindgren
2016-02-15 20:09         ` Guenter Roeck
2016-02-15 20:09           ` Guenter Roeck
2016-02-15 20:09           ` Guenter Roeck
2016-02-15 20:38           ` Rafael J. Wysocki
2016-02-15 20:38             ` Rafael J. Wysocki
2016-02-15 20:38             ` Rafael J. Wysocki
2016-02-15 20:37         ` Rafael J. Wysocki
2016-02-15 20:37           ` Rafael J. Wysocki
2016-02-15 20:37           ` Rafael J. Wysocki
2016-02-15 21:36           ` Tony Lindgren
2016-02-15 21:36             ` Tony Lindgren
2016-02-15 21:36             ` Tony Lindgren
2016-02-16  1:38             ` Guenter Roeck
2016-02-16  1:38               ` Guenter Roeck
2016-02-16  1:38               ` Guenter Roeck
2016-02-15 19:02   ` Russell King - ARM Linux
2016-02-15 19:02     ` Russell King - ARM Linux
2016-02-15 19:02     ` Russell King - ARM Linux
2016-02-16  1:13   ` Viresh Kumar
2016-02-16  1:13     ` Viresh Kumar
2016-02-16  1:13     ` Viresh Kumar
2016-02-16  1:27     ` Rafael J. Wysocki
2016-02-16  1:27       ` Rafael J. Wysocki
2016-02-16  1:27       ` Rafael J. Wysocki
2016-02-16  1:36       ` Viresh Kumar
2016-02-16  1:36         ` Viresh Kumar
2016-02-16  1:36         ` Viresh Kumar
2016-02-15 22:29 ` Peter Maydell
2016-02-15 22:29   ` Peter Maydell
2016-02-15 23:19   ` Guenter Roeck
2016-02-15 23:19     ` Guenter Roeck

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='CAJZ5v0iC6H9Br21u4=3ykSHJzSJUb7ZMBY_iZNyu74WKO6gnYw@mail.gmail.com' \
    --to=rafael@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-next@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=linux@roeck-us.net \
    --cc=marc.zyngier@arm.com \
    --cc=peterz@infradead.org \
    --cc=rafael.j.wysocki@intel.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.