From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
To: Calvin Owens <calvin@wbinvd.org>
Cc: linux-kernel@vger.kernel.org,
Rodolfo Giometti <giometti@enneenne.com>,
Clark Williams <clrkwllms@kernel.org>,
Steven Rostedt <rostedt@goodmis.org>,
Thomas Gleixner <tglx@kernel.org>, Ingo Molnar <mingo@kernel.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Michael Byczkowski <by@by-online.de>,
Eliav Farber <farbere@amazon.com>,
linux-rt-devel@lists.linux.dev,
David Laight <david.laight.linux@gmail.com>
Subject: Re: [PATCH v6 3/3] pps: convert pps_device.lock to raw_spinlock_t
Date: Thu, 28 May 2026 09:49:39 +0200 [thread overview]
Message-ID: <20260528074939.7MLrIhrM@linutronix.de> (raw)
In-Reply-To: <ahXdZFrw79US8MO3@mozart.vkv.me>
On 2026-05-26 10:50:28 [-0700], Calvin Owens wrote:
> It does seem to be correct, with CONFIG_DEBUG_ATOMIC_SLEEP I get:
>
> BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48
> in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 31, name: ktimers/1
> preempt_count: 1, expected: 0
> RCU nest depth: 2, expected: 2
> CPU: 1 UID: 0 PID: 31 Comm: ktimers/1 Not tainted 7.1.0-rc5-00004-g85f7c8ee247a-dirty #3 PREEMPT_{RT,LAZY}
> Hardware name: Raspberry Pi 4 Model B Rev 1.5 (DT)
> Call trace:
> show_stack+0x1c/0x38 (C)
> dump_stack_lvl+0x58/0x78
> dump_stack+0x14/0x1c
> __might_resched+0x128/0x168
> rt_spin_lock+0x34/0x180
> __wake_up+0x2c/0x70
> pps_event+0xdc/0x2b0
> pps_ktimer_event+0x44/0x80
> call_timer_fn+0x34/0x2d0
This is all threaded and the atomic contex gets here due to the lock
swap.
> The lock isn't part of the lifetime of the pps_device object, so I think
> fixing that really is as simple as not holding the raw lock across the
> wakeup, something like below?
>
> diff --git a/drivers/pps/kapi.c b/drivers/pps/kapi.c
> index dc7fac75ec27..f85929d01e3d 100644
> --- a/drivers/pps/kapi.c
> +++ b/drivers/pps/kapi.c
> @@ -203,17 +203,16 @@ void pps_event(struct pps_device *pps, struct pps_event_time *ts, int event,
>
> captured = ~0;
> }
>
> pps_kc_event(pps, ts, event);
> + if (captured)
> + pps->last_ev++;
> + raw_spin_unlock_irqrestore(&pps->lock, flags);
>
> /* Wake up if captured something */
> if (captured) {
> - pps->last_ev++;
> wake_up_interruptible_all(&pps->queue);
> -
> kill_fasync(&pps->async_queue, SIGIO, POLL_IN);
> }
> -
> - raw_spin_unlock_irqrestore(&pps->lock, flags);
> }
> EXPORT_SYMBOL(pps_event);
This does not work because the commit message claims to allow
pps_event() to be called from hardirq context. So if this is called
indeed from hardirq, context as claimed in the commit message, then
dropping the lock early does not help here.
Does it need to call pps_event() in hardirq? Patch #1 takes the
timestamp in hardirq deferring the remaining part to the thread. What is
the crucial part here that needs to happen in hardirq context?
> Thanks,
> Calvin
Sebastian
next prev parent reply other threads:[~2026-05-28 7:49 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-25 19:49 [PATCH v6 0/3] pps: improve PREEMPT_RT performance Calvin Owens
2026-05-25 19:49 ` [PATCH v6 1/3] pps: pps-gpio: split IRQ handler into hardirq timestamper + threaded handler Calvin Owens
2026-05-25 19:49 ` [PATCH v6 2/3] pps: kc: convert pps_kc_hardpps_lock to raw_spinlock_t Calvin Owens
2026-05-25 19:49 ` [PATCH v6 3/3] pps: convert pps_device.lock " Calvin Owens
2026-05-26 17:50 ` Calvin Owens
2026-05-26 18:31 ` Michael Byczkowski
2026-05-30 11:14 ` Michael Byczkowski
2026-05-28 7:49 ` Sebastian Andrzej Siewior [this message]
2026-05-28 15:57 ` Calvin Owens
2026-05-29 7:19 ` Sebastian Andrzej Siewior
2026-05-29 12:37 ` Calvin Owens
2026-05-29 12:57 ` Sebastian Andrzej Siewior
2026-05-30 11:03 ` Michael Byczkowski
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=20260528074939.7MLrIhrM@linutronix.de \
--to=bigeasy@linutronix.de \
--cc=by@by-online.de \
--cc=calvin@wbinvd.org \
--cc=clrkwllms@kernel.org \
--cc=david.laight.linux@gmail.com \
--cc=farbere@amazon.com \
--cc=giometti@enneenne.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-devel@lists.linux.dev \
--cc=mingo@kernel.org \
--cc=rostedt@goodmis.org \
--cc=tglx@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
all inboxes | Powered by JetHome®