Date: Tue, 23 Nov 2004 11:17:35 -0500 From: John Baldwin <jhb@FreeBSD.org> To: freebsd-alpha@FreeBSD.org Cc: Robert Watson <rwatson@FreeBSD.org> Subject: Re: alpha and em mtu Message-ID: <200411231117.35467.jhb@FreeBSD.org> In-Reply-To: <Pine.SOC.4.61.0411230406010.10997@tea.blinkenlights.nl> References: <Pine.SOC.4.61.0411142153430.26307@tea.blinkenlights.nl> <Pine.SOC.4.61.0411230259030.10997@tea.blinkenlights.nl> <Pine.SOC.4.61.0411230406010.10997@tea.blinkenlights.nl>
next in thread | previous in thread | raw e-mail | index | archive | help
On Monday 22 November 2004 10:09 pm, Sten Spans wrote:
> On Tue, 23 Nov 2004, Sten Spans wrote:
> >> doesn't seem to print anything, but ...
> >>
> >> if_em.c
> >> 2442
> >> 2443 /*if (ifp->if_mtu <= ETHERMTU) { */
> >> 2444 m_adj(mp, ETHER_ALIGN);
> >> 2445 /*} */
> >> 2446
> >>
> >> does seem to fix the crash, also trashes the performance,
> >> but that's another matter. It looks like mbuf alignment is
> >> needed, if_bge seems to provide reasonable examples.
> >
> > And looking at netbsd/openbsd clarifies the whole issue,
> >
> > #ifdef __STRICT_ALIGNMENT
> > /*
> > * The ethernet payload is not 32-bit aligned when
> > * Jumbo packets are enabled, so on architectures
> > with
> > * strict alignment we need to shift the entire
> > packet
> > * ETHER_ALIGN bytes. Ugh.
> > */
> >
> >
> > This diff probably should be merged.
> > http://www.openbsd.org/cgi-bin/cvsweb/src/sys/dev/pci/if_em.c.diff?r1=1.2
> >2&r2=1.23
> >
> > Although I don't know wether freebsd has the STRICT_ALIGNMENT define.
>
> This is an initial patch based on the openbsd code,
> which solves the if_em issue, and seems to give ok performance
> ( note to self: turn off debugging when testing network performance ).
>
> Comments welcome.
We do need some kind of __STRICT_ALIGNMENT macro I think if we don't already
have one as archs other than i386 might not need the alignment. At the least
there could be a block near the top of if_em.h that was:
#if defined(__alpha__)
#define STRICT_ALIGNMENT
#endif
and other architectures could be fixed by simply adding another
'defined(__foo__)' clause without having to change the ifdef and comments
down in the code itself. As to the correctness of the em(4) change,
hopefully Robert can speak to that.
--
John Baldwin <jhb@FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve" = http://www.FreeBSD.org
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200411231117.35467.jhb>
