Commit ac4c4fc8 authored by Vasily Gorbik's avatar Vasily Gorbik Committed by Martin Schwidefsky

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: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent a09baa95
...@@ -191,12 +191,7 @@ static void cmm_set_timer(void) ...@@ -191,12 +191,7 @@ static void cmm_set_timer(void)
del_timer(&cmm_timer); del_timer(&cmm_timer);
return; return;
} }
if (timer_pending(&cmm_timer)) { mod_timer(&cmm_timer, jiffies + cmm_timeout_seconds * HZ);
if (mod_timer(&cmm_timer, jiffies + cmm_timeout_seconds*HZ))
return;
}
cmm_timer.expires = jiffies + cmm_timeout_seconds*HZ;
add_timer(&cmm_timer);
} }
static void cmm_timer_fn(struct timer_list *unused) static void cmm_timer_fn(struct timer_list *unused)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment