Hi!

I have stumbled over the kunit framework issues that make the respective test
cases useless.

Now to the details.
Consider having today's Linux Next.

Scenario 1 (good):

I run

        ./tools/testing/kunit/kunit.py config
        ./tools/testing/kunit/kunit.py run printf

Everything works as expected:

  [10:19:36] Testing complete. Ran 28 tests: passed: 28
  [10:19:36] Elapsed time: 15.929s total, 0.001s configuring, 15.761s building, 
0.114s running


Scenario 2 (BAD):

I applied the following change:

--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -18,6 +18,7 @@
  */
 
 #include <linux/stdarg.h>
+#include <linux/bitops.h>
 #include <linux/build_bug.h>
 #include <linux/clk.h>
 #include <linux/clk-provider.h>
@@ -2904,12 +2889,17 @@ int vsnprintf(char *buf, size_t size, const char 
*fmt_str, va_list args)
 
                case FORMAT_STATE_NUM: {
                        unsigned long long num;
+                       u8 shift = fmt.size * 8 - 1;
 
                        if (fmt.size > sizeof(int))
                                num = va_arg(args, long long);
                        else
-                               num = convert_num_spec(va_arg(args, int), 
fmt.size, spec);
-                       str = number(str, end, num, spec);
+                               num = va_arg(args, int);
+                       num = sign_extend64(num, shift);
+                       if (spec.flags & SIGN)
+                               str = number(str, end, num, spec);
+                       else
+                               str = number(str, end, -(long long)num, spec);
                        continue;
                }
 

Tests went into cosmos (I waited a few minutes and has to interrupt that):

  ^CERROR:root:Build interruption occurred. Cleaning console.
  ^CERROR:root:Build interruption occurred. Cleaning console.
  ^CERROR:root:Build interruption occurred. Cleaning console.
  Command '['.kunit/linux', 'kunit.filter_glob=printf', 'kunit.enable=1', 
'mem=1G', 'console=tty', 'kunit_shutdown=halt']' timed out after 300 seconds
  [10:29:52] [ERROR] Test: <missing>: Could not find any KTAP output. Did any 
KUnit tests run?
  [10:29:52] ============================================================
  [10:29:52] Testing complete. Ran 0 tests: errors: 1
  [10:29:52] Elapsed time: 305.676s total, 0.001s configuring, 5.669s building, 
300.006s running

NOTE!
Independently on how long I waited the Elapsed time is about 5 minutes
(Seems 300 seconds limit as stated in the output).


Scenario 3 (BAD):

Now I took again a clean tree and applied this change:

--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -18,6 +18,7 @@
  */
 
 #include <linux/stdarg.h>
+#include <linux/bitops.h>
 #include <linux/build_bug.h>
 #include <linux/clk.h>
 #include <linux/clk-provider.h>
@@ -2904,11 +2889,17 @@ int vsnprintf(char *buf, size_t size, const char 
*fmt_str, va_list args)
 
                case FORMAT_STATE_NUM: {
                        unsigned long long num;
+                       u8 shift = fmt.size * 8 - 1;
 
                        if (fmt.size > sizeof(int))
                                num = va_arg(args, long long);
+                       else {
+                               num = va_arg(args, int);
+                       if ((spec.flags & SIGN))
+                               num = sign_extend64(num, shift);
                        else
-                               num = convert_num_spec(va_arg(args, int), 
fmt.size, spec);
+                               num &= ~(BIT_ULL(shift) - 1);
+                       }
                        str = number(str, end, num, spec);
                        continue;
                }

and run tests again.

  [10:39:16] [ERROR] Test: <missing>: Could not find any KTAP output. Did any 
KUnit tests run?
  [10:39:16] ============================================================
  [10:39:16] Testing complete. Ran 0 tests: errors: 1
  [10:39:16] Elapsed time: 5.762s total, 0.001s configuring, 5.694s building, 
0.067s running

it runs fast and completely useless. (There is no build error)

...

Please, fix this as it is a serious issue and really makes kunit useless.

-- 
With Best Regards,
Andy Shevchenko



Reply via email to