From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Mayh7-0003al-KM for qemu-devel@nongnu.org; Tue, 11 Aug 2009 17:15:45 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Mayh2-0003aP-Ci for qemu-devel@nongnu.org; Tue, 11 Aug 2009 17:15:44 -0400 Received: from [199.232.76.173] (port=33570 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Mayh2-0003aM-5H for qemu-devel@nongnu.org; Tue, 11 Aug 2009 17:15:40 -0400 Received: from mail.gmx.net ([213.165.64.20]:38238) by monty-python.gnu.org with smtp (Exim 4.60) (envelope-from ) id 1Mayh1-0001vG-9Y for qemu-devel@nongnu.org; Tue, 11 Aug 2009 17:15:39 -0400 Date: Tue, 11 Aug 2009 23:15:36 +0200 From: Reimar =?iso-8859-1?Q?D=F6ffinger?= Message-ID: <20090811211536.GF10500@1und1.de> References: <4A81D3F1.1040300@codemonkey.ws> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <4A81D3F1.1040300@codemonkey.ws> Subject: [Qemu-devel] [PATCH 5/5] Set the RU state to ru_no_resources instead of asserting when we used up the last receive buffer. This should not usually happen with good drivers, but it can happen with the OS X drivers at least. List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Currently if the hardware runs out of receive buffers qemu crashes with an assert. Simply setting the RU state to "no resources" seems to work (though it is hard to provoke the situation and thus hard to test well), at least it can't be any worse than crashing due to an assert (IMO)... Signed-off-by: Reimar Döffinger --- hw/eepro100.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/hw/eepro100.c b/hw/eepro100.c index d2c18cc..8b343c1 100644 --- a/hw/eepro100.c +++ b/hw/eepro100.c @@ -1558,7 +1558,7 @@ static ssize_t nic_receive(VLANClientState *vc, const uint8_t * buf, size_t size s->ru_offset = le32_to_cpu(rx.link); if (rfd_command & 0x8000) { /* EL bit is set, so this was the last frame. */ - assert(0); + set_ru_state(s, ru_no_resources); } if (rfd_command & 0x4000) { /* S bit is set. */ -- 1.6.4