Skip to content

Commit 25bbe84

Browse files
sulixChristianKoenigAMD
authored andcommitted
drm: test: Fix 32-bit issue in drm_buddy_test
The drm_buddy_test KUnit tests verify that returned blocks have sizes which are powers of two using is_power_of_2(). However, is_power_of_2() operations on a 'long', but the block size is a u64. So on systems where long is 32-bit, this can sometimes fail even on correctly sized blocks. This only reproduces randomly, as the parameters passed to the buddy allocator in this test are random. The seed 0xb2e06022 reproduced it fine here. For now, just hardcode an is_power_of_2() implementation using x & (x - 1). Signed-off-by: David Gow <[email protected]> Acked-by: Christian König <[email protected]> Reviewed-by: Maíra Canal <[email protected]> Reviewed-by: Arunpravin Paneer Selvam <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] Signed-off-by: Christian König <[email protected]>
1 parent 4453545 commit 25bbe84

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

drivers/gpu/drm/tests/drm_buddy_test.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ static int check_block(struct kunit *test, struct drm_buddy *mm,
8989
err = -EINVAL;
9090
}
9191

92-
if (!is_power_of_2(block_size)) {
92+
/* We can't use is_power_of_2() for a u64 on 32-bit systems. */
93+
if (block_size & (block_size - 1)) {
9394
kunit_err(test, "block size not power of two\n");
9495
err = -EINVAL;
9596
}

0 commit comments

Comments
 (0)