Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

timers: Get rid of del_singleshot_timer_sync()

del_singleshot_timer_sync() used to be an optimization for deleting timers
which are not rearmed from the timer callback function.

This optimization turned out to be broken and got mapped to
del_timer_sync() about 17 years ago.

Get rid of the undocumented indirection and use del_timer_sync() directly.

No functional change.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
Link: https://lore.kernel.org/r/20221123201624.706987932@linutronix.de

+9 -11
+2 -2
drivers/char/tpm/tpm-dev-common.c
··· 155 155 out: 156 156 if (!priv->response_length) { 157 157 *off = 0; 158 - del_singleshot_timer_sync(&priv->user_read_timer); 158 + del_timer_sync(&priv->user_read_timer); 159 159 flush_work(&priv->timeout_work); 160 160 } 161 161 mutex_unlock(&priv->buffer_mutex); ··· 262 262 void tpm_common_release(struct file *file, struct file_priv *priv) 263 263 { 264 264 flush_work(&priv->async_work); 265 - del_singleshot_timer_sync(&priv->user_read_timer); 265 + del_timer_sync(&priv->user_read_timer); 266 266 flush_work(&priv->timeout_work); 267 267 file->private_data = NULL; 268 268 priv->response_length = 0;
+2 -2
drivers/staging/wlan-ng/hfa384x_usb.c
··· 1116 1116 if (ctlx == get_active_ctlx(hw)) { 1117 1117 spin_unlock_irqrestore(&hw->ctlxq.lock, flags); 1118 1118 1119 - del_singleshot_timer_sync(&hw->reqtimer); 1120 - del_singleshot_timer_sync(&hw->resptimer); 1119 + del_timer_sync(&hw->reqtimer); 1120 + del_timer_sync(&hw->resptimer); 1121 1121 hw->req_timer_done = 1; 1122 1122 hw->resp_timer_done = 1; 1123 1123 usb_kill_urb(&hw->ctlx_urb);
+3 -3
drivers/staging/wlan-ng/prism2usb.c
··· 170 170 */ 171 171 prism2sta_ifstate(wlandev, P80211ENUM_ifstate_disable); 172 172 173 - del_singleshot_timer_sync(&hw->throttle); 174 - del_singleshot_timer_sync(&hw->reqtimer); 175 - del_singleshot_timer_sync(&hw->resptimer); 173 + del_timer_sync(&hw->throttle); 174 + del_timer_sync(&hw->reqtimer); 175 + del_timer_sync(&hw->resptimer); 176 176 177 177 /* Unlink all the URBs. This "removes the wheels" 178 178 * from the entire CTLX handling mechanism.
-2
include/linux/timer.h
··· 190 190 # define del_timer_sync(t) del_timer(t) 191 191 #endif 192 192 193 - #define del_singleshot_timer_sync(t) del_timer_sync(t) 194 - 195 193 extern void init_timers(void); 196 194 struct hrtimer; 197 195 extern enum hrtimer_restart it_real_fn(struct hrtimer *);
+1 -1
kernel/time/timer.c
··· 1933 1933 timer_setup_on_stack(&timer.timer, process_timeout, 0); 1934 1934 __mod_timer(&timer.timer, expire, MOD_TIMER_NOTPENDING); 1935 1935 schedule(); 1936 - del_singleshot_timer_sync(&timer.timer); 1936 + del_timer_sync(&timer.timer); 1937 1937 1938 1938 /* Remove the timer from the object tracker */ 1939 1939 destroy_timer_on_stack(&timer.timer);
+1 -1
net/sunrpc/xprt.c
··· 1164 1164 spin_unlock(&xprt->queue_lock); 1165 1165 1166 1166 /* Turn off autodisconnect */ 1167 - del_singleshot_timer_sync(&xprt->timer); 1167 + del_timer_sync(&xprt->timer); 1168 1168 return 0; 1169 1169 } 1170 1170