Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp3081827ybt; Mon, 29 Jun 2020 14:52:25 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyN8qS3sQa/dijfsuKqRMWVz7qgSjTH3Bvi7N+QL0kBOweYWpdNxqetIKZ39yy3d9ak59ec X-Received: by 2002:a17:906:7f90:: with SMTP id f16mr15457967ejr.507.1593467545537; Mon, 29 Jun 2020 14:52:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593467545; cv=none; d=google.com; s=arc-20160816; b=ta7663W5n+3sgsdGpzBEplke8Nq+cye5eyLKhoiiEnr11jPHWOu3YsV5JS0z0XZkNR Pfea1HX4IDpXgiBUm2gXOmMXMWSdUtAtApV6HpV0haA+KHGacRA9UFKX1kB1CdjRVI8m AVBg31aT66Y95uLBHUi0A/0XGL0i6NKsPByGhkdf19K4nOHt7TkBSUg9wbRKdvsPLT4Z V6cfaG/1wATKKoqqIH5smwI73safpu+rLQ6P62nE1ZDx9B0IUKO688nZbpzqlninEpwx I9df1Y9/nAGQYPgp+3voAjtGDELWAkBYeSCCWAbGkHA3KQuqCQxmEmpfMNUZcjg8F4nA wM7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=JaBNxAiyYAdSD0AIkEz5rBwSsl/Lvtm0SlxAj8C2BzI=; b=Tb560k+06TgYwNO/+MgEOvfLJisLKBYtc/bDTpJXnH9l+BU9KuVdbSQ+kdoSj4Bs7a CK7gXt14MfGG1+IGhXWsDAJN7ZYGW106eZsAJ3ML42DzD3HKvkp4a8K9IQRiiAvtXvxL v7p3+S8iRBBhAcfYib2hFJ7HXwlMr1tArzEeRyu2waMfzUhx5iDR6DTLwd78ddeqrm4k gAeyunemxVKAVYeiQPnZ2A+fOeeZFYofT6pFS3QKobaKOjAl5ka1mZl7MuxV7FqKJqwJ 0mE8Lvj/sVYjN8YJrDvS6g9GVyvBca8krm82GYDpeOQLJyJppRHnlaMBiTgFIh0cTBhX LfCw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Pg+7Ey24; 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=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id yd6si496094ejb.326.2020.06.29.14.52.02; Mon, 29 Jun 2020 14:52:25 -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=@kernel.org header.s=default header.b=Pg+7Ey24; 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=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404500AbgF2Vux (ORCPT + 99 others); Mon, 29 Jun 2020 17:50:53 -0400 Received: from mail.kernel.org ([198.145.29.99]:56796 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726679AbgF2Sfk (ORCPT ); Mon, 29 Jun 2020 14:35:40 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 8AC4E24764; Mon, 29 Jun 2020 15:21:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1593444080; bh=HQUvo0mlc9rK+gcTau9SRds3qCJmeoUzrohT/q4RGEk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Pg+7Ey24USpSefxMpXBpF7n5vwlU1nIv3izzB8C2ZS7o/bSHLHh8r8RDSKjrCHEqf f0vumDrIzAiGx7GQ7ygUcktw/UcLC4T2ZbMRUNjM1JTsfWXHH6OHaAheTkmkj3n5Rd iMKeFcSIJCuY0FyA5+PZ9PLfzW/qbw+jShn+oY4s= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Thomas Falcon , "David S . Miller" , Sasha Levin Subject: [PATCH 5.7 189/265] ibmvnic: Harden device login requests Date: Mon, 29 Jun 2020 11:17:02 -0400 Message-Id: <20200629151818.2493727-190-sashal@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200629151818.2493727-1-sashal@kernel.org> References: <20200629151818.2493727-1-sashal@kernel.org> MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.7.7-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.7.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.7.7-rc1 X-KernelTest-Deadline: 2020-07-01T15:14+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Thomas Falcon [ Upstream commit dff515a3e71dc8ab3b9dcc2e23a9b5fca88b3c18 ] The VNIC driver's "login" command sequence is the final step in the driver's initialization process with device firmware, confirming the available device queue resources to be utilized by the driver. Under high system load, firmware may not respond to the request in a timely manner or may abort the request. In such cases, the driver should reattempt the login command sequence. In case of a device error, the number of retries is bounded. Signed-off-by: Thomas Falcon Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/ibm/ibmvnic.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c index 1b4d04e4474bb..2baf7b3ff4cbf 100644 --- a/drivers/net/ethernet/ibm/ibmvnic.c +++ b/drivers/net/ethernet/ibm/ibmvnic.c @@ -842,12 +842,13 @@ static int ibmvnic_login(struct net_device *netdev) struct ibmvnic_adapter *adapter = netdev_priv(netdev); unsigned long timeout = msecs_to_jiffies(30000); int retry_count = 0; + int retries = 10; bool retry; int rc; do { retry = false; - if (retry_count > IBMVNIC_MAX_QUEUES) { + if (retry_count > retries) { netdev_warn(netdev, "Login attempts exceeded\n"); return -1; } @@ -862,11 +863,23 @@ static int ibmvnic_login(struct net_device *netdev) if (!wait_for_completion_timeout(&adapter->init_done, timeout)) { - netdev_warn(netdev, "Login timed out\n"); - return -1; + netdev_warn(netdev, "Login timed out, retrying...\n"); + retry = true; + adapter->init_done_rc = 0; + retry_count++; + continue; } - if (adapter->init_done_rc == PARTIALSUCCESS) { + if (adapter->init_done_rc == ABORTED) { + netdev_warn(netdev, "Login aborted, retrying...\n"); + retry = true; + adapter->init_done_rc = 0; + retry_count++; + /* FW or device may be busy, so + * wait a bit before retrying login + */ + msleep(500); + } else if (adapter->init_done_rc == PARTIALSUCCESS) { retry_count++; release_sub_crqs(adapter, 1); -- 2.25.1