From patchwork Tue Aug 11 18:27:44 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Reimar_D=C3=B6ffinger?= X-Patchwork-Id: 31156 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by bilbo.ozlabs.org (Postfix) with ESMTPS id 5BC5FB6F1E for ; Wed, 12 Aug 2009 04:35:13 +1000 (EST) Received: from localhost ([127.0.0.1]:35817 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MawBh-0000pH-CO for incoming@patchwork.ozlabs.org; Tue, 11 Aug 2009 14:35:09 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MawB9-0000mZ-6j for qemu-devel@nongnu.org; Tue, 11 Aug 2009 14:34:35 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MawB4-0000kX-FZ for qemu-devel@nongnu.org; Tue, 11 Aug 2009 14:34:34 -0400 Received: from [199.232.76.173] (port=33518 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MawB4-0000kN-Ce for qemu-devel@nongnu.org; Tue, 11 Aug 2009 14:34:30 -0400 Received: from mail.gmx.net ([213.165.64.20]:54891) by monty-python.gnu.org with smtp (Exim 4.60) (envelope-from ) id 1MawB4-0005AX-0b for qemu-devel@nongnu.org; Tue, 11 Aug 2009 14:34:30 -0400 Received: (qmail invoked by alias); 11 Aug 2009 18:27:45 -0000 Received: from p5B1340BE.dip.t-dialin.net (EHLO localhost) [91.19.64.190] by mail.gmx.net (mp036) with SMTP; 11 Aug 2009 20:27:45 +0200 X-Authenticated: #11956158 X-Provags-ID: V01U2FsdGVkX18Q2LodNJMQADrKhecz/LjMaNKHxAg0anSBFbe3pF MemhqPNLAu5Jlc Date: Tue, 11 Aug 2009 20:27:44 +0200 From: Reimar =?iso-8859-1?Q?D=F6ffinger?= To: qemu-devel@nongnu.org Subject: Re: [Qemu-devel] [PATCH] Intel 8255x/eepro100 compatibility patches Message-ID: <20090811182744.GA7045@1und1.de> References: <20090809211433.GA8892@1und1.de> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20090809211433.GA8892@1und1.de> User-Agent: Mutt/1.5.20 (2009-06-14) X-Y-GMX-Trusted: 0 X-FuHaFi: 0.64 X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 3) X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org On Sun, Aug 09, 2009 at 11:14:33PM +0200, Reimar Döffinger wrote: > Attached is a series of patches that makes things work with at least > some version of that (sorry, I only tried some binary I found on the > net, didn't compile from source). > In addition, I also used the documentation from here: > http://www.intel.com/design/network/manuals/8255X_OpenSDM.htm Another change, 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)... From eb3dcfa9d65df83c207a74970953cad95d2da1ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reimar=20D=C3=B6ffinger?= Date: Tue, 11 Aug 2009 17:19:01 +0200 Subject: [PATCH] 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. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. */