From nobody Sat Feb 7 19:45:06 2026 Received: from mail-qk1-f201.google.com (mail-qk1-f201.google.com [209.85.222.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EE3F726E16E for ; Fri, 14 Nov 2025 14:06:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763129212; cv=none; b=ca9qGsm8JnMXObZdaT85hOBzU0f/3HifyfmSyisBO3pt/nCLMy20d6FTdtQjzw8TVF5d3DG9JYozQdu9pdMzT+3t2XsprPQlJr6P42DIK6MzfwU/MMn0vkVWjGqKPtZwODrOz6MUFv+TmD3M6wbf58sdE8YUPes80U0MBsmU4Ic= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763129212; c=relaxed/simple; bh=oNQL9iYvNRTZVBqXboiLPRAwsvpu0u63F6sdYKZYY7U=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=jblIDvey9aStaOo7SjJSGhil9bwe8X6nSkjJ8lnmEbfP9hyF5TaQlPcIxNpFSHjFDctLF8/Mgrr0ByVheFPHhdgIBIisx8eEq2/z6PutnRH5IN5F94MoQOPe47TOV2OLojt7zZ3x4mEwrneyP5987lkU03xKB80F2qE0FAMwiEo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Iv12OwbB; arc=none smtp.client-ip=209.85.222.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Iv12OwbB" Received: by mail-qk1-f201.google.com with SMTP id af79cd13be357-8b244ef3ed4so614935485a.0 for ; Fri, 14 Nov 2025 06:06:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763129210; x=1763734010; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=p199NXv4y1rAS/mf/rNg1mVOWhh1nlFD9giH3bYyspE=; b=Iv12OwbBTLvxOIbmtCIM1V8J/69D9QpLItfO9r5F3AJd+MO5Fws1bBjszWNXh5Pzkj cvEQx++jCosZou6UlLN3wolMgn47y1Z4YWxnwBxPrgjcuFTSeU+mxORfcjHvWmYdncbE c8iGBveSNNneQWHwMmaRZzj0uK4Yb7ndhn4QpEMFYy4z/+INZ0jK9t5+hi0RsYBUZTG8 XiqsuwBbXq/dES+oJ0gBB4P3BFFuzrZ3g63BnV8vLau5v7RMS0Iqe4c7J8Qr3Zds7m3t zH28nLJnokFAhd91+QQKrJni32syJT3uP7somMXyQ0A8WrBkAh+jixWa/uMQaTm2XlQX IMaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763129210; x=1763734010; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=p199NXv4y1rAS/mf/rNg1mVOWhh1nlFD9giH3bYyspE=; b=JLJuxmOmNvq1MquNMtvtxjea3v8ox9Lf4n/TmLALt99t6hs0acEH3oJneCDo79oxSe Zc+xhKYyKzU6NSufwWNBoCF0Ov/cy+OoMd7M5urbbjI2m4qbqca7dqNXcLa9Poq18dUr 5pdLdKKVh8S6NpJG1AndbQRtzx6VW5pePrpsTZMy2hHxk0wMEnsXONkksQgimaxN27LA QWkEDqcPF45Q2Np0DJVlKlmD12+3L7tiSqLGqLpEey2wNkePd/0Nmm0DZPWO5EAgdObL zN6tE3/lZUs3GyQPriSyUihczGqC6WJp8RLtZqpd4wcP/n0oGaKp5mx3bpmrhrk0OvVQ hOwA== X-Gm-Message-State: AOJu0Yw3PoW6If3aea/hCjX8Hia+2Qtn18JreAG42k4/BXAW/MPswXGW Z3H/rfApXFfBX8ae0BnQY3X702+QAU/BTa6LzBsQ26gleJijMVS/j7EFsOqykAU9oNHaCvzFtuI 3W/Gzo0wgsxcXYA== X-Google-Smtp-Source: AGHT+IFnKwSlCOoJNm5BxGPhmRz/amuoNvsx4cXYb+6Q6QrBidCBXIIeFW3Sr/GWP3mQXZfKTbeDmXlGgmRWpQ== X-Received: from qkpi5.prod.google.com ([2002:a05:620a:27c5:b0:8a2:d4df:9888]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:620a:1911:b0:8a4:107a:6772 with SMTP id af79cd13be357-8b2c31dd43amr401388485a.76.1763129209801; Fri, 14 Nov 2025 06:06:49 -0800 (PST) Date: Fri, 14 Nov 2025 14:06:45 +0000 In-Reply-To: <20251114140646.3817319-1-edumazet@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20251114140646.3817319-1-edumazet@google.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog Message-ID: <20251114140646.3817319-2-edumazet@google.com> Subject: [PATCH 1/2] rbtree: inline rb_first() From: Eric Dumazet To: Andrew Morton , Jakub Kicinski , Paolo Abeni Cc: linux-kernel , netdev@vger.kernel.org, Neal Cardwell , Kuniyuki Iwashima , Eric Dumazet , Eric Dumazet Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This is a very small function, inlining it save cpu cycles by reducing register pressure and removing call/ret overhead. It also reduces vmlinux text size by 744 bytes on a typical x86_64 build. Before: size vmlinux text data bss dec hex filename 34812525 22177365 5685248 62675138 3bc58c2 vmlinux After: size vmlinux text data bss dec hex filename 34811781 22177365 5685248 62674394 3bc55da vmlinux Signed-off-by: Eric Dumazet Reviewed-by: Kuan-Wei Chiu --- include/linux/rbtree.h | 16 +++++++++++++++- lib/rbtree.c | 16 ---------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/include/linux/rbtree.h b/include/linux/rbtree.h index 8d2ba3749866f500a492d267e5e13556f6aa3f55..484554900f7d3201d41fb29e04f= b65fe331eee79 100644 --- a/include/linux/rbtree.h +++ b/include/linux/rbtree.h @@ -43,7 +43,21 @@ extern void rb_erase(struct rb_node *, struct rb_root *); /* Find logical next and previous nodes in a tree */ extern struct rb_node *rb_next(const struct rb_node *); extern struct rb_node *rb_prev(const struct rb_node *); -extern struct rb_node *rb_first(const struct rb_root *); + +/* + * This function returns the first node (in sort order) of the tree. + */ +static inline struct rb_node *rb_first(const struct rb_root *root) +{ + struct rb_node *n; + + n =3D root->rb_node; + if (!n) + return NULL; + while (n->rb_left) + n =3D n->rb_left; + return n; +} extern struct rb_node *rb_last(const struct rb_root *); =20 /* Postorder iteration - always visit the parent after its children */ diff --git a/lib/rbtree.c b/lib/rbtree.c index 5114eda6309c9d867a3e1ed9358bf9b3b275eb71..b946eb4b759d3b65f5bc5d54d03= 77348962bdc56 100644 --- a/lib/rbtree.c +++ b/lib/rbtree.c @@ -460,22 +460,6 @@ void __rb_insert_augmented(struct rb_node *node, struc= t rb_root *root, } EXPORT_SYMBOL(__rb_insert_augmented); =20 -/* - * This function returns the first node (in sort order) of the tree. - */ -struct rb_node *rb_first(const struct rb_root *root) -{ - struct rb_node *n; - - n =3D root->rb_node; - if (!n) - return NULL; - while (n->rb_left) - n =3D n->rb_left; - return n; -} -EXPORT_SYMBOL(rb_first); - struct rb_node *rb_last(const struct rb_root *root) { struct rb_node *n; --=20 2.52.0.rc1.455.g30608eb744-goog From nobody Sat Feb 7 19:45:06 2026 Received: from mail-qk1-f202.google.com (mail-qk1-f202.google.com [209.85.222.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CC285324716 for ; Fri, 14 Nov 2025 14:06:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763129214; cv=none; b=XpbNvovTshAlwwiMIqVY6O8kFlbHCTyuc7tj60wTdm5gXd0x1QL2aziN6t5hXyLvlhEupCuQXEMw7GL5glSeqQKgztwTkNyLIVOngcvgzxDCXmp0HXpw8YXDzgZK0DBgCWFuHZPNQslSC87qTgr44UfMFdL0mptqKE9Nfm/bam4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763129214; c=relaxed/simple; bh=8CNdMewGsx41bEggjctKUhb3l/6G3t2HoNXMXWwEL3E=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=V4ukuz9IQBjReXs++pbau3Mo5/4TyjDAEYOJqJfv6ylID4h0ijeR5WLxAL/Y0F4bqRTVp8tlo8wKIb4DVRJBVh92Gnlw60de6YGiQKn8E172lpYbA6ySgk4EVZgCJh9/PoJ3FFNJV0h4qwL5kVMVNPSdu6M+kTljKiPgS36mcnE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=0FJNJQhY; arc=none smtp.client-ip=209.85.222.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="0FJNJQhY" Received: by mail-qk1-f202.google.com with SMTP id af79cd13be357-8b234bae2a7so621859285a.3 for ; Fri, 14 Nov 2025 06:06:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763129211; x=1763734011; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=wE+vpHPbepYVrAYzO9oSKhRrZzx0m16Vg36Pmk/k+7w=; b=0FJNJQhYGphQ3500DbfcDZRCex9ISiq+uj98tmcjaGLedRv/2D+E9clsib18GrqDRc 9bw/lNz9S+7yJH8z1PrX2pPsB88Nyk0Q7BlfRs+/di/XjpPBiC0c8IuwuCwUAhpBXR8/ rIIs1gqjRTm3RmS5i/UjFBmqdwKQVRFEJyVi7dms8nkqYFVvOZET+zqAGqqSH+VOjMrs JeM/DxFm01E1z6/4iPkPot2tojJv3t9gKUVclvn7k2ZpqV2a3aSRw8yEvzdl1WrLEYwf vMl7obzf1kyx6dM7FosKhAq7uE1XRXwh3AnUNLmDKHUuc7EFgF4cx33Wvms4WDAEYHYK XSkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763129212; x=1763734012; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=wE+vpHPbepYVrAYzO9oSKhRrZzx0m16Vg36Pmk/k+7w=; b=L8QPT1NHz8bQ8pDSu+avCkkhnWIsaSyzP1YCse+QZrnmiXTyHsY+FVlSXDBS2DXfQ4 qjwuhTAmndyj7dpIdQXL12nNPVLxIeSuRYPJP9c8+T18/wuQYBuNBeCUlUyhRqQQWiFP 3akjyIud2G5xMDfhG5dxOjaPt8b2cBpPOgDqygYOupQU5hPQJZH1B6aPJJnp4x9nO9P9 HlrNGj26Mfo+Th+EBlx/88zaiIvqIFfFf2fJcO8wRYYbN+HBWcTBnMMXIVpz6S8DLImw lDq7uGEFxebMCfBRL+kJjDdd9Yws6IqtJykxTacH0fzz1A5nuIHk0eCXMGGy46JjUdrU oU7w== X-Gm-Message-State: AOJu0YwMXtIg36aGlwRN0QUvAOtAhDuTDYFAHEzWkuGG0QQclxP8jJpj bO+zJxEFP0QIArmeeq9gpA46qPyBc3e5MzNX8qGoewqT1sTGWsY7SdF4QeijGnHMRI2EL12LYN5 Q7TFlEAlMbMvrdQ== X-Google-Smtp-Source: AGHT+IERsD2Hotq/N9BuslL3Nt6Isjtbmmy0g7XfPf6uSCNXSmONnk3+qeMEeYBMbw/paPedg5dsNWG5AFOC8w== X-Received: from qknpz1.prod.google.com ([2002:a05:620a:6401:b0:8a4:f21b:9d75]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:620a:4095:b0:8ab:5cb2:1f68 with SMTP id af79cd13be357-8b2c31b8ed3mr370659485a.69.1763129211372; Fri, 14 Nov 2025 06:06:51 -0800 (PST) Date: Fri, 14 Nov 2025 14:06:46 +0000 In-Reply-To: <20251114140646.3817319-1-edumazet@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20251114140646.3817319-1-edumazet@google.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog Message-ID: <20251114140646.3817319-3-edumazet@google.com> Subject: [PATCH 2/2] rbtree: inline rb_last() From: Eric Dumazet To: Andrew Morton , Jakub Kicinski , Paolo Abeni Cc: linux-kernel , netdev@vger.kernel.org, Neal Cardwell , Kuniyuki Iwashima , Eric Dumazet , Eric Dumazet Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This is a very small function, inlining it save cpu cycles in TCP by reducing register pressure and removing call/ret overhead. It also reduces vmlinux text size by 122 bytes on a typical x86_64 build. Before: size vmlinux text data bss dec hex filename 34811781 22177365 5685248 62674394 3bc55da vmlinux After: size vmlinux text data bss dec hex filename 34811659 22177365 5685248 62674272 3bc5560 vmlinux Signed-off-by: Eric Dumazet Reviewed-by: Kuan-Wei Chiu --- include/linux/rbtree.h | 16 +++++++++++++++- lib/rbtree.c | 13 ------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/include/linux/rbtree.h b/include/linux/rbtree.h index 484554900f7d3201d41fb29e04fb65fe331eee79..4091e978aef2404b56d7643d938= 5727c69796678 100644 --- a/include/linux/rbtree.h +++ b/include/linux/rbtree.h @@ -58,7 +58,21 @@ static inline struct rb_node *rb_first(const struct rb_r= oot *root) n =3D n->rb_left; return n; } -extern struct rb_node *rb_last(const struct rb_root *); + +/* + * This function returns the last node (in sort order) of the tree. + */ +static inline struct rb_node *rb_last(const struct rb_root *root) +{ + struct rb_node *n; + + n =3D root->rb_node; + if (!n) + return NULL; + while (n->rb_right) + n =3D n->rb_right; + return n; +} =20 /* Postorder iteration - always visit the parent after its children */ extern struct rb_node *rb_first_postorder(const struct rb_root *); diff --git a/lib/rbtree.c b/lib/rbtree.c index b946eb4b759d3b65f5bc5d54d0377348962bdc56..18d42bcf4ec9d581807179f3456= 1f4561900206d 100644 --- a/lib/rbtree.c +++ b/lib/rbtree.c @@ -460,19 +460,6 @@ void __rb_insert_augmented(struct rb_node *node, struc= t rb_root *root, } EXPORT_SYMBOL(__rb_insert_augmented); =20 -struct rb_node *rb_last(const struct rb_root *root) -{ - struct rb_node *n; - - n =3D root->rb_node; - if (!n) - return NULL; - while (n->rb_right) - n =3D n->rb_right; - return n; -} -EXPORT_SYMBOL(rb_last); - struct rb_node *rb_next(const struct rb_node *node) { struct rb_node *parent; --=20 2.52.0.rc1.455.g30608eb744-goog