From: Matt Redfearn <matt.redfearn@mips.com>
To: Thomas Gleixner <tglx@linutronix.de>, James Hogan <james.hogan@mips.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>,
<linux-mips@linux-mips.org>,
Matt Redfearn <matt.redfearn@imgtec.com>,
"# v3 . 19 +" <stable@vger.kernel.org>,
<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/3] clocksource/mips-gic-timer: Fix rcu_sched timeouts from multithreading
Date: Thu, 19 Oct 2017 09:08:21 +0100 [thread overview]
Message-ID: <dd1dcbdf-93bc-7807-df5c-2ec36550bd5a@mips.com> (raw)
In-Reply-To: <alpine.DEB.2.20.1710182226080.2477@nanos>
On 18/10/17 21:34, Thomas Gleixner wrote:
> On Wed, 11 Oct 2017, Matt Redfearn wrote:
>
>> When the MIPS GIC clockevent code was written, it appears to have
>> inherited the 0x300 cycle min delta from the MIPS CPU timer driver. This
>> is suboptimal for two reasons.
>>
>> Firstly, the CPU timer counts once every other cycle (i.e. half the
>> clock rate). The GIC counts once per clock. Assuming that the GIC and
>> CPU share the same clock this means the GIC is counting twice as fast,
>> and so the min delta should be (at least) doubled. Fix this by doubling
>> the min delta to 0x600.
>>
>> Secondly, the fixed min delta ignores the fact that with MIPS
>> multithreading active, execution resource within a core is shared
>> between the hardware threads within that core. An inconvenienly timed
>> switch of executing thread within gic_next_event, between the read and
>> write of updated count, can result in the CPU writing an event in the
>> past, and subsequently not receiving a tick interrupt until the counter
>> wraps. This stalls the CPU from the RCU scheduler. Other CPUs detect
>> this and print rcu_sched timeout messages in the kernel log. It can
>> lead to other issues as well if the CPU is holding locks or other
>> resources at the point at which it stalls. Fix this by scaling the min
>> delta for the timer based on the number of threads in the core
>> (smp_num_siblings). This accounts for the greater average runtime of
>> CPUs within a multithreading core.
> I don't understand why this is not catched by the check at the end of the
> next_event() function:
>
> res = ((int)(gic_read_count() - cnt) >= 0) ? -ETIME : 0;
>
> Btw, the local_irq_save() in this function is pointless as this function is
> always called with interrupts disabled from the core code.
>
> Thanks,
>
> tglx
>
>
Hi tglx,
This is an issue because in some cases (hrtimer_reprogram ->
clockevents_program_event -> clockevents_program_min_delta, when
CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=n) there is no retry performed in
the case of -ETIME. There has been a patch pending for some time
https://patchwork.kernel.org/patch/8909491/ which ought to address this
and retry in the case of an event in the past on this call path. But in
the meantime this patch vastly improves the situation.
Thanks,
Matt
next prev parent reply other threads:[~2017-10-19 8:14 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-11 14:01 Matt Redfearn
2017-10-11 14:01 ` [PATCH 2/3] clocksource/mips-gic-timer: Ensure IRQs disabled for read-update-write Matt Redfearn
2017-10-11 14:01 ` [PATCH 3/3] clocksource: mips-gic-timer: Add fastpath for local timer updates Matt Redfearn
2017-10-17 18:15 ` [PATCH 1/3] clocksource/mips-gic-timer: Fix rcu_sched timeouts from multithreading Daniel Lezcano
2017-10-18 20:34 ` Thomas Gleixner
2017-10-19 8:08 ` Matt Redfearn [this message]
2017-10-19 8:22 ` Thomas Gleixner
2017-10-19 9:15 ` Daniel Lezcano
2017-10-19 9:18 ` Thomas Gleixner
2017-10-19 9:27 ` Daniel Lezcano
2017-10-19 9:09 ` Daniel Lezcano
2017-10-19 9:21 ` Matt Redfearn
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=dd1dcbdf-93bc-7807-df5c-2ec36550bd5a@mips.com \
--to=matt.redfearn@mips.com \
--cc=daniel.lezcano@linaro.org \
--cc=james.hogan@mips.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=matt.redfearn@imgtec.com \
--cc=stable@vger.kernel.org \
--cc=tglx@linutronix.de \
/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®