s390/cmm: avoid add_timer on concurrently used timer
cmm_set_timer could be called concurrently from cmm_thread, cmm proc handler, upon cmm smsg receive and timer function itself. To avoid potential race condition and hitting BUG_ON in add_timer on already pending timer simply reuse mod_timer which is according to documentation "the only safe way to modify the timeout" with multiple unserialized concurrent users. mod_timer can handle both active and inactive timers which allows to carry out minor code simplification as well. Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
a09baa9543
commit
ac4c4fc87d
|
@ -191,12 +191,7 @@ static void cmm_set_timer(void)
|
|||
del_timer(&cmm_timer);
|
||||
return;
|
||||
}
|
||||
if (timer_pending(&cmm_timer)) {
|
||||
if (mod_timer(&cmm_timer, jiffies + cmm_timeout_seconds*HZ))
|
||||
return;
|
||||
}
|
||||
cmm_timer.expires = jiffies + cmm_timeout_seconds*HZ;
|
||||
add_timer(&cmm_timer);
|
||||
mod_timer(&cmm_timer, jiffies + cmm_timeout_seconds * HZ);
|
||||
}
|
||||
|
||||
static void cmm_timer_fn(struct timer_list *unused)
|
||||
|
|
Loading…
Reference in New Issue