[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <55c7744b-8a2c-e2b2-6c3-c2fa7ab978cc@linutronix.de>
Date: Thu, 24 Nov 2022 15:00:37 +0100 (CET)
From: Anna-Maria Behnsen <anna-maria@...utronix.de>
To: Thomas Gleixner <tglx@...utronix.de>
cc: LKML <linux-kernel@...r.kernel.org>,
Linus Torvalds <torvalds@...uxfoundation.org>,
Steven Rostedt <rostedt@...dmis.org>,
Peter Zijlstra <peterz@...radead.org>,
Stephen Boyd <sboyd@...nel.org>,
Guenter Roeck <linux@...ck-us.net>,
Andrew Morton <akpm@...ux-foundation.org>,
Julia Lawall <Julia.Lawall@...ia.fr>,
Arnd Bergmann <arnd@...db.de>,
Viresh Kumar <viresh.kumar@...aro.org>,
Marc Zyngier <maz@...nel.org>,
Marcel Holtmann <marcel@...tmann.org>,
Johan Hedberg <johan.hedberg@...il.com>,
Luiz Augusto von Dentz <luiz.dentz@...il.com>,
linux-bluetooth@...r.kernel.org,
"David S. Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>, netdev@...r.kernel.org,
Jacob Keller <jacob.e.keller@...el.com>
Subject: Re: [patch V3 00/17] timers: Provide timer_shutdown[_sync]()
On Wed, 23 Nov 2022, Thomas Gleixner wrote:
> This is the third version of the timer shutdown work. The second version
> can be found here:
>
> https://lore.kernel.org/all/20221122171312.191765396@linutronix.de
>
> Tearing down timers can be tedious when there are circular dependencies to
> other things which need to be torn down. A prime example is timer and
> workqueue where the timer schedules work and the work arms the timer.
>
> Steven and the Google Chromebook team ran into such an issue in the
> Bluetooth HCI code.
>
> Steven suggested to create a new function del_timer_free() which marks the
> timer as shutdown. Rearm attempts of shutdown timers are discarded and he
> wanted to emit a warning for that case:
>
> https://lore.kernel.org/all/20220407161745.7d6754b3@gandalf.local.home
>
> This resulted in a lengthy discussion and suggestions how this should be
> implemented. The patch series went through several iterations and during
> the review of the last version it turned out that this approach is
> suboptimal:
>
> https://lore.kernel.org/all/20221110064101.429013735@goodmis.org
>
> The warning is not really helpful because it's entirely unclear how it
> should be acted upon. The only way to address such a case is to add 'if
> (in_shutdown)' conditionals all over the place. This is error prone and in
> most cases of teardown like the HCI one which started this discussion not
> required all.
>
> What needs to prevented is that pending work which is drained via
> destroy_workqueue() does not rearm the previously shutdown timer. Nothing
> in that shutdown sequence relies on the timer being functional.
>
> The conclusion was that the semantics of timer_shutdown_sync() should be:
>
> - timer is not enqueued
> - timer callback is not running
> - timer cannot be rearmed
>
> Preventing the rearming of shutdown timers is done by discarding rearm
> attempts silently.
>
> As Steven is short of cycles, I made some spare cycles available and
> reworked the patch series to follow the new semantics and plugged the races
> which were discovered during review.
>
> The patches have been split up into small pieces to make review easier and
> I took the liberty to throw a bunch of overdue cleanups into the picture
> instead of proliferating the existing state further.
>
> The last patch in the series addresses the HCI teardown issue for real.
>
> The series is also available from git:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git timers
>
With fix of the last NITs:
Reviewed-by: Anna-Maria Behnsen <anna-maria@...utronix.de>
Thanks,
Anna-Maria
Powered by blists - more mailing lists