Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp3030146ybt; Mon, 29 Jun 2020 13:21:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyCIF1p7LKThNrf/nLzqSZriI7Zcp4/Ur1y3/bSCKrMxmnTm2xzAJeehAaVRWulBoPqpYIP X-Received: by 2002:a05:6402:b4b:: with SMTP id bx11mr18992210edb.286.1593462083195; Mon, 29 Jun 2020 13:21:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593462083; cv=none; d=google.com; s=arc-20160816; b=SRu8I8hncRrnEZpE84Jv+3MfpcJj+MHcGA6bkwOGIckWewzo9GZXRQrnWKLsbuu6xL omTkqjk5lzS9G2kLUpuRO8fpY/tNcoBz6uHIhDKH2pHjbds9nzJsK6GF5oq+e4SSEuDW dFjhm81zTxCSDCHPnmZ3qmlrU1BtmcqH7EMUvOG+PteJ10EtS/UAOOdv1M+a344epnMW xI8Vfnn6CV5yMAtrQFaQWN87nWlAX0IxrzC3lsXW+Ur5CrlAhXnEvxJZ+zOzVIsRWvxd nvxF1g0SVAWSE9dACDjkmQE5I50V75Hjb5ti+5gjlvWyYxDLPJRXH93B6UuXoly6ghjW ALGQ== 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=pxT6FYl781TLqr3RsIWK5JvCBBeVgu98+9YnnDZKIHU=; b=erBY3AIq1chS5Sy7swMjewgOovgnY5WU3Y+v1Wj7eyuPdpmOJo5FS/VtOz1dLd8Qt1 hPL5lVbuvmAFKUn6op7kdNbHa0RQhwLh0UC8nAXdd8kziQO8yQbXFgMHEApiISllwqwR /tKtWnzhDB3wJyQSh6FgrzaDuBNpaOufJsPxwkmxG756CclOPgVGQhBm3jLhAfkYgWEe 1w5+9cMpGyly1ZPuXhbUokizqCTj181BMKI70zLEEkWpa++Hqehvahn2PpuN4BewX8Vl ony+cBZAfSkdL56xP7vvzoa5a1+0N5kPf+8qWHI5mISGhJq4s71z+/AAmPr2mOcvMFKa eZaA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=xDOR0Bnp; 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 l26si366368eje.36.2020.06.29.13.21.00; Mon, 29 Jun 2020 13:21:23 -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=xDOR0Bnp; 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 S1732443AbgF2UTd (ORCPT + 99 others); Mon, 29 Jun 2020 16:19:33 -0400 Received: from mail.kernel.org ([198.145.29.99]:37042 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732165AbgF2TZk (ORCPT ); Mon, 29 Jun 2020 15:25: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 B619925314; Mon, 29 Jun 2020 15:39:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1593445142; bh=UFnQ0j9vRU9dtyUAJS6l4WDlLbEXsutWmWL5HIeCguA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=xDOR0BnpEJGxEN0UVInngpbOTEJ4LdxZ7+K5DjBFUiXDRUdIPifdFgkpMFUyjquT5 xuPfmQFIqWI1OFBgJMeJIDic7+yvxzMyn4aQoP8a7Q3/MpF/iHmiF9w391pDM2r8rh DsFV4ONN28PAp7XPHRa2kKKuyyfdVie2D8bku01Y= 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.14 47/78] net: qed: fix NVMe login fails over VFs Date: Mon, 29 Jun 2020 11:37:35 -0400 Message-Id: <20200629153806.2494953-48-sashal@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200629153806.2494953-1-sashal@kernel.org> References: <20200629153806.2494953-1-sashal@kernel.org> MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.14.186-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-4.14.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 4.14.186-rc1 X-KernelTest-Deadline: 2020-07-01T15:38+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 a2a9921b467b1..693f2a0393835 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