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; }