Subject: Re: uvm.page_idle_zero access on bool changes (Re: CVS commit: src/sys)
To: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
From: Tobias Nygren <tnn+nbsd@nygren.pp.se>
List: port-alpha
Date: 02/24/2007 12:04:23
Izumi Tsutsui wrote:
> thorpej@shagadelic.org wrote on source-changes:
>
>   
>>> On Wed, Feb 21, 2007 at 11:00:15PM +0000, Jason R Thorpe wrote:
>>>       
>>>>          uvm_swap.h uvm_vnode.c
>>>>
>>>> Replace the Mach-derived boolean_t type with the C99 bool type.  A
>>>> future commit will replace use of TRUE and FALSE with true and false.
>>>>         
>>> This changes alignment of, for example, uvm.page_idle_zero and thereby
>>> breaks sparc64. Should alignment (and size) be restored for those, or
>>> the access fixed?
>>>       
>> the access should be fixed.
>>     
>
> Alpha seems to require the similar fix.
> Is the attached diff okay?
> (just taken from gcc -S output since I don't know alpha asm at all)
> ---
> Izumi Tsutsui
>
> Index: alpha/locore.s
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/alpha/alpha/locore.s,v
> retrieving revision 1.109
> diff -u -r1.109 locore.s
> --- alpha/locore.s	9 Feb 2007 21:55:01 -0000	1.109
> +++ alpha/locore.s	24 Feb 2007 10:28:16 -0000
> @@ -696,7 +696,10 @@
>  	ldl	t0, sched_whichqs		/* look for non-empty queue */
>  	bne	t0, 4f
>  2:	lda	t0, uvm
> -	ldl	t0, UVM_PAGE_IDLE_ZERO(t0)	/* should we zero some pages? */
> +	ldq_u	t1, UVM_PAGE_IDLE_ZERO(t0)
> +	lda	t0, UVM_PAGE_IDLE_ZERO(t0)	/* should we zero some pages? */
> +	extbl	t1, t0, t0
> +	and	t0, 0xff, t0
>  	beq	t0, 3f				/* nope. */
>  	CALL(uvm_pageidlezero)
>  3:	ldl	t0, sched_whichqs		/* look for non-empty queue */
>   


AARM section (I) 4-53 says that's the intended sequence for loading
a byte from unaligned storage, so it should be ok.