Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 28 Aug 2004 19:50:26 +0200
From:      Max Laier <max@love2party.net>
To:        Darren Reed <darrenr@hub.freebsd.org>
Cc:        cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/share/man/man4 ipfirewall.4 src/share/man/man9 pfil.9 src/sys/alpha/conf GENERIC src/sys/amd64/conf GENERIC src/sys/conf NOTES files options src/sys/i386/conf GENERIC src/sys/ia64/conf GENERIC SKI src/sys/modules/bridge Makefile ...
Message-ID:  <200408281950.33363.max@love2party.net>
In-Reply-To: <20040828164043.GA86995@hub.freebsd.org>
References:  <200408271516.i7RFGO8L061926@repoman.freebsd.org> <200408272253.14317.max@love2party.net> <20040828164043.GA86995@hub.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--Boundary-02=_pXMMBuqX74IOXEv
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

On Saturday 28 August 2004 18:40, Darren Reed wrote:
> I hope I didn't send a reply to this already, I think I had to reconnect.=
=2E.
>
> On Fri, Aug 27, 2004 at 10:52:57PM +0200, Max Laier wrote:
> > > You misunderstand what I'm saying here.  I'm not saying get rid of the
> > > outer check or don't do it (or that's not my intention, anyway.)
> > >
> > > If you were to unroll the pfil_run_hooks(), the code would be:
> > >
> > > if (ph_busy_count =3D=3D -1)
> > >         goto passin;
> > > if (ph_busy_count =3D=3D -1 || ph_want_write =3D=3D 1)
> > >         goto passin;
> > >
> > > Now that's an oversimplification but perhaps it better illustrates
> > > what I see the problem as being.  Can you see what's wrong here ?
> >
> > This is actually right.
>
> No.

*sigh* ... you misread me here. I was saying that the point you are making =
and=20
your analysis is right.

> Checking ph_busy_count should be inside pfil_run_hooks or outside of it.
>
> Not in both places.
>
> > The check inside pfil_run_hooks() was introduced
> > before PFIL_HOOKS got part of GENERIC to avoid the lock operation for
> > empty hooks. It is okay to remove it now that we do the check earlier. A
> > wrapper is called for, nontheless!
>
> Right, it needs removing and wasn't - just don't say it is right how it i=
s.

Never did. Though I really do not belive that it incurres a performance los=
s=20
as ph_busy_count will be cached together with ph_want_write anyway ... stup=
id=20
micro-optimizations ...

> > > The check to see if the pfil_head is empty doesn't traverse it,
> > > does it?  So there's no need to get a lock to do it.  Even if you
> > > were to replace the check on ph_busy_count with a "is the list
> > > empty" check, you still don't need to lock the pfil_head until
> > > before you start to walk it.  The worst that can happen is that
> > > a packet will either bypass or enter pfil_run_hooks() when it
> > > might have gone in, depending on timing.
> >
> > That is right. Nobody asked to lock the check in the first place. The
> > whole point in the check for ph_busy_count =3D=3D -1 is to avoid the
> > lock/unlock in the case of an empty hook list.
>
> I wonder if ph_busy_lock could be made to disappear and its use replaced
> with a check for TAILQ_EMPTY() ?  This would nto require a lock/unlock.

While TAILQ_EMPTY is okay it'd require a direction lookup and that would=20
result in more overhead ... and NO, pf_busy_count can not be removed - it i=
s=20
a property of the locking (which you didn't read, I suppose).

> > > You've doubled up on an if() for performance reasons, yet you want
> > > to put in a macro to hide an operation that is even more expensive
> > > than is ther enow - mutex attempt - at some point in the future ?
> > > This doesn't add up ?
> >
> > You don't understood what I am saying.
>
> Wrong - I haven't read anything else from you so that's not possible.
>
> > The problem is that ph_busy_count might
> > be removed once we revisit the locking and thus we need to modify the
> > check. Hence we should wrap the check in anticipation of that.
>
> Whether it goes inside a macro or not is immaterial.
>
> > Take a look at how sx(9) is implemented. What is there in pfil now is n=
ot
> > very different.
>
> Well why won't you rewrite sx(9) then and fix the perceived problems ?
>
> > > The use of sx(9) should be a no-brainer.
> >
> > Yes, but it will reduce performance and introduce stravation problems.
> > Once we
> > have a better sx(9) implementation I am all for switching over. Right n=
ow
> > it does not work.
>
> sx(9) seems to work well enough for me :)
>
> Meanwhile, should all the functions in pfil.c that are PFIL_[A-Z]* be
> renamed to pfil_[a-z]* ?  This has got to be a KNF violation ?

Well, I submitted it as macros, Sam turned them into __inline functions. I=
=20
don't care eitherway, but UPPERCASE is somewhat identical to the other plac=
es=20
where lock macros are used: IFNET_{R,W}[UN]LOCK etc ...

=2D-=20
/"\  Best regards,                      | mlaier@freebsd.org
\ /  Max Laier                          | ICQ #67774661
 X   http://pf4freebsd.love2party.net/  | mlaier@EFnet
/ \  ASCII Ribbon Campaign              | Against HTML Mail and News

--Boundary-02=_pXMMBuqX74IOXEv
Content-Type: application/pgp-signature
Content-Description: signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (FreeBSD)

iD8DBQBBMMXpXyyEoT62BG0RAi0FAJ0UGe4VeiUKAkupzZE/nWynjdpOuACfUFlu
fD7ybmcGfqh2VpxPp7Tqx3g=
=Sg2G
-----END PGP SIGNATURE-----

--Boundary-02=_pXMMBuqX74IOXEv--



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