Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 7 Mar 2003 10:00:23 -0800 (PST)
From:      Gustav Wibling <gustav@vmware.com>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: kern/44126: lnc network hungup at large traffics on VMware (R esend)
Message-ID:  <200303071800.h27I0Ngi095765@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/44126; it has been noted by GNATS.

From: Gustav Wibling <gustav@vmware.com>
To: "'freebsd-gnats-submit@FreeBSD.org'" <freebsd-gnats-submit@FreeBSD.org>,
	"'tam@math.kobe-u.ac.jp'" <tam@math.kobe-u.ac.jp>
Cc:  
Subject: Re: kern/44126: lnc network hungup at large traffics on VMware (R
	esend)
Date: Fri, 7 Mar 2003 09:52:21 -0800 

 The reason this happens on VMware is due to a race
 in the driver. This race is exposed by virtual hardware
 because things happens more in clusters. 
 
 The problem was caused by the line
 
 outw(sc->rdp, RINT | INEA)
 
 at the end of the lnc_rint function.
 
 What happens is that from the end of the while loop
 to the outw writes/acks the RINT in the LANCE status
 register the receive ring fills up with new data and 
 the RINT written in the status register due to this 
 will be acked without the driver handling the new 
 packets.
 No new RINT interrupts will be generated because the
 hardware is unable to get a valid receive dsc. (The 
 ring is full). The guest won't handle the packets 
 because it received no interrupt from the hardware.
 By removing this line the caller of lnc_rint will do
 a read and an ack and then handle what it read, instead
 of just unconditionally acking. This seems like the
 correct thing to do.
 
 This is very unlikely to happen on real hardware because
 it normally takes time to receive, in this case, 8 packets.
 On virtual hardware this can be done very fast because
 it is mainly a memcpy.
 
 The next release of VMware Workstation will have a 
 workaround for this.
 
 Thanks,
 
 Gustav Wibling
 Member of Tech. Staff
 VMware, Inc.
 
 
 

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




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