Commit d6ff057c authored by Andrew Morton's avatar Andrew Morton Committed by Dave Jones

[PATCH] fix oprofile timer race

Patch from John Levon <levon@movementarian.org>

wli got an oops from this. The callbacks call mod_timer so the timer had
better be setup by then
parent 648300b0
...@@ -82,9 +82,16 @@ static struct notifier_block exit_mmap_nb = { ...@@ -82,9 +82,16 @@ static struct notifier_block exit_mmap_nb = {
int sync_start(void) int sync_start(void)
{ {
int err = profile_event_register(EXIT_TASK, &exit_task_nb); int err;
init_timer(&sync_timer);
sync_timer.function = timer_ping;
sync_timer.expires = jiffies + DEFAULT_EXPIRE;
add_timer(&sync_timer);
err = profile_event_register(EXIT_TASK, &exit_task_nb);
if (err) if (err)
goto out; goto out1;
err = profile_event_register(EXIT_MMAP, &exit_mmap_nb); err = profile_event_register(EXIT_MMAP, &exit_mmap_nb);
if (err) if (err)
goto out2; goto out2;
...@@ -92,16 +99,14 @@ int sync_start(void) ...@@ -92,16 +99,14 @@ int sync_start(void)
if (err) if (err)
goto out3; goto out3;
init_timer(&sync_timer);
sync_timer.function = timer_ping;
sync_timer.expires = jiffies + DEFAULT_EXPIRE;
add_timer(&sync_timer);
out: out:
return err; return err;
out3: out3:
profile_event_unregister(EXIT_MMAP, &exit_mmap_nb); profile_event_unregister(EXIT_MMAP, &exit_mmap_nb);
out2: out2:
profile_event_unregister(EXIT_TASK, &exit_task_nb); profile_event_unregister(EXIT_TASK, &exit_task_nb);
out1:
del_timer_sync(&sync_timer);
goto out; goto out;
} }
......
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