tech-net archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: hme(4) hardware RX checksum



On Mar 7,  2:49am, tsutsui%ceres.dti.ne.jp@localhost (Izumi Tsutsui) wrote:
-- Subject: Re: hme(4) hardware RX checksum

| christos%astron.com@localhost wrote:
| 
| > >In hme.c:hme_get(), m_pkthdr.csum_flags is always cleared after
| > >a goto label, so hardware RX checksum on hme(4) seems unused at all.
| > >(no one has checked hwcsum stats by options TCP_CSUM_COUNTERS etc?)
| > >
| > >There is also a wrong pointer arith in VLAN case.
| > >
| > >Is it okay to commit this fix?
| > 
| > Please do!
| 
| Now I notice gem.c has the similar code and hme.c needs to
| have one more `else' for swcsum cases. Which is better?

should be fixed too I guess.

| Index: hme.c
| ===================================================================
| RCS file: /cvsroot/src/sys/dev/ic/hme.c,v
| retrieving revision 1.68
| diff -u -r1.68 hme.c
| --- hme.c     16 Dec 2008 22:35:31 -0000      1.68
| +++ hme.c     6 Mar 2009 17:45:55 -0000
| @@ -836,7 +836,7 @@
|               }
|  
|               m0->m_pkthdr.csum_flags |= M_CSUM_DATA | M_CSUM_NO_PSEUDOHDR;
| -     }
| +     } else
|  swcsum:
|               m0->m_pkthdr.csum_flags = 0;
|  #endif

right the else needs to be there.

| 
| BTW, does hardware checksum work even for VLAN packets?

It must, because there is vlan stuff inside a hw capabilities if statement
(I am just guessing).

| At least it looks wrong to check sc_ethercom.ec_capenable
| without checking eh->ether_type == ETHERTYPE_VLAN.

You are suggesting:

if (eh->ether_type == ETHERTYPE_VLAN && 
    sc->sc_ethercom.ec_capenable & ETHERCAP_VLAN_MTU) {
?

christos


Home | Main Index | Thread Index | Old Index