lkml.org 
[lkml]   [2017]   [Nov]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectIs there a race between __mod_timer() and del_timer()?
Date
Is there a race between the optimisation for networking code in __mod_timer()
and del_timer() - or, at least, a race that matters?

Consider:

CPU A CPU B
=============================== ===============================
[timer X is active]
==>__mod_timer(X)
if (timer_pending(timer))
[Take the true path]
-- IRQ -- ==>del_timer(X)
<==
if (timer->expires == expires)
[Take the true path]
<==return 1
[timer X is not active]

There's no locking to prevent this, but __mod_timer() returns without
restarting the timer. I'm not sure this is a problem exactly, however, since
del_timer() *was* issued, and could've deleted the timer after __mod_timer()
returned.

A couple of possible alleviations:

(1) Recheck timer_pending() before returning from __mod_timer().

(2) Set timer->expires to jiffies in del_timer() - but since there's nothing
preventing the optimisation in __mod_timer() from occurring concurrently
with del_timer(), this probably won't help.

I think it might just be best to put a note in the comments in __mod_timer().

Thoughts?

David

\
 
 \ /
  Last update: 2017-11-08 21:11    [W:0.036 / U:0.036 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site