<div dir="ltr"><div>Hi list,<br><br>I found why the system crash when calls hrtimer_cancel() while holding rq->lock. It happens because, on PREEMPT_RT the function hrtimer_cancel sleep, on vanilla not.<br><br>The problem is that the function release_heap_free is called on litmus_exit_task with rq->lock hold on function __sched_setscheduler.<br>
<br>The release_heap_free calls hrtimer_cancel, it try to sleep with the preempt off, when the scheduler is called, the system crash.<br><br>A workaround is implement hrtimer_cancel as is on the vanilla, with a busy loop.<br>
<br>This is not good on PREEMPT_RT: a busy loop inside a non preemptive section can cause a high "release jitter" to the high priority task, and this is  the metric that PREEMPT RT try to minimize.<br><br>A workaround is here: <a href="http://www.bristot.eti.br/files/litmus/3_8_13/hrtimer/rq_bug.patch">http://www.bristot.eti.br/files/litmus/3_8_13/hrtimer/rq_bug.patch</a><br>
<br>I will try to fix it in a cleaner way...<br><br></div><div><div><div>-- <br>Daniel Bristot de Oliveira
</div></div></div></div>