1. 04 Aug, 2023 2 commits
    • Rae Moar's avatar
      kunit: fix uninitialized variables bug in attributes filtering · 1c9fd080
      Rae Moar authored
      Fix smatch warnings regarding uninitialized variables in the filtering
      patch of the new KUnit Attributes feature.
      
      Fixes: 529534e8 ("kunit: Add ability to filter attributes")
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Reported-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
      Closes: https://lore.kernel.org/r/202307270610.s0w4NKEn-lkp@intel.com/Signed-off-by: default avatarRae Moar <rmoar@google.com>
      Reviewed-by: default avatarDavid Gow <davidgow@google.com>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      1c9fd080
    • Ruan Jinjie's avatar
      kunit: fix possible memory leak in kunit_filter_suites() · abbf7381
      Ruan Jinjie authored
      Inject fault while probing drm_kunit_helpers.ko, if one of
      kunit_next_attr_filter(), kunit_filter_glob_tests() and
      kunit_filter_attr_tests() fails, parsed_filters,
      parsed_glob.suite_glob/test_glob alloced in
      kunit_parse_glob_filter() is leaked.
      And the filtered_suite->test_cases alloced in kunit_filter_glob_tests()
      or kunit_filter_attr_tests() may also be leaked.
      
      unreferenced object 0xff110001067e4800 (size 1024):
        comm "kunit_try_catch", pid 96, jiffies 4294671796 (age 763.547s)
        hex dump (first 32 bytes):
          73 75 69 74 65 32 00 00 00 00 00 00 00 00 00 00  suite2..........
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        backtrace:
          [<00000000116e8eba>] __kmalloc_node_track_caller+0x4e/0x140
          [<00000000e2f9cce9>] kmemdup+0x2c/0x60
          [<000000002a36710b>] kunit_filter_suites+0x3e4/0xa50
          [<0000000045779fb9>] filter_suites_test+0x1b7/0x440
          [<00000000cd1104a7>] kunit_try_run_case+0x119/0x270
          [<00000000c654c917>] kunit_generic_run_threadfn_adapter+0x4e/0xa0
          [<00000000d195ac13>] kthread+0x2c7/0x3c0
          [<00000000b79c1ee9>] ret_from_fork+0x2c/0x70
          [<000000001167f7e6>] ret_from_fork_asm+0x1b/0x30
      unreferenced object 0xff11000105d79b00 (size 192):
        comm "kunit_try_catch", pid 96, jiffies 4294671796 (age 763.547s)
        hex dump (first 32 bytes):
          f0 e1 5a 88 ff ff ff ff 60 59 bb 8a ff ff ff ff  ..Z.....`Y......
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        backtrace:
          [<000000000d6e4891>] __kmalloc+0x4d/0x140
          [<000000006afe50bd>] kunit_filter_suites+0x424/0xa50
          [<0000000045779fb9>] filter_suites_test+0x1b7/0x440
          [<00000000cd1104a7>] kunit_try_run_case+0x119/0x270
          [<00000000c654c917>] kunit_generic_run_threadfn_adapter+0x4e/0xa0
          [<00000000d195ac13>] kthread+0x2c7/0x3c0
          [<00000000b79c1ee9>] ret_from_fork+0x2c/0x70
          [<000000001167f7e6>] ret_from_fork_asm+0x1b/0x30
      unreferenced object 0xff110001067e6000 (size 1024):
        comm "kunit_try_catch", pid 98, jiffies 4294671798 (age 763.545s)
        hex dump (first 32 bytes):
          73 75 69 74 65 32 00 00 00 00 00 00 00 00 00 00  suite2..........
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        backtrace:
          [<00000000116e8eba>] __kmalloc_node_track_caller+0x4e/0x140
          [<00000000e2f9cce9>] kmemdup+0x2c/0x60
          [<000000002a36710b>] kunit_filter_suites+0x3e4/0xa50
          [<00000000f452f130>] filter_suites_test_glob_test+0x1b7/0x660
          [<00000000cd1104a7>] kunit_try_run_case+0x119/0x270
          [<00000000c654c917>] kunit_generic_run_threadfn_adapter+0x4e/0xa0
          [<00000000d195ac13>] kthread+0x2c7/0x3c0
          [<00000000b79c1ee9>] ret_from_fork+0x2c/0x70
          [<000000001167f7e6>] ret_from_fork_asm+0x1b/0x30
      unreferenced object 0xff11000103f3a800 (size 96):
        comm "kunit_try_catch", pid 98, jiffies 4294671798 (age 763.545s)
        hex dump (first 32 bytes):
          f0 e1 5a 88 ff ff ff ff 40 39 bb 8a ff ff ff ff  ..Z.....@9......
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        backtrace:
          [<000000000d6e4891>] __kmalloc+0x4d/0x140
          [<000000006afe50bd>] kunit_filter_suites+0x424/0xa50
          [<00000000f452f130>] filter_suites_test_glob_test+0x1b7/0x660
          [<00000000cd1104a7>] kunit_try_run_case+0x119/0x270
          [<00000000c654c917>] kunit_generic_run_threadfn_adapter+0x4e/0xa0
          [<00000000d195ac13>] kthread+0x2c7/0x3c0
          [<00000000b79c1ee9>] ret_from_fork+0x2c/0x70
          [<000000001167f7e6>] ret_from_fork_asm+0x1b/0x30
      unreferenced object 0xff11000101a72ac0 (size 16):
        comm "kunit_try_catch", pid 104, jiffies 4294671814 (age 763.529s)
        hex dump (first 16 bytes):
          00 00 00 00 00 00 00 00 e0 2a a7 01 01 00 11 ff  .........*......
        backtrace:
          [<000000000d6e4891>] __kmalloc+0x4d/0x140
          [<00000000c7b724e7>] kunit_filter_suites+0x108/0xa50
          [<00000000bad5427d>] filter_attr_test+0x1e9/0x6a0
          [<00000000cd1104a7>] kunit_try_run_case+0x119/0x270
          [<00000000c654c917>] kunit_generic_run_threadfn_adapter+0x4e/0xa0
          [<00000000d195ac13>] kthread+0x2c7/0x3c0
          [<00000000b79c1ee9>] ret_from_fork+0x2c/0x70
          [<000000001167f7e6>] ret_from_fork_asm+0x1b/0x30
      unreferenced object 0xff11000103caf880 (size 32):
        comm "kunit_try_catch", pid 104, jiffies 4294671814 (age 763.547s)
        hex dump (first 32 bytes):
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        backtrace:
          [<000000000d6e4891>] __kmalloc+0x4d/0x140
          [<00000000c47b0f75>] kunit_filter_suites+0x189/0xa50
          [<00000000bad5427d>] filter_attr_test+0x1e9/0x6a0
          [<00000000cd1104a7>] kunit_try_run_case+0x119/0x270
          [<00000000c654c917>] kunit_generic_run_threadfn_adapter+0x4e/0xa0
          [<00000000d195ac13>] kthread+0x2c7/0x3c0
          [<00000000b79c1ee9>] ret_from_fork+0x2c/0x70
          [<000000001167f7e6>] ret_from_fork_asm+0x1b/0x30
      unreferenced object 0xff11000101a72ae0 (size 16):
        comm "kunit_try_catch", pid 106, jiffies 4294671823 (age 763.538s)
        hex dump (first 16 bytes):
          00 00 00 00 00 00 00 00 00 2b a7 01 01 00 11 ff  .........+......
        backtrace:
          [<000000000d6e4891>] __kmalloc+0x4d/0x140
          [<00000000c7b724e7>] kunit_filter_suites+0x108/0xa50
          [<0000000096255c51>] filter_attr_empty_test+0x1b0/0x310
          [<00000000cd1104a7>] kunit_try_run_case+0x119/0x270
          [<00000000c654c917>] kunit_generic_run_threadfn_adapter+0x4e/0xa0
          [<00000000d195ac13>] kthread+0x2c7/0x3c0
          [<00000000b79c1ee9>] ret_from_fork+0x2c/0x70
          [<000000001167f7e6>] ret_from_fork_asm+0x1b/0x30
      unreferenced object 0xff11000103caf9c0 (size 32):
        comm "kunit_try_catch", pid 106, jiffies 4294671823 (age 763.538s)
        hex dump (first 32 bytes):
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        backtrace:
          [<000000000d6e4891>] __kmalloc+0x4d/0x140
          [<00000000c47b0f75>] kunit_filter_suites+0x189/0xa50
          [<0000000096255c51>] filter_attr_empty_test+0x1b0/0x310
          [<00000000cd1104a7>] kunit_try_run_case+0x119/0x270
          [<00000000c654c917>] kunit_generic_run_threadfn_adapter+0x4e/0xa0
          [<00000000d195ac13>] kthread+0x2c7/0x3c0
          [<00000000b79c1ee9>] ret_from_fork+0x2c/0x70
          [<000000001167f7e6>] ret_from_fork_asm+0x1b/0x30
      unreferenced object 0xff11000101a72b00 (size 16):
        comm "kunit_try_catch", pid 108, jiffies 4294671832 (age 763.529s)
        hex dump (first 16 bytes):
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        backtrace:
          [<000000000d6e4891>] __kmalloc+0x4d/0x140
          [<00000000c47b0f75>] kunit_filter_suites+0x189/0xa50
          [<00000000881258cc>] filter_attr_skip_test+0x148/0x770
          [<00000000cd1104a7>] kunit_try_run_case+0x119/0x270
          [<00000000c654c917>] kunit_generic_run_threadfn_adapter+0x4e/0xa0
          [<00000000d195ac13>] kthread+0x2c7/0x3c0
          [<00000000b79c1ee9>] ret_from_fork+0x2c/0x70
          [<000000001167f7e6>] ret_from_fork_asm+0x1b/0x30
      
      Fixes: 5d31f71e ("kunit: add kunit.filter_glob cmdline option to filter suites")
      Fixes: 529534e8 ("kunit: Add ability to filter attributes")
      Signed-off-by: default avatarRuan Jinjie <ruanjinjie@huawei.com>
      Reviewed-by: default avatarRae Moar <rmoar@google.com>
      Reviewed-by: default avatarDavid Gow <davidgow@google.com>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      abbf7381
  2. 31 Jul, 2023 1 commit
    • Ruan Jinjie's avatar
      kunit: fix wild-memory-access bug in kunit_filter_suites() · 5a175d36
      Ruan Jinjie authored
      As for kunit_filter_suites(), When the filters arg = NULL, such as
      the call of kunit_filter_suites(&suite_set, "suite2", NULL, NULL, &err)
      in filter_suites_test() tese case in kunit, both filter_count and
      parsed_filters will not be initialized.
      
      So it's possible to enter kunit_filter_attr_tests(), and the use of
      uninitialized parsed_filters will cause below wild-memory-access.
      
       RIP: 0010:kunit_filter_suites+0x780/0xa40
       Code: fe ff ff e8 42 87 4d ff 41 83 c6 01 49 83 c5 10 49 89 dc 44 39 74 24 50 0f 8e 81 fe ff ff e8 27 87 4d ff 4c 89 e8 48 c1 e8 03 <66> 42 83 3c 38 00 0f 85 af 01 00 00 49 8b 75 00 49 8b 55 08 4c 89
       RSP: 0000:ff1100010743fc38 EFLAGS: 00010203
       RAX: 03fc4400041d0ff1 RBX: ff1100010389a900 RCX: ffffffff9f940ad9
       RDX: ff11000107429740 RSI: 0000000000000000 RDI: ff110001037ec920
       RBP: ff1100010743fd50 R08: 0000000000000000 R09: ffe21c0020e87f1e
       R10: 0000000000000003 R11: 0000000000032001 R12: ff110001037ec800
       R13: 1fe2200020e87f8c R14: 0000000000000000 R15: dffffc0000000000
       FS:  0000000000000000(0000) GS:ff1100011b000000(0000) knlGS:0000000000000000
       CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
       CR2: ff11000115201000 CR3: 0000000113066001 CR4: 0000000000771ef0
       DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
       DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
       PKRU: 55555554
       Call Trace:
        <TASK>
        ? die_addr+0x3c/0xa0
        ? exc_general_protection+0x148/0x220
        ? asm_exc_general_protection+0x26/0x30
        ? kunit_filter_suites+0x779/0xa40
        ? kunit_filter_suites+0x780/0xa40
        ? kunit_filter_suites+0x779/0xa40
        ? __pfx_kunit_filter_suites+0x10/0x10
        ? __pfx_kfree+0x10/0x10
        ? kunit_add_action_or_reset+0x3d/0x50
        filter_suites_test+0x1b7/0x440
        ? __pfx_filter_suites_test+0x10/0x10
        ? __pfx___schedule+0x10/0x10
        ? try_to_wake_up+0xa8e/0x1210
        ? _raw_spin_lock_irqsave+0x86/0xe0
        ? __pfx__raw_spin_lock_irqsave+0x10/0x10
        ? set_cpus_allowed_ptr+0x7c/0xb0
        kunit_try_run_case+0x119/0x270
        ? __kthread_parkme+0xdc/0x160
        ? __pfx_kunit_try_run_case+0x10/0x10
        kunit_generic_run_threadfn_adapter+0x4e/0xa0
        ? __pfx_kunit_generic_run_threadfn_adapter+0x10/0x10
        kthread+0x2c7/0x3c0
        ? __pfx_kthread+0x10/0x10
        ret_from_fork+0x2c/0x70
        ? __pfx_kthread+0x10/0x10
        ret_from_fork_asm+0x1b/0x30
        </TASK>
       Modules linked in:
       Dumping ftrace buffer:
          (ftrace buffer empty)
       ---[ end trace 0000000000000000 ]---
       RIP: 0010:kunit_filter_suites+0x780/0xa40
       Code: fe ff ff e8 42 87 4d ff 41 83 c6 01 49 83 c5 10 49 89 dc 44 39 74 24 50 0f 8e 81 fe ff ff e8 27 87 4d ff 4c 89 e8 48 c1 e8 03 <66> 42 83 3c 38 00 0f 85 af 01 00 00 49 8b 75 00 49 8b 55 08 4c 89
       RSP: 0000:ff1100010743fc38 EFLAGS: 00010203
       RAX: 03fc4400041d0ff1 RBX: ff1100010389a900 RCX: ffffffff9f940ad9
       RDX: ff11000107429740 RSI: 0000000000000000 RDI: ff110001037ec920
       RBP: ff1100010743fd50 R08: 0000000000000000 R09: ffe21c0020e87f1e
       R10: 0000000000000003 R11: 0000000000032001 R12: ff110001037ec800
       R13: 1fe2200020e87f8c R14: 0000000000000000 R15: dffffc0000000000
       FS:  0000000000000000(0000) GS:ff1100011b000000(0000) knlGS:0000000000000000
       CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
       CR2: ff11000115201000 CR3: 0000000113066001 CR4: 0000000000771ef0
       DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
       DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
       PKRU: 55555554
       Kernel panic - not syncing: Fatal exception
       Dumping ftrace buffer:
          (ftrace buffer empty)
       Kernel Offset: 0x1da00000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
       Rebooting in 1 seconds..
      
      Fixes: 529534e8 ("kunit: Add ability to filter attributes")
      Signed-off-by: default avatarRuan Jinjie <ruanjinjie@huawei.com>
      Reviewed-by: default avatarDavid Gow <davidgow@google.com>
      Tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      5a175d36
  3. 26 Jul, 2023 9 commits
    • Rae Moar's avatar
      kunit: Add documentation of KUnit test attributes · e5885866
      Rae Moar authored
      Add documentation on the use of test attributes under the section "Tips for
      Running KUnit Tests" in the KUnit docs.
      
      Documentation includes three sections on how to mark tests with attributes,
      how attributes are reported, and how the user can filter tests using test
      attributes.
      
      Add descriptions of new flags to list of command-line arguments.
      Reviewed-by: default avatarDavid Gow <davidgow@google.com>
      Signed-off-by: default avatarRae Moar <rmoar@google.com>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      e5885866
    • Rae Moar's avatar
      kunit: add tests for filtering attributes · 76066f93
      Rae Moar authored
      Add four tests to executor_test.c to test behavior of filtering attributes.
      
      - parse_filter_attr_test - to test the parsing of inputted filters
      
      - filter_attr_test - to test the filtering procedure on attributes
      
      - filter_attr_empty_test - to test the behavior when all tests are filtered
        out
      
      - filter_attr_skip_test - to test the configurable filter_action=skip
        option
      Reviewed-by: default avatarDavid Gow <davidgow@google.com>
      Signed-off-by: default avatarRae Moar <rmoar@google.com>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      76066f93
    • Rae Moar's avatar
      kunit: time: Mark test as slow using test attributes · a547c4ce
      Rae Moar authored
      Mark the time KUnit test, time64_to_tm_test_date_range, as slow using test
      attributes.
      
      This test ran relatively much slower than most other KUnit tests.
      
      By marking this test as slow, the test can now be filtered using the KUnit
      test attribute filtering feature. Example: --filter "speed>slow". This will
      run only the tests that have speeds faster than slow. The slow attribute
      will also be outputted in KTAP.
      Reviewed-by: default avatarDavid Gow <davidgow@google.com>
      Signed-off-by: default avatarRae Moar <rmoar@google.com>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      a547c4ce
    • Rae Moar's avatar
      kunit: memcpy: Mark tests as slow using test attributes · d055c6a2
      Rae Moar authored
      Mark slow memcpy KUnit tests using test attributes.
      
      Tests marked as slow are as follows: memcpy_large_test, memmove_test,
      memmove_large_test, and memmove_overlap_test. These tests were the slowest
      of the memcpy tests and relatively slower to most other KUnit tests. Most
      of these tests are already skipped when CONFIG_MEMCPY_SLOW_KUNIT_TEST is
      not enabled.
      
      These tests can now be filtered using the KUnit test attribute filtering
      feature. Example: --filter "speed>slow". This will run only the tests that
      have speeds faster than slow. The slow attribute will also be outputted in
      KTAP.
      
      Note: This patch is intended to replace the use of
      CONFIG_MEMCPY_SLOW_KUNIT_TEST and to potentially deprecate this feature.
      This patch does not remove the config option but does add a note to the
      config definition commenting on this future shift.
      Reviewed-by: default avatarDavid Gow <davidgow@google.com>
      Acked-by: default avatarKees Cook <keescook@chromium.org>
      Signed-off-by: default avatarRae Moar <rmoar@google.com>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      d055c6a2
    • Rae Moar's avatar
      kunit: tool: Add command line interface to filter and report attributes · 723c8258
      Rae Moar authored
      Add ability to kunit.py to filter attributes and report a list of tests
      including attributes without running tests.
      
      Add flag "--filter" to input filters on test attributes. Tests will be
      filtered out if they do not match all inputted filters.
      
      Example: --filter speed=slow (This filter would run only the tests that are
      marked as slow)
      
      Filters have operations: <, >, <=, >=, !=, and =. But note that the
      characters < and > are often interpreted by the shell, so they may need to
      be quoted or escaped.
      
      Example: --filter "speed>slow" or --filter speed\>slow (This filter would
      run only the tests that have the speed faster than slow.
      
      Additionally, multiple filters can be used.
      
      Example: --filter "speed=slow, module!=example" (This filter would run
      only the tests that have the speed slow and are not in the "example"
      module)
      
      Note if the user wants to skip filtered tests instead of not
      running/showing them use the "--filter_action=skip" flag instead.
      
      Expose the output of kunit.action=list option with flag "--list_tests" to
      output a list of tests. Additionally, add flag "--list_tests_attr" to
      output a list of tests and their attributes. These flags are useful to see
      tests and test attributes without needing to run tests.
      
      Example of the output of "--list_tests_attr":
        example
        example.test_1
        example.test_2
        # example.test_2.speed: slow
      
      This output includes a suite, example, with two test cases, test_1 and
      test_2. And in this instance test_2 has been marked as slow.
      Reviewed-by: default avatarDavid Gow <davidgow@google.com>
      Signed-off-by: default avatarRae Moar <rmoar@google.com>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      723c8258
    • Rae Moar's avatar
      kunit: Add ability to filter attributes · 529534e8
      Rae Moar authored
      Add filtering of test attributes. Users can filter tests using the
      module_param called "filter".
      
      Filters are imputed in the format: <attribute_name><operation><value>
      
      Example: kunit.filter="speed>slow"
      
      Operations include: >, <, >=, <=, !=, and =. These operations will act the
      same for attributes of the same type but may not between types.
      
      Note multiple filters can be inputted by separating them with a comma.
      Example: kunit.filter="speed=slow, module!=example"
      
      Since both suites and test cases can have attributes, there may be
      conflicts. The process of filtering follows these rules:
      - Filtering always operates at a per-test level.
      - If a test has an attribute set, then the test's value is filtered on.
      - Otherwise, the value falls back to the suite's value.
      - If neither are set, the attribute has a global "default" value, which
        is used.
      
      Filtered tests will not be run or show in output. The tests can instead be
      skipped using the configurable option "kunit.filter_action=skip".
      
      Note the default settings for running tests remains unfiltered.
      
      Finally, add "filter" methods for the speed and module attributes to parse
      and compare attribute values.
      
      Note this filtering functionality will be added to kunit.py in the next
      patch.
      Reviewed-by: default avatarDavid Gow <davidgow@google.com>
      Signed-off-by: default avatarRae Moar <rmoar@google.com>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      529534e8
    • Rae Moar's avatar
      kunit: Add module attribute · a00a7270
      Rae Moar authored
      Add module attribute to the test attribute API. This attribute stores the
      module name associated with the test using KBUILD_MODNAME.
      
      The name of a test suite and the module name often do not match. A
      reference to the module name associated with the suite could be extremely
      helpful in running tests as modules without needing to check the codebase.
      
      This attribute will be printed for each suite.
      Reviewed-by: default avatarDavid Gow <davidgow@google.com>
      Signed-off-by: default avatarRae Moar <rmoar@google.com>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      a00a7270
    • Rae Moar's avatar
      kunit: Add speed attribute · 02c2d0c2
      Rae Moar authored
      Add speed attribute to the test attribute API. This attribute will allow
      users to mark tests with a category of speed.
      
      Currently the categories of speed proposed are: normal, slow, and very_slow
      (outlined in enum kunit_speed). These are outlined in the enum kunit_speed.
      
      The assumed default speed for tests is "normal". This indicates that the
      test takes a relatively trivial amount of time (less than 1 second),
      regardless of the machine it is running on. Any test slower than this could
      be marked as "slow" or "very_slow".
      
      Add the macro KUNIT_CASE_SLOW to set a test as slow, as this is likely a
      common use of the attributes API.
      
      Add an example of marking a slow test to kunit-example-test.c.
      Reviewed-by: default avatarDavid Gow <davidgow@google.com>
      Signed-off-by: default avatarRae Moar <rmoar@google.com>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      02c2d0c2
    • Rae Moar's avatar
      kunit: Add test attributes API structure · 39e92cb1
      Rae Moar authored
      Add the basic structure of the test attribute API to KUnit, which can be
      used to save and access test associated data.
      
      Add attributes.c and attributes.h to hold associated structs and functions
      for the API.
      
      Create a struct that holds a variety of associated helper functions for
      each test attribute. These helper functions will be used to get the
      attribute value, convert the value to a string, and filter based on the
      value. This struct is flexible by design to allow for attributes of
      numerous types and contexts.
      
      Add a method to print test attributes in the format of "# [<test_name if
      not suite>.]<attribute_name>: <attribute_value>".
      
      Example for a suite: "# speed: slow"
      
      Example for a test case: "# test_case.speed: very_slow"
      
      Use this method to report attributes in the KTAP output (KTAP spec:
      https://docs.kernel.org/dev-tools/ktap.html) and _list_tests output when
      kernel's new kunit.action=list_attr option is used. Note this is derivative
      of the kunit.action=list option.
      
      In test.h, add fields and associated helper functions to test cases and
      suites to hold user-inputted test attributes.
      Reviewed-by: default avatarDavid Gow <davidgow@google.com>
      Signed-off-by: default avatarRae Moar <rmoar@google.com>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      39e92cb1
  4. 19 Jul, 2023 5 commits
  5. 18 Jul, 2023 3 commits
  6. 09 Jul, 2023 10 commits
  7. 08 Jul, 2023 10 commits
    • Hugh Dickins's avatar
      mm: lock newly mapped VMA with corrected ordering · 1c7873e3
      Hugh Dickins authored
      Lockdep is certainly right to complain about
      
        (&vma->vm_lock->lock){++++}-{3:3}, at: vma_start_write+0x2d/0x3f
                       but task is already holding lock:
        (&mapping->i_mmap_rwsem){+.+.}-{3:3}, at: mmap_region+0x4dc/0x6db
      
      Invert those to the usual ordering.
      
      Fixes: 33313a74 ("mm: lock newly mapped VMA which can be modified after it becomes visible")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarHugh Dickins <hughd@google.com>
      Tested-by: default avatarSuren Baghdasaryan <surenb@google.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      1c7873e3
    • Linus Torvalds's avatar
      Merge tag 'mm-hotfixes-stable-2023-07-08-10-43' of... · 946c6b59
      Linus Torvalds authored
      Merge tag 'mm-hotfixes-stable-2023-07-08-10-43' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
      
      Pull hotfixes from Andrew Morton:
       "16 hotfixes. Six are cc:stable and the remainder address post-6.4
        issues"
      
      The merge undoes the disabling of the CONFIG_PER_VMA_LOCK feature, since
      it was all hopefully fixed in mainline.
      
      * tag 'mm-hotfixes-stable-2023-07-08-10-43' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm:
        lib: dhry: fix sleeping allocations inside non-preemptable section
        kasan, slub: fix HW_TAGS zeroing with slub_debug
        kasan: fix type cast in memory_is_poisoned_n
        mailmap: add entries for Heiko Stuebner
        mailmap: update manpage link
        bootmem: remove the vmemmap pages from kmemleak in free_bootmem_page
        MAINTAINERS: add linux-next info
        mailmap: add Markus Schneider-Pargmann
        writeback: account the number of pages written back
        mm: call arch_swap_restore() from do_swap_page()
        squashfs: fix cache race with migration
        mm/hugetlb.c: fix a bug within a BUG(): inconsistent pte comparison
        docs: update ocfs2-devel mailing list address
        MAINTAINERS: update ocfs2-devel mailing list address
        mm: disable CONFIG_PER_VMA_LOCK until its fixed
        fork: lock VMAs of the parent process when forking
      946c6b59
    • Suren Baghdasaryan's avatar
      fork: lock VMAs of the parent process when forking · fb49c455
      Suren Baghdasaryan authored
      When forking a child process, the parent write-protects anonymous pages
      and COW-shares them with the child being forked using copy_present_pte().
      
      We must not take any concurrent page faults on the source vma's as they
      are being processed, as we expect both the vma and the pte's behind it
      to be stable.  For example, the anon_vma_fork() expects the parents
      vma->anon_vma to not change during the vma copy.
      
      A concurrent page fault on a page newly marked read-only by the page
      copy might trigger wp_page_copy() and a anon_vma_prepare(vma) on the
      source vma, defeating the anon_vma_clone() that wasn't done because the
      parent vma originally didn't have an anon_vma, but we now might end up
      copying a pte entry for a page that has one.
      
      Before the per-vma lock based changes, the mmap_lock guaranteed
      exclusion with concurrent page faults.  But now we need to do a
      vma_start_write() to make sure no concurrent faults happen on this vma
      while it is being processed.
      
      This fix can potentially regress some fork-heavy workloads.  Kernel
      build time did not show noticeable regression on a 56-core machine while
      a stress test mapping 10000 VMAs and forking 5000 times in a tight loop
      shows ~5% regression.  If such fork time regression is unacceptable,
      disabling CONFIG_PER_VMA_LOCK should restore its performance.  Further
      optimizations are possible if this regression proves to be problematic.
      Suggested-by: default avatarDavid Hildenbrand <david@redhat.com>
      Reported-by: default avatarJiri Slaby <jirislaby@kernel.org>
      Closes: https://lore.kernel.org/all/dbdef34c-3a07-5951-e1ae-e9c6e3cdf51b@kernel.org/Reported-by: default avatarHolger Hoffstätte <holger@applied-asynchrony.com>
      Closes: https://lore.kernel.org/all/b198d649-f4bf-b971-31d0-e8433ec2a34c@applied-asynchrony.com/Reported-by: default avatarJacob Young <jacobly.alt@gmail.com>
      Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217624
      Fixes: 0bff0aae ("x86/mm: try VMA lock-based page fault handling first")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      fb49c455
    • Suren Baghdasaryan's avatar
      mm: lock newly mapped VMA which can be modified after it becomes visible · 33313a74
      Suren Baghdasaryan authored
      mmap_region adds a newly created VMA into VMA tree and might modify it
      afterwards before dropping the mmap_lock.  This poses a problem for page
      faults handled under per-VMA locks because they don't take the mmap_lock
      and can stumble on this VMA while it's still being modified.  Currently
      this does not pose a problem since post-addition modifications are done
      only for file-backed VMAs, which are not handled under per-VMA lock.
      However, once support for handling file-backed page faults with per-VMA
      locks is added, this will become a race.
      
      Fix this by write-locking the VMA before inserting it into the VMA tree.
      Other places where a new VMA is added into VMA tree do not modify it
      after the insertion, so do not need the same locking.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      33313a74
    • Suren Baghdasaryan's avatar
      mm: lock a vma before stack expansion · c137381f
      Suren Baghdasaryan authored
      With recent changes necessitating mmap_lock to be held for write while
      expanding a stack, per-VMA locks should follow the same rules and be
      write-locked to prevent page faults into the VMA being expanded. Add
      the necessary locking.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      c137381f
    • Linus Torvalds's avatar
      Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi · 7fcd473a
      Linus Torvalds authored
      Pull more SCSI updates from James Bottomley:
       "A few late arriving patches that missed the initial pull request. It's
        mostly bug fixes (the dt-bindings is a fix for the initial pull)"
      
      * tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
        scsi: ufs: core: Remove unused function declaration
        scsi: target: docs: Remove tcm_mod_builder.py
        scsi: target: iblock: Quiet bool conversion warning with pr_preempt use
        scsi: dt-bindings: ufs: qcom: Fix ICE phandle
        scsi: core: Simplify scsi_cdl_check_cmd()
        scsi: isci: Fix comment typo
        scsi: smartpqi: Replace one-element arrays with flexible-array members
        scsi: target: tcmu: Replace strlcpy() with strscpy()
        scsi: ncr53c8xx: Replace strlcpy() with strscpy()
        scsi: lpfc: Fix lpfc_name struct packing
      7fcd473a
    • Linus Torvalds's avatar
      Merge tag 'i2c-for-6.5-rc1-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux · 84dc5aa3
      Linus Torvalds authored
      Pull more i2c updates from Wolfram Sang:
      
       - xiic patch should have been in the original pull but slipped through
      
       - mpc patch fixes a build regression
      
       - nomadik cleanup
      
      * tag 'i2c-for-6.5-rc1-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
        i2c: mpc: Drop unused variable
        i2c: nomadik: Remove a useless call in the remove function
        i2c: xiic: Don't try to handle more interrupt events after error
      84dc5aa3
    • Linus Torvalds's avatar
      Merge tag 'hardening-v6.5-rc1-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux · 8fc3b8f0
      Linus Torvalds authored
      Pull hardening fixes from Kees Cook:
      
       - Check for NULL bdev in LoadPin (Matthias Kaehlcke)
      
       - Revert unwanted KUnit FORTIFY build default
      
       - Fix 1-element array causing boot warnings with xhci-hub
      
      * tag 'hardening-v6.5-rc1-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux:
        usb: ch9: Replace bmSublinkSpeedAttr 1-element array with flexible array
        Revert "fortify: Allow KUnit test to build without FORTIFY"
        dm: verity-loadpin: Add NULL pointer check for 'bdev' parameter
      8fc3b8f0
    • Anup Sharma's avatar
      ntb: hw: amd: Fix debugfs_create_dir error checking · bff6efc5
      Anup Sharma authored
      The debugfs_create_dir function returns ERR_PTR in case of error, and the
      only correct way to check if an error occurred is 'IS_ERR' inline function.
      This patch will replace the null-comparison with IS_ERR.
      Signed-off-by: default avatarAnup Sharma <anupnewsmail@gmail.com>
      Suggested-by: default avatarIvan Orlov <ivan.orlov0322@gmail.com>
      Signed-off-by: default avatarJon Mason <jdmason@kudzu.us>
      bff6efc5
    • Linus Torvalds's avatar
      Merge tag 'perf-tools-for-v6.5-2-2023-07-06' of... · c206353d
      Linus Torvalds authored
      Merge tag 'perf-tools-for-v6.5-2-2023-07-06' of git://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next
      
      Pull more perf tools updates from Namhyung Kim:
       "These are remaining changes and fixes for this cycle.
      
        Build:
      
         - Allow generating vmlinux.h from BTF using `make GEN_VMLINUX_H=1`
           and skip if the vmlinux has no BTF.
      
         - Replace deprecated clang -target xxx option by --target=xxx.
      
        perf record:
      
         - Print event attributes with well known type and config symbols in
           the debug output like below:
      
             # perf record -e cycles,cpu-clock -C0 -vv true
             <SNIP>
             ------------------------------------------------------------
             perf_event_attr:
               type                             0 (PERF_TYPE_HARDWARE)
               size                             136
               config                           0 (PERF_COUNT_HW_CPU_CYCLES)
               { sample_period, sample_freq }   4000
               sample_type                      IP|TID|TIME|CPU|PERIOD|IDENTIFIER
               read_format                      ID
               disabled                         1
               inherit                          1
               freq                             1
               sample_id_all                    1
               exclude_guest                    1
             ------------------------------------------------------------
             sys_perf_event_open: pid -1  cpu 0  group_fd -1  flags 0x8 = 5
             ------------------------------------------------------------
             perf_event_attr:
               type                             1 (PERF_TYPE_SOFTWARE)
               size                             136
               config                           0 (PERF_COUNT_SW_CPU_CLOCK)
               { sample_period, sample_freq }   4000
               sample_type                      IP|TID|TIME|CPU|PERIOD|IDENTIFIER
               read_format                      ID
               disabled                         1
               inherit                          1
               freq                             1
               sample_id_all                    1
               exclude_guest                    1
      
         - Update AMD IBS event error message since it now support per-process
           profiling but no priviledge filters.
      
             $ sudo perf record -e ibs_op//k -C 0
             Error:
             AMD IBS doesn't support privilege filtering. Try again without
             the privilege modifiers (like 'k') at the end.
      
        perf lock contention:
      
         - Support CSV style output using -x option
      
             $ sudo perf lock con -ab -x, sleep 1
             # output: contended, total wait, max wait, avg wait, type, caller
             19, 194232, 21415, 10222, spinlock, process_one_work+0x1f0
             15, 162748, 23843, 10849, rwsem:R, do_user_addr_fault+0x40e
             4, 86740, 23415, 21685, rwlock:R, ep_poll_callback+0x2d
             1, 84281, 84281, 84281, mutex, iwl_mvm_async_handlers_wk+0x135
             8, 67608, 27404, 8451, spinlock, __queue_work+0x174
             3, 58616, 31125, 19538, rwsem:W, do_mprotect_pkey+0xff
             3, 52953, 21172, 17651, rwlock:W, do_epoll_wait+0x248
             2, 30324, 19704, 15162, rwsem:R, do_madvise+0x3ad
             1, 24619, 24619, 24619, spinlock, rcu_core+0xd4
      
         - Add --output option to save the data to a file not to be interfered
           by other debug messages.
      
        Test:
      
         - Fix event parsing test on ARM where there's no raw PMU nor supports
           PERF_PMU_CAP_EXTENDED_HW_TYPE.
      
         - Update the lock contention test case for CSV output.
      
         - Fix a segfault in the daemon command test.
      
        Vendor events (JSON):
      
         - Add has_event() to check if the given event is available on system
           at runtime. On Intel machines, some transaction events may not be
           present when TSC extensions are disabled.
      
         - Update Intel event metrics.
      
        Misc:
      
         - Sort symbols by name using an external array of pointers instead of
           a rbtree node in the symbol. This will save 16-bytes or 24-bytes
           per symbol whether the sorting is actually requested or not.
      
         - Fix unwinding DWARF callstacks using libdw when --symfs option is
           used"
      
      * tag 'perf-tools-for-v6.5-2-2023-07-06' of git://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next: (38 commits)
        perf test: Fix event parsing test when PERF_PMU_CAP_EXTENDED_HW_TYPE isn't supported.
        perf test: Fix event parsing test on Arm
        perf evsel amd: Fix IBS error message
        perf: unwind: Fix symfs with libdw
        perf symbol: Fix uninitialized return value in symbols__find_by_name()
        perf test: Test perf lock contention CSV output
        perf lock contention: Add --output option
        perf lock contention: Add -x option for CSV style output
        perf lock: Remove stale comments
        perf vendor events intel: Update tigerlake to 1.13
        perf vendor events intel: Update skylakex to 1.31
        perf vendor events intel: Update skylake to 57
        perf vendor events intel: Update sapphirerapids to 1.14
        perf vendor events intel: Update icelakex to 1.21
        perf vendor events intel: Update icelake to 1.19
        perf vendor events intel: Update cascadelakex to 1.19
        perf vendor events intel: Update meteorlake to 1.03
        perf vendor events intel: Add rocketlake events/metrics
        perf vendor metrics intel: Make transaction metrics conditional
        perf jevents: Support for has_event function
        ...
      c206353d