Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 20 Nov 2005 08:00:06 GMT
From:      Emmanuel GUEGAN <eguegan@assystembrime.com>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   misc/89305: D-Link NIC with VIA Rhine II, lost of Network and message displayed "vr0: rx packet lost"
Message-ID:  <200511200800.jAK806ni010783@www.freebsd.org>
Resent-Message-ID: <200511200810.jAK8A9GG067094@freefall.freebsd.org>

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


>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@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:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200511200800.jAK806ni010783>