From patchwork Fri Jul 22 17:52:42 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Morsing X-Patchwork-Id: 106365 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.180.67]) by ozlabs.org (Postfix) with ESMTP id E004CB6F00 for ; Sat, 23 Jul 2011 03:53:40 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754409Ab1GVRwt (ORCPT ); Fri, 22 Jul 2011 13:52:49 -0400 Received: from mail-ey0-f171.google.com ([209.85.215.171]:41618 "EHLO mail-ey0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754272Ab1GVRws (ORCPT ); Fri, 22 Jul 2011 13:52:48 -0400 Received: by eye22 with SMTP id 22so2514296eye.2 for ; Fri, 22 Jul 2011 10:52:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer; bh=ynkfzKZgKQZaPtGRxv+OvVeL4QP36Xe0CK8/sBLGG88=; b=bwG0ALr7lDqhJCye2P6upaKkI+TEAEE2E46BlF9U0vgEqBG8lQPqPHveJX0AKWLOMG 5EALXYT6ooAeBQ6dJrHqfsM6S90DsJBW6czXnn0LiLgwEijI9HePsSydc11lEmA3jZ6v CeYjHdFXarYkXb31x8ctSMz6mOFnYtZ92wOLs= Received: by 10.14.96.8 with SMTP id q8mr683955eef.214.1311357166737; Fri, 22 Jul 2011 10:52:46 -0700 (PDT) Received: from localhost.localdomain (ip-60-249.bnaa.dk [84.238.60.249]) by mx.google.com with ESMTPS id c18sm1709573eeb.4.2011.07.22.10.52.45 (version=TLSv1/SSLv3 cipher=OTHER); Fri, 22 Jul 2011 10:52:46 -0700 (PDT) From: Daniel Morsing To: "David S. Miller" Cc: Mark Brown , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Morsing Subject: [PATCH] dm9000: Make the driver follow the IRQF_SHARED contract Date: Fri, 22 Jul 2011 19:52:42 +0200 Message-Id: <1311357162-16200-1-git-send-email-daniel.morsing@gmail.com> X-Mailer: git-send-email 1.7.4.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The dm9000 driver requests a shared interrupt but doesn't return IRQ_NONE when the device didn't generate the interrupt. This could lead to the other devices sharing the irq never getting an interrupt. This patch makes the routine return IRQ_NONE for the path where no work was done. Signed-off-by: Daniel Morsing Cc: stable@kernel.org --- drivers/net/dm9000.c | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c index ee597e6..d9a20c9 100644 --- a/drivers/net/dm9000.c +++ b/drivers/net/dm9000.c @@ -1042,6 +1042,7 @@ static irqreturn_t dm9000_interrupt(int irq, void *dev_id) int int_status; unsigned long flags; u8 reg_save; + irqreturn_t ret = IRQ_NONE; dm9000_dbg(db, 3, "entering %s\n", __func__); @@ -1064,17 +1065,22 @@ static irqreturn_t dm9000_interrupt(int irq, void *dev_id) dev_dbg(db->dev, "interrupt status %02x\n", int_status); /* Received the coming packet */ - if (int_status & ISR_PRS) + if (int_status & ISR_PRS) { dm9000_rx(dev); + ret = IRQ_HANDLED; + } /* Trnasmit Interrupt check */ - if (int_status & ISR_PTS) + if (int_status & ISR_PTS) { dm9000_tx_done(dev, db); + ret = IRQ_HANDLED; + } if (db->type != TYPE_DM9000E) { if (int_status & ISR_LNKCHNG) { /* fire a link-change request */ schedule_delayed_work(&db->phy_poll, 1); + ret = IRQ_HANDLED; } } @@ -1086,7 +1092,7 @@ static irqreturn_t dm9000_interrupt(int irq, void *dev_id) spin_unlock_irqrestore(&db->lock, flags); - return IRQ_HANDLED; + return ret; } static irqreturn_t dm9000_wol_interrupt(int irq, void *dev_id)