svn commit: r227394 - in head/sys: amd64/amd64 i386/i386
Kostik Belousov
kostikbel at gmail.com
Wed Nov 9 18:01:08 UTC 2011
On Wed, Nov 09, 2011 at 05:25:43PM +0000, Konstantin Belousov wrote:
> Author: kib
> Date: Wed Nov 9 17:25:43 2011
> New Revision: 227394
> URL: http://svn.freebsd.org/changeset/base/227394
>
> Log:
> Stopped process may legitimately have some threads sleeping and not
> suspended, if the sleep is uninterruptible.
Even more, stopped process might have some threads still running in the
kernel mode, or inhibited due to wait on blockable locks. I was unable
to design an expression that would assert that such thread will be stopped
at the kernel->user boundary.
The assertion itself is useful and catched several bugs, but theoretically
can cause false positives. If any report of the fired assert for kernel-mode
thread is provided, I will remove the assertions.
>
> Reported and tested by: pho
> MFC after: 1 week
>
> Modified:
> head/sys/amd64/amd64/machdep.c
> head/sys/i386/i386/machdep.c
>
> Modified: head/sys/amd64/amd64/machdep.c
> ==============================================================================
> --- head/sys/amd64/amd64/machdep.c Wed Nov 9 17:15:51 2011 (r227393)
> +++ head/sys/amd64/amd64/machdep.c Wed Nov 9 17:25:43 2011 (r227394)
> @@ -2047,7 +2047,8 @@ int
> fill_fpregs(struct thread *td, struct fpreg *fpregs)
> {
>
> - KASSERT(td == curthread || TD_IS_SUSPENDED(td),
> + KASSERT(td == curthread || TD_IS_SUSPENDED(td) ||
> + (P_SHOULDSTOP(td->td_proc) && TD_IS_SLEEPING(td)),
> ("not suspended thread %p", td));
> fpugetregs(td);
> fill_fpregs_xmm(&td->td_pcb->pcb_user_save, fpregs);
>
> Modified: head/sys/i386/i386/machdep.c
> ==============================================================================
> --- head/sys/i386/i386/machdep.c Wed Nov 9 17:15:51 2011 (r227393)
> +++ head/sys/i386/i386/machdep.c Wed Nov 9 17:25:43 2011 (r227394)
> @@ -3299,7 +3299,8 @@ int
> fill_fpregs(struct thread *td, struct fpreg *fpregs)
> {
>
> - KASSERT(td == curthread || TD_IS_SUSPENDED(td),
> + KASSERT(td == curthread || TD_IS_SUSPENDED(td) ||
> + (P_SHOULDSTOP(td->td_proc) && TD_IS_SLEEPING(td)),
> ("not suspended thread %p", td));
> #ifdef DEV_NPX
> npxgetregs(td);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/svn-src-all/attachments/20111109/639a3a71/attachment.pgp
More information about the svn-src-all
mailing list