Re: libthr & atomic_xxx ops

From: Daniel Eischen <deischen_at_freebsd.org>
Date: Thu, 28 Jul 2005 23:12:02 -0400 (EDT)
On Thu, 28 Jul 2005, Daniel Eischen wrote:

> On Thu, 28 Jul 2005, Craig Rodrigues wrote:
>
> > On Fri, Jul 29, 2005 at 12:38:39AM +0300, Giorgos Keramidas wrote:
> > > Recently, libpthread and libthr grew the following warnings in
> > > CURRENT:
> > >
> > > # 2005-07-28 04:37:43.704726 - /usr/src/lib/libpthread/sys/lock.c:183: warning: passing arg 1 of `atomic_store_rel_int' from incompatible pointer type
> >
> > This is similar to what I posted for sched_ule.c due to
> > changes to the macros in <machine/atomic.h>:
> > http://lists.freebsd.org/pipermail/freebsd-current/2005-July/052894.html
> >
> >
> > Can you try this patch, and see if the warnings go away?
>
> I'm testing a patch for libpthread.
>
> > --- lib/libpthread/sys/lock.c.orig	Thu Jul 28 21:18:48 2005
> > +++ lib/libpthread/sys/lock.c	Thu Jul 28 21:24:47 2005
> > _at__at_ -180,7 +180,7 _at__at_
> >  	atomic_swap_ptr(&lck->l_head, lu->lu_myreq, &lu->lu_watchreq);
> >
> >  	if (lu->lu_watchreq->lr_locked != 0) {
> > -		atomic_store_rel_ptr(&lu->lu_watchreq->lr_watcher, lu);
> > +		atomic_store_rel_ptr((volatile uintptr_t *)&lu->lu_watchreq->lr_watcher, (uintptr_t)lu);
>
> The prototype for atomic_store_rel_ptr() is:
>
> 	atomic_store_rel_ptr(volatile void *p, void *v);

Hmm, I guess it's no longer the above, but:

	atomic_store_rel_ptr(volatile void *p, uintptr_t v);

This doesn't seem right.  uintptr_t is just __uint32_t (on 32-bit archs).
It seems more intuitive to use a void * since you want to play with
pointers.

-- 
DE
Received on Fri Jul 29 2005 - 01:12:04 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:40 UTC