Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp2836047pxv; Mon, 12 Jul 2021 03:08:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzDPijjPhmHOOTfmzNH0z990twbX5wGGFaVc/OcyImmh5EF1gSxzNCOSJspp92I0RpZVubq X-Received: by 2002:a05:6638:d4d:: with SMTP id d13mr34631183jak.140.1626084509250; Mon, 12 Jul 2021 03:08:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626084509; cv=none; d=google.com; s=arc-20160816; b=bO62UvHjZml9LpnqqHafmKA2VulPUko40RqIniXQLZMdPmc/gGo808qTGRDAaSlCiB aNpcbfV626c4eoIFFOlBxt94Eq4FGSsg+unnQVm3uVX22mlmM0m/XBMyLZuXK01Kwwkn 9EWXxCyrz7SUwU/NZkZ6rFKDxVCgmwSaiKHT27G29Kt2vNXHBw+HTXXuLGVwWf7jniVB 5AyVZVFiTCmrd3c5ZPS0v585/mfc2aFWVEGoU+aiwammjwJfVHq5GLUBngMVWqLM0TNf JKDG2OIlmS1SNiwOm5R3uIdSqUSOOXgEWX6oPwB/kL8Ww9ooOggM4MfCxUUgAHc+T93M XQGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=JiK6Ny5er5W37W7hAzeBzKJjtAQWFBPuJNNSDzIvMMI=; b=HHmQ+eNITYwM0FwO+O6Hje049MfqeLJKPYIyW0yBGPaA7bpVlvo4TNaPDHc1FAc5sc 1A+wCoAkF0BxV7Eim+3MudrUSc23qgLAL6DWT+IDv2YrN1PKevUGMnz4V2GKj6/p7lAh l+i9H3im0dP1mcxoRYhJffZYu/zkJXhFxynKzCTH9O5sw4i9d536EFc3w+eSTTGM7s3X PFXnGLf1nmtQFCYczKobl2xL48Umz7nY4NhYIkwHLBdyio3o6eVrBsaiz4DPvek+l0iu DQn+XvwXoUbbkn2M3GkwYYHXB3XsLwROxTw7jt+FOrykQquOP0Ml+ZqZM6BwAoqbt0TL bXvw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=b+UnCEX2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y9si1657448ilv.11.2021.07.12.03.08.17; Mon, 12 Jul 2021 03:08:29 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=b+UnCEX2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243636AbhGLHww (ORCPT + 99 others); Mon, 12 Jul 2021 03:52:52 -0400 Received: from mail.kernel.org ([198.145.29.99]:55466 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244812AbhGLHSt (ORCPT ); Mon, 12 Jul 2021 03:18:49 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 4A99961153; Mon, 12 Jul 2021 07:15:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626074154; bh=nnbaz8Yfi3PCtZtlmiSX2StMsnPRe/+TSWMllL/PZpU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=b+UnCEX2qnlBlPrg9BlZzHUPpPQFYf3NibLLWMWD7d8S+ZuEPKFMU2m+YojYVHdM8 pQJr+d5iaqXjWb55OxehQCN4ho2ysHA4MJM+5BifUcAcgX2ZXHZBsfEi0PV8Xnwdzd iYZFATP7aoaGCElYRnG/kK5/osoJd7U3weWqBUuE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Sukadev Bhattiprolu , "David S. Miller" , Sasha Levin Subject: [PATCH 5.12 481/700] Revert "ibmvnic: simplify reset_long_term_buff function" Date: Mon, 12 Jul 2021 08:09:24 +0200 Message-Id: <20210712061027.789641483@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210712060924.797321836@linuxfoundation.org> References: <20210712060924.797321836@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Sukadev Bhattiprolu [ Upstream commit 0ec13aff058a82426c8d44b688c804cc4a5a0a3d ] This reverts commit 1c7d45e7b2c29080bf6c8cd0e213cc3cbb62a054. We tried to optimize the number of hcalls we send and skipped sending the REQUEST_MAP calls for some maps. However during resets, we need to resend all the maps to the VIOS since the VIOS does not remember the old values. In fact we may have failed over to a new VIOS which will not have any of the mappings. When we send packets with map ids the VIOS does not know about, it triggers a FATAL reset. While the client does recover from the FATAL error reset, we are seeing a large number of such resets. Handling FATAL resets is lot more unnecessary work than issuing a few more hcalls so revert the commit and resend the maps to the VIOS. Fixes: 1c7d45e7b2c ("ibmvnic: simplify reset_long_term_buff function") Signed-off-by: Sukadev Bhattiprolu Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/ibm/ibmvnic.c | 46 ++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c index ffb2a91750c7..b920132d4940 100644 --- a/drivers/net/ethernet/ibm/ibmvnic.c +++ b/drivers/net/ethernet/ibm/ibmvnic.c @@ -257,12 +257,40 @@ static void free_long_term_buff(struct ibmvnic_adapter *adapter, dma_free_coherent(dev, ltb->size, ltb->buff, ltb->addr); } -static int reset_long_term_buff(struct ibmvnic_long_term_buff *ltb) +static int reset_long_term_buff(struct ibmvnic_adapter *adapter, + struct ibmvnic_long_term_buff *ltb) { - if (!ltb->buff) - return -EINVAL; + struct device *dev = &adapter->vdev->dev; + int rc; memset(ltb->buff, 0, ltb->size); + + mutex_lock(&adapter->fw_lock); + adapter->fw_done_rc = 0; + + reinit_completion(&adapter->fw_done); + rc = send_request_map(adapter, ltb->addr, ltb->size, ltb->map_id); + if (rc) { + mutex_unlock(&adapter->fw_lock); + return rc; + } + + rc = ibmvnic_wait_for_completion(adapter, &adapter->fw_done, 10000); + if (rc) { + dev_info(dev, + "Reset failed, long term map request timed out or aborted\n"); + mutex_unlock(&adapter->fw_lock); + return rc; + } + + if (adapter->fw_done_rc) { + dev_info(dev, + "Reset failed, attempting to free and reallocate buffer\n"); + free_long_term_buff(adapter, ltb); + mutex_unlock(&adapter->fw_lock); + return alloc_long_term_buff(adapter, ltb, ltb->size); + } + mutex_unlock(&adapter->fw_lock); return 0; } @@ -484,7 +512,8 @@ static int reset_rx_pools(struct ibmvnic_adapter *adapter) rx_pool->size * rx_pool->buff_size); } else { - rc = reset_long_term_buff(&rx_pool->long_term_buff); + rc = reset_long_term_buff(adapter, + &rx_pool->long_term_buff); } if (rc) @@ -607,11 +636,12 @@ static int init_rx_pools(struct net_device *netdev) return 0; } -static int reset_one_tx_pool(struct ibmvnic_tx_pool *tx_pool) +static int reset_one_tx_pool(struct ibmvnic_adapter *adapter, + struct ibmvnic_tx_pool *tx_pool) { int rc, i; - rc = reset_long_term_buff(&tx_pool->long_term_buff); + rc = reset_long_term_buff(adapter, &tx_pool->long_term_buff); if (rc) return rc; @@ -638,10 +668,10 @@ static int reset_tx_pools(struct ibmvnic_adapter *adapter) tx_scrqs = adapter->num_active_tx_pools; for (i = 0; i < tx_scrqs; i++) { - rc = reset_one_tx_pool(&adapter->tso_pool[i]); + rc = reset_one_tx_pool(adapter, &adapter->tso_pool[i]); if (rc) return rc; - rc = reset_one_tx_pool(&adapter->tx_pool[i]); + rc = reset_one_tx_pool(adapter, &adapter->tx_pool[i]); if (rc) return rc; } -- 2.30.2