Hi Yury,
On Sat, 2022-08-20 at 14:35 -0700, Yury Norov wrote:
On Sat, Aug 20, 2022 at 05:03:09PM +0200, Sander Vanheule wrote:
When the number of CPUs that can possibly be brought online is known at boot time, e.g. when HOTPLUG is disabled, nr_cpu_ids may be smaller than NR_CPUS. In that case, cpu_possible_mask would not be completely filled, and cpumask_full(cpu_possible_mask) can return false for valid system configurations.
It doesn't mean we can just give up. You can check validity of possible cpumask like this: KUNIT_EXPECT_EQ(test, nr_cpu_ids, cpumask_first_zero(&mask_all)) KUNIT_EXPECT_EQ(test, NR_CPUS, cpumask_first(&mask_all))
Did you mean cpu_possible_mask, or mask_all?
For cpu_possible_mask, these tests are in test_cpumask_first(), albeit under a slightly different form. Together with the tests in test_cpumask_weight() and test_cpumask_last(), cpu_possible_mask is already one of the more constrained masks.
For mask_all, the mask is filled up with nr_cpumask_bits <= NR_CPUS. I could add cpumask_first(), cpumask_first_zero(), and cpumask_last() tests though.
More tests could be also added for cpu_all_mask, since this does have all NR_CPUS bits set, but I think that belongs in a separate patch.
I think the extra mask_all and cpu_all_mask test are out of scope for this patch, but they could be added in another patch (for 6.1).
Best, Sander
Fixes: c41e8866c28c ("lib/test: introduce cpumask KUnit test suite") Link: https://lore.kernel.org/lkml/346cb279-8e75-24b0-7d12-9803f2b41c73@riseup.net... Reported-by: Maíra Canal mairacanal@riseup.net Signed-off-by: Sander Vanheule sander@svanheule.net Tested-by: Maíra Canal mairacanal@riseup.net Reviewed-by: David Gow davidgow@google.com
Changes in v2: Rewrite commit message to explain why this test is wrong
lib/test_cpumask.c | 1 - 1 file changed, 1 deletion(-)
diff --git a/lib/test_cpumask.c b/lib/test_cpumask.c index a31a1622f1f6..4ebf9f5805f3 100644 --- a/lib/test_cpumask.c +++ b/lib/test_cpumask.c @@ -54,7 +54,6 @@ static cpumask_t mask_all; static void test_cpumask_weight(struct kunit *test) { KUNIT_EXPECT_TRUE(test, cpumask_empty(&mask_empty)); - KUNIT_EXPECT_TRUE(test, cpumask_full(cpu_possible_mask)); KUNIT_EXPECT_TRUE(test, cpumask_full(&mask_all)); KUNIT_EXPECT_EQ(test, 0, cpumask_weight(&mask_empty)); -- 2.37.2