misc/89305: D-Link NIC with VIA Rhine II, lost of Network and message displayed "vr0: rx packet lost"

Emmanuel GUEGAN eguegan at assystembrime.com
Sun Nov 20 08:10:10 GMT 2005


>Number:         89305
>Category:       misc
>Synopsis:       D-Link NIC with VIA Rhine II, lost of Network and message displayed "vr0: rx packet lost"
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Nov 20 08:10:09 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator:     Emmanuel GUEGAN
>Release:        6.0
>Organization:
Assystem FRance
>Environment:
FreeBSD myserv 6.0-RELEASE FreeBSD 6.0-RELEASE #0: Sat Nov 19 15:04:45 CET 2005     root at myserv:/usr/obj/usr/src/sys/MYKERN  i386
  
>Description:
I 'm using a Via Rhine II 100mb pci network card on a samba server (celeron 450 MHz).

When I am doing a heavy net transfert (several windows pcs making big transfert  at the same time / network speed above 3~4 M Bytes/sec), after a while ( 1-2minutes) the message "vr0: rx packet lost" is displayed in loop and the network link is definitivly lost

>How-To-Repeat:
As decribe above, very heavy network transfert, after a little time, the probleme is systematic after a little while

>Fix:
The message "vr0: packet lost" is known both in the functions vr_poll_locked(...) and vr_intr(...) : 
                if (status & VR_ISR_RX_DROPPED) {
                        printf("vr%d: rx packet lost\n", sc->vr_unit);
                        ifp->if_ierrors++;
                }
when the flag VR_ISR_RX_DROPPED is up, it is displayed, but in the next segment 
the test (status & VR_ISR_RX_DROPPED) is missing to enter in the condition
so packetscannot be Tx above by vr_rxeoc(sc)

               if ((status & VR_ISR_RX_ERR) || (status & VR_ISR_RX_NOBUF) ||
                   (status & VR_ISR_RX_NOBUF) || (status & VR_ISR_RX_OFLOW))                  
                {
                       printf("vr%d: receive error (%04x)",
                               sc->vr_unit, status);
                ...
                        if (status & VR_ISR_RX_DROPPED)
                                printf(" packet lost");
                        printf("\n");
                        vr_rxeoc(sc);
                }

I propose this patch :

RCS file: RCS/if_vr.c,v
retrieving revision 1.1
diff -r1.1 if_vr.c
1198c1198,1200
<                   (status & VR_ISR_RX_NOBUF) || (status & VR_ISR_RX_OFLOW)) {
---
>                   (status & VR_ISR_RX_NOBUF) || (status & VR_ISR_RX_OFLOW)
>                       || (status & VR_ISR_RX_DROPPED)
>                       ) {
1281c1283,1285
<                   (status & VR_ISR_RX_NOBUF) || (status & VR_ISR_RX_OFLOW)) {
---
>                   (status & VR_ISR_RX_NOBUF) || (status & VR_ISR_RX_OFLOW)
>                       || (status & VR_ISR_RX_DROPPED)
>                       ) {

>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list