Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 3 Jan 1997 07:07:31 +1100 (EST)
From:      Julian Assange <proff@iq.org>
To:        archie@whistle.com (Archie Cobbs)
Cc:        hackers@freebsd.org
Subject:   Re: divert code not thread/smp compatible
Message-ID:  <199701022007.HAA12208@profane.iq.org>
In-Reply-To: <199701021936.LAA26380@bubba.whistle.com> from Archie Cobbs at "Jan 2, 97 11:36:06 am"

next in thread | previous in thread | raw e-mail | index | archive | help
> > > Is this an acceptable trick in the FreeBSD kernel, passing parameters
> > > with global variables?
> > > 
> > > -Julian <proff@iq.org>
> 
> My only excuse is that at the time I started writing the divert code,
> it wasn't planned on being checked in to the main branch, but instead
> was going to be a patch to be applied locally... so I tried to keep
> the patch as small as possible... and as a result committed some
> non-esthetically pleasing programming in the process... :-)
> 
> Any suggestions on the best way to properly threadify this?
> 
> Thanks,
> -Archie

Well, I looked at threading/locking issues in netinet/* generally and
have come to view the chances of seeing more than one thread in anything
close to the bsd44 inet code is zero. The whole thing is locked by
a few fat, totally non-granular splnet()s.

While we are on the subjects of locking, I notice a distinct lack
of atomic test-and-set or test-and-inc instructions for struct
usage counts (which are instead relying on non-atomic C). Is there
such an existing kernel macro that does:

int
tas(slock_t *m)
{
    slock_t res;
    __asm__("xchgb %0,%1":"=q" (res),"=m" (*m):"0" (0x1));
    return(res);
}

-Julian <proff@iq.org>



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