Messages in this thread | | | Date | Tue, 30 Sep 2008 08:33:13 +0200 | From | Ingo Molnar <> | Subject | Re: [PATCH 2.6.27-rc5 incremental re-resubmit] Fix itimer/many thread hang. |
| |
* Frank Mayhar <fmayhar@google.com> wrote:
> /* > * Return any ns on the sched_clock that have not yet been banked in > * @p in case that task is currently running. > - * > - * Called with task_rq_lock() held on @rq. > */ > -static unsigned long long task_delta_exec(struct task_struct *p, struct rq *rq) > +unsigned long long task_delta_exec(struct task_struct *p) > { > + struct rq *rq; > + unsigned long flags; > + u64 ns = 0; > + > if (task_current(rq, p)) { > u64 delta_exec;
hmmm ... where do we get 'rq' from?
in v3 you did this:
- rq = task_rq_lock(p, &flags);
which removed the deadlock but left us with a random uninitialized rq variable ...
the right solution for the bug would have been to unlock it. Miraculously we didnt actually crash anywhere visibly, found it by reviewing the code. I thought this code gets excercised quite frequently. The commit below fixes it.
Could you please functionality-test latest tip/master:
http://people.redhat.com/mingo/tip.git/README
with your testcase that excercises these codepaths heavily?
Thanks,
Ingo
| |