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.