Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 27 Aug 2013 07:25:04 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        Michael Tuexen <tuexen@freebsd.org>
Cc:        freebsd-arm <freebsd-arm@FreeBSD.org>, Andre Oppermann <andre@FreeBSD.org>
Subject:   Re: ARM network trouble after recent mbuf changes
Message-ID:  <D198D7DD-DE15-4438-9931-F13B0F17ED9B@bsdimp.com>
In-Reply-To: <627451FE-4F20-4E4D-9B24-59E0F340EF75@freebsd.org>
References:  <1377550636.1111.156.camel@revolution.hippie.lan> <521BC472.7040804@freebsd.org> <521BD531.4090104@sbcglobal.net> <FF0E227A-0E15-4AFB-9BA0-E0E903D953F9@freebsd.org> <521C3EE4.80801@bitfrost.no> <3F762A16-3760-4FAA-B547-27529032AFEA@freebsd.org> <521C4CE3.9080400@freebsd.org> <627451FE-4F20-4E4D-9B24-59E0F340EF75@freebsd.org>

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

On Aug 27, 2013, at 12:58 AM, Michael Tuexen wrote:

> On Aug 27, 2013, at 8:53 AM, Andre Oppermann <andre@FreeBSD.org> =
wrote:
>=20
>> On 27.08.2013 08:30, Michael Tuexen wrote:
>>> On Aug 27, 2013, at 7:53 AM, Hans Petter Selasky <hps@bitfrost.no> =
wrote:
>>>=20
>>>> On 08/27/13 00:38, Michael Tuexen wrote:
>>>>> I did some tests with a small program. Having in struct pkthdr 64 =
bit entities
>>>>> results in a 64 bit alignment when used in struct mbuf. Using =
__packed
>>>>> for struct mbuf, removes the padding.
>>>>=20
>>>>=20
>>>> Hi,
>>>>=20
>>>> Maybe you could use __aligned(8) instead, and account for the extra =
padding on all platforms? Packed has other disadvantages on ARM =
platforms when accessing the structures, like that non-aligned access is =
possible, and that it is sometimes slower than aligned access.
>>> Isn't there a performance penalty when accessing 64-bit entities not =
being 64-bit
>>> aligned? If that is the case, wouldn't it make sense to add a 4 byte =
padding to
>>> struct m_hdr for ILP32? Then the problem should go away...
>>=20
>> Either that or define MLEN and MHLEN in a way that actually reflects =
the true
>> size of what they are representing.  The latter is the true bug.
> Correct. There is the hidden assumption that there is no padding. =
Maybe you can
> put that in a comment...

Maybe we can have it as a CTASSERT. Better than any comment. CTASSERTS =
are free and catch this kind of thing...

> We could also have some code (maybe under INVARIANTS) where we check =
that
> an struct mbuf has the size MSIZE and panic if not.
> This would make things clearer if the problem happens again.
>>=20
>>> We could also get rid of the 64 bit alignment by not having 64-bit =
entities in
>>> struct pkthdr. Removing sixtyfour should be easy. However, we now =
have also
>>> uint64_t csum_flags.
>>=20
>> Yes, the 64 bit fields are to be used to store packet associated =
information
>> on its way through the stack.  Reducing it to 32 bits would somewhat =
defeat
>> their purpose.
> I completely agree...
>>=20
>> --=20
>> Andre
>>=20
>>=20
>=20
> _______________________________________________
> 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?D198D7DD-DE15-4438-9931-F13B0F17ED9B>