Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 27 Aug 2013 08:53:13 +0200
From:      Andre Oppermann <andre@freebsd.org>
To:        Thomas Skibo <ThomasSkibo@sbcglobal.net>
Cc:        freebsd-arm <freebsd-arm@FreeBSD.org>
Subject:   Re: ARM network trouble after recent mbuf changes
Message-ID:  <521C4CD9.4050308@freebsd.org>
In-Reply-To: <521BD531.4090104@sbcglobal.net>
References:  <1377550636.1111.156.camel@revolution.hippie.lan> <521BC472.7040804@freebsd.org> <521BD531.4090104@sbcglobal.net>

next in thread | previous in thread | raw e-mail | index | archive | help
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
  };

  /*



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