From patchwork Tue Apr 15 12:11:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 14052090 X-Patchwork-Delegate: kuba@kernel.org Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2041.outbound.protection.outlook.com [40.107.94.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 29B092951B1 for ; Tue, 15 Apr 2025 12:12:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.94.41 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719145; cv=fail; b=LAnUsYLXMXxvLz29FC4PlBercJO9LapwSDJr7oVpsapaO9nHxU54di48QJDdx1jw73ZuILALH630CD/gjUzzXrVlCMwegGMaMim9ctKPKdvaWG9wCqhE1o288EEQa8ExDj8Cbpie3zjDj3nSbxZiudVNxHQOQi+5do77GICFl2k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719145; c=relaxed/simple; bh=Q7QguSIgZFL7fzBUCRqYhINZ4zmEmbEaPsyzmK113q4=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=GrP0MMawIKP8sBrUnpT7VOLQx0Ju8ppBAb3QL7ykjM+G7vnvqnfV7uj6GrmArZmGyQocaq7ERodHabu+h1GuuMgwuigphHtKNZgsE6d1vbIj+4b4ABSi2tGqhdvVHgnXlZ8jNG09bdsuU9zg3prRMDBQ96J2fySrSaFNwhxh92E= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=k2tTRmFK; arc=fail smtp.client-ip=40.107.94.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="k2tTRmFK" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YMaQHdkRH34zXc+60Zw4BF8/WdnROdrfaULVH4I5Xk8LEQshY/SDwld41lg8TEwkFDy/53zXonR83tmkTZbXqBlITirGcL8ISvyzG0pGQNmTwr1VUkrY5TXXEw6UFgRTR+z2M7XMfQxffRAeEszhjpoKzjuYeGqRh4vOAiJgmPWpFWQF61ALnJWzTJDSLQGmeSG7ZEzTl/um2gXnoCuhbWmJbu3sdPT9k7uW2tEJ4ysjLT4CLkRfcKePGZy3WIians++jEdxPtXjBt6qH0L8y2aXuKUc2g+gnNob1qA/BKdtm8fXxEX8Ff1mvdsRsI2MLOH5p1QIsrOQNp8UG7EjxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=h/NBF1zADAugI+NaFwKil80Q5zeplYf8phLCudmlod0=; b=chEX5IoP/A2eiWHYed74G+0gzT+1sdSYJYj4m8t7jtbgKRm+RS8z/e2kFlDKyZg5qMeB56Osk4riw/k80EghrZ6+SY3y9uzAWm9bOAh5X3gZdYRmq+LdwPq/txWYHylyiET+HirnAEwXm7BitZFPznK5CNlqmPbZcJzzXAUeq54dl3yFSJo14RXHgxMezo3fQHLdEY3V6S/HKp06kz7+/TQKj/BpVs+J4027BT6xhQPKGKwsNFHGHb1dSBWM8Qjyf6KAe9jTczRXz3G4ifGYjL8pKxwYACnw2LxWa3hXOhxD0fjbpNGjIX/5OFWaGWMv0w8yfaIRptl43m1TNmPXaA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=h/NBF1zADAugI+NaFwKil80Q5zeplYf8phLCudmlod0=; b=k2tTRmFKF1/rShO3ul6E9AP6zZ3KspuxXMYJEbjL5ihbrMB/nGfzvYmn9QPUy2e7HtFrQFbRA0vSpWT0xresBO6i9i1L9LU8+Yk3tHLEY0LvFW9JYczHGIGNLvKK5SO65VWRLfFGQMgdIMOzpxxYh2NsZk5YODEeKwtZbnP5CItMo8ZuLbABPqt1Vjok8c2i521J5Vjtv7Jo+XEhReX5ZYPn19lrmmka0B//MCBiCJsLXUukmiiyhgyF847kV2Tu+iJnjfLJPaUrEhx24VqTn9HQFDLERlz54JDJM3R86GYAe6La4UZ7+/VRt7OKTGbCstqOuoo+aTTxrO3/PsUlpQ== Received: from PH0PR07CA0096.namprd07.prod.outlook.com (2603:10b6:510:4::11) by SJ2PR12MB9140.namprd12.prod.outlook.com (2603:10b6:a03:55f::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.34; Tue, 15 Apr 2025 12:12:19 +0000 Received: from CY4PEPF0000EDD6.namprd03.prod.outlook.com (2603:10b6:510:4:cafe::82) by PH0PR07CA0096.outlook.office365.com (2603:10b6:510:4::11) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.34 via Frontend Transport; Tue, 15 Apr 2025 12:12:19 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by CY4PEPF0000EDD6.mail.protection.outlook.com (10.167.241.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Tue, 15 Apr 2025 12:12:19 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 15 Apr 2025 05:12:05 -0700 Received: from shredder.lan (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 15 Apr 2025 05:12:01 -0700 From: Ido Schimmel To: CC: , , , , , , , , Ido Schimmel Subject: [PATCH net-next 01/15] vxlan: Add RCU read-side critical sections in the Tx path Date: Tue, 15 Apr 2025 15:11:29 +0300 Message-ID: <20250415121143.345227-2-idosch@nvidia.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250415121143.345227-1-idosch@nvidia.com> References: <20250415121143.345227-1-idosch@nvidia.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EDD6:EE_|SJ2PR12MB9140:EE_ X-MS-Office365-Filtering-Correlation-Id: a955a9cc-324c-4171-a0c8-08dd7c16c50f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: A+3lyOyfbOgW8qyuAQ4LtiiWI2G3Uu4EppclIa/ehHuyRV8JuiBBkDfRUxFOa2dsRd8HzzTw4o8iDmdnYRa2rAVE1xBM1h9VaqknjsFdHzSu/GGeDdkk9P4zXM1ajCUA1yPNOJbqMLQMFKaccs8sbz3ai6LidOFqAqbY8y13zIPJbEDGKcpZV/78BF8NryHCQxu0E5d0KKv6gRR+a+7THTLRwywK6Uy+g55bmO4WoTayA50Wdv+AJ6TE1b8IID7280nKwqN7pOZ15qfp+5adFrKqHAL92z/LeV8Ky56pq7hYa2tk0xLul0Q4rvSwi8gHuNcxRMTq23WViCAczB/nNdk67Vs6itldzpeyuPK9bcOHlNC7pfXRzxisynwqrMgs28eGhEkv1iJw3hX7qdE79XaYSOkAMK6R4IpL59N1M9nHxSmyxki25iGIH5aULHgikfdCGaJKqu+CnELfwgolymrpGfgB+Lye1ARB2TB/4qgGspyymepbZsooWsSCTJKla7pOyW9soTueoxCzekfgFK/rNFlk7OY/Q92sX/d1kE82NH1s2D9n9ju8AolORyUfN7XARED/uvQYatJUK+d5q7N3rI1mnv9Kvp69k0TjmIUn7FRvrosuRXTfMKdwlbLMFoAK70F9iykCGhM2Y0/x7PZSusRbOGleXS07AqZ0GjFi4iKWb5vV2yRv3har7JzQ4S+TqudcZCv+mEijDNo5lpCUewgbGzRAbz6yfXWGq3Mc2My4cwmWfKaM4AnCfLrKuXes0Fkkz69bU56c+JO4ovchexFLqTg8CAGXp0Hdt8+hxMR30/7lnxai0Pddf0d15atORZHI2PVUB+f2rIGVPKBJNvOdAVyDVDpiYgLC3tSjfGP262598qrD502awvwPcdvier7IJNpR4NdxDoh63x5pq5yizOq1DGvJXmZew2paCZgeCXpapiijYhglPP/6Ney/4ozfwExY2O7w4gQ9GdfRb3GhsNHc6ZpR3GOhUWk9Ga8J248UJRIYIuchkdDX4nSuUwn4eFCuRArT4LCUUl5J06NAhaapm/gJJiK5s5vDAlFDQDJTlW9vjJKPSVrXDHm7uWxs6I7JTozIziFRuZBnROMUIynp2LXPW4bPGjqzI0Y4MaLIEnMx9Ee5B/BPns+bZUrvw6kCA7IwcdyOl8Q0pEPlTdGLPdEguPo0xII0nZieV5ZyWxOCQJk7Nid0S2CAv979dkY+ksaqoA95UT0VUjPuTvlg5I87SFZePlE6aTKMVCH17IDPcxecy18ELe3thoIk5jvEoDEtipVGALT90IHJr1nsVwl7xfeTtLlmREBeIFoPtIh5IMboiXJAsHsE8eg0iyYnzPi5kh+tBYlxSLLvBO7BQwoZRBG+9y/6s3/dMdFlPb7Spms3fNcb4Y81AK11sE2H4e/eW7DugroNkQflx6HicD/UK1jriPysEUxd/PFmpqBV2GeNaz9icxp33uxoUwGRJygFsmrAeuZI9NBxlNvWljtBAXFKKMt3VR+L7DH+RN+svRQ1RcHR X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(1800799024)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2025 12:12:19.2332 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a955a9cc-324c-4171-a0c8-08dd7c16c50f X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000EDD6.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB9140 X-Patchwork-Delegate: kuba@kernel.org The Tx path does not run from an RCU read-side critical section which makes the current lockless accesses to FDB entries invalid. As far as I am aware, this has not been a problem in practice, but traces will be generated once we transition the FDB lookup to rhashtable_lookup(). Add rcu_read_{lock,unlock}() around the handling of FDB entries in the Tx path. Remove the RCU read-side critical section from vxlan_xmit_nh() as now the function is always called from an RCU read-side critical section. Reviewed-by: Petr Machata Signed-off-by: Ido Schimmel --- drivers/net/vxlan/vxlan_core.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c index 56aee539c235..7872b85e890e 100644 --- a/drivers/net/vxlan/vxlan_core.c +++ b/drivers/net/vxlan/vxlan_core.c @@ -1916,12 +1916,15 @@ static int arp_reduce(struct net_device *dev, struct sk_buff *skb, __be32 vni) goto out; } + rcu_read_lock(); f = vxlan_find_mac(vxlan, n->ha, vni); if (f && vxlan_addr_any(&(first_remote_rcu(f)->remote_ip))) { /* bridge-local neighbor */ neigh_release(n); + rcu_read_unlock(); goto out; } + rcu_read_unlock(); reply = arp_create(ARPOP_REPLY, ETH_P_ARP, sip, dev, tip, sha, n->ha, sha); @@ -2648,14 +2651,10 @@ static void vxlan_xmit_nh(struct sk_buff *skb, struct net_device *dev, memset(&nh_rdst, 0, sizeof(struct vxlan_rdst)); hash = skb_get_hash(skb); - rcu_read_lock(); nh = rcu_dereference(f->nh); - if (!nh) { - rcu_read_unlock(); + if (!nh) goto drop; - } do_xmit = vxlan_fdb_nh_path_select(nh, hash, &nh_rdst); - rcu_read_unlock(); if (likely(do_xmit)) vxlan_xmit_one(skb, dev, vni, &nh_rdst, did_rsc); @@ -2782,6 +2781,7 @@ static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev) } eth = eth_hdr(skb); + rcu_read_lock(); f = vxlan_find_mac(vxlan, eth->h_dest, vni); did_rsc = false; @@ -2804,7 +2804,7 @@ static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev) vxlan_vnifilter_count(vxlan, vni, NULL, VXLAN_VNI_STATS_TX_DROPS, 0); kfree_skb_reason(skb, SKB_DROP_REASON_NO_TX_TARGET); - return NETDEV_TX_OK; + goto out; } } @@ -2829,6 +2829,8 @@ static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev) kfree_skb_reason(skb, SKB_DROP_REASON_NO_TX_TARGET); } +out: + rcu_read_unlock(); return NETDEV_TX_OK; } From patchwork Tue Apr 15 12:11:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 14052132 X-Patchwork-Delegate: kuba@kernel.org Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2089.outbound.protection.outlook.com [40.107.243.89]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E7C0A294A1D for ; Tue, 15 Apr 2025 12:12:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.243.89 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719147; cv=fail; b=F/Z6Qic7qxYaQtYNuujl8wT/TSD8lY2uWVRHPBHaolYAsuSpCBBXn5XFDdnOZ7ZOXC9ESCuDL+zNmmkMOAJ0A9urKDfs25jtlxFB79G5u2AwkVq1HLPJH84ZCBiQlf65HtDcb6234B2XOzD1U4xE4fbsIsbt+3yiuI0CKPqNCCo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719147; c=relaxed/simple; bh=EoPgK5pSICfV2nq2oco7pG0yyhSJgacZvdexAud/xHA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=FWJLFUCsRjh7/q1N6+HI2xqcR68t0/iWKs9s+sphXN8WZkYUG4Fangwh67Isv7P/AdDCoBBzMnzUiGsqnegjz1d57Owz0czbYBGZDq/28/K31ozBGHcw7B1DcvYExjUwzOjVKTk/BGnQL+lK6I4aagoHDX2QAIv5z0QH6W6Iv7c= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=N6DZKDyy; arc=fail smtp.client-ip=40.107.243.89 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="N6DZKDyy" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Y0uXzaZ3+f06ghiIa6DoNoWzeysr2kPy/csgLBL/i3g3rppYCh2QEIESK8C4NgZ3Rwh/tCVZz9MuTuZkWaeiZ7wWq1ihS9/R2eRJLGIqWuNk2QxlpDmA9IdIeiXueRAnINISSNOut0aTGNMJQkc8RqI+Cu7X2xSIrUAC6NjgaT8JlTr49z054/w556fV/dGkwX35fSvne9zc9i95HyRmxM0vZMIk/dqd7vu+URFlSb5g+B2InsVDCDOKlodSIBXU1jPoXlvKgL4h4GM8yhCr7T/qvEq+ztuhI5xznqhFKMY9srISkbEGdu8IzXpZ4SC1z+WMWOuFgvTc5gVGXQygog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=jNeHKA6EA6W1BxSDcLzaJiFamdaGDBXDYgOhAp8NE+w=; b=ejq0f98tbnMr0cMQNFqwR8WjDRwEI+pMcOQeTIYU8vy+j5boem84WNQ9zhUAuyo3LIMygFLB/BmPB3elYK43Y1nv3cn74OqtzBtXuxnbNBjUdbJZzH8pJpRTHLbGhr4fbaojyCJCBsHheALBDlCFZ6Ld881UyBqVEKT4b0lcGCti+jsmMN5Ip6zig6c/VqesHI9Moe6cS1cNg68IfFOSKOd/tf2q74/tC7Ulb+x4rI6M8Flmn3UI1+2YCZbXsLvs/nks3rK1XE522ev3Cx+g6t3LF91RWRq7wn/kmr6J+dH/Og6ZaVAgumrus1YbYo0PrlWHgF4KSva1PjbtR0meCw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jNeHKA6EA6W1BxSDcLzaJiFamdaGDBXDYgOhAp8NE+w=; b=N6DZKDyypoZhMaOffC6amxFjfZF458QUn7Xx9Wxf4ALoCZOBcqrwr/oLev8xtVpxoNZhhej7l9GMIX6rgAB7RPgm3YmG67weubBHN1/q1TG4tJfKDovVzGctr9P8U3ujbvL6FgqkblFmSrVSilmCsFx8Tp2mC6/+ImzaJLmp4MvHjdTdLGcCANNkEJeDKIcHJRRPwYDW3UdxjGfUlsOjzuCQcqhQpMZVwRg4zv78OsOHtueys14mpBbIOZq+PV/JKW3eDWHqnHvb6K3nFX+6llxiwEZ5WUnOLyep5DOvL2RjBjZFkKmrho3OcdmZ03SEEguawIQ63+7MRMdAKolwjg== Received: from BY5PR16CA0021.namprd16.prod.outlook.com (2603:10b6:a03:1a0::34) by MN6PR12MB8513.namprd12.prod.outlook.com (2603:10b6:208:472::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.33; Tue, 15 Apr 2025 12:12:22 +0000 Received: from CY4PEPF0000EDD4.namprd03.prod.outlook.com (2603:10b6:a03:1a0:cafe::76) by BY5PR16CA0021.outlook.office365.com (2603:10b6:a03:1a0::34) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8655.15 via Frontend Transport; Tue, 15 Apr 2025 12:12:22 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by CY4PEPF0000EDD4.mail.protection.outlook.com (10.167.241.200) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Tue, 15 Apr 2025 12:12:21 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 15 Apr 2025 05:12:08 -0700 Received: from shredder.lan (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 15 Apr 2025 05:12:05 -0700 From: Ido Schimmel To: CC: , , , , , , , , Ido Schimmel Subject: [PATCH net-next 02/15] vxlan: Simplify creation of default FDB entry Date: Tue, 15 Apr 2025 15:11:30 +0300 Message-ID: <20250415121143.345227-3-idosch@nvidia.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250415121143.345227-1-idosch@nvidia.com> References: <20250415121143.345227-1-idosch@nvidia.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EDD4:EE_|MN6PR12MB8513:EE_ X-MS-Office365-Filtering-Correlation-Id: 2d826b7d-eb21-4f3d-e38d-08dd7c16c6b1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: PqmP4nkLFNgcSaOAAJZAdlpcoAKI/7JnzBHXQHy0MsTopYWlV/jixLGXGZHdTnmomDMKqz28opY3FvhnA5qmxhuvjDbWpjN6b6zJeqSpCxqkfyUR5UK+niHAXG62nwbRqCrhEhG47tlDoK/G2JM0k+XIX2nER5RGXXmSL4oi5PIK9cNIlnJmD5yJgeuATTYJ9jwmoOaUElI5ULDRTBqE6XcujWHTD1HhDgw2FrI+xI/0WcGTBFlUPF+rI7lXXpTLcGzPn1Ql1Zxx1VkM+26t+UY8BC9gpGwPTOYyL06gBju9w04Sqvtf00zMOD399GyaoddIUyQrmvFKWg2EB4U/q84sD3ekVRhZKJlGM2LXW6SROFjXOm5kKdgjyVw0D/V9tzq4SsQ5xKojraKOFAoZGPPhcORxkEAq6EKdzBp6TLE7GHw1kG9mmvULD0PnyYoVVp0zrNxoQ70sZVrNjuJu7O0Vdrk0hEDCiOEa4I67BBUCRx2rDv+sfuS5qGtxes1MoWj1Z91G7qCy+EA0ZiiE8PIeuyTGqot+DynwZlfzDsbhMdT0XGsX5KY0Hj4h7W/YbTit/Bq/Sz7TRTm9JL6AYR1wjr9vG5hDf1b6vcfdExY908CUElzmtUUITaEr8C+6/ODWjSNvxKJtrQ5qUOa7KRrfh6d4trhY6s8oocAemRFvByCkS2T8FVcegkD4NecHhBe7XPZmJ8adxolkCdGC0DxygBHrTEfcOX41AW9Dur6ClsRFIVcNP9ajgflWEDZT5W7i2BlNZMrmQgqt+h3/Q91ar/NxPfm9n87qN+RozEdPyRQatd6/FWyLp/F3tcO3Hg/6n+Obg+9zjRcWm1z5joCP71Cfag1jBLzjGDsDIEm+68/zWqMLaxb9PKMwy/J1Zt+6iujIoPK2DRKmo4f07TsEGLlWVgdrYGrzWwfm5hZw45Pw0RiSq7kAmb1Ug3zuvhpq4J5A+FpP9k1juDoyFaSIkSIJrvp06Rlh0+2H2FkbNdC9TS4w88kowETK6zhha+sL0KHeA+3yJhuye8n+hPvEbEtBs8WInkbpNpiEECDHZzsGzfkSKfLetq+6pUdL46m9UOg22SYk9sQrGERhUhkxbyeYvZhcBLclDNk5tgg1rhaRGqrRvME1Zuw7uuR0ELMNv3cTFeCDWV7kDrAs5o/hL4Og1UGVPARQnnLOvEHJofT5+Gz77Yol3GdAiB2SQKydsVVFiVlj1XvgveoJTOgME4XZruQs9/b7yiBs6H0DfOCSZFNfGiGTXiYHX940TjRcvCY7XNBzr62QiGTuHbD2LVpDt4opVliIt+EE4deKfe1/vroFtgZWo6HaK5cjLJS3aKfjeKLsXwvrz+ao3iuJSAGpCPRhYwpb1IhHtEbpOYzfzIYjEwEznn0EGBv6EorOnQA6+pf96zDl/e85IHMr5CMoX9pzVYZm20ay6LP+DnX+GyQW8UQIurqi244kARXy6E9vMDccXlcERVMW6OO2dkC7bHJdo5MSnMLtiaSPDTQu4xG8w6eRKjWiZGKV X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(1800799024)(376014)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2025 12:12:21.9900 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2d826b7d-eb21-4f3d-e38d-08dd7c16c6b1 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000EDD4.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN6PR12MB8513 X-Patchwork-Delegate: kuba@kernel.org There is asymmetry in how the default FDB entry (all-zeroes) is created and destroyed in the VXLAN driver. It is created as part of the driver's newlink() routine, but destroyed as part of its ndo_uninit() routine. This caused multiple problems in the past. First, commit 0241b836732f ("vxlan: fix default fdb entry netlink notify ordering during netdev create") split the notification about the entry from its creation so that it will not be notified to user space before the VXLAN device is registered. Then, commit 6db924687139 ("vxlan: Fix error path in __vxlan_dev_create()") made the error path in __vxlan_dev_create() asymmetric by destroying the FDB entry before unregistering the net device. Otherwise, the FDB entry would have been freed twice: By ndo_uninit() as part of unregister_netdevice() and by vxlan_fdb_destroy() in the error path. Finally, commit 7c31e54aeee5 ("vxlan: do not destroy fdb if register_netdevice() is failed") split the insertion of the FDB entry into the hash table from its creation, moving the insertion after the registration of the net device. Otherwise, like before, the FDB entry would have been freed twice: By ndo_uninit() as part of register_netdevice()'s error path and by vxlan_fdb_destroy() in the error path of __vxlan_dev_create(). The end result is that the code is unnecessarily complex. In addition, the fixed size hash table cannot be converted to rhashtable as vxlan_fdb_insert() cannot fail, which will no longer be true with rhashtable. Solve this by making the addition and deletion of the default FDB entry completely symmetric. Namely, as part of newlink() routine, create the entry, insert it into to the hash table and send a notification to user space after the net device was registered. Note that at this stage the net device is still administratively down and cannot transmit / receive packets. Move the deletion from ndo_uninit() to the dellink routine(): Flush the default entry together with all the other entries, before unregistering the net device. Reviewed-by: Petr Machata Signed-off-by: Ido Schimmel --- drivers/net/vxlan/vxlan_core.c | 78 +++++++++++----------------------- 1 file changed, 25 insertions(+), 53 deletions(-) diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c index 7872b85e890e..3df86927b1ec 100644 --- a/drivers/net/vxlan/vxlan_core.c +++ b/drivers/net/vxlan/vxlan_core.c @@ -2930,18 +2930,6 @@ static int vxlan_init(struct net_device *dev) return err; } -static void vxlan_fdb_delete_default(struct vxlan_dev *vxlan, __be32 vni) -{ - struct vxlan_fdb *f; - u32 hash_index = fdb_head_index(vxlan, all_zeros_mac, vni); - - spin_lock_bh(&vxlan->hash_lock[hash_index]); - f = __vxlan_find_mac(vxlan, all_zeros_mac, vni); - if (f) - vxlan_fdb_destroy(vxlan, f, true, true); - spin_unlock_bh(&vxlan->hash_lock[hash_index]); -} - static void vxlan_uninit(struct net_device *dev) { struct vxlan_dev *vxlan = netdev_priv(dev); @@ -2952,8 +2940,6 @@ static void vxlan_uninit(struct net_device *dev) vxlan_vnigroup_uninit(vxlan); gro_cells_destroy(&vxlan->gro_cells); - - vxlan_fdb_delete_default(vxlan, vxlan->cfg.vni); } /* Start ageing timer and join group when device is brought up */ @@ -3187,7 +3173,7 @@ static int vxlan_stop(struct net_device *dev) { struct vxlan_dev *vxlan = netdev_priv(dev); struct vxlan_fdb_flush_desc desc = { - /* Default entry is deleted at vxlan_uninit. */ + /* Default entry is deleted at vxlan_dellink. */ .ignore_default_entry = true, .state = 0, .state_mask = NUD_PERMANENT | NUD_NOARP, @@ -3963,7 +3949,6 @@ static int __vxlan_dev_create(struct net *net, struct net_device *dev, struct vxlan_dev *vxlan = netdev_priv(dev); struct net_device *remote_dev = NULL; struct vxlan_fdb *f = NULL; - bool unregister = false; struct vxlan_rdst *dst; int err; @@ -3974,72 +3959,62 @@ static int __vxlan_dev_create(struct net *net, struct net_device *dev, dev->ethtool_ops = &vxlan_ethtool_ops; - /* create an fdb entry for a valid default destination */ - if (!vxlan_addr_any(&dst->remote_ip)) { - err = vxlan_fdb_create(vxlan, all_zeros_mac, - &dst->remote_ip, - NUD_REACHABLE | NUD_PERMANENT, - vxlan->cfg.dst_port, - dst->remote_vni, - dst->remote_vni, - dst->remote_ifindex, - NTF_SELF, 0, &f, extack); - if (err) - return err; - } - err = register_netdevice(dev); if (err) - goto errout; - unregister = true; + return err; if (dst->remote_ifindex) { remote_dev = __dev_get_by_index(net, dst->remote_ifindex); if (!remote_dev) { err = -ENODEV; - goto errout; + goto unregister; } err = netdev_upper_dev_link(remote_dev, dev, extack); if (err) - goto errout; + goto unregister; } err = rtnl_configure_link(dev, NULL, 0, NULL); if (err < 0) goto unlink; + /* create an fdb entry for a valid default destination */ + if (!vxlan_addr_any(&dst->remote_ip)) { + err = vxlan_fdb_create(vxlan, all_zeros_mac, + &dst->remote_ip, + NUD_REACHABLE | NUD_PERMANENT, + vxlan->cfg.dst_port, + dst->remote_vni, + dst->remote_vni, + dst->remote_ifindex, + NTF_SELF, 0, &f, extack); + if (err) + goto unlink; + } + if (f) { vxlan_fdb_insert(vxlan, all_zeros_mac, dst->remote_vni, f); /* notify default fdb entry */ err = vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), RTM_NEWNEIGH, true, extack); - if (err) { - vxlan_fdb_destroy(vxlan, f, false, false); - if (remote_dev) - netdev_upper_dev_unlink(remote_dev, dev); - goto unregister; - } + if (err) + goto fdb_destroy; } list_add(&vxlan->next, &vn->vxlan_list); if (remote_dev) dst->remote_dev = remote_dev; return 0; + +fdb_destroy: + vxlan_fdb_destroy(vxlan, f, false, false); unlink: if (remote_dev) netdev_upper_dev_unlink(remote_dev, dev); -errout: - /* unregister_netdevice() destroys the default FDB entry with deletion - * notification. But the addition notification was not sent yet, so - * destroy the entry by hand here. - */ - if (f) - __vxlan_fdb_free(f); unregister: - if (unregister) - unregister_netdevice(dev); + unregister_netdevice(dev); return err; } @@ -4520,10 +4495,7 @@ static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[], static void vxlan_dellink(struct net_device *dev, struct list_head *head) { struct vxlan_dev *vxlan = netdev_priv(dev); - struct vxlan_fdb_flush_desc desc = { - /* Default entry is deleted at vxlan_uninit. */ - .ignore_default_entry = true, - }; + struct vxlan_fdb_flush_desc desc = {}; vxlan_flush(vxlan, &desc); From patchwork Tue Apr 15 12:11:31 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 14052135 X-Patchwork-Delegate: kuba@kernel.org Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2068.outbound.protection.outlook.com [40.107.93.68]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2ECCA2951B8 for ; Tue, 15 Apr 2025 12:12:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.93.68 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719158; cv=fail; b=Grc7BJz5Sh1OQaWst62Z0Lj8EBqaix6KJH4lk+rpZka1JSqT5jiOTQqqmQ2T60OtgrFnFlUK4dMePzS+YkYSHKuXD5DGAgsVjAtCSjscZBvkss4Z/mM4wxC2iJeZne0MVl5kpHKOMRAk4drLIMmVMPAnPWsnRXVRjBBkMqhX9f8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719158; c=relaxed/simple; bh=9xJaZTA+Uycu+vhc92Anwj1H1SESJTLuP7hqvNkqqpw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=F8UM6Td3RtAaCz0vvsgTJrbGM1PkxSUtMJj0wjsrWRqaQpQlQktTuLioUPd9YvlSeP3ubIyqkQ7HZVZyCK8tGajR8Db+Zqu4MANSpn/w2LBPnfG/HD9nA+qfwvIHaNbSAOZM0FFVYTkxrehhZqFRn2diKEK0NzBBQaSsbYIE+wo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=aml957F3; arc=fail smtp.client-ip=40.107.93.68 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="aml957F3" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ebMGdeaJZb2bu6uXAICXHrSqIduH3zClrOLYbqTPpSwQPouvYmdw5Ta+rhoRxFxS9KC9RVZT3USgvUQlFFo1LERbB/q6ok7ccDF0HprR3WPvXJ7IkJyGbie73eWZLqZ9Ioi3FuvN3Q1jek+/DAr7l5FcTbGxVmbYYFPv2pFlH0LpBSd/cTzN765KxH3zVt4VQeAVN6NaAZ3NCDyCHebLzMua8TjF2J01tAsbfTFShvBOxf+tuHKTTukzZawCedicAEvrS42U+HAt/nFUqglazSlTpKFcKiwK7cPvZK/DAl2Di3YM+Xbil/t6/XvviF1wUi1Jo8/u0GXa7JOTACggNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=klnzXrHYMAFJ2WwIY8A7UNt0DTEAtbegAjNKLaBi79g=; b=dawng6Wo12NEf42/yUAqoXMeXCxBwVhTGVeYE3f8RZlfqS8hW3yImtpNInv8rPYkXnJXznZxYe0V8Blti3mKJkZAJpZbckhHu/aOg0Ttrdp0A6NpUowuKLaeJKJeRdy/bErPzNRV13lNhCl9YY7/TnJ81LK56CNDQv8n+BCkMreP5fbvDc5N25s7GgIprWu2tEUNDRu4oPdZ0N1CcgdDo1b7wFFs3Jnao08kSsWRXoIviN7oI/IQj+ncMPcMuPwMJU4sSRs1PnMpGNGBHorZ2+eiw92TXm/2yuzjRNOvn0L4PMkwI9D114mkq0SUWNnQCMocSXHv7mnYhQYcjDgIAQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=klnzXrHYMAFJ2WwIY8A7UNt0DTEAtbegAjNKLaBi79g=; b=aml957F3y17ImtfJp77NzSqaiDed2O0ncnL1OZrn9xxPgYy+470NG1HaMcMjPaOvtJ8aT3eOphmKSrIfNn+iKVYSAM+ecUj7DR21ObY+/RjYEPS/nRkZn3ObCqLn5NerX7Ta8CIwsDErmHWVlNmbO66uMiX3D1nL7B/bQruE4UXV4LZ+P17nuRrT7vvsDRVZ1wwYPZ328EzELIyUducq+CT8O20uhaZUqzswaqiGFyT5VWVv14giQNf6jzHXJOpqzZSAeXqCXLWSUlJvIz12eOx39X6nhhjCq3u8WwBZk8opTW2HKSichVA1SMSCX+GV4reEmWoFGCX3Lanc5vcIBg== Received: from BL1P221CA0021.NAMP221.PROD.OUTLOOK.COM (2603:10b6:208:2c5::17) by MW4PR12MB7000.namprd12.prod.outlook.com (2603:10b6:303:208::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.27; Tue, 15 Apr 2025 12:12:31 +0000 Received: from BL02EPF0001A0FF.namprd03.prod.outlook.com (2603:10b6:208:2c5:cafe::df) by BL1P221CA0021.outlook.office365.com (2603:10b6:208:2c5::17) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.34 via Frontend Transport; Tue, 15 Apr 2025 12:12:29 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BL02EPF0001A0FF.mail.protection.outlook.com (10.167.242.106) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Tue, 15 Apr 2025 12:12:29 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 15 Apr 2025 05:12:12 -0700 Received: from shredder.lan (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 15 Apr 2025 05:12:08 -0700 From: Ido Schimmel To: CC: , , , , , , , , Ido Schimmel Subject: [PATCH net-next 03/15] vxlan: Insert FDB into hash table in vxlan_fdb_create() Date: Tue, 15 Apr 2025 15:11:31 +0300 Message-ID: <20250415121143.345227-4-idosch@nvidia.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250415121143.345227-1-idosch@nvidia.com> References: <20250415121143.345227-1-idosch@nvidia.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A0FF:EE_|MW4PR12MB7000:EE_ X-MS-Office365-Filtering-Correlation-Id: f4025b34-c7d5-40a4-7feb-08dd7c16cb06 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|36860700013|376014|82310400026; X-Microsoft-Antispam-Message-Info: ebuqkz2uBzGTTmdRxhQHk8lPZWt+24oz90kTFLqgeExvKwJfaUF1Ft4xNv3luS2Vch+ZhTVINdVnnftuw6BWx7qF9W6JGmT8owejPwqDC5POwglKXezB1UpAuydkPaH0JZ0A8ho1KYngObV08zp7yF+Th9UvYd3jgw8kgI8maDNVDzEKacmXXvMGi6fU3skRcCTNFhUq+NNKGIa5lkO+n115BWvoBxIgLCJOtyjkwxTgeNwonn4Ff+5S8TnSq4idTes4yQidJIaSEO7EINiGr3y+8mkdds7CuQwccekte/VCUc1E6bp22Jsut38whyb7w0v0kwbAsTVLv88aehnE+6kj71X+GPt0odPqtj42/U/u1f2KpZj97MQrdCfiKTZ1q3AD5+U0IaecthL8XlSdoyCYq7ceYdx2/kRBXq0D/VvkrCgqyK7fDfn21ejPlX9pPGW4Kxg8GStQyizzKnkakN5tTjWRzLkmCF7/LgyyVHmNJWOCxi2u+5HcdgU0bdJEGOH/Ut+PbRonhGt15U4/epXCuPLFw2SMcgld4Zcuh1mqNphRmy6wVAvsoYpmszjqa5Phn7TctsmT+oKqch2grK+Na5XBCLAomPWIUzR12vYkP6ri1xvCzZZ7KwZPDJzFzTWvFyUgLAX0rAhZu8vUcp4td5hjji0hxVnlOV1OgxbYI+nOSp+ijPfXG0s+B1gtfhsm/a94bpPQmRSYeWoKwgFcJgSeNx9Fj1tBwGiQFHEahE6cOD/IOX92kC8I3RgohYPzwfBNBWqzg/f+tlaS32D8MCRZwgraICuYZNQpR9cVb4oWHF74/6M/MSe/MEnr+hBeq+d6QQxA40JFhV8zQrfoZIzFfCB4HyJR9MuE8E0r8iilkfmnEuRz4V0N/2TK936evpkTOsnhgIXyTJsWjH/620sfU7ewMM+sdwDgsc7Ae1S8S+wwiwlm2XTQVrp4LvuGQZU2ro7Vflx0eFb/0CkQKYxdosKH1vU9jbCpstuZE6tgD6QLmol5hghPAdEjku/GQK50CVP7a5tqP4zJarhGiTFpAP1d1RSGj2DaiFFgbqHJ5Do7oHf+vCxvzN/vzuz/KgPo72mDYKjd71HON2HjvlEHH/Z38hy4nmKLTSs0HZxgV9969hm29tndI2ShXrqRtPgitwQ3WovEPgvZDN53WoI1DRHIld3p5QIugfwfPLesc1pGGBD12juAFQXTtlBc0xJuyOktCYSC3T+kbEMGcbn65ul0h1et8yDVWmn6L3GUxri4SBGpv528yHG0JkXOn6hMW1ae/m9SCAlLdoSyLsBin3oSJOiP16VNJA6c7MOUp8gD2SRktnO+JZY87GiqkoE2C0pgvh/IKjDVtTxDCD2FsN25pvvvLMJvZim9Xct3HvxhUJx6Ovf8wZf+q4SenFoeipWI5EEBE0pBiIbf2KfAG4GZYnwUfxugyl+55ZteRNLv6kU4LRr8dGFb9SA0gd0QLRw1MbL3+DAwbsC+cxdzGTfWzk7r3AAW4mSBs2OR9eyC0A5qn4dwX5U3 X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(1800799024)(36860700013)(376014)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2025 12:12:29.2710 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f4025b34-c7d5-40a4-7feb-08dd7c16cb06 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A0FF.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB7000 X-Patchwork-Delegate: kuba@kernel.org Commit 7c31e54aeee5 ("vxlan: do not destroy fdb if register_netdevice() is failed") split the insertion of FDB entries into the FDB hash table from the function where they are created. This was done in order to work around a problem that is no longer possible after the previous patch. Simplify the code and move the body of vxlan_fdb_insert() back into vxlan_fdb_create(). Reviewed-by: Petr Machata Signed-off-by: Ido Schimmel --- drivers/net/vxlan/vxlan_core.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c index 3df86927b1ec..915ce73f0c87 100644 --- a/drivers/net/vxlan/vxlan_core.c +++ b/drivers/net/vxlan/vxlan_core.c @@ -816,14 +816,6 @@ static struct vxlan_fdb *vxlan_fdb_alloc(struct vxlan_dev *vxlan, const u8 *mac, return f; } -static void vxlan_fdb_insert(struct vxlan_dev *vxlan, const u8 *mac, - __be32 src_vni, struct vxlan_fdb *f) -{ - ++vxlan->addrcnt; - hlist_add_head_rcu(&f->hlist, - vxlan_fdb_head(vxlan, mac, src_vni)); -} - static int vxlan_fdb_nh_update(struct vxlan_dev *vxlan, struct vxlan_fdb *fdb, u32 nhid, struct netlink_ext_ack *extack) { @@ -913,6 +905,10 @@ int vxlan_fdb_create(struct vxlan_dev *vxlan, if (rc < 0) goto errout; + ++vxlan->addrcnt; + hlist_add_head_rcu(&f->hlist, + vxlan_fdb_head(vxlan, mac, src_vni)); + *fdb = f; return 0; @@ -1101,7 +1097,6 @@ static int vxlan_fdb_update_create(struct vxlan_dev *vxlan, if (rc < 0) return rc; - vxlan_fdb_insert(vxlan, mac, src_vni, f); rc = vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), RTM_NEWNEIGH, swdev_notify, extack); if (rc) @@ -3994,8 +3989,6 @@ static int __vxlan_dev_create(struct net *net, struct net_device *dev, } if (f) { - vxlan_fdb_insert(vxlan, all_zeros_mac, dst->remote_vni, f); - /* notify default fdb entry */ err = vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), RTM_NEWNEIGH, true, extack); From patchwork Tue Apr 15 12:11:32 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 14052133 X-Patchwork-Delegate: kuba@kernel.org Received: from NAM04-DM6-obe.outbound.protection.outlook.com (mail-dm6nam04on2057.outbound.protection.outlook.com [40.107.102.57]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DC7B12951B2 for ; Tue, 15 Apr 2025 12:12:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.102.57 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719154; cv=fail; b=QdN99K9yBGT9/0IUQH5JGuOm++AdCMsfbTTRyfRSAjTMvTz14UeOfL2D5URk2Wxa7WWY7QhUJb+v2oOQ3FAG8xumUA3ysGTx4+5oONndX+tePRfiz9e+945/RbvPwcoQuq8EMTgELl8FM+H/W5p5NAf6ggARDvG2DGpeZljhWCc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719154; c=relaxed/simple; bh=yJJupirSlolL2KPsdxg6ykFweFrR09/wRzT/89lw7ns=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=IG3Q3w3nDRLfTMos9FsGN+cd/gYdww+yZBaZlZOrUgY0JNY/1jg+NwdWld8FVR1Sbb5F7SB4Sq9R5zEGJViUXwBxxJDTV+aXXN2LjLRaDdRqic2AM3rxH0v+0Yq5uMfHeRKkUS5c4ddVxm2p5R+Jr8/MR4junO2QbfaaC+XF0PA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=a3OZZUqX; arc=fail smtp.client-ip=40.107.102.57 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="a3OZZUqX" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Pjyx+Gkec36zHsX6BJ3pr4lgAXMjEqpEnI7OBeAuyzeihDzVUkNA7LspHEpmYYkSLmehrY7G/xNOsupiscChlUsnuqWXbIuS8gA2aS43ReaDgtMuAkL/zGCcFhikwhaklhyGZIDAGE0+Wefrndr7pNe9H/IbP+EWP55dBtLHhUJAqoPDzLyZ88tRGjoArMuefRHZA1CYVgs2Irv15mNXXt6hykZpXngdS+GcKHnGROhUA6k0Z4NV7vbWhLjH8z1jPxFCq9zMH6a6dyEt4uP1Z4sXwQcRN7Vv/c1y8STOOdtsFjQdkNfwpCI4oXo7Grgo2/cU6b8tFnt+FK6t2qf5Qg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=O5X52xqMCxrm7U7N0E87qmY4aBnejKgBx/paEmo40CU=; b=chvLUmfwJVJKMbnJuuOb+Ubw1rmTvgz69S3AB8IcSm/K5I6WdAaUJLqCDMImmiQjVUiDEaIonTHH8keesz9Ql7Dl+yHjfeNQ8z0fK0EfcHdeh0Ann0hHHrwblaMRkxfsBLa1xvF8e07Mt6d9YI8GLsa8NR2vJS8i9zuA90A3Dy6VD2CUAWc9fyQovszk1D7KWjFrh3BZnDUCja91qEqaoUa2q9BXSmS9qMz6NFyq2272zBsDBmti88aFwzDWzjRbuoDexv0B/+6xr8ctWF2e84gMcxLB41kTQWeETQ1aYhuBl3U5yXF0q5FAoLOIitA/DnxfFLdOIXG5lUKxNxFSnA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=O5X52xqMCxrm7U7N0E87qmY4aBnejKgBx/paEmo40CU=; b=a3OZZUqX7f5eRlrGKBpPGkIQrfQZo8QoJ1ZSqn0VJ4Xsb/yPlmzE9e0tXd6EEq0fsuxj4R2/kxGXTFxoIDfkIisavYaB8fvVfmlpGbaasdF4bLZvNcKq1WxO192fp0nWE9cF/nKB0d71cxTZva7T5Uonrz6Wpe7mWA1zaY3TrH068SSbABvNhSlT1mcli+DJ1xldzqdjOrLII4naDRI1zwZ3z26uccCEXdyoHxGUhxpzrtRCOG2C0Q1Zh7Lj5XzRZIEauNX9xqQuuF4VznzHyawYLm4rz56O4xH9EgIro0LNBSnPjdr527LrJLbG1FW/BXoUSQU3DNal749kVdLIZw== Received: from CY5PR18CA0003.namprd18.prod.outlook.com (2603:10b6:930:5::10) by PH7PR12MB5951.namprd12.prod.outlook.com (2603:10b6:510:1da::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.32; Tue, 15 Apr 2025 12:12:28 +0000 Received: from CY4PEPF0000EDD5.namprd03.prod.outlook.com (2603:10b6:930:5:cafe::4a) by CY5PR18CA0003.outlook.office365.com (2603:10b6:930:5::10) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.36 via Frontend Transport; Tue, 15 Apr 2025 12:12:28 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by CY4PEPF0000EDD5.mail.protection.outlook.com (10.167.241.201) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Tue, 15 Apr 2025 12:12:28 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 15 Apr 2025 05:12:15 -0700 Received: from shredder.lan (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 15 Apr 2025 05:12:12 -0700 From: Ido Schimmel To: CC: , , , , , , , , Ido Schimmel Subject: [PATCH net-next 04/15] vxlan: Unsplit default FDB entry creation and notification Date: Tue, 15 Apr 2025 15:11:32 +0300 Message-ID: <20250415121143.345227-5-idosch@nvidia.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250415121143.345227-1-idosch@nvidia.com> References: <20250415121143.345227-1-idosch@nvidia.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EDD5:EE_|PH7PR12MB5951:EE_ X-MS-Office365-Filtering-Correlation-Id: 1d7060a6-173c-417c-93eb-08dd7c16ca6f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|36860700013|376014; X-Microsoft-Antispam-Message-Info: wsF96lmqLYXB29FUorxXuBy684idTLtOC4Jxq4UBRBSZpx9x4U0Po/fzZXkyWGfPPg9E9+v4xsBugK5FS4D8JuoeOZmb3GgkO4YDxpoeP5JC24D3gM9lFq6h36FsI0rgnDfxuiTFRQJc3gGyAoD1rEGIoB9/hEdJl2jtn/ob2GXo/cBJzPy27qrI8xl77BDYKL6eRIpa4WItKUJDHkb3q3cINeWR/MOcfh9tJjiG5F3AZD3Jsn5qcvlkMo8PMlIUYnLZ6EebCiJ666Top4/iD4UlsQz+CBpSZd8jR85ksJx5I0kR5QCCc9BKZqOcYfc46VMrAbsDMFKhTRzgSvoBpJqE8Rv9qAGEqMxK8/9zDwcHjtAlqOjmPPuwQzlAwlI6l+Gaj81RWc+/yiLDLpWqCy8NuK1f/W9nhP1duYBeLfLWjP32e3TNYw1oLNkh4kJL7sKoggrLexIzNf8rDQxkG6KwsOIZkc8nbQQtZb/KK3yrW+LQYKHOBb+yuO/L3vqGLucHCzD+9Y72LOWNp/bn6YcSatFwEGGmaULPhRu9jo2flSpZht0VAOfYMAUTl3pSU5HFXJsAuInnvXuQILtz9N7v/y9AjhJ3LQUHjdWSnH1/fPEuFjM/9PZUvXVYnPxZmfTADtMD3sSvuvoVO2S91i0FrBef4zemwR7e6S878y/XQvkOgxOmfTDSUaHNJVHZ6l+p+7xcOV+qhyfzMhbpXx0uBdscusj6+mUYK+CxHzl06IugsAXzwF0M9r7u7yR4xlfDXQ7eC139uV0dKr4AEvaBgJUGSflMFnMTzMC7FffOwqAaOWs1sGwrFDBawTiRkbIhMMnaDw/nuH3nKMivq36EATr1g05ZxOVGuaxCuZ8+ZAPqoItW4wxE0tyPifBuLj7L+ppm+NLWSuYAi0tsFBZ3R0xnHaj5xUEi74N+bSG903yki7DU+eZNl4q8FQglXe0TImAUnJ1t7h42Cx+ft3ZiG9XL0HZxE7uxPrSc3IkUgt1QJANQShqE9G56cy8WM7rcsdLrIZFt4u//XBhne5NMZN7i0wbYGrawH1iY8fJ3IJtoqnLQNNEyMepErzIJmRwPyE9Nm0ewqqUw92YnwwfGw4hXBGvGry7Xr5ksoEa704aeisXWWqeu1NqNXm9acNfcBnRtS9vzCmC13lI5Ugdsmb3z6CUukh7e66NvQxDT+fIEfLZEdVz/Sxhv//lnKvlwN+aOQc3AThH/nHbVZnC8ikabHamNrP03sqcEsdNIWtfQ/5DOxfbLF49yedhq1iHsTw3+kgVV9QHW0Ppdffr1lGbYIrIYzGRs+F91EWOnDvgl1TlBrXiSB+U95dGl19AM/b+LzVPNLuAIJQC9l7B9ad0uXSGjF7ZdI+oZmf1ZtWOwbsCToat6FacEU55oh+njW+wFVrdzIO+/FF72ZwpvP4a9hr1qctJNY4Qx7LPwUANDcdpVS1Lpvix7LruJxAAi875BfX0+cKYwtvZw7LWojkFGKQG0X+oLDCNBKZkjZQEXaEc8CZTw9RSjbFRF X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(36860700013)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2025 12:12:28.2038 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1d7060a6-173c-417c-93eb-08dd7c16ca6f X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000EDD5.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB5951 X-Patchwork-Delegate: kuba@kernel.org Commit 0241b836732f ("vxlan: fix default fdb entry netlink notify ordering during netdev create") split the creation of the default FDB entry from its notification to avoid sending a RTM_NEWNEIGH notification before RTM_NEWLINK. Previous patches restructured the code so that the default FDB entry is created after registering the VXLAN device and the notification about the new entry immediately follows its creation. Therefore, simplify the code and revert back to vxlan_fdb_update() which takes care of both creating the FDB entry and notifying user space about it. Hold the FDB hash lock when calling vxlan_fdb_update() like it expects. A subsequent patch will add a lockdep assertion to make sure this is indeed the case. Reviewed-by: Petr Machata Signed-off-by: Ido Schimmel --- drivers/net/vxlan/vxlan_core.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c index 915ce73f0c87..d3dfc4af9556 100644 --- a/drivers/net/vxlan/vxlan_core.c +++ b/drivers/net/vxlan/vxlan_core.c @@ -3943,7 +3943,6 @@ static int __vxlan_dev_create(struct net *net, struct net_device *dev, struct vxlan_net *vn = net_generic(net, vxlan_net_id); struct vxlan_dev *vxlan = netdev_priv(dev); struct net_device *remote_dev = NULL; - struct vxlan_fdb *f = NULL; struct vxlan_rdst *dst; int err; @@ -3976,33 +3975,29 @@ static int __vxlan_dev_create(struct net *net, struct net_device *dev, /* create an fdb entry for a valid default destination */ if (!vxlan_addr_any(&dst->remote_ip)) { - err = vxlan_fdb_create(vxlan, all_zeros_mac, + u32 hash_index = fdb_head_index(vxlan, all_zeros_mac, + dst->remote_vni); + + spin_lock_bh(&vxlan->hash_lock[hash_index]); + err = vxlan_fdb_update(vxlan, all_zeros_mac, &dst->remote_ip, NUD_REACHABLE | NUD_PERMANENT, + NLM_F_EXCL | NLM_F_CREATE, vxlan->cfg.dst_port, dst->remote_vni, dst->remote_vni, dst->remote_ifindex, - NTF_SELF, 0, &f, extack); + NTF_SELF, 0, true, extack); + spin_unlock_bh(&vxlan->hash_lock[hash_index]); if (err) goto unlink; } - if (f) { - /* notify default fdb entry */ - err = vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), - RTM_NEWNEIGH, true, extack); - if (err) - goto fdb_destroy; - } - list_add(&vxlan->next, &vn->vxlan_list); if (remote_dev) dst->remote_dev = remote_dev; return 0; -fdb_destroy: - vxlan_fdb_destroy(vxlan, f, false, false); unlink: if (remote_dev) netdev_upper_dev_unlink(remote_dev, dev); From patchwork Tue Apr 15 12:11:33 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 14052134 X-Patchwork-Delegate: kuba@kernel.org Received: from NAM04-DM6-obe.outbound.protection.outlook.com (mail-dm6nam04on2047.outbound.protection.outlook.com [40.107.102.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EAB552951B2 for ; Tue, 15 Apr 2025 12:12:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.102.47 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719158; cv=fail; b=pk7HT9VQZOS6vVEsXr0Fv+VaPqk+U8dTxbCUSFugZlrJ5N2ECpZFakvp0oVWbOy8FhBuJnGsuj9QxmmAENKeMu0kmWMx/YQugRtOoMWXWJZ+Yt7itRMtcXCrAt4Tls3ys9y+jlmLsqlwh+L295AnfUjPdf7pc8AFKoY6Q9iDFp4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719158; c=relaxed/simple; bh=cEGMEYyTOsSlnoIK5dIdUERVqKYLkD6ReDGBxtSHRSY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=S7Mt+Q9d2vb/IWEn3trBxV3ZZCeE9opOFmrL/9Gh+VwY5mhNOsSf+HVh3gJk2/gJDwnWNnMMbVmo58qgcXrES1NTtGk+NHoyL1E/xZirbbykJK3ropvrFivYRuAiRuE0HD7WbYngfgc9ZqLTSEhejNpJp1yAGpGHsTSCmmZ/8+g= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=qZTL0qqk; arc=fail smtp.client-ip=40.107.102.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="qZTL0qqk" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nQ86SyjKz5LBOwdLOJOkWfj7kPOImQZZhq01nc7Ih2gyOuWfZseUgajm2/23d5IoEkk+3ZkJTwSU3SC9cSPXMuEN5uM2jSIcPggQHR2IFFS5nQFfhGkz13NIKufdJfjCzGWmXLBpVNWFeGjyiTO7hX7pVdQFAB+QGzojuKpdcJfqZJbV83+dId3hjRg2YTHMRK6TK8prRNSaphnhL7qnFsH4Vwd208NTLUXGNfA5L1AoFY6+8ceuQP/Ms8idNi9btYszNW0CpqAIRj8iyAwvwViXAULsMBjn1oVrSA60v9uU1Z8Q7bMsXbADTjFZ35dGvzqo/zukS/l6YBlN3ofj9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=UtQSPDD6V1JuBuiRxBKRsHwkUr1uJOmEG3fGOTc7YDk=; b=duAOS4rxlg3JpoRxVT0aLLHhR5Ek+332PQ6WxQanjyR7DwaTcpvrRwq/1EIG+iGvMhc5NqFsCZ5TnL5oifIk/1TbgBiWBneYrhhubtqVhkbmFxEY/XfSnZb6L8zxRnAxCqtw9tZhpZfEVh+4y2umcLjKIyCIKDsPdvPriaczResPbaGSHqzP0X4oTVjQgHagMO5v0SFMoYEkWWis4VkleWoCa172rDxx2s6KvhRLheu3IIvNBa5+T14bih3WKQnKlTaQwQF3XLKxJS0+Jix4jgJRppInUnKNDy95JhZ9kFXiml2BUvAeomYGkpA2eCrvSz8opmW5Ie6F668E7ldZSw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UtQSPDD6V1JuBuiRxBKRsHwkUr1uJOmEG3fGOTc7YDk=; b=qZTL0qqks3EHF3D0abzm46qolp+L9pIb9Td5HMLkAcI0X8ko6fBrisGj9aOkVs5YFGRlSG0kwNGrq1/lDbShyIkShRl6e7pnWjG/vr2z9fTOcCn5syeUG9MWwUwUw0QDNDbM4pGrAM/4fbdBxNIBN0OiWbuA35CNS58SPRj7Lbs1+NBjJadDYrd6YoKPJN67LFmkHbGrfmTobqjcESGYeJlBr50umLyI2nNDrmRVUtd/MITnVLsuA1wFFRZ7QK6r7nQ8TH69IB17c74vZbFxPruYbESV2QwwpZn928Q4MpZ+1Wr0Fn50K+Iaj5qMVdsU9wgdqksVK3H4nKNlOwVc6w== Received: from BN9PR03CA0211.namprd03.prod.outlook.com (2603:10b6:408:f8::6) by SJ1PR12MB6028.namprd12.prod.outlook.com (2603:10b6:a03:489::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.35; Tue, 15 Apr 2025 12:12:34 +0000 Received: from BL02EPF0001A0FB.namprd03.prod.outlook.com (2603:10b6:408:f8:cafe::87) by BN9PR03CA0211.outlook.office365.com (2603:10b6:408:f8::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8655.15 via Frontend Transport; Tue, 15 Apr 2025 12:12:34 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BL02EPF0001A0FB.mail.protection.outlook.com (10.167.242.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Tue, 15 Apr 2025 12:12:33 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 15 Apr 2025 05:12:19 -0700 Received: from shredder.lan (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 15 Apr 2025 05:12:15 -0700 From: Ido Schimmel To: CC: , , , , , , , , Ido Schimmel Subject: [PATCH net-next 05/15] vxlan: Relocate assignment of default remote device Date: Tue, 15 Apr 2025 15:11:33 +0300 Message-ID: <20250415121143.345227-6-idosch@nvidia.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250415121143.345227-1-idosch@nvidia.com> References: <20250415121143.345227-1-idosch@nvidia.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A0FB:EE_|SJ1PR12MB6028:EE_ X-MS-Office365-Filtering-Correlation-Id: 8f7a4b27-3afe-42d2-41ae-08dd7c16cdc5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|36860700013|376014|82310400026; X-Microsoft-Antispam-Message-Info: XzgMRU/rL9rtzrwF1xEUYIYlzXwvl5nZl16bqBm8Ef/Hy5gtr+5KDsSMlTCw4bqieNN+KFnrjunGXN+5g6zTb3LbTUCKXIDJw3IIGM0Wf1OyPwJLBXRhnD3lndNjr2aw2Py1wEtK3pA2nyvv8qTI+gPlyRP+PyYRN40UDR1LcZIBs+ksIohZ5t8JElJdlcDejYG6V3bf1Oup9Bg4/iJoEK3RFXKUq3QLvlUQAKMcpMwTZWuvkz4h90V/AAY9KQbKuk5cdRvX6JFBABQjWRNWcPSpS5jYXjUTq8Yo6DZZLFwLbo0wNC7zvexrYc0zXi5Wen3L3CuTxPJFENsvCPnKEJebLUDKFL7GZGJjdFNvKOr4lpwak4PiHCR01rUx0yjbA6qFMT5Fv6YO5+bGYTmTy0gflxPpsmSslNsCRzc1gH7tbHoQwKf15RivoYUZ+9AKSy668HfEw0FMSmJDBeY+fUGMCfgpfKpt+RqB9MBznBb7N/xxxMheXeFPb69xLoUNLuevHSpWjvbdqTtKZlN6zei5CEY4JOO5r5AgN58qU+sq8T5MM++9WzPtMj/IijHLmWPjajxJ1N74WixMSJmFDP+gTz3Ztt7haBMKi2iR/ZlOV7nUeydLvVL0ZTwqmO7mHxNOjyA2SaJ1/u8PKNmCpDh2XI9Pr9uQq3NypWaIz9bjJyPWf3c9bImh706fewaiE0e0xWgcd02rpcdUEm7MvxTd5yOmDu4l2ydf7GASCe12BELeoKmONYNLg/RJ6v6LOnnvWLYGo9JB44ZuKvAMVuPnWFKtoO7sbS5ENmh3JDguoT+GsTBkpbqFlbQly1EN5qR2QFZ52ErCv4Ohln0yczyY3nBFHom1tkkocqOO1n7jav3rUW0Qa617NtxuI+7rQV5RA5xDx+Zsfy43MJul8sWAyucuajb7Mw+2yyR1HsdafaYBIHUU34+0A3uEOofYoyUvFFY+vxz3xbYaNcQ/oWFTE+Pd+69vsefRsl26NTEhZhZPasyIht+VwlrKWf50rm2wjyiZZYSpc3KMfOdfHg/mjLJpsTSQIulYBiLjkH+dB7IFXGmE2ehowgNhQ6cQfnO39kaiaoks878fT1YPgIBiWUY6Ngy62WQvMGtyVg4FXNrCCgFqYXHHcK48gW5ajE0WKSVfyJji1Dgj8D/JlG0jKOWaagShpRnewtt0AEEWztJuORszvuYjtgYBsLbLXksAfLojTqlkp2CN+K98sHPBlqevu32CLVdcZ/TLvgvuJG2DUc5ZvYLBvZWa9k2bZTO3GZZClG12tOrqEidlkSDlD+JRQ/2JE9PZTXIrSS8AE4yyBUD5TQ+rkJXqAyKgS7XnjoYYvHRbd35FBoPBeCpJTCG5K57JFl+kth3u1cfFGIXWzEnhHb0HJbQfjuBf12ZnrOotxAlRWylfIcmo9wYC9YU9MzBDFfQmD3O4lywda0Ff6lnEwM8BCJ5DaD5dBhYcrYFyHU+MIvAiatd/OTb/AH3zfC1L+Iu7GJBOeiuCLHC0B5DNg3YepwrhMgIQ X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(1800799024)(36860700013)(376014)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2025 12:12:33.7828 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8f7a4b27-3afe-42d2-41ae-08dd7c16cdc5 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A0FB.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR12MB6028 X-Patchwork-Delegate: kuba@kernel.org The default FDB entry can be associated with a net device if a physical device (i.e., 'dev PHYS_DEV') was specified during the creation of the VXLAN device. The assignment of the net device pointer to 'dst->remote_dev' logically belongs in the if block that resolves the pointer from the specified ifindex, so move it there. Reviewed-by: Petr Machata Signed-off-by: Ido Schimmel --- drivers/net/vxlan/vxlan_core.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c index d3dfc4af9556..d45b63180714 100644 --- a/drivers/net/vxlan/vxlan_core.c +++ b/drivers/net/vxlan/vxlan_core.c @@ -3967,6 +3967,8 @@ static int __vxlan_dev_create(struct net *net, struct net_device *dev, err = netdev_upper_dev_link(remote_dev, dev, extack); if (err) goto unregister; + + dst->remote_dev = remote_dev; } err = rtnl_configure_link(dev, NULL, 0, NULL); @@ -3994,8 +3996,7 @@ static int __vxlan_dev_create(struct net *net, struct net_device *dev, } list_add(&vxlan->next, &vn->vxlan_list); - if (remote_dev) - dst->remote_dev = remote_dev; + return 0; unlink: From patchwork Tue Apr 15 12:11:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 14052137 X-Patchwork-Delegate: kuba@kernel.org Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2084.outbound.protection.outlook.com [40.107.244.84]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9771C2951B7 for ; Tue, 15 Apr 2025 12:12:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.244.84 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719165; cv=fail; b=spXhkZDmXLF5znsVSsN+50BZFf8Oa8IbNxvYhftL7qhlMIo0R/bscafqJO6eMp7g0jFkILdMohAXWwkX08vS0It4Z82Uv+v/3Gjmfv96yAkjz0+jZDzBJp1Is333jVm1V7QPnJRxfw4KCnmvDR2CO6j85ySSXMElyUYPw1aSYmE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719165; c=relaxed/simple; bh=eYjdM4Kp4cAhXM7Xc/uOz4BiPcw+KlmolpXRSxpTxqk=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=DEmLCX47bebIWp4+Q4CuTO9iINr9RwrOUW25d5F31O7QIIti0lZbtWD/TQ8fC3NK+99buAzK567elv0tdU/crBFkItCwx5UFHUUaY3IsJDUZ/LNNQBCVUql9LLl7ldG4XfdN5Re827TrErWhx3nDQQp8kAGNWGTfGwn1XuaTEqc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=FknleMQd; arc=fail smtp.client-ip=40.107.244.84 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="FknleMQd" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yJxR911DpmiN/plgEPQiuDrS+3YFfezVXWuKavTPfCiNeC+BaeBoJEMhJPpfkBo6IGOioarvtdyg1jRYD/EmBRtSIfNDxiPbcb9EVVyxgEIJn3YESda5PerLRSvvrFqzIvZWq8llYTmbUSrXY9VCKzkbmKrJTyTvUz3kn0J+S7wc3lPB2x9TOj7g+fnoHI8jDJsPhfNL5x611hW8WKtn+WV2jVveLTV8PUbbuxI/321mFWUHVgu8mB+wp1B8Gptd/ygXXk0U/GfE/Nk1Eofw+KzM3T9ol5aQApUdWlgrXkUEX8qV3KQCF8+UEpsXhUys4rlyX6NJBjOmmN59CwPpUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bfYjXlWg7uqJUj1T0oskiPG4biAhZm9KaIWX57Vt+S8=; b=tOTIvl2AJtM4dldFcbvw7kCYLsdnmbUPuSElrLKsFODeQh+w0sd8GYdLy3plptzLqcIkWQHrrW8XFUZZrh/5MTj9KwGl2isrWmoAP4GiNFAQ7oyl8To5/QN28pWFOCXj8oVhGSVGjwhHuzr/z3DqOvaoPL5mcVxrud/vcJ8VfaGC9ODNenBv3WsXMtzqh9zDeOAy9u2rsCeZeNvYo3XE4hfCGuaMAJ4ho7LEt9PQWOKiliib5Z71OLThg0Hcze6kOmjED4k9mt/fDoDZR9mV6jxrPyTVRAo3vzeEUllh6/hOsoZ0DOrNlTMK7HB/xsiKraPD0HhfyXB93FRqzHJhKg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bfYjXlWg7uqJUj1T0oskiPG4biAhZm9KaIWX57Vt+S8=; b=FknleMQdmgYtoJwGmQRtFwjraQvfuuT8XRlOFXgCcFp3CNdOas0p0w+/PaEahPbJor5Q9dkTkB4ObLp7/2/G8qIKcUztP2B3hpL96ok7KuqjjCnXxIROt1Mkexyqo3iljy82cCnFDQ8+jDYz1VMl+4IbhS0FDA9Hpq/t/gIhopRwiv2jaWeymUISgSo1LsK7HvqS6evi8PlbHLy7HbEz0Hz+iGVbVkmbyIwlYReHLrgqIZGbW+zuvowh4rJzd78jQUYO3XQHBwSX6Mkp5r4LpMv/f6MCQY9b0dKvXvvVnyJoW+ENrg6KC0HKbxTZ28GHyAeHDTg5h/fWNyXV2NRJqQ== Received: from BN9PR03CA0599.namprd03.prod.outlook.com (2603:10b6:408:10d::34) by IA1PR12MB6116.namprd12.prod.outlook.com (2603:10b6:208:3e8::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.32; Tue, 15 Apr 2025 12:12:37 +0000 Received: from BL02EPF0001A0FA.namprd03.prod.outlook.com (2603:10b6:408:10d:cafe::43) by BN9PR03CA0599.outlook.office365.com (2603:10b6:408:10d::34) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8655.18 via Frontend Transport; Tue, 15 Apr 2025 12:12:36 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BL02EPF0001A0FA.mail.protection.outlook.com (10.167.242.101) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Tue, 15 Apr 2025 12:12:36 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 15 Apr 2025 05:12:23 -0700 Received: from shredder.lan (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 15 Apr 2025 05:12:19 -0700 From: Ido Schimmel To: CC: , , , , , , , , Ido Schimmel Subject: [PATCH net-next 06/15] vxlan: Use a single lock to protect the FDB table Date: Tue, 15 Apr 2025 15:11:34 +0300 Message-ID: <20250415121143.345227-7-idosch@nvidia.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250415121143.345227-1-idosch@nvidia.com> References: <20250415121143.345227-1-idosch@nvidia.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A0FA:EE_|IA1PR12MB6116:EE_ X-MS-Office365-Filtering-Correlation-Id: 5cb2e5df-2973-472a-cdb7-08dd7c16cf86 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: +UYoiyJBZV43RMoF00BaxmrW4OKP5VqoWhWIPjhjyjDleJT0mpl95I3pNLXV5onuIjzPxFFtL9n2AKW6IlzI87c9V3YOQuulhyJJ6tBj2lZFy6uK4jraRoHYGLhLZOLnNtyabX4fxXb4+RMg4qcm7FQJjllDinNsFpU7mm2wv5QbKCrpGIr55tu9yNlKjHf2Nz5ansVglCE2krA9tUZGH/L8w4MAd/LdPQ6i9Od0ADfSTsdm//x1HnvMK/41W6mzzv4+pMLTbYYi6J30ENyPn16VpYNwfGQleCFTZcZzRNOyBN/SavFzdSY/uEYyuoqFJmf/jJh609X1wU8ZqEglIm5GnZ0FpmVgQpJGySmTk+s/drAi837OtdmG8ghFMKA9tYeu/uzQZQ9B/c3eUnZ7lAls1vP3S/1MdUucJbADoPxy5zX4xpfKjptwO++x7FPzNjahKBbqSHiw3F25v/foNYUxEf2E735tapVOeiwcNzIyOYg+m5h0MnHNxiDpM6CS2rj++fo7yl51YQmyTOla2zldxLSTZSLOEbdwlP6XT2ww8blHhZSVROlZXMXRElgr1FOLG8mI2q43I1nLAxCf8mHHZuZP5eGNvr8uWlea9CmPYVkvOielKzpG0wtBo6EHm68TQ928rs0txLkJUHikzjySYsi9QWNOHRHKf4xlGgXXlImvpUzziDMoOqBQxNiVW7GN3hO1c1KZ+uzYpz51EFZiE2LAHqBHEcRZOKYAzX47UAJ/J1xYNmFp00CH3iYUOyTtL0FzM/Htl10HHGiOadD0xb+VIL14EPBP2+dizT2Dsdb7d84iyLvVgrXb97vFFoadJrQv4NKN9Afxh79x0yBpaZjSKfvx+95LbompbMIUGq9CeAKb7W/cPO/2h34iRzH27ji5884MnzfV6+zjODzTQfgObtRpyvb2PfA6x3Z2Z1qNejCF789dBmr/zGdzOfSNpGXasTkAQZWgzwBPMk1+5vC921uGl8by2X1jXCpfIZRZBAkHBMPODNpuEmQ7/KQaBmb4yelP4okdbJTNdBitcrw+d2D6NDHjIfO6M1azf03eO1KkWRjE+q5J8M853TdGXbUDaO4NlZLcE0pNSXlVcwFR/8RQGOfQTl1svjDP4CJv1DLox+o2jmcPQPotr/ur47+dKiF8wBIJhFtSZOBJRxdtl8gBm4L6+Dp6ginOkQCeKfJZYXWAsyFbhv698wAcGwag5nJVLlca2We+eYcsBQ9QBVw1Iap2mnrjwZ2QNpp67ve96Yt2MobFRIEek06flVjYNa2vRPpRYYiQGZlTUNmSrwnLMRA2tKNuZzxaRZ1tXCsg4/JDySL1wXI3tBOTAOeE4gQVS47+ROEK6Pp465g85deqiyP12gK2JF+K7Wt395JUhHpN5eN+yvNCs+dm51vo5BjbNxh0r+ZENYPiiWU1IcQ/sWcKMMPAfCiQTUXv/5cqKMGVBwdjx1H0n6Yn4OuQs2sUaaMVI/XYOcSIQxzwa9gJmtaSFUyqNBQsG4nJ2Lf1AQyGlAg7wCwv X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(1800799024)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2025 12:12:36.7446 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5cb2e5df-2973-472a-cdb7-08dd7c16cf86 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A0FA.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6116 X-Patchwork-Delegate: kuba@kernel.org Currently, the VXLAN driver stores FDB entries in a hash table with a fixed number of buckets (256). Subsequent patches are going to convert this table to rhashtable with a linked list for entry traversal, as rhashtable is more scalable. In preparation for this conversion, move from a per-bucket spin lock to a single spin lock that protects the entire FDB table. The per-bucket spin locks were introduced by commit fe1e0713bbe8 ("vxlan: Use FDB_HASH_SIZE hash_locks to reduce contention") citing "huge contention when inserting/deleting vxlan_fdbs into the fdb_head". It is not clear from the commit message which code path was holding the spin lock for long periods of time, but the obvious suspect is the FDB cleanup routine (vxlan_cleanup()) that periodically traverses the entire table in order to delete aged-out entries. This will be solved by subsequent patches that will convert the FDB cleanup routine to traverse the linked list of FDB entries using RCU, only acquiring the spin lock when deleting an aged-out entry. The change reduces the size of the VXLAN device structure from 3600 bytes to 2576 bytes. Reviewed-by: Petr Machata Signed-off-by: Ido Schimmel --- drivers/net/vxlan/vxlan_core.c | 82 +++++++++++------------------ drivers/net/vxlan/vxlan_vnifilter.c | 8 ++- include/net/vxlan.h | 2 +- 3 files changed, 34 insertions(+), 58 deletions(-) diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c index d45b63180714..b8edd8afda28 100644 --- a/drivers/net/vxlan/vxlan_core.c +++ b/drivers/net/vxlan/vxlan_core.c @@ -524,8 +524,8 @@ int vxlan_fdb_replay(const struct net_device *dev, __be32 vni, return -EINVAL; vxlan = netdev_priv(dev); + spin_lock_bh(&vxlan->hash_lock); for (h = 0; h < FDB_HASH_SIZE; ++h) { - spin_lock_bh(&vxlan->hash_lock[h]); hlist_for_each_entry(f, &vxlan->fdb_head[h], hlist) { if (f->vni == vni) { list_for_each_entry(rdst, &f->remotes, list) { @@ -537,12 +537,12 @@ int vxlan_fdb_replay(const struct net_device *dev, __be32 vni, } } } - spin_unlock_bh(&vxlan->hash_lock[h]); } + spin_unlock_bh(&vxlan->hash_lock); return 0; unlock: - spin_unlock_bh(&vxlan->hash_lock[h]); + spin_unlock_bh(&vxlan->hash_lock); return rc; } EXPORT_SYMBOL_GPL(vxlan_fdb_replay); @@ -558,14 +558,14 @@ void vxlan_fdb_clear_offload(const struct net_device *dev, __be32 vni) return; vxlan = netdev_priv(dev); + spin_lock_bh(&vxlan->hash_lock); for (h = 0; h < FDB_HASH_SIZE; ++h) { - spin_lock_bh(&vxlan->hash_lock[h]); hlist_for_each_entry(f, &vxlan->fdb_head[h], hlist) if (f->vni == vni) list_for_each_entry(rdst, &f->remotes, list) rdst->offloaded = false; - spin_unlock_bh(&vxlan->hash_lock[h]); } + spin_unlock_bh(&vxlan->hash_lock); } EXPORT_SYMBOL_GPL(vxlan_fdb_clear_offload); @@ -1248,7 +1248,6 @@ static int vxlan_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], __be16 port; __be32 src_vni, vni; u32 ifindex, nhid; - u32 hash_index; int err; if (!(ndm->ndm_state & (NUD_PERMANENT|NUD_REACHABLE))) { @@ -1268,13 +1267,12 @@ static int vxlan_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], if (vxlan->default_dst.remote_ip.sa.sa_family != ip.sa.sa_family) return -EAFNOSUPPORT; - hash_index = fdb_head_index(vxlan, addr, src_vni); - spin_lock_bh(&vxlan->hash_lock[hash_index]); + spin_lock_bh(&vxlan->hash_lock); err = vxlan_fdb_update(vxlan, addr, &ip, ndm->ndm_state, flags, port, src_vni, vni, ifindex, ndm->ndm_flags | NTF_VXLAN_ADDED_BY_USER, nhid, true, extack); - spin_unlock_bh(&vxlan->hash_lock[hash_index]); + spin_unlock_bh(&vxlan->hash_lock); if (!err) *notified = true; @@ -1325,7 +1323,6 @@ static int vxlan_fdb_delete(struct ndmsg *ndm, struct nlattr *tb[], union vxlan_addr ip; __be32 src_vni, vni; u32 ifindex, nhid; - u32 hash_index; __be16 port; int err; @@ -1334,11 +1331,10 @@ static int vxlan_fdb_delete(struct ndmsg *ndm, struct nlattr *tb[], if (err) return err; - hash_index = fdb_head_index(vxlan, addr, src_vni); - spin_lock_bh(&vxlan->hash_lock[hash_index]); + spin_lock_bh(&vxlan->hash_lock); err = __vxlan_fdb_delete(vxlan, addr, ip, port, src_vni, vni, ifindex, true); - spin_unlock_bh(&vxlan->hash_lock[hash_index]); + spin_unlock_bh(&vxlan->hash_lock); if (!err) *notified = true; @@ -1486,10 +1482,8 @@ static enum skb_drop_reason vxlan_snoop(struct net_device *dev, rdst->remote_ip = *src_ip; vxlan_fdb_notify(vxlan, f, rdst, RTM_NEWNEIGH, true, NULL); } else { - u32 hash_index = fdb_head_index(vxlan, src_mac, vni); - /* learned new entry */ - spin_lock(&vxlan->hash_lock[hash_index]); + spin_lock(&vxlan->hash_lock); /* close off race between vxlan_flush and incoming packets */ if (netif_running(dev)) @@ -1500,7 +1494,7 @@ static enum skb_drop_reason vxlan_snoop(struct net_device *dev, vni, vxlan->default_dst.remote_vni, ifindex, NTF_SELF, 0, true, NULL); - spin_unlock(&vxlan->hash_lock[hash_index]); + spin_unlock(&vxlan->hash_lock); } return SKB_NOT_DROPPED_YET; @@ -2839,10 +2833,10 @@ static void vxlan_cleanup(struct timer_list *t) if (!netif_running(vxlan->dev)) return; + spin_lock(&vxlan->hash_lock); for (h = 0; h < FDB_HASH_SIZE; ++h) { struct hlist_node *p, *n; - spin_lock(&vxlan->hash_lock[h]); hlist_for_each_safe(p, n, &vxlan->fdb_head[h]) { struct vxlan_fdb *f = container_of(p, struct vxlan_fdb, hlist); @@ -2864,8 +2858,8 @@ static void vxlan_cleanup(struct timer_list *t) } else if (time_before(timeout, next_timer)) next_timer = timeout; } - spin_unlock(&vxlan->hash_lock[h]); } + spin_unlock(&vxlan->hash_lock); mod_timer(&vxlan->age_timer, next_timer); } @@ -3056,10 +3050,10 @@ static void vxlan_flush(struct vxlan_dev *vxlan, bool match_remotes = vxlan_fdb_flush_should_match_remotes(desc); unsigned int h; + spin_lock_bh(&vxlan->hash_lock); for (h = 0; h < FDB_HASH_SIZE; ++h) { struct hlist_node *p, *n; - spin_lock_bh(&vxlan->hash_lock[h]); hlist_for_each_safe(p, n, &vxlan->fdb_head[h]) { struct vxlan_fdb *f = container_of(p, struct vxlan_fdb, hlist); @@ -3079,8 +3073,8 @@ static void vxlan_flush(struct vxlan_dev *vxlan, vxlan_fdb_destroy(vxlan, f, true, true); } - spin_unlock_bh(&vxlan->hash_lock[h]); } + spin_unlock_bh(&vxlan->hash_lock); } static const struct nla_policy vxlan_del_bulk_policy[NDA_MAX + 1] = { @@ -3358,15 +3352,14 @@ static void vxlan_setup(struct net_device *dev) dev->pcpu_stat_type = NETDEV_PCPU_STAT_DSTATS; INIT_LIST_HEAD(&vxlan->next); + spin_lock_init(&vxlan->hash_lock); timer_setup(&vxlan->age_timer, vxlan_cleanup, TIMER_DEFERRABLE); vxlan->dev = dev; - for (h = 0; h < FDB_HASH_SIZE; ++h) { - spin_lock_init(&vxlan->hash_lock[h]); + for (h = 0; h < FDB_HASH_SIZE; ++h) INIT_HLIST_HEAD(&vxlan->fdb_head[h]); - } } static void vxlan_ether_setup(struct net_device *dev) @@ -3977,10 +3970,7 @@ static int __vxlan_dev_create(struct net *net, struct net_device *dev, /* create an fdb entry for a valid default destination */ if (!vxlan_addr_any(&dst->remote_ip)) { - u32 hash_index = fdb_head_index(vxlan, all_zeros_mac, - dst->remote_vni); - - spin_lock_bh(&vxlan->hash_lock[hash_index]); + spin_lock_bh(&vxlan->hash_lock); err = vxlan_fdb_update(vxlan, all_zeros_mac, &dst->remote_ip, NUD_REACHABLE | NUD_PERMANENT, @@ -3990,7 +3980,7 @@ static int __vxlan_dev_create(struct net *net, struct net_device *dev, dst->remote_vni, dst->remote_ifindex, NTF_SELF, 0, true, extack); - spin_unlock_bh(&vxlan->hash_lock[hash_index]); + spin_unlock_bh(&vxlan->hash_lock); if (err) goto unlink; } @@ -4420,9 +4410,7 @@ static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[], /* handle default dst entry */ if (rem_ip_changed) { - u32 hash_index = fdb_head_index(vxlan, all_zeros_mac, conf.vni); - - spin_lock_bh(&vxlan->hash_lock[hash_index]); + spin_lock_bh(&vxlan->hash_lock); if (!vxlan_addr_any(&conf.remote_ip)) { err = vxlan_fdb_update(vxlan, all_zeros_mac, &conf.remote_ip, @@ -4433,7 +4421,7 @@ static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[], conf.remote_ifindex, NTF_SELF, 0, true, extack); if (err) { - spin_unlock_bh(&vxlan->hash_lock[hash_index]); + spin_unlock_bh(&vxlan->hash_lock); netdev_adjacent_change_abort(dst->remote_dev, lowerdev, dev); return err; @@ -4447,7 +4435,7 @@ static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[], dst->remote_vni, dst->remote_ifindex, true); - spin_unlock_bh(&vxlan->hash_lock[hash_index]); + spin_unlock_bh(&vxlan->hash_lock); /* If vni filtering device, also update fdb entries of * all vnis that were using default remote ip @@ -4747,11 +4735,8 @@ vxlan_fdb_offloaded_set(struct net_device *dev, struct vxlan_dev *vxlan = netdev_priv(dev); struct vxlan_rdst *rdst; struct vxlan_fdb *f; - u32 hash_index; - - hash_index = fdb_head_index(vxlan, fdb_info->eth_addr, fdb_info->vni); - spin_lock_bh(&vxlan->hash_lock[hash_index]); + spin_lock_bh(&vxlan->hash_lock); f = __vxlan_find_mac(vxlan, fdb_info->eth_addr, fdb_info->vni); if (!f) @@ -4767,7 +4752,7 @@ vxlan_fdb_offloaded_set(struct net_device *dev, rdst->offloaded = fdb_info->offloaded; out: - spin_unlock_bh(&vxlan->hash_lock[hash_index]); + spin_unlock_bh(&vxlan->hash_lock); } static int @@ -4776,13 +4761,11 @@ vxlan_fdb_external_learn_add(struct net_device *dev, { struct vxlan_dev *vxlan = netdev_priv(dev); struct netlink_ext_ack *extack; - u32 hash_index; int err; - hash_index = fdb_head_index(vxlan, fdb_info->eth_addr, fdb_info->vni); extack = switchdev_notifier_info_to_extack(&fdb_info->info); - spin_lock_bh(&vxlan->hash_lock[hash_index]); + spin_lock_bh(&vxlan->hash_lock); err = vxlan_fdb_update(vxlan, fdb_info->eth_addr, &fdb_info->remote_ip, NUD_REACHABLE, NLM_F_CREATE | NLM_F_REPLACE, @@ -4792,7 +4775,7 @@ vxlan_fdb_external_learn_add(struct net_device *dev, fdb_info->remote_ifindex, NTF_USE | NTF_SELF | NTF_EXT_LEARNED, 0, false, extack); - spin_unlock_bh(&vxlan->hash_lock[hash_index]); + spin_unlock_bh(&vxlan->hash_lock); return err; } @@ -4803,11 +4786,9 @@ vxlan_fdb_external_learn_del(struct net_device *dev, { struct vxlan_dev *vxlan = netdev_priv(dev); struct vxlan_fdb *f; - u32 hash_index; int err = 0; - hash_index = fdb_head_index(vxlan, fdb_info->eth_addr, fdb_info->vni); - spin_lock_bh(&vxlan->hash_lock[hash_index]); + spin_lock_bh(&vxlan->hash_lock); f = __vxlan_find_mac(vxlan, fdb_info->eth_addr, fdb_info->vni); if (!f) @@ -4821,7 +4802,7 @@ vxlan_fdb_external_learn_del(struct net_device *dev, fdb_info->remote_ifindex, false); - spin_unlock_bh(&vxlan->hash_lock[hash_index]); + spin_unlock_bh(&vxlan->hash_lock); return err; } @@ -4870,18 +4851,15 @@ static void vxlan_fdb_nh_flush(struct nexthop *nh) { struct vxlan_fdb *fdb; struct vxlan_dev *vxlan; - u32 hash_index; rcu_read_lock(); list_for_each_entry_rcu(fdb, &nh->fdb_list, nh_list) { vxlan = rcu_dereference(fdb->vdev); WARN_ON(!vxlan); - hash_index = fdb_head_index(vxlan, fdb->eth_addr, - vxlan->default_dst.remote_vni); - spin_lock_bh(&vxlan->hash_lock[hash_index]); + spin_lock_bh(&vxlan->hash_lock); if (!hlist_unhashed(&fdb->hlist)) vxlan_fdb_destroy(vxlan, fdb, false, false); - spin_unlock_bh(&vxlan->hash_lock[hash_index]); + spin_unlock_bh(&vxlan->hash_lock); } rcu_read_unlock(); } diff --git a/drivers/net/vxlan/vxlan_vnifilter.c b/drivers/net/vxlan/vxlan_vnifilter.c index 6e6e9f05509a..e137c5bb4478 100644 --- a/drivers/net/vxlan/vxlan_vnifilter.c +++ b/drivers/net/vxlan/vxlan_vnifilter.c @@ -483,11 +483,9 @@ static int vxlan_update_default_fdb_entry(struct vxlan_dev *vxlan, __be32 vni, struct netlink_ext_ack *extack) { struct vxlan_rdst *dst = &vxlan->default_dst; - u32 hash_index; int err = 0; - hash_index = fdb_head_index(vxlan, all_zeros_mac, vni); - spin_lock_bh(&vxlan->hash_lock[hash_index]); + spin_lock_bh(&vxlan->hash_lock); if (remote_ip && !vxlan_addr_any(remote_ip)) { err = vxlan_fdb_update(vxlan, all_zeros_mac, remote_ip, @@ -499,7 +497,7 @@ static int vxlan_update_default_fdb_entry(struct vxlan_dev *vxlan, __be32 vni, dst->remote_ifindex, NTF_SELF, 0, true, extack); if (err) { - spin_unlock_bh(&vxlan->hash_lock[hash_index]); + spin_unlock_bh(&vxlan->hash_lock); return err; } } @@ -512,7 +510,7 @@ static int vxlan_update_default_fdb_entry(struct vxlan_dev *vxlan, __be32 vni, dst->remote_ifindex, true); } - spin_unlock_bh(&vxlan->hash_lock[hash_index]); + spin_unlock_bh(&vxlan->hash_lock); return err; } diff --git a/include/net/vxlan.h b/include/net/vxlan.h index 2dd23ee2bacd..272e11708a33 100644 --- a/include/net/vxlan.h +++ b/include/net/vxlan.h @@ -296,7 +296,7 @@ struct vxlan_dev { struct vxlan_rdst default_dst; /* default destination */ struct timer_list age_timer; - spinlock_t hash_lock[FDB_HASH_SIZE]; + spinlock_t hash_lock; unsigned int addrcnt; struct gro_cells gro_cells; From patchwork Tue Apr 15 12:11:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 14052136 X-Patchwork-Delegate: kuba@kernel.org Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2050.outbound.protection.outlook.com [40.107.94.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C8400294A01 for ; Tue, 15 Apr 2025 12:12:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.94.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719164; cv=fail; b=YPHkszrNbOjZJIbk54nm5gNxXWMizPvgj+ZP/H5c7Iqp87fif4j29KgBb8RORugl7/2Gl1ziKJIhP0jc2UI6a7I1s3eHQ6nUMEIDTDCuWvuecu4itC6TZyrzn0LHR5rgXjsDbk3XiFvLFyivkYk0h2CvB7qPrr86gjPWWvAM6Bs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719164; c=relaxed/simple; bh=iZQN2u3E6AE0KLkiAWAf8etHAyTzChWRAuHtjnf7qzk=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Dnt+6M92js3EOLQ4jA9Usu3fmbLXLGUTCGF9Hs0agS72YB+HIGwS5O/lrPOVewEohppDD97LjxewLn0P6Wr4BSCSUVGtEbxDlKuwqzGZyR45MhKqquMLuonpsp9IUyK6wkb1yhCQtYk2i90BthJO+jcsBsmKXS/hocXxn90SRpQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=KM/N5+pw; arc=fail smtp.client-ip=40.107.94.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="KM/N5+pw" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OKmucAgic3V//WHl1F972u31g8TIn3aG0YyARK7A7Y+ZDtcudbaBQi6+KUWSsQv6MOIQ4N916+gQDeloAbMvHAJquO36HE/qvnWunqoe8OwaQYpjyNtBV2WCpSpsAfRqa/VeZ7A4qz/L0C902M/UVi2qK2JQ9Ooki/YLiXarkQP4dxkn0hbbx0XFmrlVdbLS82aR4awdT7GdSOuw7fL01B9xiDfqeaq3QZNlPyFP6Xuj/8BnY7E4mf+qVAOGIH1m5lIUXQdkwMjLnbTF8OfPQzBhU8UCwGGEGwbiERMztxHNtI8U4/8au+K18Du47nj4XTCGaphztrYZgZcoJxZZ/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LRv62P+dpSBbSAXe99HWIqBGJac4YCSR4VO+oepCqoY=; b=MEY1Puj5YMvueolvTbmRNld5OhTRcqb/HCtWrjlMxVawMUVfKLlpbkX6DVrXrMMp1rUWn0j2Xo8JaWOTcZ/qWBtbzh0LTH4XXWr5tI/+CRqYDIgEqP+6+ilmzoRSN0i0cATXsmzzA7277N16P62SVz5Mz3GD4xsqI2vqTRMCxiE78tYe3eh/OcbevgGOojQgm7EVXlNv5AfAZjU7MAYe/AUWx7xjwyYKnXSYElQJnpM+lxvCMop+D5yo50TxeKWf62jJStLPMIZow0L6VZIJPJXn2+f5wx96O7lcUW1q9mTi22b3Tc6VX34IdwhCkaqx01cD8Bv2V3i+FlHQJSEPug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LRv62P+dpSBbSAXe99HWIqBGJac4YCSR4VO+oepCqoY=; b=KM/N5+pwPpa1BtuESIMr5QP+q34AhJnmO6UcvGKRTXuI4DVppymQXYBBx/8G6mcxvDzVz/XObYYTOkaryrhVl33nf+SboH6aTUgjxkvowULXr30svq+SVbHpIOuwNFfOkDpmkc9iUJOFdb9gWnI7WsarS/y1stouMGKnZBI5AWKU5PObaNwGGeqrbDolUVXUP4XGyByJ+KUND57woxLOS9LxMF7MqhEBrQbO6WU4BhZNE9Oi2pArWor153hP5M93Kp0LKjJ+4YozrqguX+GtXbuTgFULlsMJxBZSK1xt/6fhZtZxcAswde2SG3pLzuu0eX0k62xzhh7vO/t5Bph8Sw== Received: from BN9PR03CA0572.namprd03.prod.outlook.com (2603:10b6:408:10d::7) by DM6PR12MB4075.namprd12.prod.outlook.com (2603:10b6:5:21d::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.32; Tue, 15 Apr 2025 12:12:38 +0000 Received: from BL02EPF0001A0FA.namprd03.prod.outlook.com (2603:10b6:408:10d:cafe::36) by BN9PR03CA0572.outlook.office365.com (2603:10b6:408:10d::7) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.34 via Frontend Transport; Tue, 15 Apr 2025 12:12:38 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BL02EPF0001A0FA.mail.protection.outlook.com (10.167.242.101) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Tue, 15 Apr 2025 12:12:38 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 15 Apr 2025 05:12:26 -0700 Received: from shredder.lan (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 15 Apr 2025 05:12:23 -0700 From: Ido Schimmel To: CC: , , , , , , , , Ido Schimmel Subject: [PATCH net-next 07/15] vxlan: Add a linked list of FDB entries Date: Tue, 15 Apr 2025 15:11:35 +0300 Message-ID: <20250415121143.345227-8-idosch@nvidia.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250415121143.345227-1-idosch@nvidia.com> References: <20250415121143.345227-1-idosch@nvidia.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A0FA:EE_|DM6PR12MB4075:EE_ X-MS-Office365-Filtering-Correlation-Id: 0ba9a6bb-b7a3-4977-c8bf-08dd7c16d05f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: j1mN47+gswyaXHL5RCT/XXdB8nPBqxjqyddOz3jk0lrhc7Yik5kySMeSsffnC/y9K82V0gnhoZQ5XjUqnnjWCuGGRSZjvKeuQkEQbMIPzlyK3XFuMH/Qk4MnHW5yZ1sg7WBNukjctKM34OMMXiwhw12h/g5TxRrAuC1RLjAK4f5jvt4L2QGrwQiy2eQkZM6OhwNj26eTYuTWuV50Ho8Q2ChOKJ9Vf6WfurttyiiehjBVYmK20rMWFZodCEDh6uFd2AWimLpmXGpaOCnhTtfpZHZr0yBrEHqkyXIT64T1ezUi7jrOHp101VSNB/trXH2aRHQx5s4zi5Ffjhxx0jU0EkIFina1QNpv06jfZI9hUQpGaW/JaD/j67bnpeTjbxfMGZF+krE2AxTSwlTcjyEZSplim7xubYyWLlMXF2VwjHquXyVMBKJucUMnukl/iciuaZf4iuZAJwtoVW56s4WwRs4S1iGSCg9pRXCiGsxjqLQAqmdYT8eYX+0LPrA8vu3bvkBtS8FCvBZJ9EBZ0i6xLLSLCOm8x77+yC637nLbeptKPlXg7FOnZ1J0iD+ksNRcRFddBfkMwCh7tbqPGk36qj4aTVG2jMONbtSV/yL97BMbCq/94phKmaJSWjRJ9Gtjs95W+e6TVPBQylFsgrDIvT3evSd7XNucqiErDqKtNgcjgUvUMKxiE/4ky820r7/wO7LGs5pI8tx057wegVRqHdKwqiYyPsj2SeuW4YzSrBAUX4dN6AzRXiJUMLk8Zb+fQOaGqNw4DApn65YJXp1yd+zKHeOKrn8Wr2xmih+yIrOg9L0laJriT4N88gtX9v+mTIXTMUkak53KGBHUYSVkUeea79dI9laVzX8PM6C5dkRmCwZsVQS4oo0zdFQmh2If0PMARJTvi1qPig784exmvZBJ5gXAQqo9S2yh1/bdcRZoWRPqCO48CaJ06hmJLl/zcOuVxpUvyTivGcLSvcCciJbup7M5rZp1rYGKq/65tLBahXhKv39gNJwlVabseEH47xvAk8wDfGeAkYZq2X34bnOURr1djdaWv0wLAYRh/08iyDx4CYcYqD/iVEJz6jsf6BbrfZdJTo9MIHDE6Pa5kg58dP+8YtqZW+mSjm3Tu6VWmp4pVxQ+276S/zhUDPUN6WnX2nPxwglq5wz1lgnkz9mHhegFZBpWtKheS/rAPL7LlHoajfU9CV+E7H+B7705yhxuxWngu2flJmRMCYYrbj+2KkUIhe6vooF5N6qEoVkUEmzu3SJUN3nPa+OmUBaf0s6ZzLuO2o/CHAVN1SwJpJuLDWHwObPHVFJxMSScTIjrtgtpbJAXQjtKJWCHyozbKV/2111vGLgiE4D8N0gcusz8LTr9OoJ7ndcZk6fUdu2/6eR7nTZLzoSM8dKnSK5pHyQ6QaOtlvbuHNRIYDUYjdhqaglxVCnWK4HbxQ4GrZHC2o3100bXmrpW8w16InZdbN9AvyBjrZ8ajNhVbA7OFriWDWhfPzOuccbi4xF23uVuLoBqhDv0Cww5Qvt4OoWc X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(1800799024)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2025 12:12:38.2134 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0ba9a6bb-b7a3-4977-c8bf-08dd7c16d05f X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A0FA.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4075 X-Patchwork-Delegate: kuba@kernel.org Currently, FDB entries are stored in a hash table with a fixed number of buckets. The table is used for both lookups and entry traversal. Subsequent patches will convert the table to rhashtable which is not suitable for entry traversal. In preparation for this conversion, add FDB entries to a linked list. Subsequent patches will convert the driver to use this list when traversing entries during dump, flush, etc. Reviewed-by: Petr Machata Signed-off-by: Ido Schimmel --- drivers/net/vxlan/vxlan_core.c | 3 +++ drivers/net/vxlan/vxlan_private.h | 1 + include/net/vxlan.h | 1 + 3 files changed, 5 insertions(+) diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c index b8edd8afda28..511c24e29d45 100644 --- a/drivers/net/vxlan/vxlan_core.c +++ b/drivers/net/vxlan/vxlan_core.c @@ -908,6 +908,7 @@ int vxlan_fdb_create(struct vxlan_dev *vxlan, ++vxlan->addrcnt; hlist_add_head_rcu(&f->hlist, vxlan_fdb_head(vxlan, mac, src_vni)); + hlist_add_head_rcu(&f->fdb_node, &vxlan->fdb_list); *fdb = f; @@ -962,6 +963,7 @@ static void vxlan_fdb_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f, swdev_notify, NULL); } + hlist_del_init_rcu(&f->fdb_node); hlist_del_rcu(&f->hlist); list_del_rcu(&f->nh_list); call_rcu(&f->rcu, vxlan_fdb_free); @@ -3360,6 +3362,7 @@ static void vxlan_setup(struct net_device *dev) for (h = 0; h < FDB_HASH_SIZE; ++h) INIT_HLIST_HEAD(&vxlan->fdb_head[h]); + INIT_HLIST_HEAD(&vxlan->fdb_list); } static void vxlan_ether_setup(struct net_device *dev) diff --git a/drivers/net/vxlan/vxlan_private.h b/drivers/net/vxlan/vxlan_private.h index 76a351a997d5..078702ec604d 100644 --- a/drivers/net/vxlan/vxlan_private.h +++ b/drivers/net/vxlan/vxlan_private.h @@ -36,6 +36,7 @@ struct vxlan_fdb { __be32 vni; u16 flags; /* see ndm_flags and below */ struct list_head nh_list; + struct hlist_node fdb_node; struct nexthop __rcu *nh; struct vxlan_dev __rcu *vdev; }; diff --git a/include/net/vxlan.h b/include/net/vxlan.h index 272e11708a33..96a6c6f45c2e 100644 --- a/include/net/vxlan.h +++ b/include/net/vxlan.h @@ -307,6 +307,7 @@ struct vxlan_dev { struct hlist_head fdb_head[FDB_HASH_SIZE]; struct rhashtable mdb_tbl; + struct hlist_head fdb_list; struct hlist_head mdb_list; unsigned int mdb_seq; }; From patchwork Tue Apr 15 12:11:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 14052138 X-Patchwork-Delegate: kuba@kernel.org Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2069.outbound.protection.outlook.com [40.107.94.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 21CEB2951AA for ; Tue, 15 Apr 2025 12:12:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.94.69 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719171; cv=fail; b=Afcc9Hw/LnY8XnqjotowTVQVEiPElniw58Vpx8XRT+GPn1An3zOTQuypWj17tH97yVvrezuO3OISZ05dAcsnyPsrQbde4W0uaYSNjkoDU6teWxwjmzKMySSqd3F1byAq/fBue2UrvRYiyfVUqAVRWYi93oDDKSeiBk8JVHKTJnQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719171; c=relaxed/simple; bh=3Pbpi/1W3gO9E9iCbwz47BTZhfna+AtkhqBALdORMts=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=GxvXX1dd1qmTN1R2nMl3SlwfNfkYOLuDY+5qfgC0/SC8h3uBoyj1ihkhWhUbAUoDJ9Rwztj/KOX6dXcSIYusSNNmD+OTR4W55N8iC9dUIaG+34h1dxpXxPW9/1VB4/+RuFNL6QIrCDZRKmWm9cHxHY3tBePKswzf987BseP+xAg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=Y4Vr+1/A; arc=fail smtp.client-ip=40.107.94.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="Y4Vr+1/A" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HE4NM9zKdXc41B/APYYwjdN+kcrX3WzZL6CkCjSCkgG144GLKpNZ9f+oYvv1eKXqsJzOdYugq/C3PhmYcjz+M8ikj0muf/F2CrvPWbVrBpLTeiatbg+QrDxv38taqB1qQYHd6R+CgqAKRXOiDGKs/p9jZXTyNhLqkq8N4DfTbqSkS1b0xowGG46EQPP2jiIywDIem6A8UrnDvh+Qtman9BeiAqdu0q1kBSQf7UpeANjQ4gEGG4o/nFlJjhW1/HUBSzRl82oHyMHf5A43mAdoHsWVVLw/aDtIP2f77lfwyIGvhYOhd4WYI9UW5+AAJTWnZdQbgUhdOpn224lV53n9JA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=DieetaDohmAZgFza4+jwcu7hk/qd1wEFzMTlz4HR/+0=; b=jRotvoqoEC6GFKDvWV+qBXfbWni9L89ZPRXHvosepERXIyrYVXvT7CbTUSOJp6SMLPlnpVx0Pa6lIDl0vLBQ+YSMkIIKgNRoBkqy7TUEcZS6xJFxyRjGXhUw+j++GUrzsKC7hqk5FwbncXNn/EE6KkoOHjPyKPHAv0j3zx4CxqNe1LMLNxfyhT7u8NMsG/2inp4vAaAGBNOwdm5D9iN8Smtmnrz6aevg75KuGi8R1gyxy714PHYkzWNkM+t44GTQhhXxt0TZkPHH1d+ienzAnkAit+aaHpQtVMsTRPxuOQ5a9E+FPEYmAM/yjv/YBkrxHzLNOIxnj7UtPhVDUaIuuA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DieetaDohmAZgFza4+jwcu7hk/qd1wEFzMTlz4HR/+0=; b=Y4Vr+1/AHZ7s/NM9hsI7++xgb6CmH7lgDxiWPfJr/Aqn3XmVRGQBcWAM1NG42+TRDpysMRlNs9czJ5jjFSMtP/lQxkmFaXlF4DbWE+/2ejORUM7mUIdqBL71kN0QUDO1lJpn6wWBXcYJ+6Tuyd+d+YLY39rbY2/TkCZhJui2x9Surh6mLKvd1b8H9sX+AKJUbmHYEL4zAXpWxkwRznDkklNBjudStQKcdTrVVq3gQzgQ+FotyUFnJp9eucDkUnwbX4TYmHcltnLIRMI0IycSCzbG1H+BlcCCdxATT7+3uYH1rSEnrIymx63pPKSuPvwNtfoe5mBZUseypW9v+Cingw== Received: from BN9PR03CA0226.namprd03.prod.outlook.com (2603:10b6:408:f8::21) by IA1PR12MB6529.namprd12.prod.outlook.com (2603:10b6:208:3a6::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.21; Tue, 15 Apr 2025 12:12:42 +0000 Received: from BL02EPF0001A0FB.namprd03.prod.outlook.com (2603:10b6:408:f8:cafe::44) by BN9PR03CA0226.outlook.office365.com (2603:10b6:408:f8::21) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.34 via Frontend Transport; Tue, 15 Apr 2025 12:12:42 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BL02EPF0001A0FB.mail.protection.outlook.com (10.167.242.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Tue, 15 Apr 2025 12:12:42 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 15 Apr 2025 05:12:30 -0700 Received: from shredder.lan (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 15 Apr 2025 05:12:26 -0700 From: Ido Schimmel To: CC: , , , , , , , , Ido Schimmel Subject: [PATCH net-next 08/15] vxlan: Use linked list to traverse FDB entries Date: Tue, 15 Apr 2025 15:11:36 +0300 Message-ID: <20250415121143.345227-9-idosch@nvidia.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250415121143.345227-1-idosch@nvidia.com> References: <20250415121143.345227-1-idosch@nvidia.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A0FB:EE_|IA1PR12MB6529:EE_ X-MS-Office365-Filtering-Correlation-Id: e6ed1a83-d281-4d05-6b6a-08dd7c16d2be X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|376014|82310400026; X-Microsoft-Antispam-Message-Info: m8xXqMf2096aACmFb6isHT2IuCzDTSsJaRiLjktgQSaO5iqElwFoeB7Agut8S60cvBhzMK9/56t1Y5+D4A+xZ/a+A8haOsNIQ3sGYoQlthO2vY4U2sq0x9ArhB1nl1NpW26mJPFT+76cNjYBIrqqpKJxrW/S/14t6wVFAL8Hn0zsZdPFhKTKHmSKj9iLsSk5YSb1NxcKburxpou92p6h+hh6BN9Ay2g8LHWh39j+/X9T+notCkM8MYN4md4LI+Uhs2aQCyHIvVF2CjThvq3Dm1f3UDsptrJPbObBEkIIbEa5e5Lb3mw9hYTR4gVo1tvs9C6NBP3hfEOkV4WxM0zfHcYLVPhgnCeRP2KqXfsIe8ucYmCWEugfbS/8MnIgo1U/iw4kYP834McykO27zYpfHH7a/U68COoQtpypDFSYZkXGIlIhbzwSBkKZFb0cPtMzsvFQDc62LSJI7RZYdXwMYDkd15LpfVSkDSTlQymY3rR3WsqNudipx+7PQDkN8jsU3SXMwVnTZgrXq3nye4ZxskltrGZyuCPxCBW5YTtxL/wIao7lCI1hUcd8R/zzpvb2MsNNelqjBolz46aRcUsBp40i5hehW261fQDKsTGcRmQ59q/lQ0cSsb+Qtz9i2/+Rwr6fseNMqV3pQpJkJhLLNGeWwac/94M6HfSfAYb5ztmj6KRORzpTP6LjgBFsI3O4w8zUM1E7Pr3rIiN/KfSRM56xkCEvahFVciICJfaFTDryHIdrLMM6cQq+TRkbXXliVpb+2sJ23slrv82wkZA1bqM4u62AJ2im/ofEz1bLyAVkCFtpMMij4AFL91LOSpDy0qOKc/n8cKZsZ8gwsvoE5S0oJP6VJ1q4QhxYYI5aoE/KkrYJzJZ30gAYtxhb1jOxRCRpHbyYXP8uiWEuJk7Z1S0IWbUgrs5NQer+b2dO+WTsSxYDwPTA6yE9l6R7wJDWiCs6Bjd0UXn+TqHHeSLGcXAGnxZbu1Rffqqifls2Pe2HnC5SkG5nUfqV+F4OHoOAq0dc5aXkEoY1xH1vhPfYCTBBl09tLg8rCXXxFr7OtYCKPkEKnbtvRAbct1MTSPpYTdB5DOrjkNCQyPQRMA3mVQ/569dWfT0Ml6Q5VQ/OeSc40/b7ZhLTdnYEhdt03imez+2fc/PdV8Id61U2QODqGpaY1u78f6zeJKLgDidebbG9jfREybbWKlNNwHTKXdC9xnpj+GUlfnB5OaAjypkMW4iaaIpD87/T1Ga+Ex9n08spDRtvfops/MWMMk7+OFFj7BR0//ZKHMJZ0WJJo3n/qs8wM5eYx1NkW7mpT8TcdsN/qm9D+mQrVyxBW825aNTCp5HDayV35XmKN2YqnoGT/h7xS+aMLLUvBPiQUQGZ4x09LIhoAZDSs8bTscUHY/Avjhpg0B2Y94m432iUj28Gm90wHYYc/7EZg/aAamJChJI0nD3DzEF212qaJd7zYKXms0iRJ+oqZ6DFy0UlSTa+ir7jz2wDNH/cjo33rDey4dJySe4a1v7jJPIF1XICSTs6 X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(36860700013)(1800799024)(376014)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2025 12:12:42.1266 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e6ed1a83-d281-4d05-6b6a-08dd7c16d2be X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A0FB.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6529 X-Patchwork-Delegate: kuba@kernel.org In preparation for removing the fixed size hash table, convert FDB entry traversal to use the newly added FDB linked list. No functional changes intended. Reviewed-by: Petr Machata Signed-off-by: Ido Schimmel --- drivers/net/vxlan/vxlan_core.c | 172 ++++++++++++++------------------- 1 file changed, 75 insertions(+), 97 deletions(-) diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c index 511c24e29d45..f9840a4b6e44 100644 --- a/drivers/net/vxlan/vxlan_core.c +++ b/drivers/net/vxlan/vxlan_core.c @@ -517,7 +517,6 @@ int vxlan_fdb_replay(const struct net_device *dev, __be32 vni, struct vxlan_dev *vxlan; struct vxlan_rdst *rdst; struct vxlan_fdb *f; - unsigned int h; int rc = 0; if (!netif_is_vxlan(dev)) @@ -525,16 +524,13 @@ int vxlan_fdb_replay(const struct net_device *dev, __be32 vni, vxlan = netdev_priv(dev); spin_lock_bh(&vxlan->hash_lock); - for (h = 0; h < FDB_HASH_SIZE; ++h) { - hlist_for_each_entry(f, &vxlan->fdb_head[h], hlist) { - if (f->vni == vni) { - list_for_each_entry(rdst, &f->remotes, list) { - rc = vxlan_fdb_notify_one(nb, vxlan, - f, rdst, - extack); - if (rc) - goto unlock; - } + hlist_for_each_entry(f, &vxlan->fdb_list, fdb_node) { + if (f->vni == vni) { + list_for_each_entry(rdst, &f->remotes, list) { + rc = vxlan_fdb_notify_one(nb, vxlan, f, rdst, + extack); + if (rc) + goto unlock; } } } @@ -552,18 +548,17 @@ void vxlan_fdb_clear_offload(const struct net_device *dev, __be32 vni) struct vxlan_dev *vxlan; struct vxlan_rdst *rdst; struct vxlan_fdb *f; - unsigned int h; if (!netif_is_vxlan(dev)) return; vxlan = netdev_priv(dev); spin_lock_bh(&vxlan->hash_lock); - for (h = 0; h < FDB_HASH_SIZE; ++h) { - hlist_for_each_entry(f, &vxlan->fdb_head[h], hlist) - if (f->vni == vni) - list_for_each_entry(rdst, &f->remotes, list) - rdst->offloaded = false; + hlist_for_each_entry(f, &vxlan->fdb_list, fdb_node) { + if (f->vni == vni) { + list_for_each_entry(rdst, &f->remotes, list) + rdst->offloaded = false; + } } spin_unlock_bh(&vxlan->hash_lock); @@ -1351,52 +1346,46 @@ static int vxlan_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb, { struct ndo_fdb_dump_context *ctx = (void *)cb->ctx; struct vxlan_dev *vxlan = netdev_priv(dev); - unsigned int h; + struct vxlan_fdb *f; int err = 0; - for (h = 0; h < FDB_HASH_SIZE; ++h) { - struct vxlan_fdb *f; - - rcu_read_lock(); - hlist_for_each_entry_rcu(f, &vxlan->fdb_head[h], hlist) { - struct vxlan_rdst *rd; - - if (rcu_access_pointer(f->nh)) { - if (*idx < ctx->fdb_idx) - goto skip_nh; - err = vxlan_fdb_info(skb, vxlan, f, - NETLINK_CB(cb->skb).portid, - cb->nlh->nlmsg_seq, - RTM_NEWNEIGH, - NLM_F_MULTI, NULL); - if (err < 0) { - rcu_read_unlock(); - goto out; - } -skip_nh: - *idx += 1; - continue; + rcu_read_lock(); + hlist_for_each_entry_rcu(f, &vxlan->fdb_list, fdb_node) { + struct vxlan_rdst *rd; + + if (rcu_access_pointer(f->nh)) { + if (*idx < ctx->fdb_idx) + goto skip_nh; + err = vxlan_fdb_info(skb, vxlan, f, + NETLINK_CB(cb->skb).portid, + cb->nlh->nlmsg_seq, + RTM_NEWNEIGH, NLM_F_MULTI, NULL); + if (err < 0) { + rcu_read_unlock(); + goto out; } +skip_nh: + *idx += 1; + continue; + } - list_for_each_entry_rcu(rd, &f->remotes, list) { - if (*idx < ctx->fdb_idx) - goto skip; - - err = vxlan_fdb_info(skb, vxlan, f, - NETLINK_CB(cb->skb).portid, - cb->nlh->nlmsg_seq, - RTM_NEWNEIGH, - NLM_F_MULTI, rd); - if (err < 0) { - rcu_read_unlock(); - goto out; - } -skip: - *idx += 1; + list_for_each_entry_rcu(rd, &f->remotes, list) { + if (*idx < ctx->fdb_idx) + goto skip; + + err = vxlan_fdb_info(skb, vxlan, f, + NETLINK_CB(cb->skb).portid, + cb->nlh->nlmsg_seq, + RTM_NEWNEIGH, NLM_F_MULTI, rd); + if (err < 0) { + rcu_read_unlock(); + goto out; } +skip: + *idx += 1; } - rcu_read_unlock(); } + rcu_read_unlock(); out: return err; } @@ -2830,35 +2819,30 @@ static void vxlan_cleanup(struct timer_list *t) { struct vxlan_dev *vxlan = from_timer(vxlan, t, age_timer); unsigned long next_timer = jiffies + FDB_AGE_INTERVAL; - unsigned int h; + struct hlist_node *n; + struct vxlan_fdb *f; if (!netif_running(vxlan->dev)) return; spin_lock(&vxlan->hash_lock); - for (h = 0; h < FDB_HASH_SIZE; ++h) { - struct hlist_node *p, *n; - - hlist_for_each_safe(p, n, &vxlan->fdb_head[h]) { - struct vxlan_fdb *f - = container_of(p, struct vxlan_fdb, hlist); - unsigned long timeout; + hlist_for_each_entry_safe(f, n, &vxlan->fdb_list, fdb_node) { + unsigned long timeout; - if (f->state & (NUD_PERMANENT | NUD_NOARP)) - continue; + if (f->state & (NUD_PERMANENT | NUD_NOARP)) + continue; - if (f->flags & NTF_EXT_LEARNED) - continue; + if (f->flags & NTF_EXT_LEARNED) + continue; - timeout = READ_ONCE(f->updated) + vxlan->cfg.age_interval * HZ; - if (time_before_eq(timeout, jiffies)) { - netdev_dbg(vxlan->dev, - "garbage collect %pM\n", - f->eth_addr); - f->state = NUD_STALE; - vxlan_fdb_destroy(vxlan, f, true, true); - } else if (time_before(timeout, next_timer)) - next_timer = timeout; + timeout = READ_ONCE(f->updated) + vxlan->cfg.age_interval * HZ; + if (time_before_eq(timeout, jiffies)) { + netdev_dbg(vxlan->dev, "garbage collect %pM\n", + f->eth_addr); + f->state = NUD_STALE; + vxlan_fdb_destroy(vxlan, f, true, true); + } else if (time_before(timeout, next_timer)) { + next_timer = timeout; } } spin_unlock(&vxlan->hash_lock); @@ -3050,31 +3034,25 @@ static void vxlan_flush(struct vxlan_dev *vxlan, const struct vxlan_fdb_flush_desc *desc) { bool match_remotes = vxlan_fdb_flush_should_match_remotes(desc); - unsigned int h; + struct hlist_node *n; + struct vxlan_fdb *f; spin_lock_bh(&vxlan->hash_lock); - for (h = 0; h < FDB_HASH_SIZE; ++h) { - struct hlist_node *p, *n; - - hlist_for_each_safe(p, n, &vxlan->fdb_head[h]) { - struct vxlan_fdb *f - = container_of(p, struct vxlan_fdb, hlist); - - if (!vxlan_fdb_flush_matches(f, vxlan, desc)) - continue; - - if (match_remotes) { - bool destroy_fdb = false; + hlist_for_each_entry_safe(f, n, &vxlan->fdb_list, fdb_node) { + if (!vxlan_fdb_flush_matches(f, vxlan, desc)) + continue; - vxlan_fdb_flush_match_remotes(f, vxlan, desc, - &destroy_fdb); + if (match_remotes) { + bool destroy_fdb = false; - if (!destroy_fdb) - continue; - } + vxlan_fdb_flush_match_remotes(f, vxlan, desc, + &destroy_fdb); - vxlan_fdb_destroy(vxlan, f, true, true); + if (!destroy_fdb) + continue; } + + vxlan_fdb_destroy(vxlan, f, true, true); } spin_unlock_bh(&vxlan->hash_lock); } @@ -4860,7 +4838,7 @@ static void vxlan_fdb_nh_flush(struct nexthop *nh) vxlan = rcu_dereference(fdb->vdev); WARN_ON(!vxlan); spin_lock_bh(&vxlan->hash_lock); - if (!hlist_unhashed(&fdb->hlist)) + if (!hlist_unhashed(&fdb->fdb_node)) vxlan_fdb_destroy(vxlan, fdb, false, false); spin_unlock_bh(&vxlan->hash_lock); } From patchwork Tue Apr 15 12:11:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 14052139 X-Patchwork-Delegate: kuba@kernel.org Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2043.outbound.protection.outlook.com [40.107.244.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 99D4228A1DE for ; Tue, 15 Apr 2025 12:12:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.244.43 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719173; cv=fail; b=oamxFDWdmbbIA9aVmxg+cTs65xWmR64pFv4pFNbXMTEOcOgLjZMXksWIWgUsTgP9/89kPdbqdOjrygNpq1ZsH2NKtjoakzuCMRck0t9zyVSSYBkZPsmaEh+w9XPMtG7HcUzX36pImPI3J0dQ+0mbnBFSNJ7omJ0Vt991isS+bnY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719173; c=relaxed/simple; bh=5UXBwdwmsDwlZg3coI+g4q3a7I6X0m22Rkw4D6wOuGY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=NtF1xQI+0GovrdGmcN2QZitr3LSovpEAzOMTg+aZVl4sTobsld/k5xga9g9heLA0OpC7u2CG0k/G4+OZzldbvUH7hX9CNYI/ow2JWakkzp8ZQOhE1+be0KKJU3Ei3W81fiRHMEHjEvUb44WanD5qcaLeXogqYn/XsNQp+F24T8U= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=JI5wQWD6; arc=fail smtp.client-ip=40.107.244.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="JI5wQWD6" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TFGgbRrgmF3Y0l/lgGoxVcg2U3uIoNigryBg8nZqEufLcBwrm5ATAa+V8YpfrHbIGbIJveKJBZhd4JdKSMC2vkP2HIJoc7VyTYdK/9Qbja/pfs6/qiZtEZIfvkpw+aKlSXoIiaYfBm7j8BWO+pyfxFn/9wwhmK7g5GwiE+Dn05jgRwid7ZqGkVdz68g8uyR1H9njOYuThkj891BYjUan+OZTLAIvDXWjrkMAMMuXTiPyXbcsplNz92ICPxQTGYmi/j+MO8djwkUXyntUzIZIxFT29QkTyHBL4HFAXOyYQrdHZba3BrnCY1a4ONzXTjJ9YwpwBRhIevNp6euwkM92ig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=CB55FHG61yhUXYf+Q7G3ZwIRkv9ztQ0idfPEk+dRhVQ=; b=DdZmIP2TyJCZbP81dQePh5H18Y4/OQAGRaCi2MsJ5WExMZg7ec6mwh3IaeT3A5bXrnhkO+sJlNU5P5+BHrGvMyLve4A3AlvLbLYNBvRTwK1hdsnH+JXVsLv7McCBYJpSYhvsDSvD5tFzZO56SOVkxjIP+gVavuXS/UXM9nQe7+TWp4J0nxshv/hL9HsGSM/QVtTdoifO7DNWZ3vTz6JpoogMOHdywW1ScuHdS6NzuPbYuwsUsTqVBQIqFgARWy9Tk+WFwbe4gokfDwN9eawLHbbSFs6r87zVYPHubCrXaXkI8Dnu0FDoCDskh9wuFv4SEhqFP/ioGQQ7qzRFro3/Wg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CB55FHG61yhUXYf+Q7G3ZwIRkv9ztQ0idfPEk+dRhVQ=; b=JI5wQWD6Ej+r7/m7kAHCIoyBF0HM/KwODkqY1xwaT720PExZPtWc5L1DnrhCERzCs61IerI491hcgizzA92t1Nuzmf2Uga+e7WcJdnOaolCROqjCUnnCl4hH6dtPSQed1QO7XG2AKVDAK5aJL5LPvlUU1/GA2+/jdGR9r7iMukZ38Tk28u+Gi72EEvYcH2aCvbOWOyj/rbo494r0ZTn83YmUvHY/Wr4uCw+GvRAsNYmCtrooPOnw6Ofh6/tmVPkQRL58hm4hedWzuu6IK9v2FoTrIonBBZd53sDlumB0HpidcbhNg9ad6VtTXmBsv6tW5guGJj6Hl4hH5kYgDFwQ7Q== Received: from BN9PR03CA0597.namprd03.prod.outlook.com (2603:10b6:408:10d::32) by CH1PPFF9270C127.namprd12.prod.outlook.com (2603:10b6:61f:fc00::62b) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.35; Tue, 15 Apr 2025 12:12:47 +0000 Received: from BL02EPF0001A0FA.namprd03.prod.outlook.com (2603:10b6:408:10d:cafe::d0) by BN9PR03CA0597.outlook.office365.com (2603:10b6:408:10d::32) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.35 via Frontend Transport; Tue, 15 Apr 2025 12:12:47 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BL02EPF0001A0FA.mail.protection.outlook.com (10.167.242.101) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Tue, 15 Apr 2025 12:12:47 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 15 Apr 2025 05:12:33 -0700 Received: from shredder.lan (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 15 Apr 2025 05:12:30 -0700 From: Ido Schimmel To: CC: , , , , , , , , Ido Schimmel Subject: [PATCH net-next 09/15] vxlan: Convert FDB garbage collection to RCU Date: Tue, 15 Apr 2025 15:11:37 +0300 Message-ID: <20250415121143.345227-10-idosch@nvidia.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250415121143.345227-1-idosch@nvidia.com> References: <20250415121143.345227-1-idosch@nvidia.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A0FA:EE_|CH1PPFF9270C127:EE_ X-MS-Office365-Filtering-Correlation-Id: 434a2842-76cb-480c-9c9f-08dd7c16d5e5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|36860700013|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: fxFGK6fh9AtHa8S+KKQW1usKLf1hn0lSsCD1rJtYfKKgL6LzFtjiD3Ik0uly5F667FwfE54DW3g8NolPqNv8yl6zS5X4Hu/Wdw9dqtO2ZJF0qIoxYuNslQb7uSgQJjCYSRvW73RNe+CFNUdIy+WdT8aePEot86dvIUxAnBeYjGW5QiZ1hxxu2CONMAGLX2Unb0o3sKHu53usfblkhfrE4tsVX10yWqQW2OsKWzOVaTvLnblzoCg2jT7+yXrW61cgsjt4T/5k4ALdNSf6vc0BJ9TCFEMJlGfwRQK2Z12q/x6R1R6J5X2tivTX4Mc9ogWJtO/pST8zMladziOyaMfaGwNKRxAZi2jjOTW4aun7hr/PIuVOM3+lkSIDYG9UDiQbTazFN5dVeWoB6G1OSA8EYQvrIRXLXFv+09NaH2rMosG7vEAGJlMcFeZ27XgE/MYtpOZb65n3Cvqwyumj/JYiD3cxA0Nnf+ZdLZ4Sl24YAlcul5KwF4Nw4igaIn2H5dpsLqM2eSSsZvmhR4n1Io3DxBdjEP7aW2JmV+AKiE/ZrbcFsU2/tlmyEebsvp2JAaGAAL5cj41/928wct5VK3r+XGezkRPgDSrUvzMFxT8sUek3fO+g2KwUJ4Q4tNHlDH6SgnSdu33B6+yy1w36SHvQpEzkJ1hIeyEaPMX9GxS62nplNX6w9IU2KHEJxbZMDaE9f5GTcG2lEkzH4w8NtwAXAiMegIrDDq32Mlh8ifDFeQLnO8JvTlsmfs94SVl2sWWowFEiFLafCd/nxVpemjVeSwf+zZ3eMMAgebKwYXPHoWV2zup4hEze3aiTCyZNXTgXt7oQ/aFaFUITWRIzQBjy/j1xIAseyHuYJDhi4d4t0QchCTdVUA1/e30I42K0aKF9lGQx+xAbvNTX477Oy9iYqxzHCBsIFL4zZ4iHOhu0WKw5A+fuOqjeKMWl3VV2bJKjaV47zZCX7vnd++bXLkuyvCPlCVeR8GwabDktmh8L5+8ObT8huetsSNP/K4wrAV+h/i7gYfycEXubKTnaxZvAXr1rPLWHVm6jE75fddXkNGfvbQQnA8aVgxBWvELZBNe1R1j84gy7ubg47EqMVgaasIFlZHi4iw0oo/AluBu4f0+dnsnxYdEXSutzwGKQiQH1+CtfYSgaEidXBW+5gJZgAXlY/TK1hVYlaGmMQeKtNK9UYM9ZewtlQfe79Ob3P+lPyVjBTH4/MR8x7N9hsS4MmzPnyvUmHechkZ4WQUn+7rpPL+yyLjoLxXP5FXZkiIS5udww4dwj5LltQr6y607ymBm2pzYfwjiox3OvwSRvlzZV8O3WEvs7MUeIMixBcAukELrUTmbFBMmOq+8yl9bUrnz+OVIDP2JEsTST9biz3lJFPOdRGpNMRvE5aO0hDOn+ehesc5QiOfyto5SoVRtjX3EYNBTfdSrGV/9qgaaWGwObUNyrDFJkHAM7XABUagiQGdjScSXhDp69JmL77cNhuWocy/zQUao4dNvjIdtXdBSikW+GWgjnEOOYit91jmsV X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(36860700013)(1800799024)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2025 12:12:47.4791 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 434a2842-76cb-480c-9c9f-08dd7c16d5e5 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A0FA.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PPFF9270C127 X-Patchwork-Delegate: kuba@kernel.org Instead of holding the FDB hash lock when traversing the FDB linked list during garbage collection, use RCU and only acquire the lock for entries that need to be removed (aged out). Avoid races by using hlist_unhashed() to check that the entry has not been removed from the list by another thread. Note that vxlan_fdb_destroy() uses hlist_del_init_rcu() to remove an entry from the list which should cause list_unhashed() to return true. Reviewed-by: Petr Machata Signed-off-by: Ido Schimmel --- drivers/net/vxlan/vxlan_core.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c index f9840a4b6e44..c3511a43ce99 100644 --- a/drivers/net/vxlan/vxlan_core.c +++ b/drivers/net/vxlan/vxlan_core.c @@ -2819,14 +2819,13 @@ static void vxlan_cleanup(struct timer_list *t) { struct vxlan_dev *vxlan = from_timer(vxlan, t, age_timer); unsigned long next_timer = jiffies + FDB_AGE_INTERVAL; - struct hlist_node *n; struct vxlan_fdb *f; if (!netif_running(vxlan->dev)) return; - spin_lock(&vxlan->hash_lock); - hlist_for_each_entry_safe(f, n, &vxlan->fdb_list, fdb_node) { + rcu_read_lock(); + hlist_for_each_entry_rcu(f, &vxlan->fdb_list, fdb_node) { unsigned long timeout; if (f->state & (NUD_PERMANENT | NUD_NOARP)) @@ -2837,15 +2836,19 @@ static void vxlan_cleanup(struct timer_list *t) timeout = READ_ONCE(f->updated) + vxlan->cfg.age_interval * HZ; if (time_before_eq(timeout, jiffies)) { - netdev_dbg(vxlan->dev, "garbage collect %pM\n", - f->eth_addr); - f->state = NUD_STALE; - vxlan_fdb_destroy(vxlan, f, true, true); + spin_lock(&vxlan->hash_lock); + if (!hlist_unhashed(&f->fdb_node)) { + netdev_dbg(vxlan->dev, "garbage collect %pM\n", + f->eth_addr); + f->state = NUD_STALE; + vxlan_fdb_destroy(vxlan, f, true, true); + } + spin_unlock(&vxlan->hash_lock); } else if (time_before(timeout, next_timer)) { next_timer = timeout; } } - spin_unlock(&vxlan->hash_lock); + rcu_read_unlock(); mod_timer(&vxlan->age_timer, next_timer); } From patchwork Tue Apr 15 12:11:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 14052140 X-Patchwork-Delegate: kuba@kernel.org Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2065.outbound.protection.outlook.com [40.107.243.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1D8F52951DD for ; Tue, 15 Apr 2025 12:12:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.243.65 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719174; cv=fail; b=E3Ik5JC4xwSxujh4lC/HRx4fstp/gBfenTU/WPwOCf2VaG94KM6RxpSbGnTZJpjauQUU9BMkGd3BTt7qJoGGksZgXd9/PnjCMshU3s6iZoLzjPrx/Lg9yFj9Vlu9u6DD9krDm359/Fm/mJpQq6z7gXioRRhQvoYJ0RnO/4+H7f8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719174; c=relaxed/simple; bh=k/WKYAzyzt1NWxbh41LTAo96wCuIVtXCOBFDkU7ENLU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=XGgy1AYz2KMy2H9gFytn9+Mkef/N2DYWEYTpLdPaWIhu+0enXJei/VXo4lyk/v43rAG9MN2YF99muSMtahAdCSW1qqo85vveK0fGrxoWTYyEMD+bDaZ9w1oi6qc5hsNTzkzEk4GnweyqlGatnSnpfto50XeTJYLQsp7v9WqzeGQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=c90rL0B2; arc=fail smtp.client-ip=40.107.243.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="c90rL0B2" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PbBbtkmSalwcAtSbyVEQ/tP0KgYOMKKS+1ZN3YxqkbCEsgKoOWAlfIEc8JOAMCD+ZbqwGOvyABBpLHFSnkahtJ6zn2KFghUcEXW4E772YVFWFP2YyiuaLUGXqH29MBcy9xv0Ey7v+yhAlvXiz5j/bE5FPYopwNBouR0mf5kNbNlU4qhX5Gn9zTSFjoIgZLVY3giKOvDTW9F5kT5cDFvay1pQkwnDL7KH683FpoY3HmbJrmxt9X+cMwrkZcs+VSQlnY02feYHUHpnudEMG2IrcLocyGEL+P1HkHhrH2GezeRc7TM1DV1fkuOhsEV7F6aWCj3doURqQ2Gct6jUBGsnjw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=f7KqHwUrXG6sQh4+PccvrFNn5GkLGJSNLo6CTJL0kSQ=; b=GWEbkD0GdfP01Vl+6KATj+dYHm45+/LY4MwDfAV75qDPl7SBJbasdBSi6EeYf0NEYzm0bdnDRJ/qU6HG4zbUU5TBKjbOnFVyXXg+ssIWqDWTyg9+0SgU7DMRlUtzsXGPHX5nDmfV2OMBlsqgZ7n55e17GMNp1J9Klsp8fkB4WKmjOPxPCztdSQjUxckjjsNCistOm6z2mL9VIMGbQBgbShXMxIvXCEZSS5q9byUDGdjrRIHjGu+Qk7PYeuVtQPtWFwQcGrQx3KilQ5q44BLNUWDvf9qNJHl/rhgEDmOls1+FCjDDX2D/AOlJSoh9+XwtLbXQZzOEIDlrNETvgpL/NQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=f7KqHwUrXG6sQh4+PccvrFNn5GkLGJSNLo6CTJL0kSQ=; b=c90rL0B2JSZVyGRDq40BPu5OsGAHdotzCMmlHJ/VLtd3VL9QgVuznoXI/rAbNXJBR6VM+wT6z5JFMsGFsK3KoL2b0MoXoY9Fpi4f7tP/VgPb3Q/bEV5+cENRxNl9FxoyrpTHv8ZY85gyrbDxSR/vwR5jYFmCFMVOxXWbabmX0hm9hoqnvND8sq0v6FAWtQTtnCHx5i4b8wH3xTLRCGhnoatE3U59pqkvomKUEhamQKf6/lohgwTYZwgebkRhVw89WDQEilIho0pG1lDMWIIZaBbbWb5psTKI0HpzG2mN8n5pgvSDrXem9wpyf5NZYm1FzRCxamz0yZCsAMw0HtMlMw== Received: from PH8PR07CA0011.namprd07.prod.outlook.com (2603:10b6:510:2cd::19) by BL4PR12MB9479.namprd12.prod.outlook.com (2603:10b6:208:58e::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.33; Tue, 15 Apr 2025 12:12:46 +0000 Received: from CY4PEPF0000EDD2.namprd03.prod.outlook.com (2603:10b6:510:2cd:cafe::b2) by PH8PR07CA0011.outlook.office365.com (2603:10b6:510:2cd::19) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8655.15 via Frontend Transport; Tue, 15 Apr 2025 12:12:46 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by CY4PEPF0000EDD2.mail.protection.outlook.com (10.167.241.198) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Tue, 15 Apr 2025 12:12:46 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 15 Apr 2025 05:12:36 -0700 Received: from shredder.lan (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 15 Apr 2025 05:12:33 -0700 From: Ido Schimmel To: CC: , , , , , , , , Ido Schimmel Subject: [PATCH net-next 10/15] vxlan: Convert FDB flushing to RCU Date: Tue, 15 Apr 2025 15:11:38 +0300 Message-ID: <20250415121143.345227-11-idosch@nvidia.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250415121143.345227-1-idosch@nvidia.com> References: <20250415121143.345227-1-idosch@nvidia.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EDD2:EE_|BL4PR12MB9479:EE_ X-MS-Office365-Filtering-Correlation-Id: c9a5699e-2633-40bd-4fff-08dd7c16d548 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|36860700013|376014|1800799024; X-Microsoft-Antispam-Message-Info: mejQ3IMRYLo6JufUgrrgwu1Rw+WsFJagzDJR+KQIFnUjUawktBd34BmiLorccTjyAIJNzDuABNRNJ3KniQ41yxqyHgL1gCisGJGZ/0NDQyXj1cvFM3Bec2haCSKAYZ7SyWKbtKW9SbqvJgLb1mXpuxFBjxF3tn3Kuqo0kWW9k3n1NWcl/sD3J/jfmsXp75WJNMoqCQhnBV1Kq8TZeGJo8Qkzux7DKulO00aRKqsh8bE2Q0hXreh1TCnEXCUJYC06gxGhpiKDAVGnFqYBO2Ij7sTyYqyaxV+5hk+hmoUhJkUkBLWu5voyTCYQV3921vtvS0YgXBRHCNSP26mOoZ5ZMDRp5S3qFkW9VNsc448AhxgkNxV+ZeygwnuVygmi0+f7UN9wBmQxB1ScuQcusHktnHubWv6xm81CGfgurW1TGGL5zVtj1r/4bU2WAkigEgt4TbX7tJn+4xKRSOXRL8X17IE300PvqD9ez/hvkl8yXFRiCJljifaGZ9CzKKcyO/Mv1iuomZ049SIqaF5E7Hj+2qDKy+y81DWnET9cr/PLtUbWCHOy3dG62OBS6cjTVJ+LrcgQUtbcuvjrXUTy2ZYjV5MenNIqN6dc8w4vwSfropNZOp1xiABNTOMeX9e0QQ8yNrUt0ptd9/fasF32rz/jctQZLCBxOLgIoGTkgCbVtUFhBbjaOy+Tg98qpOXx9rx7h9gpTeMm8SKHZDi2CXDb7gKdceb1i7zdKDFvgpReLTsXgG7GYher7/JCRMJC7s34bbtewarp0uOpsLyp7ibg1NUXiVpnhnFUxB4SM7ZkY7w1Fqr6BY5o4shDVhmp+O3zIGUjyS3pzqKDLKor81T0fA9foMqBRvyy7c3ePKSq1B2cnZ8OPKltsQ+8Lm+U4YxN+/nqUvtXDT80JZuzoqIq9WWWAVyEUy0UlXibv+Qyy0gloh2A3HSS8cTEJ1fnaenmQcRcZ5C2gi0cqqc/ugH6Apdb309wTlJPn4tZaZ8OzJIBPCPo9M5NlLVGSWHhkxq1rh8o+SrRyTSTEihDxh+4xTG9529WJnHujJQJ46+CVj1zCNsoq40/fd4/cBcdzePHERnodBCiqbEwI068k5B3hpZUaxqYcdEMGZYNeIwAYiU/iCLBTVtBtOZBUfDu0tqi5xRhuVHRftAPeXn23MNTq+JK0pr7z5s7FKV3qdk0qc8hSflCbLpZfNuF0QJnIW49cc82svBfpAIZJ8Bb9q63o4YBR+s9RYHF4c4jCCoBaj0TBztE8pl+v0LHb7MkGUwTz6wWxKF/u3tYS9+VnwtlM2sSG20MAhdoeJ87lVZtwk9rkXrDAGNu0HSDZRg1Lfu7dNi4fljHMZ2bId9y0zzhdeM4QerxxqYk852ghPjxUAMFcIZAVSrdkgnVEP9QGKnqX4vx86IiReQVjsoaTEzCYdbD1xvSHYAAvA8bkRvikwEg3aWOQqoVBudsW7h3wULTmQ2guBC1kDIjrFLdMxsg8ZT7+0QdPKt1OCAKcm2BQktK3/QJ/ZAwAhmUIPwy/8Z+ X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(82310400026)(36860700013)(376014)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2025 12:12:46.4951 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c9a5699e-2633-40bd-4fff-08dd7c16d548 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000EDD2.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL4PR12MB9479 X-Patchwork-Delegate: kuba@kernel.org Instead of holding the FDB hash lock when traversing the FDB linked list during flushing, use RCU and only acquire the lock for entries that need to be flushed. Reviewed-by: Petr Machata Signed-off-by: Ido Schimmel --- drivers/net/vxlan/vxlan_core.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c index c3511a43ce99..762dde70d9e9 100644 --- a/drivers/net/vxlan/vxlan_core.c +++ b/drivers/net/vxlan/vxlan_core.c @@ -3037,14 +3037,17 @@ static void vxlan_flush(struct vxlan_dev *vxlan, const struct vxlan_fdb_flush_desc *desc) { bool match_remotes = vxlan_fdb_flush_should_match_remotes(desc); - struct hlist_node *n; struct vxlan_fdb *f; - spin_lock_bh(&vxlan->hash_lock); - hlist_for_each_entry_safe(f, n, &vxlan->fdb_list, fdb_node) { + rcu_read_lock(); + hlist_for_each_entry_rcu(f, &vxlan->fdb_list, fdb_node) { if (!vxlan_fdb_flush_matches(f, vxlan, desc)) continue; + spin_lock_bh(&vxlan->hash_lock); + if (hlist_unhashed(&f->fdb_node)) + goto unlock; + if (match_remotes) { bool destroy_fdb = false; @@ -3052,12 +3055,14 @@ static void vxlan_flush(struct vxlan_dev *vxlan, &destroy_fdb); if (!destroy_fdb) - continue; + goto unlock; } vxlan_fdb_destroy(vxlan, f, true, true); +unlock: + spin_unlock_bh(&vxlan->hash_lock); } - spin_unlock_bh(&vxlan->hash_lock); + rcu_read_unlock(); } static const struct nla_policy vxlan_del_bulk_policy[NDA_MAX + 1] = { From patchwork Tue Apr 15 12:11:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 14052141 X-Patchwork-Delegate: kuba@kernel.org Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2051.outbound.protection.outlook.com [40.107.223.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 69F97296D1B for ; Tue, 15 Apr 2025 12:12:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.223.51 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719177; cv=fail; b=TUbaPGOcVeQlQq7WoaGYSyM3fpdxfR0PL/xBbaHX8O36W9HA0pJpyy94B7EjEHQUFLLujIy8b1xsCG+ykeLOKvl7OtVgBhhoGbSGO7yuBpA/PhFXbkCY6nTqrPxb7RCRQ4AD+GkeYf2Lmkd+BhiNZVkXuJ0dmmat0plXGmRDU1E= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719177; c=relaxed/simple; bh=H8pUvc3UYWPalr6n+UJDAjUh+Ex7cRBNXAjupW5xWtw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=UQVI+SP3BZGdPvId6DtV9O9QB4AKEvMdyC40bRZcYh4RjFeM6HEIEwxtTqeBWdrhZRCQRWp1VbJyS6OQerdOkVLVFLRSpwabAswS2Ot/LFp2bQvWJ94HL3SBO9NAc66KxOO9myU+3SyxzKx2eLqMIMS06EEqmjzC53uQxfayXc4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=Nmqfr9yl; arc=fail smtp.client-ip=40.107.223.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="Nmqfr9yl" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jZz+yt1Q2DGv+zUZ899KQoHPrPeZOoHI1YpIXmpu+YxYUDrWDuEn/uFVyMgD2wjyt3cbZthbucHjNgRapPOqhE+HC9GV9/WUpEOHdT3asTvitbnEL0ySUAk1OFqzBq1Nb65+WwPOFdhffEJARq4MLSViLUmUrJKIVZBVehFvxTu2Hsbc1jCLGxsSNtl/7dFefp9vsHja5X5/ivn/cWoCskLmp7XpDKC3Hqc/H6QFIhkjDiw9YDcV+Zy7lEMAPu+jmfGwVQ+ky0gQ4EumtdhPEJKP02xSJMc7aEbh+hTtZgDexv27O/T50RugG9SE+YsuKEsf2dcCyM71qMamcxTBow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=L5i/o2B3fJKM6mvWB7FWoRNEDV86SscQiTg3d5mJPGg=; b=IYRWr+EAAFt3VwdQoUWi/S0vDK81G6FgkOxwu7gLuQhMHfi3qW2SZDG8rMi/QI0y/mTAqWY8rDWXTNmq3uKPVjulBvSVg3sU/GLZIvPC7M7nPsHRqO3ynENmPkGPU9Hq6nNHIVThODonYxuUO2kZmz9FDy2eByho9Y64XK/1ms3JYGcUXg2E8W4xsJlibI1erc6/F5fzofBiJfVgClMQaxaAkYjWWSqf3ALLCDffRee3qDnjRLdKaGeh0SMEdJXvTIISxn7zktn5mKhV1QDBKBp76E6nEdAW8mVUkF1g9UWhLkEmT5RpGD48Y811dpk3B5/25NktGBlra+JKJx88JA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=L5i/o2B3fJKM6mvWB7FWoRNEDV86SscQiTg3d5mJPGg=; b=Nmqfr9ylfO/BkXswj8sg/eUOcte3q2Vt/Qn26iuY/IexR1v1hNZO4rIXCV6gyCSl8QxSJ746wbMWGSMpA278fZQZ+QGlT2zGv5e6z6ipdug7RkvVM/zPtxvm38++Z75Iv23MqXA/Bqy8pyi8P97VnB3tVP+5x7BcFhD07zV5mV/voQ/Q8mXeGzuI4V8+dPagnB28iFf9at14GZFJh07jXVWuUV4F81ZwgTbtzF5AQIcBBJrk+WdNG7eiZu4GUMHQQNtlEm4UYAL5WnWOKUPJ0Ca+1o+MRQXNzXBnW//elc6L/RufN8DklwAPdiwfGdItXwedlVpDs3PVcEdkaPdMfQ== Received: from PH8PR07CA0004.namprd07.prod.outlook.com (2603:10b6:510:2cd::13) by SJ0PR12MB5676.namprd12.prod.outlook.com (2603:10b6:a03:42e::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.34; Tue, 15 Apr 2025 12:12:50 +0000 Received: from CY4PEPF0000EDD2.namprd03.prod.outlook.com (2603:10b6:510:2cd:cafe::52) by PH8PR07CA0004.outlook.office365.com (2603:10b6:510:2cd::13) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8655.15 via Frontend Transport; Tue, 15 Apr 2025 12:12:49 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by CY4PEPF0000EDD2.mail.protection.outlook.com (10.167.241.198) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Tue, 15 Apr 2025 12:12:49 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 15 Apr 2025 05:12:40 -0700 Received: from shredder.lan (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 15 Apr 2025 05:12:36 -0700 From: Ido Schimmel To: CC: , , , , , , , , Ido Schimmel Subject: [PATCH net-next 11/15] vxlan: Rename FDB Tx lookup function Date: Tue, 15 Apr 2025 15:11:39 +0300 Message-ID: <20250415121143.345227-12-idosch@nvidia.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250415121143.345227-1-idosch@nvidia.com> References: <20250415121143.345227-1-idosch@nvidia.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EDD2:EE_|SJ0PR12MB5676:EE_ X-MS-Office365-Filtering-Correlation-Id: 281b7bcd-fb63-4f09-fcf2-08dd7c16d73c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: JjhuSiwAVr66L/BD0WsaMZImonIJHDPBBL6IelJjleKAjUkmsfECE7/bCaPxoo11IN+tp89TsaChTNvlKs+RFHRIQce1wr0cSqI3hgkPUW/P38wlIqfpYeqQXPFuuPyYQVU/rwuh9j3w9Xm7iEOnaPyPsDEGJYGWRKiHiqKMZkbq9G8POEeNYacFaLAEh47PaKwvjQHvtw7jii/w+Rw8VDgcIPE+QhqqkWVGFyo7EQ7ykJORBtr7QvdiyRZyg1G2LHiJhKdvVJy1NawedRw0S/b3eXCi7qCuunCprfsntDLC1JtAZBxBTVY+3Yk6kXGDVZ1jOJmLSQODqp7XQooXl7l7Q0Rp5Wpx0GGqawbvskW+oRQDldLuxcjC8eqpW1sGxbcVvlTQqBecla3N6onpekWU0huen+9rSLdMgFdMpRCGZ7XY7+dRd+xaPpUBVksQ28zmOf9+eIFN0qerZ/ugf+CNehh2x+YZYEUFjCVP3PVk/UT11dI1aqX9phOpZu+43IGH22T8yZf3CRzu15o5Y7C1iQmg6NmO9tAoV0/ls7ujvJWn15IGq+DQsbxQ0YTZXSWsB0xWT2lXXSt6A+zaFxJbeZxhVq10gQkoGiBXiDAK4ZrDUsdA5LfwOTUBnAh/ar0f5VSdfdV5avq9PTCxM5uzEvLq98xaLEa5uWkMsmtTYyq1JVTqjUu/haiSzkGbWmwZHiP8tte5RDwgPGqv6ApLh7gjcgdbGS33pSOef9dNHmGiXLTGP8II9VK49RzTiz0Eemzglt85z17jzXibv0p9Y5maUkN3RIWjopk5DCnbjlqRJkWq+2NUN+DmM3wV3Ifh6+2Uh0FE81yOzNvLyEsTbwopYlOD0Cp/s6l3x5UbOrIa1R+jux/MC0GEAGAa1j/44u4H0QZvbMtEUFX57NLSUGP0Mc88Swu1NtFaNovDdB+/P2VL6T4INDn0r3kaaveVDNGFDsTnhXXntO28aAcC+8SRXCmmPgxLMoslOlfuAxtB8qhT92lk3R1TuOx7SBlH938D8H/AqKp/mdoJt7T/WzhiHhK1ufzUPZUFxrxdJZUofoLRUfgw9DlluIosRpHj9rkAiwHTAUMRDdp1eTyD7XPx7HYkomZe8F00I9eZ8xGZIHIWR/V89MlpCqcaZMvRjCpWbJerj98foTPzZIZsXYC0QsIaZPmgm3j9nVCmJ0Aqqi+GQkbVWThk8EXOfqgcM1U0qe2BnSbD56zd7SVlwWJAU6d2Th7lL9TuH/EklQpU1i7OmYewYPe42QuoNbU6Ic1hUP3kaAkxqaejPt2ebFODOlDs2D7zC6G7CIz90fOGNV+mn5Z09Iod7hb80Ynlb+vsxSkFOMCc61SD6BZRqrLce90gyBDFdZQDkTnEJFOO1SXkLKlTkkSiSfizBzjhaZMSckjqCG1oZHmR8BimzDrzyTEK7nWsBFQylaqpMIziACyPYaH1G1yZuJ8gQ0S+sDG6eICgcVwbuPjtqGK8kdca2u41g9Jr4MgNz5JCfX2hiEwLW2aU5tVomXXH X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(1800799024)(376014)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2025 12:12:49.7920 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 281b7bcd-fb63-4f09-fcf2-08dd7c16d73c X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000EDD2.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB5676 X-Patchwork-Delegate: kuba@kernel.org vxlan_find_mac() is only expected to be called from the Tx path as it updates the 'used' timestamp. Rename it to vxlan_find_mac_tx() to reflect that and to avoid incorrect updates of this timestamp like those addressed by commit 9722f834fe9a ("vxlan: Avoid unnecessary updates to FDB 'used' time"). No functional changes intended. Reviewed-by: Petr Machata Signed-off-by: Ido Schimmel --- drivers/net/vxlan/vxlan_core.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c index 762dde70d9e9..397b1691ab06 100644 --- a/drivers/net/vxlan/vxlan_core.c +++ b/drivers/net/vxlan/vxlan_core.c @@ -429,8 +429,8 @@ static struct vxlan_fdb *__vxlan_find_mac(struct vxlan_dev *vxlan, return NULL; } -static struct vxlan_fdb *vxlan_find_mac(struct vxlan_dev *vxlan, - const u8 *mac, __be32 vni) +static struct vxlan_fdb *vxlan_find_mac_tx(struct vxlan_dev *vxlan, + const u8 *mac, __be32 vni) { struct vxlan_fdb *f; @@ -1897,7 +1897,7 @@ static int arp_reduce(struct net_device *dev, struct sk_buff *skb, __be32 vni) } rcu_read_lock(); - f = vxlan_find_mac(vxlan, n->ha, vni); + f = vxlan_find_mac_tx(vxlan, n->ha, vni); if (f && vxlan_addr_any(&(first_remote_rcu(f)->remote_ip))) { /* bridge-local neighbor */ neigh_release(n); @@ -2063,7 +2063,7 @@ static int neigh_reduce(struct net_device *dev, struct sk_buff *skb, __be32 vni) goto out; } - f = vxlan_find_mac(vxlan, n->ha, vni); + f = vxlan_find_mac_tx(vxlan, n->ha, vni); if (f && vxlan_addr_any(&(first_remote_rcu(f)->remote_ip))) { /* bridge-local neighbor */ neigh_release(n); @@ -2762,7 +2762,7 @@ static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev) eth = eth_hdr(skb); rcu_read_lock(); - f = vxlan_find_mac(vxlan, eth->h_dest, vni); + f = vxlan_find_mac_tx(vxlan, eth->h_dest, vni); did_rsc = false; if (f && (f->flags & NTF_ROUTER) && (vxlan->cfg.flags & VXLAN_F_RSC) && @@ -2770,11 +2770,11 @@ static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev) ntohs(eth->h_proto) == ETH_P_IPV6)) { did_rsc = route_shortcircuit(dev, skb); if (did_rsc) - f = vxlan_find_mac(vxlan, eth->h_dest, vni); + f = vxlan_find_mac_tx(vxlan, eth->h_dest, vni); } if (f == NULL) { - f = vxlan_find_mac(vxlan, all_zeros_mac, vni); + f = vxlan_find_mac_tx(vxlan, all_zeros_mac, vni); if (f == NULL) { if ((vxlan->cfg.flags & VXLAN_F_L2MISS) && !is_multicast_ether_addr(eth->h_dest)) From patchwork Tue Apr 15 12:11:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 14052142 X-Patchwork-Delegate: kuba@kernel.org Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2064.outbound.protection.outlook.com [40.107.93.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A4B2C2949F8 for ; Tue, 15 Apr 2025 12:12:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.93.64 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719179; cv=fail; b=slmJN3LO7Uscwwi7kdkn1mlhCZCq7nu5tcpkhJVpkyufIbkJG87ivRREUotzYPwMolUNhpTT7Tce67R7pcpom9po5hp0WH3IxLmeos7qOWkZw7cFF+M/NB4/0QVNo45VceLe+LiLozLww0aiohJqUzH4ZHZdFtGxvGPQv5DqrV8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719179; c=relaxed/simple; bh=Qz9uSWQ0oPoAJoqAT1n2RGxEmYphWobEdhkrDApl8uM=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=UbmEcGoIybae/kfdb7I9Wg3H/56SldJu2uwRboDNH4S29eqByYymzNena+hm67d66DFbg2JuDlzETOBK2Wx03oD8K1kn7GYlBxCliHKSzXEz6GpcJMpReyBGHR6GUy0Yas+fsMCC0FLXVt26eUTfN2lEPz9LHKT8q3PMBVNjDZU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=hkp65WNK; arc=fail smtp.client-ip=40.107.93.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="hkp65WNK" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LAPeD+gqn5H65IVbco8Z6inRineSYw4+NgDRK22k3VktTn8TBlNo4OPoAkMgEyLABygsiUdcHc8k4w4kRv37QSAs+Zip0MemC7edzSd9tv5/vb9oD9wD7cFHdUBHMY8eKq5j2HgcgDae54kyPXHWNRoiJTFBHQyspFZ7t6B7qwzwDMxLhXoJEu3RD5D84Xn9TPz1IBmdOLroOXSmX5KNI5DSb7a/sfyVvhl+6zbxHhST2ms2n0AHd3NttZLSVfHhP0HLKN8KsugUCJgU6EarfjaA/r+ocAMZyxTJm9vFtMWpKr/4Sgu++r+Oi2nojzj5EWdmNEQIPCroqcgPXsArMA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=emjXgq01wcIPHoof2pbP5u9W5cFoL1DqycRexAB/X0k=; b=CtF1BeWIkQo4GQvRKfnR97ojy9OGuTe4OwAnKH+C99cUeCpiLfSJGYqdsp+MHG6/X84jDDW0fLdeFN99yy8NqIF2NNdl+Il9DeEJJxpm7tIxf38s/t2K0FQFmvabDFkwEPBdvYfze5EbyrE1+wT51cw6a1BuHR2HgpRdfGusPRvxbtknzCPo1v+c/poZHQK1y5JOB8hBL4JbM+mIKlErXHs9usocyevB53PjY1Apqo4sQKmZQOOgSoqKBAoFytdcsvmeYW2vu56/IVx9cGVsidqP5xqLXR/CJCvD7cHBkWBrYRVFq2oL7iFo+uf4m69v7Pwp33RM+oP1NvPsQcxLrw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=emjXgq01wcIPHoof2pbP5u9W5cFoL1DqycRexAB/X0k=; b=hkp65WNK25Eh9MtY49N53oHtw0STazFg7pTjVBoUFMCvxrXwAaaU6Li8NEYni1hSELn52uZAS66X2DFdcJLeVEFm0vuJK/jm9NsSpVmAwRMDU6Uq2ksKHHeMs3fCk+k9GeJ1PDZz13C+sIz9vvMtktlXQNeJBemIpvSsJsl83x4cdvxUueEEmg5hCYUkbNDJNy7of8AAObYrutMwBG7k9iO+am+d6KTUq1hBY+lsjkuz3ud4jr6oYJRnjGOSu6DqgqXT3n4QEvzkFMfjpxNDXZAKhgNzU3lWbbr9eBtKKDEXdmdfML8MDyGWt4UVXWD3OkT8SYrb7V3sHA2D0sg5gA== Received: from PH8PR07CA0011.namprd07.prod.outlook.com (2603:10b6:510:2cd::19) by MN2PR12MB4389.namprd12.prod.outlook.com (2603:10b6:208:262::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.32; Tue, 15 Apr 2025 12:12:53 +0000 Received: from CY4PEPF0000EDD2.namprd03.prod.outlook.com (2603:10b6:510:2cd:cafe::49) by PH8PR07CA0011.outlook.office365.com (2603:10b6:510:2cd::19) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8655.15 via Frontend Transport; Tue, 15 Apr 2025 12:12:52 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by CY4PEPF0000EDD2.mail.protection.outlook.com (10.167.241.198) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Tue, 15 Apr 2025 12:12:52 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 15 Apr 2025 05:12:43 -0700 Received: from shredder.lan (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 15 Apr 2025 05:12:40 -0700 From: Ido Schimmel To: CC: , , , , , , , , Ido Schimmel Subject: [PATCH net-next 12/15] vxlan: Create wrappers for FDB lookup Date: Tue, 15 Apr 2025 15:11:40 +0300 Message-ID: <20250415121143.345227-13-idosch@nvidia.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250415121143.345227-1-idosch@nvidia.com> References: <20250415121143.345227-1-idosch@nvidia.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EDD2:EE_|MN2PR12MB4389:EE_ X-MS-Office365-Filtering-Correlation-Id: ebf04395-f939-4e82-9a33-08dd7c16d8e0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|36860700013|1800799024|376014; X-Microsoft-Antispam-Message-Info: NlfGswJBio/FeqmPRj8ukV46DkV5dGcoSGOHG6E/5+7nPHCwPh5db9Ai4XA6xiJ8/8YETNxcqOQ+1tAyO9SijbOmqtIH9BTfi3ccNnRaB/oC2VgXVl+mD0vqPS9njklZZDuFPvJzVtO+6v8mP3YUpKsdD0Z8dkFbrJR9LdVPgw8R442BzQ98IO/PrT75NXKnvdVvHdjVl1bDdD7zM+WDhkkw8AWWsdS7ysSI9uTiArLOwpOs21+k6isFHQecDrBDDccjfJ5STP/GRHclt0BbeaD8JEbA//h1QZuZG+e0mFz6KiLerY9ehejaYLF7c65YvTJJ5682ge5+kzkVmybG/YCk83LgZDDc9Kt0UvMlVtdga6n6n6rgNMYNADQMVen4DGN9lQ9j5BmXnyuHL95bFhEw69jievnwxBLZhmPZV8jlpBacA3UtOacVQOkJB+3tHabz5qPRcYBn2i4rC0hsyRRKYMinxNvLF9cA65Gb0Ky73/zH62sbgtqCYuXtDIUVwi8ylnox/4jBq7O0bdMq1z6oD25HpesVWOp75RWlc12wu9/gJA1G32yOmQuF6naFyIazu2rCo9I9BUXrq905wcyypScVm+/yBkQyafbblESLzB4km7wrLmK1w5vvRiqaAW4h0E/LgbEjZao5ZzBaZArUFP7CeprcU2HWwL3qUSAwqdFTlYWv9+/jzCTLXi3ryFUXb/eQZyGZNABYCgX3yG722CViL6NceXonXZeKkKaI5HHId007df/IaUhC8EcJvuS9WhT0LVl8se840y50bRsldE70AiC0W8IXGUrEj+XF/vPDq/Bav7a44GSWOBWAEd4IWPEqDQPpC1VVwDvgNwEu0xpP3p22CUoucSHEWi+gWIX7g3KPngUDD2brU6aUiFN3EOWzq/odGjPxSITVvD+MX0dvPmqvB/jcMP+j0NgmBU1w/Myn+orYlJCaBzU/2Y1UWKiSbhjn1teYd/F+5yHFFVkK1c24iCrSWbRjxlStY4GP/fHytLBmowqydOEjio5jVCC7T84xwzG/SWWulajkM0v9qqUFxGFA8uVHgS1K/hxkpC7/cWr0YnImhcsLj4skVpzEeehA2g0Y8TyRYx5yrKFO3zoDaFUfT+WBXRsaraM5YZ6sUfh9BWxde3v3tm20CQJWL9q3Ha4UJAzfLIBAESNwO7fL8i19COgQxQgtr5e/ECtSYr79qEC2tou4frfnYlRlAW7X1JYD/OVbIy8TbPJjnbE7j4Hr2fMXxct47bsbMCJBpfwOqlCkJwN+4OpuuZ3UBJdZNbIvbxghoy0mfJLXW7zyaKBRUk01Hzlg4Q5kKXVMjxPxy5PvGZYBsk6B5N4jQ5VzqcxygTb8vZWD95qlyoVKaZ7mVU+Dwi6R+ZZ43gbXBb/0YVUybPZjsap4UdUS4pM+6+d/RkcGaBslTQno6orkTppFZhZk9AyDNjJpE/vEmEzn/9gs3nRL873AEuL7HBnvsyAODn0KCoPzaaXnhB8MI21sFx9BM/tL9cTF6SqphKbOFcA/mXKZ X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(82310400026)(36860700013)(1800799024)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2025 12:12:52.5107 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ebf04395-f939-4e82-9a33-08dd7c16d8e0 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000EDD2.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4389 X-Patchwork-Delegate: kuba@kernel.org __vxlan_find_mac() is called from both the data path (e.g., during learning) and the control path (e.g., when replacing an entry). The function is missing lockdep annotations to make sure that the FDB hash lock is held during FDB updates. Rename __vxlan_find_mac() to vxlan_find_mac_rcu() to reflect the fact that it should be called from an RCU read-side critical section and call it from vxlan_find_mac() which checks that the FDB hash lock is held. Change callers to invoke the appropriate function. Reviewed-by: Petr Machata Signed-off-by: Ido Schimmel --- drivers/net/vxlan/vxlan_core.c | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c index 397b1691ab06..2846c8c5234e 100644 --- a/drivers/net/vxlan/vxlan_core.c +++ b/drivers/net/vxlan/vxlan_core.c @@ -409,8 +409,8 @@ static inline struct hlist_head *vxlan_fdb_head(struct vxlan_dev *vxlan, } /* Look up Ethernet address in forwarding table */ -static struct vxlan_fdb *__vxlan_find_mac(struct vxlan_dev *vxlan, - const u8 *mac, __be32 vni) +static struct vxlan_fdb *vxlan_find_mac_rcu(struct vxlan_dev *vxlan, + const u8 *mac, __be32 vni) { struct hlist_head *head = vxlan_fdb_head(vxlan, mac, vni); struct vxlan_fdb *f; @@ -434,7 +434,7 @@ static struct vxlan_fdb *vxlan_find_mac_tx(struct vxlan_dev *vxlan, { struct vxlan_fdb *f; - f = __vxlan_find_mac(vxlan, mac, vni); + f = vxlan_find_mac_rcu(vxlan, mac, vni); if (f) { unsigned long now = jiffies; @@ -445,6 +445,20 @@ static struct vxlan_fdb *vxlan_find_mac_tx(struct vxlan_dev *vxlan, return f; } +static struct vxlan_fdb *vxlan_find_mac(struct vxlan_dev *vxlan, + const u8 *mac, __be32 vni) +{ + struct vxlan_fdb *f; + + lockdep_assert_held_once(&vxlan->hash_lock); + + rcu_read_lock(); + f = vxlan_find_mac_rcu(vxlan, mac, vni); + rcu_read_unlock(); + + return f; +} + /* caller should hold vxlan->hash_lock */ static struct vxlan_rdst *vxlan_fdb_find_rdst(struct vxlan_fdb *f, union vxlan_addr *ip, __be16 port, @@ -480,7 +494,7 @@ int vxlan_fdb_find_uc(struct net_device *dev, const u8 *mac, __be32 vni, rcu_read_lock(); - f = __vxlan_find_mac(vxlan, eth_addr, vni); + f = vxlan_find_mac_rcu(vxlan, eth_addr, vni); if (!f) { rc = -ENOENT; goto out; @@ -1117,7 +1131,7 @@ int vxlan_fdb_update(struct vxlan_dev *vxlan, { struct vxlan_fdb *f; - f = __vxlan_find_mac(vxlan, mac, src_vni); + f = vxlan_find_mac(vxlan, mac, src_vni); if (f) { if (flags & NLM_F_EXCL) { netdev_dbg(vxlan->dev, @@ -1286,7 +1300,7 @@ int __vxlan_fdb_delete(struct vxlan_dev *vxlan, struct vxlan_fdb *f; int err = -ENOENT; - f = __vxlan_find_mac(vxlan, addr, src_vni); + f = vxlan_find_mac(vxlan, addr, src_vni); if (!f) return err; @@ -1409,7 +1423,7 @@ static int vxlan_fdb_get(struct sk_buff *skb, rcu_read_lock(); - f = __vxlan_find_mac(vxlan, addr, vni); + f = vxlan_find_mac_rcu(vxlan, addr, vni); if (!f) { NL_SET_ERR_MSG(extack, "Fdb entry not found"); err = -ENOENT; @@ -1445,7 +1459,7 @@ static enum skb_drop_reason vxlan_snoop(struct net_device *dev, ifindex = src_ifindex; #endif - f = __vxlan_find_mac(vxlan, src_mac, vni); + f = vxlan_find_mac_rcu(vxlan, src_mac, vni); if (likely(f)) { struct vxlan_rdst *rdst = first_remote_rcu(f); unsigned long now = jiffies; @@ -4727,7 +4741,7 @@ vxlan_fdb_offloaded_set(struct net_device *dev, spin_lock_bh(&vxlan->hash_lock); - f = __vxlan_find_mac(vxlan, fdb_info->eth_addr, fdb_info->vni); + f = vxlan_find_mac(vxlan, fdb_info->eth_addr, fdb_info->vni); if (!f) goto out; @@ -4779,7 +4793,7 @@ vxlan_fdb_external_learn_del(struct net_device *dev, spin_lock_bh(&vxlan->hash_lock); - f = __vxlan_find_mac(vxlan, fdb_info->eth_addr, fdb_info->vni); + f = vxlan_find_mac(vxlan, fdb_info->eth_addr, fdb_info->vni); if (!f) err = -ENOENT; else if (f->flags & NTF_EXT_LEARNED) From patchwork Tue Apr 15 12:11:41 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 14052143 X-Patchwork-Delegate: kuba@kernel.org Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2044.outbound.protection.outlook.com [40.107.92.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E15082951B7 for ; Tue, 15 Apr 2025 12:13:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.92.44 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719185; cv=fail; b=pSxOpw5FeYKbiBempUnenZRHXnk5ftfBrPSTrfBJ6rdjrt0l/hR1d96V68ry7nz34c9z1fBj6WuQt9neW5TW+WXJnE0s/9EQqkWkx6nJy16otBKYJXJPn1sWwLpwgzvb5rrXR7G5/slSgSdKgxVVk+mNQgyopVAqSg54XqgN9HY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719185; c=relaxed/simple; bh=EnyGdWfmkvCbM9HIiw52Ym3rW0FVhv6EJrw8DUtppXg=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tOQSoPyaQcjN/NywkBZUQjr5ZJ2bz2N//ZnDJ+0Usi019hpYBAT8RfAC+KVxOFPEvcZDZ5k6Kwidz8/eNrvXzFARsGyADVpPqxhhY1emVGcCAcXiGr4RiERM6eNvB2zHjkAsqK0JDfKHk8QKn3D4MtydS2XLbicwKFQUFvtH8OY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=HbVtkHHK; arc=fail smtp.client-ip=40.107.92.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="HbVtkHHK" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RYgiZxQ+WjB3yY+ORIeb8U90AsZwbf50b5QObUIFXRsRCVHbeiKvMy9rNfuoYOh4lHoaJQ1UYk9gAK+08bI7hYPWESER5Fbs/HUC2d/t/VXQgjPF/ramyXZPuCRhYj8l0jM1dPLWutq009bBmjheByLSP8LFqyB2IUt/kS5tgUB7pIcetrzTSnTV1FZSCse+hb6j1XTYseuuwqg4/uh2nKE7ksozgisyjN2SvYotBu2TWBVnVANpD79JiL4LHX1bTRqYUsrcefTCvd5mCXUU6hlAl4NYWsCoT7AuQj35+wmlhKy9MTusnmtCpEgkSpKZw6fV4OxWf2mr3O0NkPqqaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=3Cv695VCwDvwrZ81pUmYKSW2lCz++MiPA+PYD77yi+8=; b=n6rTDiuBZtN+mkU6u/lH5jwfGwQci9S/g+7kHyo57p3S1MRa7as2fDeyuhXdw/kVHwDzw7fM22TPA6wbWRBrTj2gy8tVAv04s9rxlED5NF+mVTiuBytOgn2NVqhNTpqE8e2nsGpwn5+6ZJFBDkrwAMjNSOBIxTRC7O7old2kRK8zndhCZB6bwqjE2aBr3bHeiltjiEdNSi/7esL4luoaaSq8tbcQkOTtmNhgXCk24N0wTMfbjNd03FKM3gtKZMKE9HdCqbt8vlKUvwEpgh1kmHBToy/MfzmMY1pL1dbCFJvaK6TW9C+nQf1EezNWuMqsEWgb8cUUr2nSwemEWz36jA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3Cv695VCwDvwrZ81pUmYKSW2lCz++MiPA+PYD77yi+8=; b=HbVtkHHKw0iFdN2cQa5n7PDhZhhGwTh/+2Sez9UNdrvF1ouBp81aAe+5xXG8ag/+BIToV2Qgc9P1uduwewWTDs7jVQx6o6z9b9z3p3rHMxdsiBKpHmQiM/b9Z8UhrwQWm0VTsKEphVPopxBjZWSuYTtJTIwSfv27tO668FjQPctbXu5DjH1kQF+zHgpXxg2EOZ1IeXT0s8VbVkkeWx9kd6vBwgILs40hBWpu0bfxhc2KkeJs9YJ3jjfcO0kE9Tk7W1XyaUXkVQfFBttnHW73TNrcun68LDIc62RP9PxTN/z4sDcj1lH2AIqN5EoZ/S271xkJI0wpBnhS77aInw+eIw== Received: from BN0PR07CA0021.namprd07.prod.outlook.com (2603:10b6:408:141::16) by SJ2PR12MB9238.namprd12.prod.outlook.com (2603:10b6:a03:55d::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.32; Tue, 15 Apr 2025 12:12:59 +0000 Received: from BL02EPF0001A0FC.namprd03.prod.outlook.com (2603:10b6:408:141:cafe::82) by BN0PR07CA0021.outlook.office365.com (2603:10b6:408:141::16) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8655.15 via Frontend Transport; Tue, 15 Apr 2025 12:12:58 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BL02EPF0001A0FC.mail.protection.outlook.com (10.167.242.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Tue, 15 Apr 2025 12:12:58 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 15 Apr 2025 05:12:47 -0700 Received: from shredder.lan (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 15 Apr 2025 05:12:43 -0700 From: Ido Schimmel To: CC: , , , , , , , , Ido Schimmel Subject: [PATCH net-next 13/15] vxlan: Do not treat dst cache initialization errors as fatal Date: Tue, 15 Apr 2025 15:11:41 +0300 Message-ID: <20250415121143.345227-14-idosch@nvidia.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250415121143.345227-1-idosch@nvidia.com> References: <20250415121143.345227-1-idosch@nvidia.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A0FC:EE_|SJ2PR12MB9238:EE_ X-MS-Office365-Filtering-Correlation-Id: eff30de1-c2e5-433e-aff2-08dd7c16dca8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: PE9lOOG/5WfqVouCIKGBgKVselVpZV6Az7UOjtNYJ8mv2ki5seVVxo+GiQLdTz0OgKIIVCvoXhyq84IEmSqrVLfhkYlzWgox0axoqn4wCJ9Rz2kkYMAh5NRHhLgnooa+raQeoEDbPF4KtNdiyLVEyXmltMGHLl68Mf4kaBh3z+cM5vbmdhLLouYYMBEK0m2ZLJi4LZG1oNPyhtfr2gk4586jc/5M1FVnWoo8Y1knTZN16HYSuccmKDcZOUaPpx8t07me0W/gReVKq5RZ0Vndny02COxOSGC7NkSiWAByu6xQDGQ+iFRktGqgVG9iFv0khlgZOvhiElzur1+F7NT8BTfQ1naL9kKsNIuUeCQP88IjcN/T4t8YsvlQR2KvHD9vu9CApyJWdt0F3h6/5kXVH0DzJQQXfZriBXnapWVvsLGb9FNbSEKmUAEEwmnJzDLNKWvgmZ6PqAjY6b638DD1/b2fYNoZBn7oUWMypHACL10/7fAkkJyqokcNwI89HlarJoxBd+0HvXBo9N4dgEi664DuXopxDIXN9LvD1r3Gv/dYJZpoj2L58FPzNRjZa+nLrILE9REuO6YlBbh/l2XbyR/6Qx2kir9SiU2rA95Gg0rCwJR57AA4jClkS2p7fDU29uZvn9/Gzv/a3HG15x3ajaunb56qqCAaZtW36OYgwPyXQLdS5AxRAA5fdHqm/0HvbSbZgUPAj+60UUlVGt6EG0ZW85NWaWFrL8fHuOBu9m6ZH2eAF1YbZkyUu7RM0kBJYKdWSf1jtBp2gJVOVmgghCMdVG0aBKEGYiTZlwHM9soZVKkIqkL4IqhX1emZ+pEYX2oddYAaig8KhGYyahM2ZYdHOrTWnKPD41Ttfs6VK7iGGJv7G6ZH/7Vixdb5NmYZGCxTWtj5VebbqCPKcmh2fpHSeV4FGGif+5MBf0qAs0L9qQ6vJj08A/WKReAvHxTpwxu38XJtDtuDfSN6CFS7VjTGIZMVPFgVZJcHdjRaYgiw5Qzbo+LDV2PmJLdyv9ITP+dtktCKkDf1Qn2q7iU+Iu0Wyt9V/n2Fl6pzFrdhJFLhB0rVvpEjRxwkbMXm2H1AwmQWR4NdkWwjbh0LRYKAnt15G6OnFnMt/ysccKwciCnnN8T7b8LL9o23YBHyrlX2etD44VQeMitb2qFcDtfmcABVpoDoxFeSZh/IhKb6Wuj5idJNBNLtN4a+qhm+CyiGnES0SYvJjD/y93BeKiUvRbPyiBBPYaJfqKInUDUr0eXeT4mhHMF1FbTKvmAedRxFBCv+5f3qarzXZv0G4NdF9sTEW2BJo9MMDDL0XPjWWEYuAxoqZnTlye8YNPsGqqehWuCBr7rGEGbz7xgvu5p6leVyN1ImkBllKozENXM1uVcTLBvYLVGfMuN+avSlUjTEG6+oXbRnLyRjfAUizDnhA7ZpSF/F+e5n7zzewtlERANkmPFRszT0klVhZSrgwmxoGDii+ZemuDYkPkC2LBSKu4ibr7y8oSg9VFEA7z35ZDLBoYqoFfKydItWTER4v+/u X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(1800799024)(36860700013)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2025 12:12:58.7614 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: eff30de1-c2e5-433e-aff2-08dd7c16dca8 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A0FC.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB9238 X-Patchwork-Delegate: kuba@kernel.org FDB entries are allocated in an atomic context as they can be added from the data path when learning is enabled. After converting the FDB hash table to rhashtable, the insertion rate will be much higher (*) which will entail a much higher rate of per-CPU allocations via dst_cache_init(). When adding a large number of entries (e.g., 256k) in a batch, a small percentage (< 0.02%) of these per-CPU allocations will fail [1]. This does not happen with the current code since the insertion rate is low enough to give the per-CPU allocator a chance to asynchronously create new chunks of per-CPU memory. Given that: a. Only a small percentage of these per-CPU allocations fail. b. The scenario where this happens might not be the most realistic one. c. The driver can work correctly without dst caches. The dst_cache_*() APIs first check that the dst cache was properly initialized. d. The dst caches are not always used (e.g., 'tos inherit'). It seems reasonable to not treat these allocation failures as fatal. Therefore, do not bail when dst_cache_init() fails and suppress warnings by specifying '__GFP_NOWARN'. [1] percpu: allocation failed, size=40 align=8 atomic=1, atomic alloc failed, no space left (*) 97% reduction in average latency of vxlan_fdb_update() when adding 256k entries in a batch. Reviewed-by: Petr Machata Signed-off-by: Ido Schimmel --- drivers/net/vxlan/vxlan_core.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c index 2846c8c5234e..5c0752161529 100644 --- a/drivers/net/vxlan/vxlan_core.c +++ b/drivers/net/vxlan/vxlan_core.c @@ -619,10 +619,10 @@ static int vxlan_fdb_append(struct vxlan_fdb *f, if (rd == NULL) return -ENOMEM; - if (dst_cache_init(&rd->dst_cache, GFP_ATOMIC)) { - kfree(rd); - return -ENOMEM; - } + /* The driver can work correctly without a dst cache, so do not treat + * dst cache initialization errors as fatal. + */ + dst_cache_init(&rd->dst_cache, GFP_ATOMIC | __GFP_NOWARN); rd->remote_ip = *ip; rd->remote_port = port; From patchwork Tue Apr 15 12:11:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 14052145 X-Patchwork-Delegate: kuba@kernel.org Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2042.outbound.protection.outlook.com [40.107.220.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1E8462951C5 for ; Tue, 15 Apr 2025 12:13:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.220.42 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719201; cv=fail; b=k7hGrbMFFdF8jXODeoyc+jECp6U7BoM1lEqQ5EfVkJlEoZ6ZyaowHGP3WxtbbuWsnM8m6UdJcxB20QReWDAET1JqipJ3S4/hxeHHsVA0Zjhs/eXdXvd1yA3uoOSHYfFhktJvlzVriXbWsdbclI9KSeo/9eCkQn3GOflaeQQnsZ4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719201; c=relaxed/simple; bh=YYC4PrfUCbxbaDbSKoQwbZYLnrWGy+M2m+Y8QdI7dBI=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=TNarhN0nf/wSLXcCl8FwotkP4ykHrpkafK0rwGO5CE3mUAQmNrshAjT53C3qQA1IHLsRoOXlvRbXQDSlrSc5IWq8J1idR33wLMK7laWQhqcTdPnsPUE7c0w5qDIt+kROQIlvexb+FC/4QBGbndIDdcH4mpRA/zSJOWAqzU9c6ow= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=Mm9C1I/5; arc=fail smtp.client-ip=40.107.220.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="Mm9C1I/5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YIj20XSSg+6iYu6u3DXZTqlqSc3bYycAzoq/+GDUNfC1TyBSfaHVkFW2H6Xrgc0AnRhrjObAXPZNOnZWtNnd99okLhUP/m2jHKafhCdzf6TEdFQNzyeF/x2++Rzbh4R6T3jV9MuchOrloVcJ+E9Y148R1eCBtE45ckNb2ydPYdyQr+jVeSTNByJ6zLjzqo4qkQ/ROnuPM/uWeh/QAKe6+7+hu4bXIfLNu/Qn5+qkqHlrW+zdxBChsLsDUA0zlRh3gfeGWggg7+DqaF+S/GXCm/bqL7FTolqnkR8hHPl/NAL4Mlq4MWrx95WhHlZvL9GChiN7aTrT7T7cRFtYhCcudw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=T+sMHlK7YnwbBFDqNn9cPGcaiPOGCCs3NGxZ5HuL8+E=; b=iWS7ziCZpr0uCe0nRoYFbzXSU3ZvsVY7UKx30NI2JKwqMWh0GKZjMJ+6q4iev5Ond8blKVf/36XR1gTGlBrxgKY7XXYKDOZdc1zP8kq9sHmWYPGO7mJ+8UChfqy3vseKJAMpzN6qIjjN9z7ECCRWIrguufNpBbCeWRJZDhvy/qVF5L+F9MlACNKfmPmji3vdgw91Egj3Hqn3zp3vQiTfYpIk9Qb6RTVPrn84xCKIMuDq4wIEz6EQ8b0PCyKNJ2A7UZYfSvtdrf3EZBWtxn84zGAFImTqfYLU+T5jBL8/aaG105wBq70a+QIx1PlXDZchhUx6tKNIJK0LQFefuWfZYA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=T+sMHlK7YnwbBFDqNn9cPGcaiPOGCCs3NGxZ5HuL8+E=; b=Mm9C1I/5HvuOrwFDE4rVw2tVTHLNWTco4QBMfYF00bnIFEhC9Zgzzflfwt7eMsqr82S90gaG4aZobYXZJ+5lwRA8XRi55UWKH3w1ibnbBcuK9FPKDaw05YScbI9axAiUzKT5JdiQUyWxbHYJvZTpkcQXHav3uVXoVzDl2LRw2I5AloVp9mIqkGRSjeN7B0f91CYD+27ep81r58bGf57Fs0pbcnAa+xTU47Ex26oo7gnUi59v1hkwSEuLgWM6U6M4qUzx12arx+PJqc+gd7H/JQ/2eGIh2fBMNGCcjs58GsE3ccBNn2pW+hjECXcgdqwtXK2IlXx00ou/tPQvje2AKg== Received: from BN9PR03CA0581.namprd03.prod.outlook.com (2603:10b6:408:10d::16) by CH1PR12MB9623.namprd12.prod.outlook.com (2603:10b6:610:2b3::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.35; Tue, 15 Apr 2025 12:13:05 +0000 Received: from BL02EPF0001A0FA.namprd03.prod.outlook.com (2603:10b6:408:10d:cafe::ef) by BN9PR03CA0581.outlook.office365.com (2603:10b6:408:10d::16) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8655.15 via Frontend Transport; Tue, 15 Apr 2025 12:13:05 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BL02EPF0001A0FA.mail.protection.outlook.com (10.167.242.101) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Tue, 15 Apr 2025 12:13:05 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 15 Apr 2025 05:12:50 -0700 Received: from shredder.lan (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 15 Apr 2025 05:12:47 -0700 From: Ido Schimmel To: CC: , , , , , , , , Ido Schimmel Subject: [PATCH net-next 14/15] vxlan: Introduce FDB key structure Date: Tue, 15 Apr 2025 15:11:42 +0300 Message-ID: <20250415121143.345227-15-idosch@nvidia.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250415121143.345227-1-idosch@nvidia.com> References: <20250415121143.345227-1-idosch@nvidia.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A0FA:EE_|CH1PR12MB9623:EE_ X-MS-Office365-Filtering-Correlation-Id: f4b88b45-dca0-4235-2a06-08dd7c16e08d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: l6ut/X4PP/89e1mGEc0I3jA2HSER8Jf4SD3NsRWBehxBngaUsLHCJCuqn2RT0QPua6mZntrLXihZYpw9QT6PN8sC/6FsBLFotvSADY+EphOxpQtn0Z9sgp/A7dDTjRJL9QgkvAdBHxiTcgXO6o7yYlpM8CmUUKkkIl833EgpCnArR92Jdfhqq1ffCkeaJmTBrBbitsh+LHa5x+P8VSJLPTY0e3X/ZS5FMa/OTk/yaBJX5bfbO88wU0jqTMnE2mMENwHCbedUa1WtUlOcQcw5c2a+Uh88PaSGntliHIDyN8nsyKVHC7WSM7QA50105a8WeBcNJ3OiRLVrbhf8QD9bn/n/0qKtNjXm7Qbj3r+ZoRT4QBbWAg4wwSernB9KT9U0bUNQSonf1FENTGpULXlIlZcjdJojHu9iL9VCQu0nWIQsGEhqUmla0diY5pS2Vg1k3Mwo2xx1oPdRCb8YaSN3L9wMbAT4bFc6QSGVVf4Idg+hGkImcJL1gMGy4st4zLrOZ64LRp6iL3MmBEdc7F72SBuSESJMYl7IoNX7+pNzjeJ4BzFr6QxpuoKNlqc2h9EVgwztOn5ClJRfe/Xgw9ae84Tukb0u1XrBMbo7gdfm5I+F40GJenEn7Ee/elOJ9Y6QqEqK7QgFKqIiapTmIPp1zUHcA99hnJ0153MOxZLmTOYIH3t4LXxMqwxNw2stJkQCddY3/Jx3rhRVjOeqhIha8l4UFZ1pdBYFIXf46clJ13T8d5oWKj/NPX3y4VudxKt6tj57eIhCZ26U3nkEeGjDgxxeo83gRmkAzD1cs4Pr87hIZ7oHYU6DCHj5pfmWAipZVAp2+8IhS7akJhe1IpPovHs+HmKntNy2j9DO27XxZ4Hq54kejVT6PVPIFz0M20KPVEoYK8NyD85MTXe0iq5iaJKNT5fIQM+BbTWClsPahlSXfwUMDQP4KT4l+eFb3/7CAva40NXOPJAI50D9o7mo64sxhsBfLNkrITfViun7U9b9MUMm4hcMgOXwPXtrmzlzkvyoQLUzb79/QzWv2nGNtkGkSvLR691u2xqHM5CsLfv03hXYImMWa7HoZsv+epKbvisqH06QOhg2URthO7dlRBTXK9atXT+R8fj7MhZMonhnY5ZBrxb5VEcZLtwAdMMJ9YRz9thniQDkFUSVQ0ayFuxHVewt1OHKUrT8diAPecWUKiFTlXdIjGwKenqlEx1Lr/pj2xvU4gj7pLO3A62A7BjkVgNn6wDf8ag/MGk4K2y+kbHiVYzwSIY5wBwIztPKglQ8Oos7Figfh77AOrHi6U6t0jsjTxzk+91OeebBZ4xYQl5L7KG2FB19K1ia90Jbe29+7nRU6Zb+MkMUYesbZIOqxakhJxRpWTWbKZjZqT3NF6XQUELmNpJ00Q6YvL+DWBE1pf2V7vD0UQfJWcdPkel1W/I5rDgPdBhIGBHW+EYAHnlYiEZKYPDoKxdtVdvq6eqr7krlrIdAShfpAG2pF7DjbjZ+ESAUjYiGSb8u3g8Rl7Z4ZoswGn6dPuGH9guY X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(1800799024)(36860700013)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2025 12:13:05.3075 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f4b88b45-dca0-4235-2a06-08dd7c16e08d X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A0FA.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PR12MB9623 X-Patchwork-Delegate: kuba@kernel.org In preparation for converting the FDB table to rhashtable, introduce a key structure that includes the MAC address and source VNI. No functional changes intended. Reviewed-by: Petr Machata Signed-off-by: Ido Schimmel --- drivers/net/vxlan/vxlan_core.c | 44 ++++++++++++++++--------------- drivers/net/vxlan/vxlan_private.h | 8 ++++-- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c index 5c0752161529..8e359cf8dbbd 100644 --- a/drivers/net/vxlan/vxlan_core.c +++ b/drivers/net/vxlan/vxlan_core.c @@ -186,7 +186,7 @@ static int vxlan_fdb_info(struct sk_buff *skb, struct vxlan_dev *vxlan, } else if (nh) { ndm->ndm_family = nh_family; } - send_eth = !is_zero_ether_addr(fdb->eth_addr); + send_eth = !is_zero_ether_addr(fdb->key.eth_addr); } else ndm->ndm_family = AF_BRIDGE; ndm->ndm_state = fdb->state; @@ -201,7 +201,7 @@ static int vxlan_fdb_info(struct sk_buff *skb, struct vxlan_dev *vxlan, peernet2id(dev_net(vxlan->dev), vxlan->net))) goto nla_put_failure; - if (send_eth && nla_put(skb, NDA_LLADDR, ETH_ALEN, &fdb->eth_addr)) + if (send_eth && nla_put(skb, NDA_LLADDR, ETH_ALEN, &fdb->key.eth_addr)) goto nla_put_failure; if (nh) { if (nla_put_u32(skb, NDA_NH_ID, nh_id)) @@ -223,9 +223,9 @@ static int vxlan_fdb_info(struct sk_buff *skb, struct vxlan_dev *vxlan, goto nla_put_failure; } - if ((vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA) && fdb->vni && + if ((vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA) && fdb->key.vni && nla_put_u32(skb, NDA_SRC_VNI, - be32_to_cpu(fdb->vni))) + be32_to_cpu(fdb->key.vni))) goto nla_put_failure; ci.ndm_used = jiffies_to_clock_t(now - READ_ONCE(fdb->used)); @@ -293,8 +293,8 @@ static void vxlan_fdb_switchdev_notifier_info(const struct vxlan_dev *vxlan, fdb_info->remote_port = rd->remote_port; fdb_info->remote_vni = rd->remote_vni; fdb_info->remote_ifindex = rd->remote_ifindex; - memcpy(fdb_info->eth_addr, fdb->eth_addr, ETH_ALEN); - fdb_info->vni = fdb->vni; + memcpy(fdb_info->eth_addr, fdb->key.eth_addr, ETH_ALEN); + fdb_info->vni = fdb->key.vni; fdb_info->offloaded = rd->offloaded; fdb_info->added_by_user = fdb->flags & NTF_VXLAN_ADDED_BY_USER; } @@ -366,7 +366,7 @@ static void vxlan_fdb_miss(struct vxlan_dev *vxlan, const u8 eth_addr[ETH_ALEN]) }; struct vxlan_rdst remote = { }; - memcpy(f.eth_addr, eth_addr, ETH_ALEN); + memcpy(f.key.eth_addr, eth_addr, ETH_ALEN); vxlan_fdb_notify(vxlan, &f, &remote, RTM_GETNEIGH, true, NULL); } @@ -416,9 +416,9 @@ static struct vxlan_fdb *vxlan_find_mac_rcu(struct vxlan_dev *vxlan, struct vxlan_fdb *f; hlist_for_each_entry_rcu(f, head, hlist) { - if (ether_addr_equal(mac, f->eth_addr)) { + if (ether_addr_equal(mac, f->key.eth_addr)) { if (vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA) { - if (vni == f->vni) + if (vni == f->key.vni) return f; } else { return f; @@ -539,7 +539,7 @@ int vxlan_fdb_replay(const struct net_device *dev, __be32 vni, spin_lock_bh(&vxlan->hash_lock); hlist_for_each_entry(f, &vxlan->fdb_list, fdb_node) { - if (f->vni == vni) { + if (f->key.vni == vni) { list_for_each_entry(rdst, &f->remotes, list) { rc = vxlan_fdb_notify_one(nb, vxlan, f, rdst, extack); @@ -569,7 +569,7 @@ void vxlan_fdb_clear_offload(const struct net_device *dev, __be32 vni) spin_lock_bh(&vxlan->hash_lock); hlist_for_each_entry(f, &vxlan->fdb_list, fdb_node) { - if (f->vni == vni) { + if (f->key.vni == vni) { list_for_each_entry(rdst, &f->remotes, list) rdst->offloaded = false; } @@ -812,15 +812,16 @@ static struct vxlan_fdb *vxlan_fdb_alloc(struct vxlan_dev *vxlan, const u8 *mac, f = kmalloc(sizeof(*f), GFP_ATOMIC); if (!f) return NULL; + memset(&f->key, 0, sizeof(f->key)); f->state = state; f->flags = ndm_flags; f->updated = f->used = jiffies; - f->vni = src_vni; + f->key.vni = src_vni; f->nh = NULL; RCU_INIT_POINTER(f->vdev, vxlan); INIT_LIST_HEAD(&f->nh_list); INIT_LIST_HEAD(&f->remotes); - memcpy(f->eth_addr, mac, ETH_ALEN); + memcpy(f->key.eth_addr, mac, ETH_ALEN); return f; } @@ -959,7 +960,7 @@ static void vxlan_fdb_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f, { struct vxlan_rdst *rd; - netdev_dbg(vxlan->dev, "delete %pM\n", f->eth_addr); + netdev_dbg(vxlan->dev, "delete %pM\n", f->key.eth_addr); --vxlan->addrcnt; if (do_notify) { @@ -1031,8 +1032,8 @@ static int vxlan_fdb_update_existing(struct vxlan_dev *vxlan, if ((flags & NLM_F_REPLACE)) { /* Only change unicasts */ - if (!(is_multicast_ether_addr(f->eth_addr) || - is_zero_ether_addr(f->eth_addr))) { + if (!(is_multicast_ether_addr(f->key.eth_addr) || + is_zero_ether_addr(f->key.eth_addr))) { if (nhid) { rc = vxlan_fdb_nh_update(vxlan, f, nhid, extack); if (rc < 0) @@ -1048,8 +1049,8 @@ static int vxlan_fdb_update_existing(struct vxlan_dev *vxlan, } } if ((flags & NLM_F_APPEND) && - (is_multicast_ether_addr(f->eth_addr) || - is_zero_ether_addr(f->eth_addr))) { + (is_multicast_ether_addr(f->key.eth_addr) || + is_zero_ether_addr(f->key.eth_addr))) { rc = vxlan_fdb_append(f, ip, port, vni, ifindex, &rd); if (rc < 0) @@ -2853,7 +2854,7 @@ static void vxlan_cleanup(struct timer_list *t) spin_lock(&vxlan->hash_lock); if (!hlist_unhashed(&f->fdb_node)) { netdev_dbg(vxlan->dev, "garbage collect %pM\n", - f->eth_addr); + f->key.eth_addr); f->state = NUD_STALE; vxlan_fdb_destroy(vxlan, f, true, true); } @@ -2972,7 +2973,8 @@ struct vxlan_fdb_flush_desc { static bool vxlan_fdb_is_default_entry(const struct vxlan_fdb *f, const struct vxlan_dev *vxlan) { - return is_zero_ether_addr(f->eth_addr) && f->vni == vxlan->cfg.vni; + return is_zero_ether_addr(f->key.eth_addr) && + f->key.vni == vxlan->cfg.vni; } static bool vxlan_fdb_nhid_matches(const struct vxlan_fdb *f, u32 nhid) @@ -2995,7 +2997,7 @@ static bool vxlan_fdb_flush_matches(const struct vxlan_fdb *f, if (desc->ignore_default_entry && vxlan_fdb_is_default_entry(f, vxlan)) return false; - if (desc->src_vni && f->vni != desc->src_vni) + if (desc->src_vni && f->key.vni != desc->src_vni) return false; if (desc->nhid && !vxlan_fdb_nhid_matches(f, desc->nhid)) diff --git a/drivers/net/vxlan/vxlan_private.h b/drivers/net/vxlan/vxlan_private.h index 078702ec604d..3ca19e7167c9 100644 --- a/drivers/net/vxlan/vxlan_private.h +++ b/drivers/net/vxlan/vxlan_private.h @@ -24,6 +24,11 @@ struct vxlan_net { struct notifier_block nexthop_notifier_block; }; +struct vxlan_fdb_key { + u8 eth_addr[ETH_ALEN]; + __be32 vni; +}; + /* Forwarding table entry */ struct vxlan_fdb { struct hlist_node hlist; /* linked list of entries */ @@ -31,9 +36,8 @@ struct vxlan_fdb { unsigned long updated; /* jiffies */ unsigned long used; struct list_head remotes; - u8 eth_addr[ETH_ALEN]; + struct vxlan_fdb_key key; u16 state; /* see ndm_state */ - __be32 vni; u16 flags; /* see ndm_flags and below */ struct list_head nh_list; struct hlist_node fdb_node; From patchwork Tue Apr 15 12:11:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 14052144 X-Patchwork-Delegate: kuba@kernel.org Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2073.outbound.protection.outlook.com [40.107.244.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C5EC627A934 for ; Tue, 15 Apr 2025 12:13:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.244.73 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719192; cv=fail; b=XEp5rA8BOD+2KpGPb7LpzwZvDdpfcsBBLJINeyfldAOM5yYCUc+Xr6mCSY4qfV5Jd2B/4FlAe7QweQ1a5CWIh1GFR5SjfXxJG+fCxhOt/gPuAGGMBOxiEHoW8wAGzHwHur42IbXLrNxzhv1k67oA3qyhZhNjogCX7vtzJ6u//YQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744719192; c=relaxed/simple; bh=Rath+f3+g8e8CNW9Yl+NqHiic77bxbRAjXyOxx7hG9s=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=sUSZd0Spjqf7Po4G673+2toMOzWVMqMlc7XVlIousDoAsNSJIDsIA3Vn5hRUnkv7gzyy8mElTfl2LUnvDnFsQuPvFVXEvWvrlzrJLKO35M55fYG4xlyghXxLQW437OlcRSGTsER09tOZ8fEnXHEj+tpDejiSyVg3M8fTei+ThEU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=aFPhHCzX; arc=fail smtp.client-ip=40.107.244.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="aFPhHCzX" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=I5rCek1UgQ8xjxaVvoyTa/RoVY5BKSWuV43fE99D3XaITvUhu63THwAZpdJ7mOCo0dMuI6Joe1qsDRKpjNseN0C0VvEAU27e1f0fl4Pl5erLcvwDt8GiBEhp5ba43eK7ANZqTZFQxuAy/wehp3lTrVKnGmgDsIhcSlfHE36PilK/Aiqe35cR7ibE11ahfkDX8W9qxxm74UofXQzLr7qOligRL8NkjHEqc4VTnyEo8ieNKK0xyWa/8HYglKc47isT3LIPwbk/wPNPcf1ml/JVJuz+w5XDvPTroe3BNKzFJx+3dG0I3fr1UMKvbtj5E6XVV1+7MriBZ5hbW4V785Vgyg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=+wRzE1PYBsjNwu1jepbYSoBTjFeuJfJ6cTCKMR3t8Bk=; b=lyGHMupGl+so/dwd7oGScXra9o08jJIk4vsYWcyzmaCblTxf6E96eFsJ0Jn6g00u0q0rilalLshCfE2ZRfQxwbI5Vw5ZgYg1mc2L7o5wJ5boGLgcIekJwU6EGB2OXObL+zXfUgLxIVeGqttGPKx3zFnG7mdpIlG+BENt7jZuOVkAk0aspsM7pKW1LWLwUEeq2chRkvvUjp3PYnU/HmC9LVrV62AHPxIqiPf7Z1S8+R+iEw1CoQw76TPQpQjl4P3V/om1XWMvL0BGxBkCmh+8MzME8o0L0E3ruQxrwhT01dJO3y+9DGETMNrVNZ9ypLQZY7G8VQbiwHlReJ3PTQbDGw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+wRzE1PYBsjNwu1jepbYSoBTjFeuJfJ6cTCKMR3t8Bk=; b=aFPhHCzXWmityTxLKPsPuWZdNWO2I5idI9YSUlOnIlpwO6o3tDvR8fkPFaKFG6kqC5vCnAp+tKBj6ROZOHCjp7qV15suzr+XE+aW7FeaEdhJ4fkWqlc8uIjg6XliGhGBfLBIvIsIrrLEt+h6CXUFpne9kxEqXdLzoFviGgZ5O5HiMACvErqVoZoQHY72UfK0fzSi+Fi98aCYWkZ0scK1/nX2Lg4nk4uDnu1I+vdQ31Czr8yYKyO76X4fpPgsjghVQzS9p7BqWCFwT0NrorIPFyey6B6RP4nmPGE0ERZZEv0PCD4khdksOx+GVRdpsgdvNr3Lts0F57WXOVRimZgTqA== Received: from BL1PR13CA0004.namprd13.prod.outlook.com (2603:10b6:208:256::9) by CH3PR12MB8353.namprd12.prod.outlook.com (2603:10b6:610:12c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.33; Tue, 15 Apr 2025 12:13:07 +0000 Received: from BL02EPF0001A100.namprd03.prod.outlook.com (2603:10b6:208:256:cafe::44) by BL1PR13CA0004.outlook.office365.com (2603:10b6:208:256::9) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8655.11 via Frontend Transport; Tue, 15 Apr 2025 12:13:06 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BL02EPF0001A100.mail.protection.outlook.com (10.167.242.107) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Tue, 15 Apr 2025 12:13:06 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 15 Apr 2025 05:12:53 -0700 Received: from shredder.lan (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 15 Apr 2025 05:12:50 -0700 From: Ido Schimmel To: CC: , , , , , , , , Ido Schimmel Subject: [PATCH net-next 15/15] vxlan: Convert FDB table to rhashtable Date: Tue, 15 Apr 2025 15:11:43 +0300 Message-ID: <20250415121143.345227-16-idosch@nvidia.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250415121143.345227-1-idosch@nvidia.com> References: <20250415121143.345227-1-idosch@nvidia.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A100:EE_|CH3PR12MB8353:EE_ X-MS-Office365-Filtering-Correlation-Id: fc1d74d4-ac1f-4f95-13e9-08dd7c16e155 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: gVhlrjRFAfwtchm9kRo5NzDD5vHyrys2eYQPCLn7Jt6dVsjvBXTedMdSKn9M3GIMQBMwnwQRR/iIlIopPBdGOdECSiRkrWVwh7zzXb8VmEtbP5U5r3sYk2v48LU2yB3H9iwBUwQbaDCmD3cfIQ15My4EnsKfl21OP7pWVWrtM0roiW2a6nrNqMNpgJ2onOmPlnTZIt0w7sXdWSdB1ZC7u56NaqZ9AERupYBAHu/74aPcSs4yFTOiVK2peIXcKq6eIHG5LPjYpUQ+8Zm91L5YF+SvHuFe2ZBvnS9wbSTE7ry5OlTyVp5uBZupfF3CQ1DkuJm2F4ERMTLlnePrQK86wgIuRk7r2kQRa78hNvrW0vNu4Gd5eagh4HP17N+506s31Vel+sdDnqqpyoKy387u1+0W8p0tKYlozXCO1EYFzannPwvTN/uNZOdRwT2Vskh12y7NQ/elJIU2DFy/UzrzPiJ3USmzuzwDNgzcilXZqgWQ1wzyCv3S6311FcRV6n5GZmT6Aql6hnCWME5NRftXTcfqZE4OZ94sSUQlVBBKR8ZTF4WGuKzgYigOcxY3zAqxaBUIwXf7CLban8CryvjyUr8/Qz7MPEjX57Wo7RR8z3rXamnvPF1kiw04odlc9XCwoXshiNbTZLjlWFRnsAELi1x92gDUvPzQS6twpFGI7+jKwOh0d0Tmym8HcRoe7gP4OnUYu+goQgLcK1U553eiT9y8lC/GxNNW/5boS4lR9LK/gxz2/GgIyGVunOuTvOQydvABHw7xAqwL+j0ac5PV1O4/nU0AJLeRe8FPj49eIJiVYFSVT/hlBRc3sIlOSAP39jLWtTitXaIL+FEUWpxqKJdYSbVC3Fttmq9EzE9Aeu9UHwDpuD0YYM7TmpWkFLowq/o6wyvrFvlJZZ++YBdkfPfggjIz34X6/6R5Osxot4zPn3vmzyCsD5K5tqzwOA9og1l7dfJdbRt0Sm3jZP2C0fz4/BNpVzfeR/+tRF4c2GR3yNc+5doHZZJ39gc+pX/4WCc1hNxqSsXYBAw9oXOD4QptyWk15lF0j1GTG5Fw3Ck4ZBLQquulFmvvS08u0oUSczzYMcpe3P/zx51OSQDaZHZjawYlqP5wRSxoFuq3YgYo3XzgJk5OyFS3BKsOvnHPiP3gBhl+U9WvvmLPHzGXKhyie/GxG4cV03lAoVOnUN856+AbgcaigBKwbTOrPFO4Kp5TPRTDf+1ZjarxZNUDEMgXE5orGOGapFU54f3nZ1TM5OQmipUeHfREwa9RSkTxeRR6YE3TXmsja/vYBPEaLQLyXo7wTvTYYf1trs5uQ+EwBkx2SutDIQRbtl7Sj4QlmHH5EJggvonlMQ4WXLMef4fr8rzQcw2x92QkzZm1S6e2ydJMHAHpJZJOnWbMbv3VX0qMh136+qTCklr4+snHS65EmSCBWXsJ8ylVaBb4MDr8aYrThXrFFyTbPHERDi8GA2CXcCR7WbVeQbq8biDKuKlUfb+a1RPvJMOTx54XCpTs9SgjNfwmMBWCrG0pTBXy X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(1800799024)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2025 12:13:06.6021 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: fc1d74d4-ac1f-4f95-13e9-08dd7c16e155 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A100.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB8353 X-Patchwork-Delegate: kuba@kernel.org FDB entries are currently stored in a hash table with a fixed number of buckets (256), resulting in performance degradation as the number of entries grows. Solve this by converting the driver to use rhashtable which maintains more or less constant performance regardless of the number of entries. Measured transmitted packets per second using a single pktgen thread with varying number of entries when the transmitted packet always hits the default entry (worst case): Number of entries | Improvement ------------------|------------ 1k | +1.12% 4k | +9.22% 16k | +55% 64k | +585% 256k | +2460% In addition, the change reduces the size of the VXLAN device structure from 2584 bytes to 672 bytes. Reviewed-by: Petr Machata Signed-off-by: Ido Schimmel --- drivers/net/vxlan/vxlan_core.c | 102 ++++++++++++------------------ drivers/net/vxlan/vxlan_private.h | 2 +- include/net/vxlan.h | 2 +- 3 files changed, 43 insertions(+), 63 deletions(-) diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c index 8e359cf8dbbd..a56d7239b127 100644 --- a/drivers/net/vxlan/vxlan_core.c +++ b/drivers/net/vxlan/vxlan_core.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -63,8 +64,12 @@ static int vxlan_sock_add(struct vxlan_dev *vxlan); static void vxlan_vs_del_dev(struct vxlan_dev *vxlan); -/* salt for hash table */ -static u32 vxlan_salt __read_mostly; +static const struct rhashtable_params vxlan_fdb_rht_params = { + .head_offset = offsetof(struct vxlan_fdb, rhnode), + .key_offset = offsetof(struct vxlan_fdb, key), + .key_len = sizeof(struct vxlan_fdb_key), + .automatic_shrinking = true, +}; static inline bool vxlan_collect_metadata(struct vxlan_sock *vs) { @@ -371,62 +376,21 @@ static void vxlan_fdb_miss(struct vxlan_dev *vxlan, const u8 eth_addr[ETH_ALEN]) vxlan_fdb_notify(vxlan, &f, &remote, RTM_GETNEIGH, true, NULL); } -/* Hash Ethernet address */ -static u32 eth_hash(const unsigned char *addr) -{ - u64 value = get_unaligned((u64 *)addr); - - /* only want 6 bytes */ -#ifdef __BIG_ENDIAN - value >>= 16; -#else - value <<= 16; -#endif - return hash_64(value, FDB_HASH_BITS); -} - -u32 eth_vni_hash(const unsigned char *addr, __be32 vni) -{ - /* use 1 byte of OUI and 3 bytes of NIC */ - u32 key = get_unaligned((u32 *)(addr + 2)); - - return jhash_2words(key, vni, vxlan_salt) & (FDB_HASH_SIZE - 1); -} - -u32 fdb_head_index(struct vxlan_dev *vxlan, const u8 *mac, __be32 vni) -{ - if (vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA) - return eth_vni_hash(mac, vni); - else - return eth_hash(mac); -} - -/* Hash chain to use given mac address */ -static inline struct hlist_head *vxlan_fdb_head(struct vxlan_dev *vxlan, - const u8 *mac, __be32 vni) -{ - return &vxlan->fdb_head[fdb_head_index(vxlan, mac, vni)]; -} - /* Look up Ethernet address in forwarding table */ static struct vxlan_fdb *vxlan_find_mac_rcu(struct vxlan_dev *vxlan, const u8 *mac, __be32 vni) { - struct hlist_head *head = vxlan_fdb_head(vxlan, mac, vni); - struct vxlan_fdb *f; + struct vxlan_fdb_key key; - hlist_for_each_entry_rcu(f, head, hlist) { - if (ether_addr_equal(mac, f->key.eth_addr)) { - if (vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA) { - if (vni == f->key.vni) - return f; - } else { - return f; - } - } - } + memset(&key, 0, sizeof(key)); + memcpy(key.eth_addr, mac, sizeof(key.eth_addr)); + if (!(vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA)) + key.vni = vxlan->default_dst.remote_vni; + else + key.vni = vni; - return NULL; + return rhashtable_lookup(&vxlan->fdb_hash_tbl, &key, + vxlan_fdb_rht_params); } static struct vxlan_fdb *vxlan_find_mac_tx(struct vxlan_dev *vxlan, @@ -915,15 +879,27 @@ int vxlan_fdb_create(struct vxlan_dev *vxlan, if (rc < 0) goto errout; + rc = rhashtable_lookup_insert_fast(&vxlan->fdb_hash_tbl, &f->rhnode, + vxlan_fdb_rht_params); + if (rc) + goto destroy_remote; + ++vxlan->addrcnt; - hlist_add_head_rcu(&f->hlist, - vxlan_fdb_head(vxlan, mac, src_vni)); hlist_add_head_rcu(&f->fdb_node, &vxlan->fdb_list); *fdb = f; return 0; +destroy_remote: + if (rcu_access_pointer(f->nh)) { + list_del_rcu(&f->nh_list); + nexthop_put(rtnl_dereference(f->nh)); + } else { + list_del(&rd->list); + dst_cache_destroy(&rd->dst_cache); + kfree(rd); + } errout: kfree(f); return rc; @@ -974,7 +950,8 @@ static void vxlan_fdb_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f, } hlist_del_init_rcu(&f->fdb_node); - hlist_del_rcu(&f->hlist); + rhashtable_remove_fast(&vxlan->fdb_hash_tbl, &f->rhnode, + vxlan_fdb_rht_params); list_del_rcu(&f->nh_list); call_rcu(&f->rcu, vxlan_fdb_free); } @@ -2898,10 +2875,14 @@ static int vxlan_init(struct net_device *dev) struct vxlan_dev *vxlan = netdev_priv(dev); int err; + err = rhashtable_init(&vxlan->fdb_hash_tbl, &vxlan_fdb_rht_params); + if (err) + return err; + if (vxlan->cfg.flags & VXLAN_F_VNIFILTER) { err = vxlan_vnigroup_init(vxlan); if (err) - return err; + goto err_rhashtable_destroy; } err = gro_cells_init(&vxlan->gro_cells, dev); @@ -2920,6 +2901,8 @@ static int vxlan_init(struct net_device *dev) err_vnigroup_uninit: if (vxlan->cfg.flags & VXLAN_F_VNIFILTER) vxlan_vnigroup_uninit(vxlan); +err_rhashtable_destroy: + rhashtable_destroy(&vxlan->fdb_hash_tbl); return err; } @@ -2933,6 +2916,8 @@ static void vxlan_uninit(struct net_device *dev) vxlan_vnigroup_uninit(vxlan); gro_cells_destroy(&vxlan->gro_cells); + + rhashtable_destroy(&vxlan->fdb_hash_tbl); } /* Start ageing timer and join group when device is brought up */ @@ -3329,7 +3314,6 @@ static void vxlan_offload_rx_ports(struct net_device *dev, bool push) static void vxlan_setup(struct net_device *dev) { struct vxlan_dev *vxlan = netdev_priv(dev); - unsigned int h; eth_hw_addr_random(dev); ether_setup(dev); @@ -3362,8 +3346,6 @@ static void vxlan_setup(struct net_device *dev) vxlan->dev = dev; - for (h = 0; h < FDB_HASH_SIZE; ++h) - INIT_HLIST_HEAD(&vxlan->fdb_head[h]); INIT_HLIST_HEAD(&vxlan->fdb_list); } @@ -4944,8 +4926,6 @@ static int __init vxlan_init_module(void) { int rc; - get_random_bytes(&vxlan_salt, sizeof(vxlan_salt)); - rc = register_pernet_subsys(&vxlan_net_ops); if (rc) goto out1; diff --git a/drivers/net/vxlan/vxlan_private.h b/drivers/net/vxlan/vxlan_private.h index 3ca19e7167c9..d328aed9feef 100644 --- a/drivers/net/vxlan/vxlan_private.h +++ b/drivers/net/vxlan/vxlan_private.h @@ -31,7 +31,7 @@ struct vxlan_fdb_key { /* Forwarding table entry */ struct vxlan_fdb { - struct hlist_node hlist; /* linked list of entries */ + struct rhash_head rhnode; struct rcu_head rcu; unsigned long updated; /* jiffies */ unsigned long used; diff --git a/include/net/vxlan.h b/include/net/vxlan.h index 96a6c6f45c2e..e2f7ca045d3e 100644 --- a/include/net/vxlan.h +++ b/include/net/vxlan.h @@ -304,7 +304,7 @@ struct vxlan_dev { struct vxlan_vni_group __rcu *vnigrp; - struct hlist_head fdb_head[FDB_HASH_SIZE]; + struct rhashtable fdb_hash_tbl; struct rhashtable mdb_tbl; struct hlist_head fdb_list;