Subject: Re: kern/31323 (vge on !i386 is broken.)
To: None <gnats-bugs@NetBSD.org>
From: Murata Shuuichirou <mrt@notwork.org>
List: netbsd-bugs
Date: 11/26/2006 01:04:49
In message <20061125135838.0BC8E63B400@narn.NetBSD.org>,
 `tsutsui@netbsd.org' wrote:
> Synopsis: vge on !i386 is broken.
>
> State-Changed-From-To: open->feedback
> State-Changed-By: tsutsui@netbsd.org
> State-Changed-When: Sat, 25 Nov 2006 22:58:36 +0900
> State-Changed-Why:
> Could you try -current kernel? At least vge(4) now works on macppc.

I have no vge on the machine running NetBSD any more.  So, I can't
try vge driver of the -current kernel, although I use -current yet.
Sorry.

Anyway, I have a small question while reading current if_vge.c
(rev. 1.27).  Could you tell me why VGE_RX_PAD is defined as 0 in
the case of !defined(__NO_STRICT_ALIGNMENT).  I think, if
VGE_RX_PAD is 0 in the case of !defined(__NO_STRICT_ALIGNMENT),
following ifdef block in vge_newbuf() (around line 1060) seems to
have no difference in the both cases.  Logic flipped?

#ifndef __NO_STRICT_ALIGNMENT
        /*
         * This is part of an evil trick to deal with non-x86 platforms.
         * The VIA chip requires RX buffers to be aligned on 32-bit
         * boundaries, but that will hose non-x86 machines. To get around
         * this, we leave some empty space at the start of each buffer
         * and for non-x86 hosts, we copy the buffer back two bytes
         * to achieve word alignment. This is slightly more efficient
         * than allocating a new buffer, copying the contents, and
         * discarding the old buffer.
         */
        m->m_len = m->m_pkthdr.len = MCLBYTES - VGE_RX_PAD;
        m->m_data += VGE_RX_PAD;
#else
        m->m_len = m->m_pkthdr.len = MCLBYTES;
#endif
-- 
Murata Shuuichirou