From patchwork Fri Oct 27 20:59:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: longli@linuxonhyperv.com X-Patchwork-Id: 159159 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d641:0:b0:403:3b70:6f57 with SMTP id cy1csp880269vqb; Fri, 27 Oct 2023 14:01:14 -0700 (PDT) X-Google-Smtp-Source: AGHT+IElCj9z51gir3BGmQGlrwLCa+jdz4gnAbSjIMKnrK48Z+gHmXSCPB3eFBCdeQZ4mEpA5pri X-Received: by 2002:a25:874a:0:b0:da0:4c40:67b7 with SMTP id e10-20020a25874a000000b00da04c4067b7mr3613443ybn.31.1698440474536; Fri, 27 Oct 2023 14:01:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698440474; cv=none; d=google.com; s=arc-20160816; b=uMRlW/RYOzQ8b9TANtLgAnu9nDEnvVqGUkNQx6k6zAnbY0wjKKwDqtEGjEb1PlW7NA 2fQ8cV8/WZke67e8i2Dpd1Yan+FYB73Fe8vwmrgJet+Dekgd56268hf+VXJGEZSv7aFw JebdsJ1zl8gRgSUewybCIvTY4r6WdWkwii8+w6Px19azWgEegiQ6QF8JUmeiEmGWq8oS MXxcTG0wCKBVUF6RwjfDyaxQ7lSTk8nXck8n1+hDzk7irSLyeBrJpYJUGcmqB4JvwkwD QsqcNFllzW9O2ROGwcjfAKTaMvbLQKqZc6+sKgWtjcU5Sq6SJfAaDlHoTbKfIpE5Q7bH IHmw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from :dkim-signature:dkim-filter; bh=tjnE9pRfC9wpL1nxaW/eCyk+NG9baQ7UvLcZ/DLAOVU=; fh=3JPFMrNsIuDanFY1RD/GwMR1715l2SJPmDW+zclM96o=; b=ytVwBAeLkPXrJyIMCxC9fs6iTl+LDzLtjNlngs0qqoOL7A1fPh/Az6I8QklmyQSgDH l6ZW3lGpwG/mI/Hmumzi/7jN6NVkNVsdgMIVVArFmLDElYIGEckqYl5XrURnNkikrAvJ ul58qGxhuwd6eQJMSAXpFuJskMxeRcB5XA4MO2LKjHVRSMmaio9Zu1sbM5LxRVqpoTHj zHTIaRPJToGoixxvL5vFmgZ1pEuyy8NmfUol8Vj5DZ4RUPMjJnei7jHV1ZmpW6ym/816 8t2rjVwRRqVwAcZTJBFJbRNLHu74h8xhYaJVqqMn26CeLsPnmBIpzBhKfycEyKHYWrBX LuPA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxonhyperv.com header.s=default header.b=CBOIWIE3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxonhyperv.com Received: from howler.vger.email (howler.vger.email. [23.128.96.34]) by mx.google.com with ESMTPS id 10-20020a25000a000000b00d86863bd79csi3694845yba.540.2023.10.27.14.01.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Oct 2023 14:01:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) client-ip=23.128.96.34; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxonhyperv.com header.s=default header.b=CBOIWIE3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxonhyperv.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id 87556801B3AC; Fri, 27 Oct 2023 14:00:42 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232642AbjJ0VAI (ORCPT + 27 others); Fri, 27 Oct 2023 17:00:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42860 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232330AbjJ0VAH (ORCPT ); Fri, 27 Oct 2023 17:00:07 -0400 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 3D22E187; Fri, 27 Oct 2023 14:00:05 -0700 (PDT) Received: by linux.microsoft.com (Postfix, from userid 1004) id 9D8C720B74C0; Fri, 27 Oct 2023 14:00:04 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 9D8C720B74C0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxonhyperv.com; s=default; t=1698440404; bh=tjnE9pRfC9wpL1nxaW/eCyk+NG9baQ7UvLcZ/DLAOVU=; h=From:To:Cc:Subject:Date:From; b=CBOIWIE367mUa46w0DH2cViihfVP/wILGd2QxuPGXJ6dhX36MPeJQ03W/tgH7f+c9 wYTGm0su2uLDq0O3A1rIi0V3BwpRNVbYzOeBA3Bzx06kb5x1cmTC++XZYs9gvgpcOE 9VaFmC7M1MMubiK819RDilJ4yDVrx4XFijiSWAW8= From: longli@linuxonhyperv.com To: "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-hyperv@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Long Li Subject: [Patch v2] hv_netvsc: Mark VF as slave before exposing it to user-mode Date: Fri, 27 Oct 2023 13:59:50 -0700 Message-Id: <1698440390-13719-1-git-send-email-longli@linuxonhyperv.com> X-Mailer: git-send-email 1.8.3.1 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Fri, 27 Oct 2023 14:00:42 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1780943918737988489 X-GMAIL-MSGID: 1780943918737988489 From: Long Li When a VF is being exposed form the kernel, it should be marked as "slave" before exposing to the user-mode. The VF is not usable without netvsc running as master. The user-mode should never see a VF without the "slave" flag. This commit moves the code of setting the slave flag to the time before VF is exposed to user-mode. Signed-off-by: Long Li --- Change since v1: Use a new function to handle NETDEV_POST_INIT. drivers/net/hyperv/netvsc_drv.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index ec77fb9dcf89..fdad58dcc6a8 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -2206,9 +2206,6 @@ static int netvsc_vf_join(struct net_device *vf_netdev, goto upper_link_failed; } - /* set slave flag before open to prevent IPv6 addrconf */ - vf_netdev->flags |= IFF_SLAVE; - schedule_delayed_work(&ndev_ctx->vf_takeover, VF_TAKEOVER_INT); call_netdevice_notifiers(NETDEV_JOIN, vf_netdev); @@ -2320,11 +2317,9 @@ static struct net_device *get_netvsc_byslot(const struct net_device *vf_netdev) */ list_for_each_entry(ndev_ctx, &netvsc_dev_list, list) { ndev = hv_get_drvdata(ndev_ctx->device_ctx); - if (ether_addr_equal(vf_netdev->perm_addr, ndev->perm_addr)) { - netdev_notice(vf_netdev, - "falling back to mac addr based matching\n"); + if (ether_addr_equal(vf_netdev->perm_addr, ndev->perm_addr) || + ether_addr_equal(vf_netdev->dev_addr, ndev->perm_addr)) return ndev; - } } netdev_notice(vf_netdev, @@ -2332,6 +2327,19 @@ static struct net_device *get_netvsc_byslot(const struct net_device *vf_netdev) return NULL; } +static int netvsc_prepare_slave(struct net_device *vf_netdev) +{ + struct net_device *ndev; + + ndev = get_netvsc_byslot(vf_netdev); + if (!ndev) + return NOTIFY_DONE; + + /* set slave flag before open to prevent IPv6 addrconf */ + vf_netdev->flags |= IFF_SLAVE; + return NOTIFY_DONE; +} + static int netvsc_register_vf(struct net_device *vf_netdev) { struct net_device_context *net_device_ctx; @@ -2753,6 +2761,8 @@ static int netvsc_netdev_event(struct notifier_block *this, return NOTIFY_DONE; switch (event) { + case NETDEV_POST_INIT: + return netvsc_prepare_slave(event_dev); case NETDEV_REGISTER: return netvsc_register_vf(event_dev); case NETDEV_UNREGISTER: