From patchwork Tue Jul 20 15:12:05 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jean Delvare X-Patchwork-Id: 59318 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 E1162B70A4 for ; Wed, 21 Jul 2010 01:12:15 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1761296Ab0GTPMJ (ORCPT ); Tue, 20 Jul 2010 11:12:09 -0400 Received: from cantor.suse.de ([195.135.220.2]:33294 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1760915Ab0GTPMI (ORCPT ); Tue, 20 Jul 2010 11:12:08 -0400 Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.221.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.suse.de (Postfix) with ESMTP id B936894393; Tue, 20 Jul 2010 17:12:07 +0200 (CEST) From: Jean Delvare Organization: Suse Linux To: "David S. Miller" Subject: [PATCH] e1000e: Fix irq_synchronize in MSI-X case Date: Tue, 20 Jul 2010 17:12:05 +0200 User-Agent: KMail/1.12.4 (Linux/2.6.32.13-0.4-pae; KDE/4.3.5; i686; ; ) Cc: netdev@vger.kernel.org, Bruce Allan , Jesse Brandeburg MIME-Version: 1.0 Message-Id: <201007201712.05671.jdelvare@suse.de> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Synchronize all IRQs when in MSI-X IRQ mode. Signed-off-by: Jean Delvare Cc: Bruce Allan Cc: Jesse Brandeburg --- I sent this patch to the e1000-devel list on June 8th, 2010, but didn't receive any answer: http://sourceforge.net/mailarchive/forum.php?thread_name=201006081818.59098.jdelvare%40suse.de&forum_name=e1000-devel I don't know how critical synchronize_irq() is, so I don't know if this patch should go to stable branches or not. drivers/net/e1000e/netdev.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c @@ -1939,7 +1939,13 @@ static void e1000_irq_disable(struct e10 if (adapter->msix_entries) ew32(EIAC_82574, 0); e1e_flush(); - synchronize_irq(adapter->pdev->irq); + + if (adapter->msix_entries) { + synchronize_irq(adapter->msix_entries[0].vector); + synchronize_irq(adapter->msix_entries[1].vector); + synchronize_irq(adapter->msix_entries[2].vector); + } else + synchronize_irq(adapter->pdev->irq); } /**