Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp4575770pxv; Tue, 6 Jul 2021 04:27:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwSI3uhLli3eQAAUzplDUibCxQ/yXBdsNwniYIOA9cKJe9crFlmI2i96mPdfFFD0aJ3I/Un X-Received: by 2002:a17:906:d8cf:: with SMTP id re15mr18199097ejb.410.1625570826152; Tue, 06 Jul 2021 04:27:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625570826; cv=none; d=google.com; s=arc-20160816; b=FQ2IkpxZrmwa4nwOrtmOVxZ3Wk/fkxcjl8nNK4pthCqqg7I9uszFcyRYXfQ5z6oAhO 6TnhnoAl0rLxDakJXgKAQlS1y8Zh7JVQ0zem46e1dx9yL9+AbqAzXzFCJekMoBs+/f8r sJ76B8/roq4ia/rmboRyjV4jPoFNu+SwcgEo2gWKLnuzP/xLZxLcVtfjMtJEwPDolicy L3Ty+7jBts6I1hzXzSAlvx5ioG+CiMkHSCot6nz/73UNCEaokSpC1gtPctKD14DOxohy lkWoSzT6DIcMvdcbR0MASuImrEZxyPvsCk8N34u5T6qCey4Sv+mGb1OJimVfMQEw7nsJ deEw== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=kpomArwNnxSmdj5tGAW764pin1rbbRSEqeWmaXSeNuA=; b=01VRz34FLZM6EmP3Tkrh3GGVrzDdW0LL+M4JX2dwvGvKRJsf4PZNVYWjNoCrweqk86 AAfyT3rhB3OsiC1NC4CAcLMEm/vgpsev2sQLRzcrYHTuXTxl1FzpatSuEaUsp/EEi3b6 G8rYkW4ZzWyU5dcYtGXp7DknbRcmfnnf35oa5hpmrNFbUEeB7ImzC9Om42AoD8ZiOt+l +FQdka18+nwM8Zz82Qwjb5dZbviO7d4ZRQ8WLw7J6HfAcd8joAWuQVQoUgWeahnzvLs3 rZghOAp2vpVpsSmoZBino9HmlTfFxXzT5Fn+WjX5lY4hxrAVuwJsSBwT1LaGv2b3wqcQ Smvw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=HfFhfWZk; 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 r9si14443333edd.15.2021.07.06.04.26.42; Tue, 06 Jul 2021 04:27:06 -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=k20201202 header.b=HfFhfWZk; 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 S234529AbhGFL22 (ORCPT + 99 others); Tue, 6 Jul 2021 07:28:28 -0400 Received: from mail.kernel.org ([198.145.29.99]:55764 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233122AbhGFLVM (ORCPT ); Tue, 6 Jul 2021 07:21:12 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id CF13561CCA; Tue, 6 Jul 2021 11:17:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1625570262; bh=lQCN/aGvWqrJQ8s0IVOENXBV3j5fyNsPjWA0grNed0U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HfFhfWZkEAwM0Fgjba/rkc/Eb/0kOJ6wZJhqq1/ofV5741Y6FvKHV9X4D5hR6lIPx bh8WSQsklkJLhtoJBrFSNvoss5wNKhkytY9hXBjXmEzwQ71XzPr0zGNnbttlpoQCjm 1XKJ52tdIZz+kY0eH14L39rRqh7hzkU6N0Foa7/8USfMgsI8Pk1CSpqmN3OFjpjXk+ QcLR6NKJIpBgfnNeWfL2SUXeGhy4FIScV8r6hRT2zMM2qxmVX181PU6Mimni13zn+7 PXvXPLEi6GhVt04d+bGtq+Unj4HYwVtAiERJu9J2JoHDUfKyqa/4bby8PErdvqiV2S UwlWIrmMN39qw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= , "David S . Miller" , Sasha Levin , netdev@vger.kernel.org Subject: [PATCH AUTOSEL 5.13 158/189] sfc: error code if SRIOV cannot be disabled Date: Tue, 6 Jul 2021 07:13:38 -0400 Message-Id: <20210706111409.2058071-158-sashal@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210706111409.2058071-1-sashal@kernel.org> References: <20210706111409.2058071-1-sashal@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Íñigo Huguet [ Upstream commit 1ebe4feb8b442884f5a28d2437040096723dd1ea ] If SRIOV cannot be disabled during device removal or module unloading, return error code so it can be logged properly in the calling function. Note that this can only happen if any VF is currently attached to a guest using Xen, but not with vfio/KVM. Despite that in that case the VFs won't work properly with PF removed and/or the module unloaded, I have let it as is because I don't know what side effects may have changing it, and also it seems to be the same that other drivers are doing in this situation. In the case of being called during SRIOV reconfiguration, the behavior hasn't changed because the function is called with force=false. Signed-off-by: Íñigo Huguet Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/sfc/ef10_sriov.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/sfc/ef10_sriov.c b/drivers/net/ethernet/sfc/ef10_sriov.c index a5d28b0f75ba..84041cd587d7 100644 --- a/drivers/net/ethernet/sfc/ef10_sriov.c +++ b/drivers/net/ethernet/sfc/ef10_sriov.c @@ -402,12 +402,17 @@ static int efx_ef10_pci_sriov_enable(struct efx_nic *efx, int num_vfs) return rc; } +/* Disable SRIOV and remove VFs + * If some VFs are attached to a guest (using Xen, only) nothing is + * done if force=false, and vports are freed if force=true (for the non + * attachedc ones, only) but SRIOV is not disabled and VFs are not + * removed in either case. + */ static int efx_ef10_pci_sriov_disable(struct efx_nic *efx, bool force) { struct pci_dev *dev = efx->pci_dev; - unsigned int vfs_assigned = 0; - - vfs_assigned = pci_vfs_assigned(dev); + unsigned int vfs_assigned = pci_vfs_assigned(dev); + int rc = 0; if (vfs_assigned && !force) { netif_info(efx, drv, efx->net_dev, "VFs are assigned to guests; " @@ -417,10 +422,12 @@ static int efx_ef10_pci_sriov_disable(struct efx_nic *efx, bool force) if (!vfs_assigned) pci_disable_sriov(dev); + else + rc = -EBUSY; efx_ef10_sriov_free_vf_vswitching(efx); efx->vf_count = 0; - return 0; + return rc; } int efx_ef10_sriov_configure(struct efx_nic *efx, int num_vfs) -- 2.30.2