From: Marek Szyprowski <m.szyprowski@samsung.com>
To: Thomas Gleixner <tglx@linutronix.de>,
Mike Galbraith <efault@gmx.de>,
linux-kernel@vger.kernel.org, linux-tip-commits@vger.kernel.org
Cc: Peter Zijlstra <peterz@infradead.org>, x86@kernel.org
Subject: Re: [PATCH] hrtimer: Use raw_cpu_ptr() in clock_was_set()
Date: Fri, 13 Aug 2021 08:42:35 +0200 [thread overview]
Message-ID: <72282431-2d9e-048c-62c5-1fb62ebd8f5d@samsung.com> (raw)
In-Reply-To: <875ywacsmb.ffs@tglx>
On 12.08.2021 22:31, Thomas Gleixner wrote:
> clock_was_set() can be invoked from preemptible context. Use raw_cpu_ptr()
> to check whether high resolution mode is active or not. It does not matter
> whether the task migrates after acquiring the pointer.
>
> Fixes: e71a4153b7c2 ("hrtimer: Force clock_was_set() handling for the HIGHRES=n, NOHZ=y case")
> Reported-by: Mike Galbraith <efault@gmx.de>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
This fixes the following issue:
BUG: using smp_processor_id() in preemptible [00000000] code: hwclock/227
> ---
> kernel/time/hrtimer.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> --- a/kernel/time/hrtimer.c
> +++ b/kernel/time/hrtimer.c
> @@ -944,10 +944,11 @@ static bool update_needs_ipi(struct hrti
> */
> void clock_was_set(unsigned int bases)
> {
> + struct hrtimer_cpu_base *cpu_base = raw_cpu_ptr(&hrtimer_bases);
> cpumask_var_t mask;
> int cpu;
>
> - if (!hrtimer_hres_active() && !tick_nohz_active)
> + if (!__hrtimer_hres_active(cpu_base) && !tick_nohz_active)
> goto out_timerfd;
>
> if (!zalloc_cpumask_var(&mask, GFP_KERNEL)) {
> @@ -958,9 +959,9 @@ void clock_was_set(unsigned int bases)
> /* Avoid interrupting CPUs if possible */
> cpus_read_lock();
> for_each_online_cpu(cpu) {
> - struct hrtimer_cpu_base *cpu_base = &per_cpu(hrtimer_bases, cpu);
> unsigned long flags;
>
> + cpu_base = &per_cpu(hrtimer_bases, cpu);
> raw_spin_lock_irqsave(&cpu_base->lock, flags);
>
> if (update_needs_ipi(cpu_base, bases))
>
Best regards
--
Marek Szyprowski, PhD
Samsung R&D Institute Poland
next prev parent reply other threads:[~2021-08-13 6:42 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-13 13:39 [patch V2 00/10] hrtimer: Reprogramming and clock_was_set() overhaul Thomas Gleixner
2021-07-13 13:39 ` [patch V2 01/10] hrtimer: Avoid double reprogramming in __hrtimer_start_range_ns() Thomas Gleixner
2021-08-10 16:02 ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
2021-07-13 13:39 ` [patch V2 02/10] hrtimer: Consolidate reprogramming code Thomas Gleixner
2021-08-10 16:02 ` [tip: timers/core] " tip-bot2 for Peter Zijlstra
2021-08-12 7:19 ` Mike Galbraith
2021-08-12 14:11 ` Thomas Gleixner
2021-08-12 14:32 ` Thomas Gleixner
2021-08-12 15:04 ` Mike Galbraith
2021-08-12 15:22 ` Thomas Gleixner
2021-08-12 15:31 ` Mike Galbraith
2021-08-12 16:58 ` Thomas Gleixner
2021-08-12 15:27 ` Mike Galbraith
2021-08-12 20:32 ` [PATCH] hrtimer: Unbreak hrtimer_force_reprogram() Thomas Gleixner
2021-08-12 20:40 ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
2021-08-13 7:58 ` [PATCH] " Thomas Gleixner
2021-08-12 20:31 ` [PATCH] hrtimer: Use raw_cpu_ptr() in clock_was_set() Thomas Gleixner
2021-08-12 20:40 ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
2021-08-13 6:42 ` Marek Szyprowski [this message]
[not found] ` <CGME20210812130945eucas1p117fc1e90f31c8d9fd177932cd1a18512@eucas1p1.samsung.com>
2021-08-12 13:09 ` [patch V2 02/10] hrtimer: Consolidate reprogramming code Marek Szyprowski
2021-07-13 13:39 ` [patch V2 03/10] hrtimer: Ensure timerfd notification for HIGHRES=n Thomas Gleixner
2021-08-10 16:02 ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
2021-07-13 13:39 ` [patch V2 04/10] hrtimer: Force clock_was_set() handling for the HIGHRES=n, NOHZ=y case Thomas Gleixner
2021-08-10 16:02 ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
2021-07-13 13:39 ` [patch V2 05/10] timerfd: Provide timerfd_resume() Thomas Gleixner
2021-08-10 16:02 ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
2021-07-13 13:39 ` [patch V2 06/10] timekeeping: Distangle resume and clock-was-set events Thomas Gleixner
2021-08-10 16:02 ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
2021-07-13 13:39 ` [patch V2 07/10] time/timekeeping: Avoid invoking clock_was_set() twice Thomas Gleixner
2021-08-10 16:02 ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
2021-07-13 13:39 ` [patch V2 08/10] hrtimer: Add bases argument to clock_was_set() Thomas Gleixner
2021-08-10 16:02 ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
2021-07-13 13:39 ` [patch V2 09/10] hrtimer: Avoid unnecessary SMP function calls in clock_was_set() Thomas Gleixner
2021-08-10 16:02 ` [tip: timers/core] " tip-bot2 for Marcelo Tosatti
2021-07-13 13:39 ` [patch V2 10/10] hrtimer: Avoid more " Thomas Gleixner
2021-08-10 16:02 ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
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=72282431-2d9e-048c-62c5-1fb62ebd8f5d@samsung.com \
--to=m.szyprowski@samsung.com \
--cc=efault@gmx.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=x86@kernel.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 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).