Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 27 Aug 2013 06:42:02 -0700
From:      Adrian Chadd <adrian@freebsd.org>
To:        Warner Losh <imp@bsdimp.com>
Cc:        freebsd-arm <freebsd-arm@freebsd.org>, Andre Oppermann <andre@freebsd.org>
Subject:   Re: ARM network trouble after recent mbuf changes
Message-ID:  <CAJ-Vmok9igK-DbR1reM8isz6Q-LDOfZVxB_1M59npjE5g%2BRAsA@mail.gmail.com>
In-Reply-To: <40769440-B167-4817-9855-1CAB09081AF8@bsdimp.com>
References:  <1377550636.1111.156.camel@revolution.hippie.lan> <521BC472.7040804@freebsd.org> <521BD531.4090104@sbcglobal.net> <521C4CD9.4050308@freebsd.org> <40769440-B167-4817-9855-1CAB09081AF8@bsdimp.com>

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


-adrian


On 27 August 2013 06:24, Warner Losh <imp@bsdimp.com> wrote:

>
> On Aug 27, 2013, at 12:53 AM, Andre Oppermann wrote:
>
> > On 27.08.2013 00:22, Thomas Skibo wrote:
> >> On 8/26/13 2:11 PM, Andre Oppermann wrote:
> >>>
> >>> Can you try this patch see check if it makes a difference on the
> bitfield?
> >>
> >> Actually, this works for me.  But, I'm worried that somewhere else
> something is going to trip over a
> >> struct pkthdr not being 64-bit aligned.  There are several 64-bit
> fields in there.
> >
> > The problem is the disconnect between the definition of MLEN and MHLEN
> and
> > the effective size/padding of struct mbuf.  That's the true bug.
> >
> > On LP64 all is fine.  On i386 it turns out to be fine too because doesn't
> > care.
> >
> > MLEN and MHLEN are incorrectly derived.  In fact they should be derived
> from
> > stuct mbuf where this padding would be taking into account.  However the
> way
> > it is structured right now it that would create a circular dependency.
> >
> > Please try the patch below to confirm.  If it fixes your problem for now
> > I'm going to commit as an immediate fix while searching for a better long
> > term stable solution.
> >
> > --
> > Andre
> >
> > Index: sys/mbuf.h
> > ===================================================================
> > --- sys/mbuf.h  (revision 254953)
> > +++ sys/mbuf.h  (working copy)
> > @@ -94,6 +94,9 @@
> >        int32_t          mh_len;        /* amount of data in this mbuf */
> >        uint32_t         mh_type:8,     /* type of data in this mbuf */
> >                         mh_flags:24;   /* flags; see below */
> > +#if defined(__ILP32__)
> > +       uint32_t         mh_pad;        /* pad to 64 bit alignment */
> > +#endif
> > };
> >
> > /*
>
> There should be a CTASSERT() here to make sure there's no mismatch...
>
> Warner
> _______________________________________________
> freebsd-arm@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-arm
> To unsubscribe, send any mail to "freebsd-arm-unsubscribe@freebsd.org"
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmok9igK-DbR1reM8isz6Q-LDOfZVxB_1M59npjE5g%2BRAsA>