Received: by 2002:a05:7412:a9a2:b0:e2:908c:2ebd with SMTP id o34csp1424016rdh; Fri, 27 Oct 2023 14:01:10 -0700 (PDT) X-Google-Smtp-Source: AGHT+IElb0hnZIPcvathgPAVirpUSmNd+yrKVstJqBjl8E/rXj7fSW7AOJ7QZPssNKAc4c+JH0F+ X-Received: by 2002:a81:d30b:0:b0:59f:4f56:59bc with SMTP id y11-20020a81d30b000000b0059f4f5659bcmr4532284ywi.42.1698440470357; Fri, 27 Oct 2023 14:01:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698440470; cv=none; d=google.com; s=arc-20160816; b=ZAtHcBJwS9XXh/jdk4jJ/7EErHQrnk2QZ3H1KzavxGe0D12267ci/X7Yl1nmDT0tAh RdzR2sLhXD2SKAjMCRBVDulFd6/eRHWxIkHKqjhnXm2YgfdFVfzy29+XLJVowUsaKCSj E6uZUnJFgC5PXHNDxddVaL/lgwG4bettIAG4zWP5pHuCcGg5t/CQp0YBu7tR2NtcAhGC uC3Fnnnz5dB9bmNQPK5bUv+HvJ/z3wPAgVK0AcWHnJ5WBFvMZzqKQ6W+0R4jKCrzSzZ2 Q6GFAKS7ILSFWkufW1QYTY7gp4FCIdivqEArMmBHSU8Xj//0NbptvzxiR4tbXRAOEn36 7PXw== 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 Return-Path: Received: from howler.vger.email (howler.vger.email. [23.128.96.34]) by mx.google.com with ESMTPS id j143-20020a819295000000b0059233cd39c2si3349048ywg.408.2023.10.27.14.01.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Oct 2023 14:01:10 -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 9760880B1BCE; Fri, 27 Oct 2023 14:00:30 -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 S232617AbjJ0VAI (ORCPT + 99 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:30 -0700 (PDT) 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: -- 2.34.1