Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp3035191ybt; Mon, 29 Jun 2020 13:30:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwd1X6VWU9IwuGNhVyglOftNu+ifk+Yc4tSw0EAk5QXU66Eha1zL/pI+oTce3QPHqEJeNgP X-Received: by 2002:a50:ee87:: with SMTP id f7mr20034757edr.355.1593462657896; Mon, 29 Jun 2020 13:30:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593462657; cv=none; d=google.com; s=arc-20160816; b=PT6Vy7+TXtfXDiLIuxmgy1u61ytTAFZ3+SCWJjs8tzmWCt8p6uq4H+7BCx5u9+W1eI UzeWN/lnv5kXfM9P5Nif1TPyneh89cE6H8qF6jOyd8XDs2DxDNtu59SIbGUNs24Pq5Ux CNhn1l+/mAUSP90585yJH8yzzDMA7QgzCIsogJbfvUcRabYpY3BI9QxtFhKfUcNCIuNc RHwRGl5aZuLTkNScmuZEJ9l/yE3SdOiSpBqPzsf3ov/+k0wblcAVE0Z2fBMqlTJgNGtm 2Ubu1BAHp+lrk2CnO7/J4U75kS7YjLouJl0sTzjQ9RBWRiTMYZnOoRvWoMJkyUDFZcZl 5nAg== 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=dmn5a95RkSO9Bg2w/0ZI4mzKnDyMTsNvgiuZgYB4/9k=; b=dTpIqMiIuj32GeUSIo7OEjIV6QyxP/cqQ0/95S39I3GCYsJdKTBw/kvzGM8rL4CKAT MoRRC6TeIHMy24ir9AX440ySGJMoqrWMwy2qQuCOEjpV2cer888j4Kz9gopg6KSaFMrU fF8Yiv/T7ri2QjZYXkJLgeq/Q7GTIZltAGo+iES6xs142H2fuDAnVO0NL0pBoi59itsU DU+UIjAyCKmCdMII3oI50vlJhRUxTa7a2yrGW0W+ZOnnvXs/29oJTobB/aVosyW6e0/W Eh9x1poP8TJGi+84zSXwFERbv+g6FEgdpYnd1D890kKOafmyVScNvXwy9xjQMncTAlG7 mfjA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=IxNNQaiH; 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 c19si427765ejk.253.2020.06.29.13.30.35; Mon, 29 Jun 2020 13:30:57 -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=IxNNQaiH; 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 S2388843AbgF2U0z (ORCPT + 99 others); Mon, 29 Jun 2020 16:26:55 -0400 Received: from mail.kernel.org ([198.145.29.99]:37054 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732511AbgF2TZZ (ORCPT ); Mon, 29 Jun 2020 15:25:25 -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 DE8E12545E; Mon, 29 Jun 2020 15:43:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1593445415; bh=u2b31ASksSqbh8KsF2Gfxx+UjgPj5VlCuC4Tbvreias=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IxNNQaiHH92JnLe340h3pZYsewHJGjR9Hq/ANvfKTGVUfiQ2ovrjMK38NDPrJidiQ Hr7PDuXqmVDFjlEI41gcdpae9lV04+rIxbg5mzRundulDpvojqcjiisK9vrbW1HTb/ J1LBhbQWobq1fqblBQ1Mz7PHNI+BWZgP76ZN5OY8= 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 4.9 164/191] net: qed: fix NVMe login fails over VFs Date: Mon, 29 Jun 2020 11:39:40 -0400 Message-Id: <20200629154007.2495120-165-sashal@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200629154007.2495120-1-sashal@kernel.org> References: <20200629154007.2495120-1-sashal@kernel.org> MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.9.229-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-4.9.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 4.9.229-rc1 X-KernelTest-Deadline: 2020-07-01T15:39+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 cf34908ec8e1f..170243d3276b9 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_vf.c +++ b/drivers/net/ethernet/qlogic/qed/qed_vf.c @@ -57,12 +57,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; @@ -102,11 +107,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