Port-i386 archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: curcpu() and curlwp()
In article <20110605171617.GD2029%snowdrop.l8s.co.uk@localhost>,
David Laight <david%l8s.co.uk@localhost> wrote:
>I've just been looking at the definitions of curcpu() etc on
>i386 and amd64 (they differ only in the segment register used).
>
>in sys/arch/i386/include/cpu.h we have:
>
>__inline static lwp_t * __attribute__ ((const))
>x86_curlwp(void)
>{
> lwp_t *l;
>
> __asm volatile("movl %%fs:%1, %0" :
> "=r" (l) :
> "m"
> (*(struct cpu_info * const *)offsetof(struct cpu_info,
> ci_curlwp)));
> return l;
>}
>
>I think it should be:
> "m" (((const struct cpu_info *)0)->ci_curlwp)
>
>The actual code seems to be a reference to a pointer to 'struct cpu_info'.
>The generated code is probably identical, but the inferences are different.
>
>(cpu_set_curpri() is broken in a different, but similar way.)
>
>I also think that the curcpu() and culwp() functions need not be volatile.
I think that if offsetof() produces suboptimal code, it should be fixed,
not expanded in place differently.
christos
Home |
Main Index |
Thread Index |
Old Index