Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 29 Sep 2011 10:45:51 +0300
From:      Alexander Motin <mav@FreeBSD.org>
To:        Adrian Chadd <adrian@FreeBSD.org>
Cc:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   Re: svn commit: r225860 - user/adrian/if_ath_tx/sys/mips/mips
Message-ID:  <4E84222F.7050101@FreeBSD.org>
In-Reply-To: <201109290310.p8T3AgZO001901@svn.freebsd.org>
References:  <201109290310.p8T3AgZO001901@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Adrian Chadd wrote:
> Author: adrian
> Date: Thu Sep 29 03:10:42 2011
> New Revision: 225860
> URL: http://svn.freebsd.org/changeset/base/225860

> +	m = intr_disable();
>  	if (!busy) {
>  		critical_enter();
>  		cpu_idleclock();
>  	}
> -	__asm __volatile ("wait");
> +
> +	if (sched_runnable())
> +		intr_restore(m);
> +	else {
> +		/* XXX not atomic! */
> +		intr_restore(m);
> +		__asm __volatile ("wait\n");
> +	}
> +

I think that's not good to call intr_disable() before cpu_idleclock().
cpu_idleclock() uses spin mutex to serialize timer hardware accesses,
which disables interrupts. When it enable them back, it will revert
effect of your intr_disable() also.

-- 
Alexander Motin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4E84222F.7050101>