Commit 9465bee8 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Revert "Fix cpu timers exit deadlock and races"

Revert commit e03d13e9, to be replaced
by a much nicer fix from Roland.
parent 0213df74
Loading
Loading
Loading
Loading
+17 −11
Original line number Diff line number Diff line
@@ -387,19 +387,25 @@ int posix_cpu_timer_del(struct k_itimer *timer)
	if (unlikely(p == NULL))
		return 0;

	spin_lock(&p->sighand->siglock);
	if (!list_empty(&timer->it.cpu.entry)) {
		read_lock(&tasklist_lock);
		if (unlikely(p->signal == NULL)) {
			/*
		 * Take us off the task's timer list.  We don't need to
		 * take tasklist_lock and check for the task being reaped.
		 * If it was reaped, it already called posix_cpu_timers_exit
		 * and posix_cpu_timers_exit_group to clear all the timers
		 * that pointed to it.
			 * We raced with the reaping of the task.
			 * The deletion should have cleared us off the list.
			 */
			BUG_ON(!list_empty(&timer->it.cpu.entry));
		} else {
			/*
			 * Take us off the task's timer list.
			 */
			spin_lock(&p->sighand->siglock);
			list_del(&timer->it.cpu.entry);
		put_task_struct(p);
	}
			spin_unlock(&p->sighand->siglock);
		}
		read_unlock(&tasklist_lock);
	}
	put_task_struct(p);

	return 0;
}