• Daniel Latypov's avatar
    kunit: tool: make --kunitconfig repeatable, blindly concat · 53b46621
    Daniel Latypov authored
    It's come up a few times that it would be useful to have --kunitconfig
    be repeatable [1][2].
    
    This could be done before with a bit of shell-fu, e.g.
      $ find fs/ -name '.kunitconfig' -exec cat {} + | \
        ./tools/testing/kunit/kunit.py run --kunitconfig=/dev/stdin
    or equivalently:
      $ cat fs/ext4/.kunitconfig fs/fat/.kunitconfig | \
        ./tools/testing/kunit/kunit.py run --kunitconfig=/dev/stdin
    
    But this can be fairly clunky to use in practice.
    
    And having explicit support in kunit.py opens the door to having more
    config fragments of interest, e.g. options for PCI on UML [1], UML
    coverage [2], variants of tests [3].
    There's another argument to be made that users can just use multiple
    --kconfig_add's, but this gets very clunky very fast (e.g. [2]).
    
    Note: there's a big caveat here that some kconfig options might be
    incompatible. We try to give a clearish error message in the simple case
    where the same option appears multiple times with conflicting values,
    but more subtle ones (e.g. mutually exclusive options) will be
    potentially very confusing for the user. I don't know we can do better.
    
    Note 2: if you want to combine a --kunitconfig with the default, you
    either have to do to specify the current build_dir
    > --kunitconfig=.kunit --kunitconfig=additional.config
    or
    > --kunitconfig=tools/testing/kunit/configs/default.config --kunitconifg=additional.config
    each of which have their downsides (former depends on --build_dir,
    doesn't work if you don't have a .kunitconfig yet), etc.
    
    Example with conflicting values:
    > $ ./tools/testing/kunit/kunit.py config --kunitconfig=lib/kunit --kunitconfig=/dev/stdin <<EOF
    > CONFIG_KUNIT_TEST=n
    > CONFIG_KUNIT=m
    > EOF
    > ...
    > kunit_kernel.ConfigError: Multiple values specified for 2 options in kunitconfig:
    > CONFIG_KUNIT=y
    >   vs from /dev/stdin
    > CONFIG_KUNIT=m
    >
    > CONFIG_KUNIT_TEST=y
    >   vs from /dev/stdin
    > # CONFIG_KUNIT_TEST is not set
    
    [1] https://lists.freedesktop.org/archives/dri-devel/2022-June/357616.html
    [2] https://lore.kernel.org/linux-kselftest/CAFd5g45f3X3xF2vz2BkTHRqOC4uW6GZxtUUMaP5mwwbK8uNVtA@mail.gmail.com/
    [3] https://lore.kernel.org/linux-kselftest/CANpmjNOdSy6DuO6CYZ4UxhGxqhjzx4tn0sJMbRqo2xRFv9kX6Q@mail.gmail.com/Signed-off-by: default avatarDaniel Latypov <dlatypov@google.com>
    Reviewed-by: default avatarBrendan Higgins <brendanhiggins@google.com>
    Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
    53b46621
kunit_config.py 2.86 KB