From: Peter Zijlstra <a.p.zijlstra@chello.nl>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Prarit Bhargava <prarit@redhat.com>,
John Stultz <johnstul@us.ibm.com>,
Linux Kernel <linux-kernel@vger.kernel.org>,
Ingo Molnar <mingo@kernel.org>,
stable@vger.kernel.org
Subject: Re: [PATCH 1/6] hrtimer: Provide clock_was_set_delayed()
Date: Wed, 11 Jul 2012 15:05:04 +0200 [thread overview]
Message-ID: <1342011904.3462.152.camel@twins> (raw)
In-Reply-To: <alpine.LFD.2.02.1207111425260.32033@ionos>
On Wed, 2012-07-11 at 14:45 +0200, Thomas Gleixner wrote:
> On Wed, 11 Jul 2012, Prarit Bhargava wrote:
> > On 07/10/2012 06:43 PM, John Stultz wrote:
> > > clock_was_set() cannot be called from hard interrupt context because
> > > it calls on_each_cpu(). For fixing the widely reported leap seconds
> > > issue it's necessary to call it from the timer interrupt context.
> > >
> > > Provide a new function which denotes it in the hrtimer cpu base
> > > structure of the cpu on which it is called and raising the timer
> > > softirq.
> > >
> > > We then execute the clock_was_set() notificiation in the timer softirq
> > > context in hrtimer_run_pending().
> >
> > I wish there was a nicer way to do this ... but looking at the code I can't
> > figure out a better way. (no offense John, it's just the way the code is ;) )
>
> Yeah, I had the same discussion with Peter earlier today. There is
> only a rather limited set of options.
>
> 1) Retrigger the timer interrupt vectors on all CPUs - except the one
> we are running on, but we have no interface for that at the moment
>
> 2) Do the nasty __smp_call_function_single() hack
>
> Preallocate call_single_data for all cpus and do a
> __smp_call_function_single() on all online cpus.
>
> This can be called from hard interrupt context or irq disabled
> regions.
>
> That would allow to get rid of the whole delay magic all
> together.
>
> Thoughts?
The __smp_call_function_single() thing isn't particularly pretty either
and a lot more code to boot..
static DEFINE_PER_CPU(struct call_single_data, cws_csd);
void clock_was_set(void)
{
int cpu;
for_each_online_cpu(cpu) {
struct call_single_data *csd = &per_cpu(cws_csd, cpu);
if (csd->flags & CSD_FLAG_LOCK)
continue; /* a pending request is good enough */
csd->func = retrigger_next_event;
__smp_call_function_single(cpu, csd, 0);
}
timerfd_clock_was_set();
}
It also is a for_each_cpu loop with preemption disabled, not pretty :/
next prev parent reply other threads:[~2012-07-11 13:05 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-10 22:43 [PATCH 0/6] Fix for leapsecond caused hrtimer/futex issue (updated) John Stultz
2012-07-10 22:43 ` [PATCH 1/6] hrtimer: Provide clock_was_set_delayed() John Stultz
2012-07-11 12:15 ` Prarit Bhargava
2012-07-11 12:45 ` Thomas Gleixner
2012-07-11 13:05 ` Peter Zijlstra [this message]
2012-07-11 15:18 ` Thomas Gleixner
2012-07-11 15:56 ` Peter Zijlstra
2012-07-11 16:47 ` John Stultz
2012-07-12 7:44 ` Jan Ceuleers
2012-07-12 12:29 ` Prarit Bhargava
2012-07-11 13:05 ` Prarit Bhargava
2012-07-11 13:38 ` Peter Zijlstra
2012-07-11 21:40 ` [tip:timers/urgent] " tip-bot for John Stultz
2012-07-10 22:43 ` [PATCH 2/6] timekeeping: Fix leapsecond triggered load spike issue John Stultz
2012-07-11 21:41 ` [tip:timers/urgent] " tip-bot for John Stultz
2012-07-10 22:43 ` [PATCH 3/6] timekeeping: Maintain ktime_t based offsets for hrtimers John Stultz
2012-07-11 21:42 ` [tip:timers/urgent] " tip-bot for Thomas Gleixner
2012-07-10 22:43 ` [PATCH 4/6] hrtimer: Move lock held region in hrtimer_interrupt() John Stultz
2012-07-10 22:43 ` [PATCH 4/6] hrtimers: " John Stultz
2012-07-11 21:43 ` [tip:timers/urgent] " tip-bot for Thomas Gleixner
2012-07-10 22:43 ` [PATCH 5/6] timekeeping: Provide hrtimer update function John Stultz
2012-07-11 21:44 ` [tip:timers/urgent] " tip-bot for Thomas Gleixner
2012-07-10 22:43 ` [PATCH 6/6] hrtimer: Update hrtimer base offsets each hrtimer_interrupt John Stultz
2012-07-11 21:45 ` [tip:timers/urgent] " tip-bot for John Stultz
2012-07-15 15:22 ` [PATCH 6/6] " Andreas Schwab
2012-07-15 15:22 ` Andreas Schwab
2012-07-15 20:28 ` Rafael J. Wysocki
2012-07-15 20:28 ` Rafael J. Wysocki
[not found] ` <m2y5mlnj5z.fsf__49536.0585897744$1342365803$gmane$org@igel.home>
2012-07-15 16:02 ` Andreas Schwab
2012-07-10 22:53 ` [PATCH 0/6] Fix for leapsecond caused hrtimer/futex issue (updated) John Stultz
2012-07-12 22:43 ` Jiri Bohac
2012-07-12 23:58 ` John Stultz
2012-07-10 23:00 ` John Stultz
2012-07-13 0:43 ` John Stultz
2012-07-11 10:59 ` Peter Zijlstra
2012-07-11 11:17 ` Ingo Molnar
2012-07-12 12:32 ` Prarit Bhargava
2012-07-11 12:16 ` Prarit Bhargava
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=1342011904.3462.152.camel@twins \
--to=a.p.zijlstra@chello.nl \
--cc=johnstul@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=prarit@redhat.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 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.