From patchwork Wed Feb 25 12:26:19 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: roel kluin X-Patchwork-Id: 23712 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id 9E442DDF00 for ; Wed, 25 Feb 2009 23:26:30 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751576AbZBYM0X (ORCPT ); Wed, 25 Feb 2009 07:26:23 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1750966AbZBYM0X (ORCPT ); Wed, 25 Feb 2009 07:26:23 -0500 Received: from yw-out-2324.google.com ([74.125.46.31]:11719 "EHLO yw-out-2324.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750784AbZBYM0W (ORCPT ); Wed, 25 Feb 2009 07:26:22 -0500 Received: by yw-out-2324.google.com with SMTP id 5so1325555ywh.1 for ; Wed, 25 Feb 2009 04:26:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:cc:subject:content-type :content-transfer-encoding; bh=KFKuMhEq1GTm2D5UFjJXO3za1Qoe+z9xlyZJmwxCgr4=; b=BgHhbILTOrrhUbOcwGDJcS1fjidvvcLl9FVbddtkpHFjGBqZRnXdQ6WFcZraetHKiJ qwh5z4C6lJI29Tcl8cQxuB8sol+qT50+fEEsa60HXHpA2ZXY9w3UmcbCDNlWBpJvDcoC gGvtt6BUhgYnn1BqGF029fDiA/t4M6KaEOtus= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:cc:subject :content-type:content-transfer-encoding; b=TD2SHW6GDtVaQAFC0GVLAuTIwtlmQIxctgkF1CYiLecuYVqnB0JPO9Jw9P/98Zs3Al rPeY+SZZJI0M5RWgi9/eDgrY9RHOm07wxu6xYAGhqWSv8k8MFBuwuZnX9dkwTajXF3kl ublq9cQJ3gYD5GrpZkuvg2LVdncOUAKZ4IU3c= Received: by 10.100.142.4 with SMTP id p4mr174851and.23.1235564779649; Wed, 25 Feb 2009 04:26:19 -0800 (PST) Received: from ?192.168.1.115? (d133062.upc-d.chello.nl [213.46.133.62]) by mx.google.com with ESMTPS id u1sm13910311uge.2.2009.02.25.04.26.18 (version=TLSv1/SSLv3 cipher=RC4-MD5); Wed, 25 Feb 2009 04:26:19 -0800 (PST) Message-ID: <49A538EB.8080008@gmail.com> Date: Wed, 25 Feb 2009 13:26:19 +0100 From: Roel Kluin User-Agent: Thunderbird 2.0.0.18 (X11/20081105) MIME-Version: 1.0 To: "David S. Miller" CC: netdev@vger.kernel.org, linux-pcmcia@lists.infradead.org, Andrew Morton Subject: [PATCH] pcmcia: worklimit reaches -1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org ------------------------------>8-------------8<--------------------------------- with while (--worklimit >= 0); worklimit reaches -1 after the loop. In 3c589_cs.c this caused a warning not to be printed. In 3c574_cs.c contrastingly, el3_rx() treats worklimit differently: static int el3_rx(struct net_device *dev, int worklimit) { while (--worklimit >= 0) { ... } return worklimit; } el3_rx() is only called by function el3_interrupt(): twice: static irqreturn_t el3_interrupt(int irq, void *dev_id) { int work_budget = max_interrupt_work; while(...) { if (...) work_budget = el3_rx(dev, work_budget); if (...) work_budget = el3_rx(dev, work_budget); if (--work_budget < 0) { ... break; } } } The error path can occur 2 too early. Signed-off-by: Roel Kluin --- el3_rx() calls: lines 839 and 856 el3_interrupt(): line 810 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/net/pcmcia/3c574_cs.c b/drivers/net/pcmcia/3c574_cs.c index e5cb6b1..2404a83 100644 --- a/drivers/net/pcmcia/3c574_cs.c +++ b/drivers/net/pcmcia/3c574_cs.c @@ -1035,7 +1035,8 @@ static int el3_rx(struct net_device *dev, int worklimit) DEBUG(3, "%s: in rx_packet(), status %4.4x, rx_status %4.4x.\n", dev->name, inw(ioaddr+EL3_STATUS), inw(ioaddr+RxStatus)); while (!((rx_status = inw(ioaddr + RxStatus)) & 0x8000) && - (--worklimit >= 0)) { + worklimit > 0) { + worklimit--; if (rx_status & 0x4000) { /* Error, update stats. */ short error = rx_status & 0x3800; dev->stats.rx_errors++; diff --git a/drivers/net/pcmcia/3c589_cs.c b/drivers/net/pcmcia/3c589_cs.c index 73ecc65..1e01b8a 100644 --- a/drivers/net/pcmcia/3c589_cs.c +++ b/drivers/net/pcmcia/3c589_cs.c @@ -857,7 +857,8 @@ static int el3_rx(struct net_device *dev) DEBUG(3, "%s: in rx_packet(), status %4.4x, rx_status %4.4x.\n", dev->name, inw(ioaddr+EL3_STATUS), inw(ioaddr+RX_STATUS)); while (!((rx_status = inw(ioaddr + RX_STATUS)) & 0x8000) && - (--worklimit >= 0)) { + worklimit > 0) { + worklimit--; if (rx_status & 0x4000) { /* Error, update stats. */ short error = rx_status & 0x3800; dev->stats.rx_errors++;