From patchwork Wed Feb 3 09:10:44 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Govindarajulu Varadarajan X-Patchwork-Id: 577787 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 2140A140B04 for ; Wed, 3 Feb 2016 20:21:26 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=cisco.com header.i=@cisco.com header.b=S2kZgjbi; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751845AbcBCJVU (ORCPT ); Wed, 3 Feb 2016 04:21:20 -0500 Received: from bgl-iport-2.cisco.com ([72.163.197.26]:25981 "EHLO bgl-iport-2.cisco.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751193AbcBCJVR (ORCPT ); Wed, 3 Feb 2016 04:21:17 -0500 X-Greylist: delayed 602 seconds by postgrey-1.27 at vger.kernel.org; Wed, 03 Feb 2016 04:21:16 EST DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=2550; q=dns/txt; s=iport; t=1454491277; x=1455700877; h=from:to:cc:subject:date:message-id; bh=RAtXvmRIjxr8ml5r4/93MlMK/99ndTPnVTKiJiifPIk=; b=S2kZgjbit8U1CYNbyOOFgttK+PfqRr1BatPd0KgCklJpq+BIR7ymkcdi stZz5HpzNeXTbgbTYbvK10IElbRA5Plq+sZMWb4yeAfE3iH4OjIeCCkxr FRYZr/oP7gKhT+CKq8+8vPYOx6yMdh1etRGMDM85WlNNebmUJQUMZyUGN w=; X-IronPort-AV: E=Sophos;i="5.22,389,1449532800"; d="scan'208";a="57985884" Received: from vla196-nat.cisco.com (HELO bgl-core-2.cisco.com) ([72.163.197.24]) by bgl-iport-2.cisco.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 Feb 2016 09:11:12 +0000 Received: from ws.cisco.cisco ([10.127.134.61]) (authenticated bits=0) by bgl-core-2.cisco.com (8.14.5/8.14.5) with ESMTP id u139BBW4024017 (version=TLSv1/SSLv3 cipher=AES128-SHA256 bits=128 verify=NO); Wed, 3 Feb 2016 09:11:11 GMT From: Govindarajulu Varadarajan To: davem@davemloft.net, netdev@vger.kernel.org Cc: ssujith@cisco.com, benve@cisco.com, Sandeep Pillai , Govindarajulu Varadarajan <_govind@gmx.com> Subject: [PATCH net] enic: increment devcmd2 result ring in case of timeout Date: Wed, 3 Feb 2016 14:40:44 +0530 Message-Id: <1454490644-17955-1-git-send-email-gvaradar@cisco.com> X-Mailer: git-send-email 2.7.0 X-Authenticated-User: gvaradar@cisco.com Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Sandeep Pillai Firmware posts the devcmd result in result ring. In case of timeout, driver does not increment the current result pointer and firmware could post the result after timeout has occurred. During next devcmd, driver would be reading the result of previous devcmd. Fix this by incrementing result even in case of timeout. Fixes: 373fb0873d43 ("enic: add devcmd2") Signed-off-by: Sandeep Pillai Signed-off-by: Govindarajulu Varadarajan <_govind@gmx.com> --- drivers/net/ethernet/cisco/enic/enic.h | 2 +- drivers/net/ethernet/cisco/enic/vnic_dev.c | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/drivers/net/ethernet/cisco/enic/enic.h b/drivers/net/ethernet/cisco/enic/enic.h index 1671fa3..7ba6d53 100644 --- a/drivers/net/ethernet/cisco/enic/enic.h +++ b/drivers/net/ethernet/cisco/enic/enic.h @@ -33,7 +33,7 @@ #define DRV_NAME "enic" #define DRV_DESCRIPTION "Cisco VIC Ethernet NIC Driver" -#define DRV_VERSION "2.3.0.12" +#define DRV_VERSION "2.3.0.20" #define DRV_COPYRIGHT "Copyright 2008-2013 Cisco Systems, Inc" #define ENIC_BARS_MAX 6 diff --git a/drivers/net/ethernet/cisco/enic/vnic_dev.c b/drivers/net/ethernet/cisco/enic/vnic_dev.c index 1ffd105..1fdf5fe 100644 --- a/drivers/net/ethernet/cisco/enic/vnic_dev.c +++ b/drivers/net/ethernet/cisco/enic/vnic_dev.c @@ -298,7 +298,8 @@ static int _vnic_dev_cmd2(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd, int wait) { struct devcmd2_controller *dc2c = vdev->devcmd2; - struct devcmd2_result *result = dc2c->result + dc2c->next_result; + struct devcmd2_result *result; + u8 color; unsigned int i; int delay, err; u32 fetch_index, new_posted; @@ -336,13 +337,17 @@ static int _vnic_dev_cmd2(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd, if (dc2c->cmd_ring[posted].flags & DEVCMD2_FNORESULT) return 0; + result = dc2c->result + dc2c->next_result; + color = dc2c->color; + + dc2c->next_result++; + if (dc2c->next_result == dc2c->result_size) { + dc2c->next_result = 0; + dc2c->color = dc2c->color ? 0 : 1; + } + for (delay = 0; delay < wait; delay++) { - if (result->color == dc2c->color) { - dc2c->next_result++; - if (dc2c->next_result == dc2c->result_size) { - dc2c->next_result = 0; - dc2c->color = dc2c->color ? 0 : 1; - } + if (result->color == color) { if (result->error) { err = result->error; if (err != ERR_ECMDUNKNOWN ||