[PATCH] kthread_{suspend, resume, suspend_check} locking bugs
Jilles Tjoelker
jilles at stack.nl
Sat Jan 16 12:54:54 UTC 2010
On Sun, Jan 10, 2010 at 02:09:43AM +0100, Attilio Rao wrote:
> I think that routines kthread_suspend(), kthread_resume() and
> kthread_suspend_check() are not adeguately SMP protected.
> That is because, in particular, the critical path doesn't protect,
> together, TDF_KTH_SUSP and sleeping activity. The right pattern should
> be to use the thread lock spinlock as an interlock and use msleep.
> Such bugs have not been revealed probabilly because there has been a
> lack of testing of such primitives and there are not, currently,
> consumers within our stock kernel.
> Additively, kthread_suspend_check() seems to require to always pass
> curthread, which is silly (as we don't have to conform to any
> particular KPI), thus I think it is appropriate for the prototype to
> change.
> The following patch should fix the issue:
> http://www.freebsd.org/~attilio/kthread.diff
The analysis and patch look sensible.
> That patch would have benefit from the priority argument (for PDROP)
> for msleep_spin(9), and I don't understand why we don't support it
> (the log message doesn't seem much clearer).
> If nobody objects, after this patch goes in I would add the priority
> argument to msleep_spin() too.
No objection here.
--
Jilles Tjoelker
More information about the freebsd-arch
mailing list