Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp3084402ybt; Mon, 29 Jun 2020 14:57:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJymkvPFzEZ/QBvo01dvLXKULKzN0dy3C4xBW3bCAU02L+clK8MB6irL+kj1JhUqJstaHHIQ X-Received: by 2002:a17:906:c10f:: with SMTP id do15mr16516656ejc.249.1593467856926; Mon, 29 Jun 2020 14:57:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593467856; cv=none; d=google.com; s=arc-20160816; b=seBtCt/QnrIRfR4kJ0g8tcSrbvzD7jWg6kwQJlYOV2KzvW+or+29Xuad2o43/FuHI0 Jh11zPW16RivlVniGWBFvxmskmaIC8jlGJmKMjbam4bF2GhrCVUDV+jNpn2XxyTiuHVI 21qlEaXpL7yz0bIP+DeCCZfTK9SCsMVe7TWYYse1yhcLnXDgjondnfsNUGK8DYoLNKHe xEmXUg60pp2ptWSzlbWF9URGkCKvLJeJOsGNkWZcJ3UGGh9mki/mP8DzOIZ3j6bw4c13 rqwlrD9qM4itpPHQeG1G2p8QpWuekoepJRb05m41K3i8Ud5N/5juT9adJdQ5tZuok6Fn cH8A== 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=mAuEuG2v2pOV+QuxtzZYfawaFSXVYXrTHOLtteGrUiY=; b=dx2n5cnkMu+2x2oYOum1nmtohQsOtCSt+wVgPasuKyuFSLqt9rGOjghtWpGIY7KQJM HJq0GuK7/I6/Fk9Cd5RmKjOfWGz05n85mydFIuxCLuSst3wq+1gyL4e4oYoB/hcVjueD 9e/H75I0zDkSIm3JKm/sXETt2XneshOMuTeLcGkaj5vo5Vpqs4eI891cRjfzPZpDohKA lIYFycEMmdXmsEn4gttWehQcZd1JaFKiuBVX+Ve4/G+aVQQEs72UQk8b9oe6OIaumy5U la6zO+c+c1wW+VzrHPnDU/VAyUQugj2X3kEv598kOaVEl972vk04659W1zIC8Ww7mLdx mEyA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=LKMbmHXO; 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 i23si494306eds.82.2020.06.29.14.57.14; Mon, 29 Jun 2020 14:57:36 -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=LKMbmHXO; 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 S1730659AbgF2V4O (ORCPT + 99 others); Mon, 29 Jun 2020 17:56:14 -0400 Received: from mail.kernel.org ([198.145.29.99]:56912 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726535AbgF2Sfb (ORCPT ); Mon, 29 Jun 2020 14:35:31 -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 595C024709; Mon, 29 Jun 2020 15:20:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1593444043; bh=O3Sl3Zmj13GtombGOkybZSX876YS3KMgO+6+2EF6B1w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LKMbmHXOrIfv6NJo4gA+hlSuiNNT/oUcFjGKapoeQHo7rXPY3KNvVzSFgugwiM8P2 slKS+xoNKUyE89nKRykcJMHsYgOjB/BHvtxLoyZfX5fLL4yLdp6uEwqSksHITweQ/k nfmeq4diZEbY7vdlrgoXAnplnrqHgp810F1Rx79k= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Alexander Lobakin , Igor Russkikh , Michal Kalderon , "David S . Miller" , Sasha Levin Subject: [PATCH 5.7 150/265] net: qed: fix NVMe login fails over VFs Date: Mon, 29 Jun 2020 11:16:23 -0400 Message-Id: <20200629151818.2493727-151-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: Alexander Lobakin [ Upstream commit ccd7c7ce167a21dbf2b698ffcf00f11d96d44f9b ] 25ms sleep cycles in waiting for PF response are excessive and may lead to different timeout failures. Start to wait with short udelays, and in most cases polling will end here. If the time was not sufficient, switch to msleeps. usleep_range() may go far beyond 100us depending on platform and tick configuration, hence atomic udelays for consistency. Also add explicit DMA barriers since 'done' always comes from a shared request-response DMA pool, and note that in the comment nearby. Fixes: 1408cc1fa48c ("qed: Introduce VFs") Signed-off-by: Alexander Lobakin Signed-off-by: Igor Russkikh Signed-off-by: Michal Kalderon Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/qlogic/qed/qed_vf.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/qlogic/qed/qed_vf.c b/drivers/net/ethernet/qlogic/qed/qed_vf.c index 856051f50eb75..adc2c8f3d48ef 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_vf.c +++ b/drivers/net/ethernet/qlogic/qed/qed_vf.c @@ -81,12 +81,17 @@ static void qed_vf_pf_req_end(struct qed_hwfn *p_hwfn, int req_status) mutex_unlock(&(p_hwfn->vf_iov_info->mutex)); } +#define QED_VF_CHANNEL_USLEEP_ITERATIONS 90 +#define QED_VF_CHANNEL_USLEEP_DELAY 100 +#define QED_VF_CHANNEL_MSLEEP_ITERATIONS 10 +#define QED_VF_CHANNEL_MSLEEP_DELAY 25 + static int qed_send_msg2pf(struct qed_hwfn *p_hwfn, u8 *done, u32 resp_size) { union vfpf_tlvs *p_req = p_hwfn->vf_iov_info->vf2pf_request; struct ustorm_trigger_vf_zone trigger; struct ustorm_vf_zone *zone_data; - int rc = 0, time = 100; + int iter, rc = 0; zone_data = (struct ustorm_vf_zone *)PXP_VF_BAR0_START_USDM_ZONE_B; @@ -126,11 +131,19 @@ static int qed_send_msg2pf(struct qed_hwfn *p_hwfn, u8 *done, u32 resp_size) REG_WR(p_hwfn, (uintptr_t)&zone_data->trigger, *((u32 *)&trigger)); /* When PF would be done with the response, it would write back to the - * `done' address. Poll until then. + * `done' address from a coherent DMA zone. Poll until then. */ - while ((!*done) && time) { - msleep(25); - time--; + + iter = QED_VF_CHANNEL_USLEEP_ITERATIONS; + while (!*done && iter--) { + udelay(QED_VF_CHANNEL_USLEEP_DELAY); + dma_rmb(); + } + + iter = QED_VF_CHANNEL_MSLEEP_ITERATIONS; + while (!*done && iter--) { + msleep(QED_VF_CHANNEL_MSLEEP_DELAY); + dma_rmb(); } if (!*done) { -- 2.25.1