Thread (6 messages) 6 messages, 3 authors, 2h ago

Re: test_bitmap fails on ppc/ppc64 on kernels v7.1.3, v7.2-rc2

From: "Christophe Leroy (CS GROUP)" <chleroy@kernel.org>
Date: 2026-07-08 07:51:43
Also in: lkml
Subsystem: bitmap api, library code, the rest · Maintainers: Yury Norov, Andrew Morton, Linus Torvalds


Le 08/07/2026 à 09:43, Andy Shevchenko a écrit :
On Wed, Jul 08, 2026 at 01:25:01AM +0200, Erhard Furtner wrote:

...
quoted
quoted
So there is something with your config
Interesting! As I get the same test failure on my Talos II too.

Anyhow, I was able to bisect the issue. Offending commit is:

  # git bisect bad
6b5a4b68736798df1031404a2fad06d031253ef7 is the first bad commit
commit 6b5a4b68736798df1031404a2fad06d031253ef7 (HEAD)
Author: Andy Shevchenko [off-list ref]
Date:   Thu Feb 26 12:16:44 2026 +0100

     bitmap: Add test for out-of-boundary modifications for scatter & gather

     Make sure that bitmap_scatter() and bitmap_gather() do not modify
     the bits outside of the given nbits span.

     Signed-off-by: Andy Shevchenko [off-list ref]
     Signed-off-by: Yury Norov [off-list ref]

  lib/test_bitmap.c | 10 +++++++---
  1 file changed, 7 insertions(+), 3 deletions(-)


Reverting this commit on top of v7.2-rc2 lets the test pass:

test_bitmap: loaded.
test_bitmap: parselist('0-2047:128/256'):	888
test_bitmap: scnprintf("%*pbl", '0-32767'):	6074
test_bitmap: test_bitmap_read_perf:		1190938
test_bitmap: test_bitmap_write_perf:		1259471
test_bitmap: all 208655 tests passed

Your hint about my config made me check a few options and I found the
offending one, which is INIT_STACK_ALL_PATTERN=y. On a kernel built with
INIT_STACK_ALL_ZERO=y the issue does not show up.
Oh, this is nice. So, there are two (more?) options I see to mitigate
the issue:
- carefully copy the garbage from the stack to the expected values
   (effectively merge the whatever is on stack with the expected value)
- allocate buffers on heap

The latter seems the easiest and right thing to do (since we can't really
predict if the stack pattern is the same or bitmap APIs scatters the bits
just on top of the respective set or clear ones over that pattern).

I will send a patch, thanks for the report and analysis!
The following change fixes the issue for me:
diff --git a/lib/test_bitmap.c b/lib/test_bitmap.c
index 69813c10e6c0b..448c3eb48a4a8 100644
--- a/lib/test_bitmap.c
+++ b/lib/test_bitmap.c
@@ -392,6 +392,7 @@ static void __init test_bitmap_sg(void)

  	/* Scatter/gather relationship */
  	bitmap_zero(bmap_tmp, 100);
+	bitmap_zero(bmap_res, 100);
  	bitmap_gather(bmap_tmp, bmap_scatter, sg_mask, nbits);
  	bitmap_scatter(bmap_res, bmap_tmp, sg_mask, nbits);
  	expect_eq_bitmap(bmap_scatter, bmap_res, 100);

Christophe
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help