From patchwork Mon Nov 7 16:13:16 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: stephen hemminger X-Patchwork-Id: 124124 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 38240B6F75 for ; Tue, 8 Nov 2011 03:14:35 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755135Ab1KGQOa (ORCPT ); Mon, 7 Nov 2011 11:14:30 -0500 Received: from [76.74.103.46] ([76.74.103.46]:60238 "EHLO mail.vyatta.com" rhost-flags-FAIL-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1754747Ab1KGQOa (ORCPT ); Mon, 7 Nov 2011 11:14:30 -0500 Received: from localhost (localhost.localdomain [127.0.0.1]) by mail.vyatta.com (Postfix) with ESMTP id D56ED1410008; Mon, 7 Nov 2011 08:13:34 -0800 (PST) X-Virus-Scanned: amavisd-new at tahiti.vyatta.com Received: from mail.vyatta.com ([127.0.0.1]) by localhost (mail.vyatta.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id kc80FmBKnItt; Mon, 7 Nov 2011 08:13:32 -0800 (PST) Received: from nehalam.linuxnetplumber.net (static-50-53-80-93.bvtn.or.frontiernet.net [50.53.80.93]) by mail.vyatta.com (Postfix) with ESMTPSA id A65551410001; Mon, 7 Nov 2011 08:13:32 -0800 (PST) Date: Mon, 7 Nov 2011 08:13:16 -0800 From: Stephen Hemminger To: Dominik Brodowski Cc: davem@davemloft.net, netdev@vger.kernel.org Subject: Re: commit 0bdb0bd0 breaks shutdown/reboot Message-ID: <20111107081316.2e1cc2cb@nehalam.linuxnetplumber.net> In-Reply-To: <20111107153119.GA11724@comet.dominikbrodowski.net> References: <20111107153119.GA11724@comet.dominikbrodowski.net> Organization: Vyatta X-Mailer: Claws Mail 3.7.10 (GTK+ 2.24.6; x86_64-pc-linux-gnu) Mime-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Does this help? Subject: sky2: block irq's on down Need to block IRQ's from phy changes to prevent stray IRQ's when device is down. Signed-off-by: Stephen Hemminger --- 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 --- a/drivers/net/ethernet/marvell/sky2.c 2011-11-04 15:01:51.310888300 -0700 +++ b/drivers/net/ethernet/marvell/sky2.c 2011-11-07 08:10:05.065118917 -0800 @@ -2106,15 +2106,20 @@ static int sky2_down(struct net_device * netif_info(sky2, ifdown, dev, "disabling interface\n"); - /* Disable port IRQ */ - sky2_write32(hw, B0_IMSK, - sky2_read32(hw, B0_IMSK) & ~portirq_msk[sky2->port]); - sky2_read32(hw, B0_IMSK); - if (hw->ports == 1) { + sky2_write32(hw, B0_IMSK, 0); + sky2_read32(hw, B0_IMSK); + napi_disable(&hw->napi); free_irq(hw->pdev->irq, hw); } else { + /* Disable port IRQ */ + u32 imsk = sky2_read32(hw, B0_IMSK); + + imsk &= ~portirq_msk[sky2->port]; + sky2_write32(hw, B0_IMSK, imsk); + sky2_read32(hw, B0_IMSK); + synchronize_irq(hw->pdev->irq); napi_synchronize(&hw->napi); } @@ -5017,19 +5022,19 @@ static void __devexit sky2_remove(struct for (i = hw->ports-1; i >= 0; --i) unregister_netdev(hw->dev[i]); - sky2_write32(hw, B0_IMSK, 0); - sky2_read32(hw, B0_IMSK); - sky2_power_aux(hw); - sky2_write8(hw, B0_CTST, CS_RST_SET); - sky2_read8(hw, B0_CTST); - if (hw->ports > 1) { + sky2_write32(hw, B0_IMSK, 0); + sky2_read32(hw, B0_IMSK); + napi_disable(&hw->napi); free_irq(pdev->irq, hw); } + sky2_write8(hw, B0_CTST, CS_RST_SET); + sky2_read8(hw, B0_CTST); + if (hw->flags & SKY2_HW_USE_MSI) pci_disable_msi(pdev); pci_free_consistent(pdev, hw->st_size * sizeof(struct sky2_status_le),