From patchwork Wed Jul 12 13:32:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivan Vecera X-Patchwork-Id: 119187 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1163990vqm; Wed, 12 Jul 2023 06:50:55 -0700 (PDT) X-Google-Smtp-Source: APBJJlFTvHD13WTFnYkz0cPq6dC7fAfrPpogJ8vVv2RZazO8MfPRX2yGEWcBXyNqDM9E9lJw1x0d X-Received: by 2002:a17:907:e92:b0:96a:2dd7:2ee0 with SMTP id ho18-20020a1709070e9200b0096a2dd72ee0mr2827200ejc.5.1689169855465; Wed, 12 Jul 2023 06:50:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689169855; cv=none; d=google.com; s=arc-20160816; b=PX1c2xYsFEjZdRxruqWnkGWXNJaeIT61HZuER7rXN/lZfvqpaLYCjiTic+pKzO1BVk o8y5DntFfHcqqI2tIvm8T2TSEZa44ma7jNJEo8eanKTeSJ9doY/GSbglZaKlEiDdG8FK SOg9xfJVB5Pn2OVcKPiWEMUOIDNLGyaHOVV+yCtEVPzirYxEQW/i4+l4XrIusWXoCrDw lUCFBSi0mWmF1adfnANZ7el1a4JL6Xr95b1msIDO+WuKcgxJjBOMciVkLnpSbvIh+RBN XtnOLwk0eBoeJPITOw26M+xec+pZuVMuUle6ovAUHExZhLTvqcbdgc8k3UJdmGvTsIwo /sSg== 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=IdMqMyEhBZtb+5uiEamZKQkDThsfpdCVdeNDHaXJ/jA=; fh=7eIqUPLAUCjmBhCDD2ZCTeVL2yg3BCUD1cTi9eWmNFs=; b=H0yjfjlM3Cl4dZ95TxamD35WPsauwrqWvP4jZ6+PWC7dBsSipuuNm8jHBf1Z7XOe3U 0UkinMowAIjwz6my3QCz2zH/m6fRSrhUDNSh1sjF89JPUNZyfIjZm4hO6LyQ9GznRVgZ NZMCK13t/01YkzDZ90sItTaX6KFTztrp35Gbnx5JplIcfeWniFB+xsxvUve9fwGrbX8G ESgI6mIqSOTt54z0kvckptZIuObdn/ssQ3PiDlmIJB25uIOyffoxzsvQFh1mowuCOfA8 giFTEfdjd8TB2HRnaASDOm1KeWcYKSjupj5Clh/vSj3Zv3qdfl/8i8Aj+2A2F4QwiGhd fIBg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=gI1LNKJP; 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 gq7-20020a170906e24700b009886c420b37si4279599ejb.941.2023.07.12.06.50.30; Wed, 12 Jul 2023 06:50:55 -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=gI1LNKJP; 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 S232052AbjGLNdp (ORCPT + 99 others); Wed, 12 Jul 2023 09:33:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53394 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230321AbjGLNdo (ORCPT ); Wed, 12 Jul 2023 09:33:44 -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 3B26B199D for ; Wed, 12 Jul 2023 06:32:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1689168776; 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=IdMqMyEhBZtb+5uiEamZKQkDThsfpdCVdeNDHaXJ/jA=; b=gI1LNKJPQlFQqWqPxVaMtTjDgnEmeu1akBIWsMPVKuWYh/ky6ITkSutrfNSI9vgWyWlBr2 6u2MxyGd7M4+03307eVGstq5hJXx6nJzrz1Jatbvc2yz+94BmCqKdW+bXBStHIKnZTm45V B38Tf00aUJOusNA8rBqO8eQ7f4RFH28= 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-418-YxeuTcFQPD6BSlbT-tB8CA-1; Wed, 12 Jul 2023 09:32:52 -0400 X-MC-Unique: YxeuTcFQPD6BSlbT-tB8CA-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 635893810D2F; Wed, 12 Jul 2023 13:32:51 +0000 (UTC) Received: from p1.luc.cera.cz.com (unknown [10.45.225.8]) by smtp.corp.redhat.com (Postfix) with ESMTP id 754672166B26; Wed, 12 Jul 2023 13:32:49 +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 v2 1/2] i40e: Add helper for VF inited state check with timeout Date: Wed, 12 Jul 2023 15:32:46 +0200 Message-ID: <20230712133247.588636-1-ivecera@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.6 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: 1771222970374631941 X-GMAIL-MSGID: 1771222970374631941 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 --- .../ethernet/intel/i40e/i40e_virtchnl_pf.c | 47 ++++++++++++------- 1 file changed, 31 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..ad30f9e99db9 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c @@ -4304,6 +4304,36 @@ 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)) + 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 +4352,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 +4364,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 Wed Jul 12 13:32:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivan Vecera X-Patchwork-Id: 119194 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1169674vqm; Wed, 12 Jul 2023 07:00:49 -0700 (PDT) X-Google-Smtp-Source: APBJJlHqOFYSiz9glnaelJqlcfLEgeUXG4KLWrJEO7pliZdTm1QtfVHV3c/WDHDIHiF0Ku4tRaMC X-Received: by 2002:a17:902:e811:b0:1b8:b459:f47c with SMTP id u17-20020a170902e81100b001b8b459f47cmr25082367plg.14.1689170448545; Wed, 12 Jul 2023 07:00:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689170448; cv=none; d=google.com; s=arc-20160816; b=kzVU1tnWoaNxb67+Cp27ZagWHpycGaX/IxO6Xdm30OdiTxBwW7aOcwRYqZZocp1GUP y3iZb0dd16emwiulKOeke3yEKuuoEEw6eAC8iOI22ivd23/M8Gfe8+go/tTwItlS19vt gJrZZ17Btu+o7WTO2B/vDr8uL/M1EGOivcbiKpSgUYyzjo3Twux8Vy1og7fe2ZLGHCMM 7eJU4ZzXgoU3Q1PuB/BctehCEtFUGJaMS3ZwMzsWFF0PNplhU+BX7q+eaXhxDnoBm9TJ 9ZAvm/5YMlyV/XJtHWtq1adxy1Zc9E81BuAKmg2X1qbkSjhUdbHl827c5sC+QLt6A2Ha MVwA== 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=0i3InOD4/QpHddyNR5vxwmI9uh0f61TZ6Eu8ertMv3o=; fh=7eIqUPLAUCjmBhCDD2ZCTeVL2yg3BCUD1cTi9eWmNFs=; b=p1f5tI2fJ5NIsw6NJeTDm+JfQFEi1fXBWy83Kwg64oG39lqkSe5DIz4w7+OzsW2ZDc 54U44ma1B+iuduzbena/J8e1z+l9x13tmiXiDj6F1aq7EtA4IgulFKpV8mh16ElNhldV kvCqK9Oq6yjCLKe8IrQcdBwBzJuayeFMUF/K8K/Q2CQv3gJFyIbsTDNUQkU+ckl5DWsz UYAtom1yoxWk0LOt7q2On3d4kUJ6kDhO0KWoNYtsStBSaWqTYE9anhCpqJdyGa9jtwTe 8CTJDCKxTftBL0gcQ/ZDHFhyfOhm/5MPJbXrgvoJl+A5y8BIC76/g1VwZqr9S83a5o0F lrlg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=U8Y+vSc9; 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 u17-20020a170902e5d100b001b9eb349550si3528541plf.391.2023.07.12.07.00.34; Wed, 12 Jul 2023 07:00:48 -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=U8Y+vSc9; 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 S232187AbjGLNdr (ORCPT + 99 others); Wed, 12 Jul 2023 09:33:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53396 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229649AbjGLNdo (ORCPT ); Wed, 12 Jul 2023 09:33:44 -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 5D70910E2 for ; Wed, 12 Jul 2023 06:33:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1689168779; 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=0i3InOD4/QpHddyNR5vxwmI9uh0f61TZ6Eu8ertMv3o=; b=U8Y+vSc9tE4DMs0c2UdvqAJ9dhST/cFiS1w9zJush61FxiO/12z4IJ5PVumnSh2OmXuPIj pZ/Fpyjz3Gjfs7VbfBOJ5j3+6riHSZGkJfV3tPiNJowxc7OuWd4f+NshnnPzVXk2eQ2LBv LQw1jt09TJSVAbcoRSOyy+X90NNUjRo= 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-551-fLVZVRMLMiOdyLSlbe9mpw-1; Wed, 12 Jul 2023 09:32:54 -0400 X-MC-Unique: fLVZVRMLMiOdyLSlbe9mpw-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 9A9FD8022EF; Wed, 12 Jul 2023 13:32:53 +0000 (UTC) Received: from p1.luc.cera.cz.com (unknown [10.45.225.8]) by smtp.corp.redhat.com (Postfix) with ESMTP id BE8092166B27; Wed, 12 Jul 2023 13:32:51 +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 v2 2/2] i40e: Wait for pending VF reset in VF set callbacks Date: Wed, 12 Jul 2023 15:32:47 +0200 Message-ID: <20230712133247.588636-2-ivecera@redhat.com> In-Reply-To: <20230712133247.588636-1-ivecera@redhat.com> References: <20230712133247.588636-1-ivecera@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.6 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_BLOCKED,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL, SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham 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: 1771223592241277130 X-GMAIL-MSGID: 1771223592241277130 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 --- .../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 ad30f9e99db9..87207fc546b7 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c @@ -4466,13 +4466,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 */ @@ -4616,13 +4614,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) @@ -4789,9 +4785,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; }