From patchwork Sat Oct 11 17:17:11 2008 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ron Mercer X-Patchwork-Id: 4016 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 15F2ADDDFB for ; Sun, 12 Oct 2008 04:17:42 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1760612AbYJKRRX (ORCPT ); Sat, 11 Oct 2008 13:17:23 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1760617AbYJKRRW (ORCPT ); Sat, 11 Oct 2008 13:17:22 -0400 Received: from avexch1.qlogic.com ([198.70.193.115]:13301 "EHLO avexch1.qlogic.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1760572AbYJKRRR (ORCPT ); Sat, 11 Oct 2008 13:17:17 -0400 Received: from linux-7mw0.qlogic.com ([172.17.161.156]) by avexch1.qlogic.com with Microsoft SMTPSVC(6.0.3790.1830); Sat, 11 Oct 2008 10:17:14 -0700 Received: by linux-7mw0.qlogic.com (Postfix, from userid 1000) id C5A9768F76; Sat, 11 Oct 2008 10:17:13 -0700 (PDT) From: Ron Mercer To: jeff@garzik.org Cc: netdev@vger.kernel.org, linux-driver@qlogic.com, ron.mercer@qlogic.com Subject: [PATCH 4/6] [NET-NEXT]qlge: Cleanup chip reset path. Date: Sat, 11 Oct 2008 10:17:11 -0700 Message-Id: <1223745433-26440-4-git-send-email-ron.mercer@qlogic.com> X-Mailer: git-send-email 1.6.0 In-Reply-To: <20081011171614.GA26384@susedev.qlogic.org> References: <20081011171614.GA26384@susedev.qlogic.org> X-OriginalArrivalTime: 11 Oct 2008 17:17:14.0516 (UTC) FILETIME=[34714540:01C92BC5] Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Signed-off-by: Ron Mercer --- drivers/net/qlge/qlge_main.c | 41 +++++++++++++++++------------------------ 1 files changed, 17 insertions(+), 24 deletions(-) diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c index c257546..1788e5c 100755 --- a/drivers/net/qlge/qlge_main.c +++ b/drivers/net/qlge/qlge_main.c @@ -3141,28 +3141,6 @@ err_init: return err; } -static int ql_cycle_adapter(struct ql_adapter *qdev) -{ - int status; - - status = ql_adapter_down(qdev); - if (status) - goto error; - - status = ql_adapter_up(qdev); - if (status) - goto error; - - return status; -error: - QPRINTK(qdev, IFUP, ALERT, - "Driver up/down cycle failed, closing device\n"); - rtnl_lock(); - dev_close(qdev->ndev); - rtnl_unlock(); - return status; -} - static void ql_release_adapter_resources(struct ql_adapter *qdev) { ql_free_mem_resources(qdev); @@ -3471,14 +3449,29 @@ static int qlge_set_mac_address(struct net_device *ndev, void *p) static void qlge_tx_timeout(struct net_device *ndev) { struct ql_adapter *qdev = (struct ql_adapter *)netdev_priv(ndev); - queue_delayed_work(qdev->workqueue, &qdev->asic_reset_work, 0); + ql_queue_asic_error(qdev); } static void ql_asic_reset_work(struct work_struct *work) { struct ql_adapter *qdev = container_of(work, struct ql_adapter, asic_reset_work.work); - ql_cycle_adapter(qdev); + int status; + + status = ql_adapter_down(qdev); + if (status) + goto error; + + status = ql_adapter_up(qdev); + if (status) + goto error; + return; +error: + QPRINTK(qdev, IFUP, ALERT, + "Driver up/down cycle failed, closing device\n"); + rtnl_lock(); + dev_close(qdev->ndev); + rtnl_unlock(); } static void ql_get_board_info(struct ql_adapter *qdev)