Commit ba450370 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'linux_kselftest-kunit-6.16-rc1' of...

Merge tag 'linux_kselftest-kunit-6.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest

Pull kunit updates from Shuah Khan:

 - Enable qemu_config for riscv32, sparc 64-bit, PowerPC 32-bit BE and
   64-bit LE

 - Enable CONFIG_SPARC32 to clearly differentiate between sparc 32-bit
   and 64-bit configurations

 - Enable CONFIG_CPU_BIG_ENDIAN to clearly differentiate between powerpc
   LE and BE configurations

 - Add feature to list available architectures to kunit tool

 - Fixes to bugs and changes to documentation

* tag 'linux_kselftest-kunit-6.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest:
  kunit: Fix wrong parameter to kunit_deactivate_static_stub()
  kunit: tool: add test counts to JSON output
  Documentation: kunit: improve example on testing static functions
  kunit: executor: Remove const from kunit_filter_suites() allocation type
  kunit: qemu_configs: Disable faulting tests on 32-bit SPARC
  kunit: qemu_configs: Add 64-bit SPARC configuration
  kunit: qemu_configs: sparc: Explicitly enable CONFIG_SPARC32=y
  kunit: qemu_configs: Add PowerPC 32-bit BE and 64-bit LE
  kunit: qemu_configs: powerpc: Explicitly enable CONFIG_CPU_BIG_ENDIAN=y
  kunit: tool: Implement listing of available architectures
  kunit: qemu_configs: Add riscv32 config
  kunit: configs: Enable CONFIG_INIT_STACK_ALL_PATTERN in all_tests
parents 2d2435e1 772e50a7
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -182,6 +182,8 @@ via UML. To run tests on qemu, by default it requires two flags:
  is ignored), the tests will run via UML. Non-UML architectures,
  for example: i386, x86_64, arm and so on; run on qemu.

  ``--arch help`` lists all valid ``--arch`` values.

- ``--cross_compile``: Specifies the Kbuild toolchain. It passes the
  same argument as passed to the ``CROSS_COMPILE`` variable used by
  Kbuild. As a reminder, this will be the prefix for the toolchain
+30 −8
Original line number Diff line number Diff line
@@ -670,28 +670,50 @@ with ``kunit_remove_action``.
Testing Static Functions
------------------------

If we do not want to expose functions or variables for testing, one option is to
conditionally export the used symbol. For example:
If you want to test static functions without exposing those functions outside of
testing, one option is conditionally export the symbol. When KUnit is enabled,
the symbol is exposed but remains static otherwise. To use this method, follow
the template below.

.. code-block:: c

	/* In my_file.c */
	/* In the file containing functions to test "my_file.c" */

	VISIBLE_IF_KUNIT int do_interesting_thing();
	#include <kunit/visibility.h>
	#include <my_file.h>
	...
	VISIBLE_IF_KUNIT int do_interesting_thing()
	{
	...
	}
	EXPORT_SYMBOL_IF_KUNIT(do_interesting_thing);

	/* In my_file.h */
	/* In the header file "my_file.h" */

	#if IS_ENABLED(CONFIG_KUNIT)
		int do_interesting_thing(void);
	#endif

Alternatively, you could conditionally ``#include`` the test file at the end of
your .c file. For example:
	/* In the KUnit test file "my_file_test.c" */

	#include <kunit/visibility.h>
	#include <my_file.h>
	...
	MODULE_IMPORT_NS(EXPORTED_FOR_KUNIT_TESTING);
	...
	// Use do_interesting_thing() in tests

For a full example, see this `patch <https://lore.kernel.org/all/20221207014024.340230-3-rmoar@google.com/>`_
where a test is modified to conditionally expose static functions for testing
using the macros above.

As an **alternative** to the method above, you could conditionally ``#include``
the test file at the end of your .c file. This is not recommended but works
if needed. For example:

.. code-block:: c

	/* In my_file.c */
	/* In "my_file.c" */

	static int do_interesting_thing();

+1 −1
Original line number Diff line number Diff line
@@ -177,7 +177,7 @@ kunit_filter_suites(const struct kunit_suite_set *suite_set,

	const size_t max = suite_set->end - suite_set->start;

	copy = kcalloc(max, sizeof(*filtered.start), GFP_KERNEL);
	copy = kcalloc(max, sizeof(*copy), GFP_KERNEL);
	if (!copy) { /* won't be able to run anything, return an empty set */
		return filtered;
	}
+1 −1
Original line number Diff line number Diff line
@@ -96,7 +96,7 @@ void __kunit_activate_static_stub(struct kunit *test,

	/* If the replacement address is NULL, deactivate the stub. */
	if (!replacement_addr) {
		kunit_deactivate_static_stub(test, replacement_addr);
		kunit_deactivate_static_stub(test, real_fn_addr);
		return;
	}

+1 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ CONFIG_KUNIT_EXAMPLE_TEST=y
CONFIG_KUNIT_ALL_TESTS=y

CONFIG_FORTIFY_SOURCE=y
CONFIG_INIT_STACK_ALL_PATTERN=y

CONFIG_IIO=y

Loading