From patchwork Mon Sep 13 08:45:39 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jean Delvare X-Patchwork-Id: 64579 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 37B13B70D0 for ; Mon, 13 Sep 2010 18:45:48 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754732Ab0IMIpn (ORCPT ); Mon, 13 Sep 2010 04:45:43 -0400 Received: from cantor2.suse.de ([195.135.220.15]:59555 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754723Ab0IMIpn (ORCPT ); Mon, 13 Sep 2010 04:45:43 -0400 Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.221.2]) by mx2.suse.de (Postfix) with ESMTP id 0FC0889994; Mon, 13 Sep 2010 10:45:41 +0200 (CEST) To: "David S. Miller" Subject: [PATCH] e1000e: Simplify MSI interrupt testing Cc: Jeff Kirsher , Bruce Allan , netdev@vger.kernel.org From: Jean Delvare Organization: Suse Linux Date: Mon, 13 Sep 2010 10:45:39 +0200 MIME-Version: 1.0 Message-Id: <201009131045.40018.jdelvare@suse.de> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The code is quite convoluted, simplify it. This also avoids calling e1000_request_irq() without testing the value it returned, which was bad. Signed-off-by: Jean Delvare Cc: Bruce Allan Cc: Jeff Kirsher Acked-by: Jeff Kirsher --- I understand that we need to request the IRQ again after testing, but why doing it twice? I sent this patch to the e1000-devel list on August 26th, 2010, but didn't receive any answer: http://sourceforge.net/mailarchive/forum.php?thread_name=201008261445.44334.jdelvare%40suse.de&forum_name=e1000-devel drivers/net/e1000e/netdev.c | 29 ++++------------------------- 1 file changed, 4 insertions(+), 25 deletions(-) --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c @@ -3385,22 +3385,16 @@ static int e1000_test_msi_interrupt(stru if (adapter->flags & FLAG_MSI_TEST_FAILED) { adapter->int_mode = E1000E_INT_MODE_LEGACY; - err = -EIO; - e_info("MSI interrupt test failed!\n"); - } + e_info("MSI interrupt test failed, using legacy interrupt.\n"); + } else + e_dbg("MSI interrupt test succeeded!\n"); free_irq(adapter->pdev->irq, netdev); pci_disable_msi(adapter->pdev); - if (err == -EIO) - goto msi_test_failed; - - /* okay so the test worked, restore settings */ - e_dbg("MSI interrupt test succeeded!\n"); msi_test_failed: e1000e_set_interrupt_capability(adapter); - e1000_request_irq(adapter); - return err; + return e1000_request_irq(adapter); } /** @@ -3432,21 +3426,6 @@ static int e1000_test_msi(struct e1000_a pci_write_config_word(adapter->pdev, PCI_COMMAND, pci_cmd); } - /* success ! */ - if (!err) - return 0; - - /* EIO means MSI test failed */ - if (err != -EIO) - return err; - - /* back to INTx mode */ - e_warn("MSI interrupt test failed, using legacy interrupt.\n"); - - e1000_free_irq(adapter); - - err = e1000_request_irq(adapter); - return err; }