netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [patch 00/15] timers: Provide timer_shutdown[_sync]()
@ 2022-11-15 20:28 Thomas Gleixner
  2022-11-15 20:28 ` [patch 01/15] ARM: spear: Do not use timer namespace for timer_shutdown() function Thomas Gleixner
                   ` (17 more replies)
  0 siblings, 18 replies; 36+ messages in thread
From: Thomas Gleixner @ 2022-11-15 20:28 UTC (permalink / raw)
  To: LKML
  Cc: Linus Torvalds, Steven Rostedt, Anna-Maria Behnsen,
	Peter Zijlstra, Stephen Boyd, Guenter Roeck, Andrew Morton,
	Julia Lawall, Arnd Bergmann, Viresh Kumar, Marc Zyngier,
	Marcel Holtmann, Johan Hedberg, Luiz Augusto von Dentz,
	linux-bluetooth, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, netdev

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

Thanks,

	tglx
---
 Documentation/RCU/Design/Requirements/Requirements.rst |    2 
 Documentation/core-api/local_ops.rst                   |    2 
 Documentation/kernel-hacking/locking.rst               |   13 
 arch/arm/mach-spear/time.c                             |    8 
 drivers/bluetooth/hci_qca.c                            |   10 
 drivers/char/tpm/tpm-dev-common.c                      |    4 
 drivers/clocksource/arm_arch_timer.c                   |   12 
 drivers/clocksource/timer-sp804.c                      |    6 
 drivers/staging/wlan-ng/hfa384x_usb.c                  |    4 
 drivers/staging/wlan-ng/prism2usb.c                    |    6 
 include/linux/timer.h                                  |   35 +
 kernel/time/timer.c                                    |  409 +++++++++++++----
 net/sunrpc/xprt.c                                      |    2 
 13 files changed, 383 insertions(+), 130 deletions(-)

^ permalink raw reply	[flat|nested] 36+ messages in thread

end of thread, other threads:[~2022-11-22 16:42 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-11-15 20:28 [patch 00/15] timers: Provide timer_shutdown[_sync]() Thomas Gleixner
2022-11-15 20:28 ` [patch 01/15] ARM: spear: Do not use timer namespace for timer_shutdown() function Thomas Gleixner
2022-11-15 20:28 ` [patch 02/15] clocksource/drivers/arm_arch_timer: " Thomas Gleixner
2022-11-15 20:28 ` [patch 03/15] clocksource/drivers/sp804: " Thomas Gleixner
2022-11-15 20:28 ` [patch 04/15] timers: Get rid of del_singleshot_timer_sync() Thomas Gleixner
2022-11-21 20:08   ` Steven Rostedt
2022-11-15 20:28 ` [patch 05/15] timers: Replace BUG_ON()s Thomas Gleixner
2022-11-21 20:18   ` Steven Rostedt
2022-11-15 20:28 ` [patch 06/15] timers: Update kernel-doc for various functions Thomas Gleixner
2022-11-21 20:43   ` Steven Rostedt
2022-11-22  0:09     ` Randy Dunlap
2022-11-22  0:21       ` Steven Rostedt
2022-11-22 15:18     ` Thomas Gleixner
2022-11-22 15:38       ` Steven Rostedt
2022-11-22 15:41       ` Steven Rostedt
2022-11-22 16:42         ` Thomas Gleixner
2022-11-15 20:28 ` [patch 07/15] timers: Use del_timer_sync() even on UP Thomas Gleixner
2022-11-15 20:28 ` [patch 08/15] timers: Rename del_timer_sync() to timer_delete_sync() Thomas Gleixner
2022-11-21 20:52   ` Steven Rostedt
2022-11-15 20:28 ` [patch 09/15] timers: Rename del_timer() to timer_delete() Thomas Gleixner
2022-11-21 21:08   ` Steven Rostedt
2022-11-15 20:28 ` [patch 10/15] timers: Silently ignore timers with a NULL function Thomas Gleixner
2022-11-21 21:35   ` Steven Rostedt
2022-11-21 21:46     ` Thomas Gleixner
2022-11-15 20:28 ` [patch 11/15] timers: Split [try_to_]del_timer[_sync]() to prepare for shutdown mode Thomas Gleixner
2022-11-15 20:28 ` [patch 12/15] timers: Add shutdown mechanism to the internal functions Thomas Gleixner
2022-11-21 22:18   ` Steven Rostedt
2022-11-15 20:28 ` [patch 13/15] timers: Provide timer_shutdown[_sync]() Thomas Gleixner
2022-11-21 22:21   ` Steven Rostedt
2022-11-15 20:28 ` [patch 14/15] timers: Update the documentation to reflect on the new timer_shutdown() API Thomas Gleixner
2022-11-15 20:28 ` [patch 15/15] Bluetooth: hci_qca: Fix the teardown problem for real Thomas Gleixner
2022-11-15 21:29   ` Luiz Augusto von Dentz
2022-11-17 14:10 ` [patch 00/15] timers: Provide timer_shutdown[_sync]() Guenter Roeck
2022-11-21 15:15 ` Thomas Gleixner
2022-11-21 15:26   ` Steven Rostedt
2022-11-22  2:38 ` Steven Rostedt

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).