From patchwork Thu Jul 13 14:57:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivan Vecera X-Patchwork-Id: 119978 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1903577vqm; Thu, 13 Jul 2023 08:30:33 -0700 (PDT) X-Google-Smtp-Source: APBJJlGzZgpTzR/X7KKqYHZXQhsl9g5+P/hqVBatEekAYrDBEdUJivZGSja6PizlJmqsl4JjTfy/ X-Received: by 2002:a05:6a20:8e14:b0:112:cf5:d5fb with SMTP id y20-20020a056a208e1400b001120cf5d5fbmr1487700pzj.50.1689262233347; Thu, 13 Jul 2023 08:30:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689262233; cv=none; d=google.com; s=arc-20160816; b=LNPMj9UrUg4xEd5V+abmfL03pqvle/fj1eixMiUsbIYtaxSFelCDJyBVklIjDdimhv SLZ3pIj72RtITiScmMi3+L+Tnw2l6pm6sdQl7tWghZZk637G8qZldVIh89GO98vxCq3R 1X5XmRj9A1qLijTH8kNkpxQrgGpWPWrWI9UJnyXCsZJCzv4FhEy++aEmX8CcuVX+1nZq cuX9uhWkZ5YLDi85bDLYd/AZpPPgH6utJ0WuIED1V4TG1qKghUhFmrO0+D7G6/uoklh7 5zAoIycWXtW3jay8Y0eQv42aACOO3J8Jj1YaJHsVyCK9zcfKX1JyiJ2TScx65wT4oS0u dCUQ== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=oL/Daj3H+kT6hkli1QIioUjzvo7OTPi2aNIjM7rXu8k=; fh=7eIqUPLAUCjmBhCDD2ZCTeVL2yg3BCUD1cTi9eWmNFs=; b=CfaU8zTNpazKa8mRvB2r8HPvOh8oMDHuGru9hvmprdKgHaeD19iZw+P5gnjZ9EDzwF z2TKSZ51fCtavwQJcI559NyXcjRpoq3EJe9V0y083UsfUa0paiwvxwTXcaQlAPCU5UJo SWAmR/gIl6VXjREKb7pwvCaxYl18QT7svIdbUGGMjR7kmD/DfFpXKmwc+SKUg4N2EX6X WdQnTfFu2+K5CW+XGrj6c9sOmfvUdWN4HHD051BbzGUObDIXmk/GkU00KNmK0E83cAdV 4m+CAhunyQC0OExC9fGGydbjNI+wGdR/iG/84/DNs0pbOtZfO4XGt30YWTgZyLuR6BoH R6yg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=AfWMX4IT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s186-20020a6377c3000000b005501b28fc02si5195833pgc.50.2023.07.13.08.30.19; Thu, 13 Jul 2023 08:30:33 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=AfWMX4IT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229611AbjGMO7N (ORCPT + 99 others); Thu, 13 Jul 2023 10:59:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34774 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232310AbjGMO7M (ORCPT ); Thu, 13 Jul 2023 10:59:12 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CDBB22D74 for ; Thu, 13 Jul 2023 07:58:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1689260284; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=oL/Daj3H+kT6hkli1QIioUjzvo7OTPi2aNIjM7rXu8k=; b=AfWMX4ITMMjqd1ZzByNWYdvFXxDkSWkxUEzyKpogG0ApdlcLKT8YyBYacdBFEEnqLwIM3k n0ohj2Wxqaq7iGv5a1OdUcKSXQGgMPyXAcKlIcKzOC6PMneytrMU5lADOSZCOI3Oyx2iWY aBWrfSkA+ly07lkX8BNWSVK6kIDabIU= Received: from mimecast-mx02.redhat.com (66.187.233.73 [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-641-AyF78o2TOvGLHZDMVG36XQ-1; Thu, 13 Jul 2023 10:58:00 -0400 X-MC-Unique: AyF78o2TOvGLHZDMVG36XQ-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 8726B28EC100; Thu, 13 Jul 2023 14:57:59 +0000 (UTC) Received: from p1.luc.cera.cz.com (unknown [10.45.224.91]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9137940C2063; Thu, 13 Jul 2023 14:57:57 +0000 (UTC) From: Ivan Vecera To: netdev@vger.kernel.org Cc: Simon Horman , Rafal Romanowski , Leon Romanovsky , Jakub Kicinski , Ma Yuying , Jesse Brandeburg , Tony Nguyen , "David S. Miller" , Eric Dumazet , Paolo Abeni , intel-wired-lan@lists.osuosl.org (moderated list:INTEL ETHERNET DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH net-next v3 1/2] i40e: Add helper for VF inited state check with timeout Date: Thu, 13 Jul 2023 16:57:54 +0200 Message-ID: <20230713145755.1629442-1-ivecera@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771319835432042869 X-GMAIL-MSGID: 1771319835432042869 Move the check for VF inited state (with optional up-to 300ms timeout to separate helper i40e_check_vf_init_timeout() that will be used in the following commit. Tested-by: Ma Yuying Signed-off-by: Ivan Vecera Reviewed-by: Simon Horman --- .../ethernet/intel/i40e/i40e_virtchnl_pf.c | 49 +++++++++++++------ 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c index be59ba3774e1..b203465357af 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c @@ -4304,6 +4304,38 @@ static int i40e_validate_vf(struct i40e_pf *pf, int vf_id) return ret; } +/** + * i40e_check_vf_init_timeout + * @vf: the virtual function + * + * Check that the VF's initialization was successfully done and if not + * wait up to 300ms for its finish. + * + * Returns true when VF is initialized, false on timeout + **/ +static bool i40e_check_vf_init_timeout(struct i40e_vf *vf) +{ + int i; + + /* When the VF is resetting wait until it is done. + * It can take up to 200 milliseconds, but wait for + * up to 300 milliseconds to be safe. + */ + for (i = 0; i < 15; i++) { + if (test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) + return true; + msleep(20); + } + + if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) { + dev_err(&vf->pf->pdev->dev, + "VF %d still in reset. Try again.\n", vf->vf_id); + return false; + } + + return true; +} + /** * i40e_ndo_set_vf_mac * @netdev: network interface device structure @@ -4322,7 +4354,6 @@ int i40e_ndo_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac) int ret = 0; struct hlist_node *h; int bkt; - u8 i; if (test_and_set_bit(__I40E_VIRTCHNL_OP_PENDING, pf->state)) { dev_warn(&pf->pdev->dev, "Unable to configure VFs, other operation is pending.\n"); @@ -4335,21 +4366,7 @@ int i40e_ndo_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac) goto error_param; vf = &pf->vf[vf_id]; - - /* When the VF is resetting wait until it is done. - * It can take up to 200 milliseconds, - * but wait for up to 300 milliseconds to be safe. - * Acquire the VSI pointer only after the VF has been - * properly initialized. - */ - for (i = 0; i < 15; i++) { - if (test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) - break; - msleep(20); - } - if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) { - dev_err(&pf->pdev->dev, "VF %d still in reset. Try again.\n", - vf_id); + if (!i40e_check_vf_init_timeout(vf)) { ret = -EAGAIN; goto error_param; } From patchwork Thu Jul 13 14:57:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivan Vecera X-Patchwork-Id: 119960 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1895205vqm; Thu, 13 Jul 2023 08:16:53 -0700 (PDT) X-Google-Smtp-Source: APBJJlG5EQQF+1S7Ei5pAGNrOtvhDzXEMBCOmRvcF/EU/hvuFvXAHxOYCtc3+cJVNN1CK6Ys6lao X-Received: by 2002:a17:902:ec88:b0:1b9:f1bd:b18b with SMTP id x8-20020a170902ec8800b001b9f1bdb18bmr1446723plg.6.1689261413504; Thu, 13 Jul 2023 08:16:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689261413; cv=none; d=google.com; s=arc-20160816; b=f4c932APOHfuqNc7OQBdr84A4IoFYaffRFDwWSv6Yr4yl6d4utoPJSMPjoclLWUHcA OqSB7aWzptqhWEh1xd5OfpePA58flCqayTGpXP3iug99F64OuL07YCnGyzJG2EF3teDe KfGBDFjQU5AtcKstO7pk69PjUVSdGl+0H37Ie62Cp+W89b1dvZlmfhf6JVC7HCTnM8Zi VwLzromQPqnokHTRPMGWO7vzknfXH2e+BFLCDLCiqFGrRVBYo8bhM4X53sYlr3GU60qF d+TvpckmwldZ2HlA6bAqSvhVByvf/uN9+2cU2XYwacvC5vtX0oGlIHOXq4EiDSnq8wA2 VOJw== 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=y0dYxeJTcn6CE5ZGh7Qp5yxnvIz4CH3khVO+7kKHvyM=; fh=7eIqUPLAUCjmBhCDD2ZCTeVL2yg3BCUD1cTi9eWmNFs=; b=xGtT+M6U9gKPvbwEoqZFuqRXcjZIMR75v0pn1+DTBnV4O4N+KyrwIjUm3lpb2fNlsF p8mDLOze4rKojv7CZKg24vDUWNVIbl11V4M/0Qs3xDPKkvAGlpKDFX6ExmARRXVglW4d 2LsMymRULQtq3i9iWwZ+qC8iQYyVgj7WNwkREXAHC0L85A9s1OdnyrV0uQTFqcrDa8Dh 2NrP0sYyLxl54+OwVyHC9YGSflIup2axxe92FeRXgmndOR0HLofjSkOKlVoUGQZ4lPg4 Z9fhHROEq2IxBPQ4fE67WfDLf/aYKWpusaPstiAQuxv8uWBYtkA4CJJizyNjOHrl2CDR dOVA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=MOyjQDvO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id kz13-20020a170902f9cd00b001b9ca3550c0si5114496plb.52.2023.07.13.08.16.40; Thu, 13 Jul 2023 08:16:53 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=MOyjQDvO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232132AbjGMO7M (ORCPT + 99 others); Thu, 13 Jul 2023 10:59:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34866 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229611AbjGMO7K (ORCPT ); Thu, 13 Jul 2023 10:59:10 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 744812D41 for ; Thu, 13 Jul 2023 07:58:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1689260286; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=y0dYxeJTcn6CE5ZGh7Qp5yxnvIz4CH3khVO+7kKHvyM=; b=MOyjQDvOCoUQRUU03Qdpclag8ogyaOm/t11R9SkPReP0WN6mCyG2B5Dg7O1nwCzDSawe7J 6VbBQilEik94XjyHAlWOFPobKsCNS3tn6Z66KMNO2SpqtiYhDAMmYwdHVzT/hkggwNQ37Q uZyb4mINZA+uhj8AgT9DMPd6Jj6HvAQ= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-394-tpL6yDtbO82Pp2zGVuuNjg-1; Thu, 13 Jul 2023 10:58:02 -0400 X-MC-Unique: tpL6yDtbO82Pp2zGVuuNjg-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id BC07E101CAA9; Thu, 13 Jul 2023 14:58:01 +0000 (UTC) Received: from p1.luc.cera.cz.com (unknown [10.45.224.91]) by smtp.corp.redhat.com (Postfix) with ESMTP id E302340C2063; Thu, 13 Jul 2023 14:57:59 +0000 (UTC) From: Ivan Vecera To: netdev@vger.kernel.org Cc: Simon Horman , Rafal Romanowski , Leon Romanovsky , Jakub Kicinski , Ma Yuying , Jesse Brandeburg , Tony Nguyen , "David S. Miller" , Eric Dumazet , Paolo Abeni , intel-wired-lan@lists.osuosl.org (moderated list:INTEL ETHERNET DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH net-next v3 2/2] i40e: Wait for pending VF reset in VF set callbacks Date: Thu, 13 Jul 2023 16:57:55 +0200 Message-ID: <20230713145755.1629442-2-ivecera@redhat.com> In-Reply-To: <20230713145755.1629442-1-ivecera@redhat.com> References: <20230713145755.1629442-1-ivecera@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771318976050009454 X-GMAIL-MSGID: 1771318976050009454 Commit 028daf80117376 ("i40e: Fix attach VF to VM issue") fixed a race between i40e_ndo_set_vf_mac() and i40e_reset_vf() during an attachment of VF device to VM. This issue is not related to setting MAC address only but also VLAN assignment to particular VF because the newer libvirt sets configured MAC address as well as an optional VLAN. The same behavior is also for i40e's .ndo_set_vf_rate and .ndo_set_vf_spoofchk where the callbacks just check if the VF was initialized but not wait for the finish of pending reset. Reproducer: [root@host ~]# virsh attach-interface guest hostdev --managed 0000:02:02.0 --mac 52:54:00:b4:aa:bb error: Failed to attach interface error: Cannot set interface MAC/vlanid to 52:54:00:b4:aa:bb/0 for ifname enp2s0f0 vf 0: Resource temporarily unavailable Fix this issue by using i40e_check_vf_init_timeout() helper to check whether a reset of particular VF was finished in i40e's .ndo_set_vf_vlan, .ndo_set_vf_rate and .ndo_set_vf_spoofchk callbacks. Tested-by: Ma Yuying Signed-off-by: Ivan Vecera Reviewed-by: Simon Horman --- .../net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c index b203465357af..398fb4854cbe 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c @@ -4468,13 +4468,11 @@ int i40e_ndo_set_vf_port_vlan(struct net_device *netdev, int vf_id, } vf = &pf->vf[vf_id]; - vsi = pf->vsi[vf->lan_vsi_idx]; - if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) { - dev_err(&pf->pdev->dev, "VF %d still in reset. Try again.\n", - vf_id); + if (!i40e_check_vf_init_timeout(vf)) { ret = -EAGAIN; goto error_pvid; } + vsi = pf->vsi[vf->lan_vsi_idx]; if (le16_to_cpu(vsi->info.pvid) == vlanprio) /* duplicate request, so just return success */ @@ -4618,13 +4616,11 @@ int i40e_ndo_set_vf_bw(struct net_device *netdev, int vf_id, int min_tx_rate, } vf = &pf->vf[vf_id]; - vsi = pf->vsi[vf->lan_vsi_idx]; - if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) { - dev_err(&pf->pdev->dev, "VF %d still in reset. Try again.\n", - vf_id); + if (!i40e_check_vf_init_timeout(vf)) { ret = -EAGAIN; goto error; } + vsi = pf->vsi[vf->lan_vsi_idx]; ret = i40e_set_bw_limit(vsi, vsi->seid, max_tx_rate); if (ret) @@ -4791,9 +4787,7 @@ int i40e_ndo_set_vf_spoofchk(struct net_device *netdev, int vf_id, bool enable) } vf = &(pf->vf[vf_id]); - if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) { - dev_err(&pf->pdev->dev, "VF %d still in reset. Try again.\n", - vf_id); + if (!i40e_check_vf_init_timeout(vf)) { ret = -EAGAIN; goto out; }