From nobody Sat Feb 7 04:57:11 2026 Received: from mail-yx1-f52.google.com (mail-yx1-f52.google.com [74.125.224.52]) (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 5C2F132ABCA for ; Mon, 22 Dec 2025 19:11:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766430705; cv=none; b=EP51Q+PhAHejDZP1cJ9y++13fbZV/vXeOOTBQVCpmKf4NDzskTm14ZvkYUw8Vw5IyGZESP+2Nm5TzbEBq+izAX7HmFy6VL9nhw0/HEVCFg5kib3EgQ/n0wy0pJk+7PUuv3bUS+GxQtaX/7MqqmwQC2sltTkvijIlnc1vF9aWLZk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766430705; c=relaxed/simple; bh=M7SVe87HWTpJCQ2tJ2MiaXQIln06utucoD0W4Qi97/0=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Mtwou4OwkD07PGew+m5cDdt9WtzU/SGwxSqWdLInvLqvixXm17uGHmJQ/TpeTvwa7tcJDKqIYwfeoRk/yANMQbkGXTAzQcqkMSDdXYfZ9dGEuSX50FFFr/AsJCx5Bwrl8sEwBtspkoJNc6VLwxu2Bz1uCAHpdFhRiUZSUcW10Ms= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ghFd6Bcg; arc=none smtp.client-ip=74.125.224.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ghFd6Bcg" Received: by mail-yx1-f52.google.com with SMTP id 956f58d0204a3-64472ea7d18so2888922d50.2 for ; Mon, 22 Dec 2025 11:11:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766430703; x=1767035503; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=sPJUWGCvLdmcEKe165XyElbm4PUbJCq01bKbpxG1Lvg=; b=ghFd6BcgVjVvrtEM6HeJbVWS4fMPOLO7y5VjTnNfqYFubzhJnkHeNtXrMB1q6BuO7q bgLQQ1jgd8FHjkh4hGvhumPdd38g9wvdDw8H3hfmGPyw7f0uMklr/odjjZMDiosoCTyD iCBY5fSm6DaSKh9tu+TuCD3AZ7s7Cd4XOZ9hmVdaqycnMwe+a8D/qH8LXT0UZhnYOCRe v9cR8Mz3qgBL8du/5QF1vFAxB11X5GhOB1MYlihRMVs03mPaCSTn9aCul7s7G+WRe1yq +LNLAYvkl40Bd+ckLe7tovfkXlPceHnK+r7DcaqP1Z8D/tjtjNwt0y/A8ispBMffZ7Cw n+dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766430703; x=1767035503; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=sPJUWGCvLdmcEKe165XyElbm4PUbJCq01bKbpxG1Lvg=; b=XdomjNxReBWGVl8ShwuyGowNq7AhDjCuyouKYYXqOa4grtPzoEWYZGjrH+MNgd+ViC icB6hqRPXhHtX7ZJDXl7NEKmaYw7MB0TwWMxk9MNy5cYXoX4/8waKkQGdtOoAdAxVyUN JdYCPKrrxyYANEG2RsauleTo79LkWGqrz3gpkjKl/X9FNdYzk+hWJbMdg7VNuH3dXoz3 njMEa8m6fqIcZQQ1205VfJd+A53Egqi/nUDFKOC2qJ8PXdK6FHY/1pk6hj/Q2FYV6U4R Z7E6/X4r4Ha7HOoouq3onZL7IKZvlbo0jge3/WvFtCQU6F0Lxpc+P9C3MPMc4heRxzhN 9Qzw== X-Forwarded-Encrypted: i=1; AJvYcCUxgD2lT6PAhc1TuNQk6mJ/oHW/M89ceAN1paTrnFDOxCcPKIGXofgtlJ/nHpzlgFlQ7PuvwaCB6ty572I=@vger.kernel.org X-Gm-Message-State: AOJu0YxNTlArDYsZGFkBe4/joMAd1oaS9nXYOyONlKj6FhEmjwO7Kr7F 8fNqFwEHdJyC1xv6LUwbQR6tlKCEF87GCdb8o977xGeLRR1E+6hMuzvj X-Gm-Gg: AY/fxX4zLqD6I9yPwINMG0OtsNkNGHz0aHNzYWH0DR8HVQrkWUatNgb6Ane9podcnTd Tl6qyXzfI0kMYiSkcDiUKtsG5WC2vy1nUDsfeYXvMIGAmbzUXPIbWrr/u0HEB+/1IHYAJqfkwRu k8sCHYK70lN9vbEpmwfQeGXuBVjRMm/1Wze+Yd2c5ZDt7rXFaJ9PxYDvPGIeaQSrYl9MulmuZit 9PahY5qL5W9drGp6KxnctGYTWbikTWjdsjmRHwGV8+ssmg2EnPvWmMfYhxPXe0y6fJJhX8l0Skc EU8YYF/Cv1REcp4dIzoWuvfFB4sAA9rfedsxMJ1YPKefsd4xK3HmB3d5VlQppgGhEpdu1g4TBQk B9guBzYPYVlE2bbx201gRj2zaO+tu7xQkeEEQ9sqDAfQ1VDHnZRJAiAIxkpY0Z7GlR4jLrRHl5L Vcw0kSJSE= X-Google-Smtp-Source: AGHT+IEE02+qlvaPhCR0o8T7KyM0jJq+S/m8CVEUukTcwuceTc0HclHZ09b/2fyhW3tB053ci9gBrA== X-Received: by 2002:a53:d00a:0:b0:644:60d9:7528 with SMTP id 956f58d0204a3-6466a8dea7dmr8734318d50.90.1766430703311; Mon, 22 Dec 2025 11:11:43 -0800 (PST) Received: from localhost ([2601:346:0:79bd:98ae:7902:ebbf:ba29]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-6466a8bd4c3sm5881759d50.8.2025.12.22.11.11.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Dec 2025 11:11:43 -0800 (PST) From: "Yury Norov (NVIDIA)" To: Ingo Molnar , Thomas Gleixner , Borislav Petkov , Dave Hansen , "H. Peter Anvin" , Yury Norov , Rasmus Villemoes , Andrew Morton , "Peter Zijlstra (Intel)" , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Tony Luck , "Xin Li (Intel)" , "Chang S. Bae" , x86@kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/2] bitmap: add bitmap_weight_from() Date: Mon, 22 Dec 2025 14:11:37 -0500 Message-ID: <20251222191140.380498-2-yury.norov@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251222191140.380498-1-yury.norov@gmail.com> References: <20251222191140.380498-1-yury.norov@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The function calculates a Hamming weight of a bitmap starting from an arbitrary bit. Signed-off-by: Yury Norov (NVIDIA) --- include/linux/bitmap.h | 30 ++++++++++++++++++++++++++++++ lib/test_bitmap.c | 26 ++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h index b0395e4ccf90..fdff6e87512b 100644 --- a/include/linux/bitmap.h +++ b/include/linux/bitmap.h @@ -57,6 +57,7 @@ struct device; * bitmap_weight(src, nbits) Hamming Weight: number set= bits * bitmap_weight_and(src1, src2, nbits) Hamming Weight of and'ed b= itmap * bitmap_weight_andnot(src1, src2, nbits) Hamming Weight of andnot'e= d bitmap + * bitmap_weight_from(src, start, end) Hamming Weight starting fr= om @start * bitmap_set(dst, pos, nbits) Set specified bit area * bitmap_clear(dst, pos, nbits) Clear specified bit area * bitmap_find_next_zero_area(buf, len, pos, n, mask) Find bit free area @@ -479,6 +480,35 @@ unsigned long bitmap_weight_andnot(const unsigned long= *src1, return __bitmap_weight_andnot(src1, src2, nbits); } =20 +/** + * bitmap_weight_from - Hamming weight for a memory region + * @bitmap: The base address + * @start: The bitnumber to starts weighting + * @end: the bitmap size in bits + * + * Returns the number of set bits in the region. If @start >=3D @end, + * the result is undefined. + */ +static __always_inline +unsigned long bitmap_weight_from(const unsigned long *bitmap, + unsigned int start, unsigned int end) +{ + unsigned long w; + + if (small_const_nbits(end)) + return hweight_long(*bitmap & GENMASK(end - 1, start)); + + bitmap +=3D start / BITS_PER_LONG; + /* Opencode round_down() to not include math.h */ + end -=3D start & ~(BITS_PER_LONG - 1); + start %=3D BITS_PER_LONG; + w =3D bitmap_weight(bitmap, end); + if (start) + w -=3D hweight_long(*bitmap & BITMAP_LAST_WORD_MASK(start)); + + return w; +} + static __always_inline void bitmap_set(unsigned long *map, unsigned int start, unsigned int nbits) { diff --git a/lib/test_bitmap.c b/lib/test_bitmap.c index c83829ef557f..eff0b1eba8e4 100644 --- a/lib/test_bitmap.c +++ b/lib/test_bitmap.c @@ -851,6 +851,31 @@ static void __init test_for_each_set_bit_from(void) } } =20 +static void __init test_bitmap_weight(void) +{ + unsigned int bit, w1, w2, w; + DECLARE_BITMAP(b, 30); + + bitmap_parselist("all:1/2", b, 30); + + /* Test inline implementation */ + w =3D bitmap_weight(b, 30); + w1 =3D bitmap_weight(b, 15); + w2 =3D bitmap_weight_from(b, 15, 30); + + expect_eq_uint(15, w); + expect_eq_uint(8, w1); + expect_eq_uint(7, w2); + + /* Test outline implementation */ + w =3D bitmap_weight(exp1, EXP1_IN_BITS); + for (bit =3D 0; bit < EXP1_IN_BITS; bit++) { + w1 =3D bitmap_weight(exp1, bit); + w2 =3D bitmap_weight_from(exp1, bit, EXP1_IN_BITS); + expect_eq_uint(w1 + w2, w); + } +} + static void __init test_for_each_clear_bit(void) { DECLARE_BITMAP(orig, 500); @@ -1441,6 +1466,7 @@ static void __init selftest(void) test_bitmap_const_eval(); test_bitmap_read_write(); test_bitmap_read_perf(); + test_bitmap_weight(); test_bitmap_write_perf(); =20 test_find_nth_bit(); --=20 2.43.0 From nobody Sat Feb 7 04:57:11 2026 Received: from mail-yw1-f174.google.com (mail-yw1-f174.google.com [209.85.128.174]) (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 703D333A9D8 for ; Mon, 22 Dec 2025 19:11:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766430707; cv=none; b=OBZzEULwgyRmr4hzzuMVA8YLpOZBVu9WBOQd+Ii1mPdjr9gVNPUUrW2xvGCMkQ7VAIQ87shpGGZLWknSTT2QeYchhzr550QXkBkQPnTEQX234nfqtD1VGXhbth3LW3xvdwLz3GAI998PT4dnSccpZLIlGZSt/mNUc8gTh5zl5sA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766430707; c=relaxed/simple; bh=todWKbOR7N5gkgfOJpwxDdxg2ATxNMsCp3twnm07uRg=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XqrS8p3N8Ew0nUcmFHIN1pb6LBuSSwvzts7krF0z3+KNxJyx5tOYUPytoDvqRY41I4Uf5QuHO9+iFKZQ61PqZX+6eQdOtuYLy83n51VGBn86VFq/z1L+f2lNehPM1z9SeMTN+zuOPyT24DMtjiJBHWQzmI7eK+CBl9V/yP6Nxx0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=B1Aq/2ze; arc=none smtp.client-ip=209.85.128.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="B1Aq/2ze" Received: by mail-yw1-f174.google.com with SMTP id 00721157ae682-786a822e73aso37585707b3.3 for ; Mon, 22 Dec 2025 11:11:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766430704; x=1767035504; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=cev0oRj6wUiS0nFoJ8xzMynhHv3YKEaPiWJaJeat0/I=; b=B1Aq/2zeGfoVvofQP8B/qyytIvlPqV/RBS4pRxPUugxini8AHIogB94vY8mQM0kNum vBOYF255QLVRrRpQakvHd/W3K5TZlC6aAFwvJHGIAYf02Z71zblajEsTk6DKPwNnwDYZ XDILph+VUstePJiNGmUC0/zqccdQDagYYQFHb2ErxgPnqarasQyOkrA+rZzY99um+7iB 7rrguFxnwYYPzbfpRfHDv331UQvErjp4CHhVdtw40JEkVoq7yVKEjoncztJ8z3Oxdgqj MqTf5Ym03B/oLFRnKLx+4DrtH/fnIgrwx8uRIoeR6ZhvLga8rK/80Vu2i2DX5AcAM5Sb eL9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766430704; x=1767035504; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=cev0oRj6wUiS0nFoJ8xzMynhHv3YKEaPiWJaJeat0/I=; b=uaZ7OizixcAmv5dF0fXu8h7YYXyoFO7yNJ8szbqfu4RJ72Hczw74Xweva89i12Ef7P SZ3BTHRgcKuuxwTUVeusd/L8BOuM5kB+aQTbgYfFQwgt3AOTh6QQJphXWWK/fGccYqft tUuaSBqvoSI01/CGLZLqG6RG5/jiErlBzb1CA5kxYi3LDIGO2iapEievyzBl3zNmHLZ4 B281nja4QW7ShOBorrxuasYyxs65fimX8fSmWHfzDmLdGAOckPVH+V942NGETTwMk5YB nyGyYiHwwlIU0BfNGFuQYV7A4h3qiF85YWNR5dclP4uC63KCyHUZbLSTn8QNyqxMTuRr WN7w== X-Forwarded-Encrypted: i=1; AJvYcCVT8Opl+NUqHn+9kO7vlBNKKubs+1gUJPM68m6AhaK8VLwNH9z/R9KVC8Xx836IqWMd8SHXwAwS+ICbkpY=@vger.kernel.org X-Gm-Message-State: AOJu0Yy1a62UG9AYautwSwzcA6CGsuT+0Y3kr3eBoMcXvKlfkm2X/+EU FUdUNHWGwo0m4S9Rwi1ySmzEFsqPKoL6B7A8zwY6pWq6020NFAyib0cP X-Gm-Gg: AY/fxX6c1twd5q/+T7ixhOTQVW2dcRx2b5RtGwYACr6Eb4g2+AdXSs7vBgJPd16j3S5 rhBxGWhEm7lS/3Id54VSHv6vFjSEFjYsmhvD8CUWLpzBt+gLZ9lUtWdTvDaW0tW7qz0ybaLEOuJ DT8CrpIo5PCamiF3ScZt6bRN9obQpK75zfH+ODoiZXkgovx9KY/3fkoGdQJMETRWrnThcEZqQuX hWcGCvBZ+A5VnUbDlbBgObbUXbHmztlrcPQijZEMGoFrZ/7+lHE5b5ireny6TqXN8kJW6Z+FI+D hZDUIEF67+A+7RsULrsbPdl8BGjWOhQhkuejb/Bq7r4Cc4dyIi8shDq5RSOfySqFtM6W7ooinwD CrcZh6HOcYFhlOMXpyPOgWZ+w+i+m1Jo4b6Tg7T9W0u8UI3iSeXR54VyebsZNq9I50qcA34RuYO GuBnuNvZMXHW8cofzPlA== X-Google-Smtp-Source: AGHT+IEqv0Wjx4njua0VMoNqdke9FHyRktCJfgdAtf4zIPs7A9q6+6MAn+iGZZQAH3KMKTRtSSon+g== X-Received: by 2002:a05:690c:4881:b0:78e:591:8775 with SMTP id 00721157ae682-78fb400e2dfmr106888067b3.44.1766430704146; Mon, 22 Dec 2025 11:11:44 -0800 (PST) Received: from localhost ([2601:346:0:79bd:98ae:7902:ebbf:ba29]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78fb439ee83sm45575617b3.14.2025.12.22.11.11.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Dec 2025 11:11:43 -0800 (PST) From: "Yury Norov (NVIDIA)" To: Ingo Molnar , Thomas Gleixner , Borislav Petkov , Dave Hansen , "H. Peter Anvin" , Yury Norov , Rasmus Villemoes , Andrew Morton , "Peter Zijlstra (Intel)" , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Tony Luck , "Xin Li (Intel)" , "Chang S. Bae" , x86@kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/2] x86/topology: use bitmap_weight_from() Date: Mon, 22 Dec 2025 14:11:38 -0500 Message-ID: <20251222191140.380498-3-yury.norov@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251222191140.380498-1-yury.norov@gmail.com> References: <20251222191140.380498-1-yury.norov@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Switch topo_unit_count() to use bitmap_weight_from(). Signed-off-by: Yury Norov (NVIDIA) --- arch/x86/kernel/cpu/topology.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/arch/x86/kernel/cpu/topology.c b/arch/x86/kernel/cpu/topology.c index f55ea3cdbf88..ba7142f417ad 100644 --- a/arch/x86/kernel/cpu/topology.c +++ b/arch/x86/kernel/cpu/topology.c @@ -204,15 +204,11 @@ static __init bool check_for_real_bsp(u32 apic_id) static unsigned int topo_unit_count(u32 lvlid, enum x86_topology_domains a= t_level, unsigned long *map) { - unsigned int id, end, cnt =3D 0; + unsigned int end; =20 /* Calculate the exclusive end */ end =3D lvlid + (1U << x86_topo_system.dom_shifts[at_level]); - - /* Unfortunately there is no bitmap_weight_range() */ - for (id =3D find_next_bit(map, end, lvlid); id < end; id =3D find_next_bi= t(map, end, ++id)) - cnt++; - return cnt; + return bitmap_weight_from(map, lvlid, end); } =20 static __init void topo_register_apic(u32 apic_id, u32 acpi_id, bool prese= nt) --=20 2.43.0