<div dir="ltr">Yep! Moving this discussion to that thread, my bad.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Feb 21, 2013 at 7:31 AM, Björn Brandenburg <span dir="ltr"><<a href="mailto:bbb@mpi-sws.org" target="_blank">bbb@mpi-sws.org</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><br>
On Feb 20, 2013, at 11:00 PM, Jonathan Herman <<a href="mailto:hermanjl@cs.unc.edu">hermanjl@cs.unc.edu</a>> wrote:<br>
<br>
> I've noticed a very rare bug caused by this patch. A simplified explanation of what happens:<br>
><br>
> CPU 1 Job A completes execution in userspace.<br>
> CPU 2 Job A is preempted, and requeued ON THE RELEASE QUEUE.<br>
> CPU 1 Job A has complete_job() called in the ensuing call to schedule().<br>
> CPU 1 Job A is removed() from the ready queue under if(is_queued(t)) unlink(). Because Job A is in the release queue, and not the ready queue, the system crashes.<br>
><br>
> I was only able to create this pattern of execution on the first job after a synchronous release with CONFIGS_SCHED_CPU_AFFINITY set. I don't know why. I've pushed another patch, prop/budget-bug-fix-fix, to github which prevents requeues while a task's completed flag is set.<br>


><br>
> commit eb3ec58872e6ca6074b67d55f1e3ca363499d6af<br>
> Author: Jonathan Herman <<a href="mailto:hermanjl@cs.unc.edu">hermanjl@cs.unc.edu</a>><br>
> Date:   Wed Feb 20 16:58:50 2013 -0500<br>
><br>
>     Don't requeue jobs which have their completed flag set.<br>
><br>
> diff --git a/include/litmus/budget.h b/include/litmus/budget.h<br>
> index 33344ee..59e9869 100644<br>
> --- a/include/litmus/budget.h<br>
> +++ b/include/litmus/budget.h<br>
> @@ -29,7 +29,7 @@ static inline int requeue_preempted_job(struct task_struct* t)<br>
>         /* Add task to ready queue only if not subject to budget enforcement or<br>
>          * if the job has budget remaining. t may be NULL.<br>
>          */<br>
> -       return t && (!budget_exhausted(t) || !budget_enforced(t));<br>
> +       return t && (!budget_exhausted(t) || !budget_enforced(t)) && !is_completed(t);<br>
>  }<br>
><br>
>  #endif<br>
<br>
<br>
</div>Just wondering: is this the same issue that Glenn reported, and for which I posted a potential C-EDF-specific patch a couple of weeks ago?<br>
<div class="HOEnZb"><div class="h5"><br>
- Björn<br>
<br>
<br>
_______________________________________________<br>
litmus-dev mailing list<br>
<a href="mailto:litmus-dev@lists.litmus-rt.org">litmus-dev@lists.litmus-rt.org</a><br>
<a href="https://lists.litmus-rt.org/listinfo/litmus-dev" target="_blank">https://lists.litmus-rt.org/listinfo/litmus-dev</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Jonathan Herman<br>Department of Computer Science at UNC Chapel Hill
</div>