€•íŒsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ'/translations/zh_CN/dev-tools/kselftest”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/zh_TW/dev-tools/kselftest”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/it_IT/dev-tools/kselftest”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/ja_JP/dev-tools/kselftest”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/ko_KR/dev-tools/kselftest”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/pt_BR/dev-tools/kselftest”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/sp_SP/dev-tools/kselftest”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒLinux Kernel Selftests”h]”hŒLinux Kernel Selftests”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒA/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest.rst”h´KubhŒ paragraph”“”)�”}”(hŒûThe kernel contains a set of "self tests" under the tools/testing/selftests/ directory. These are intended to be small tests to exercise individual code paths in the kernel. Tests are intended to be run after building, installing and booting a kernel.”h]”hŒÿThe kernel contains a set of “self testsâ€� under the tools/testing/selftests/ directory. These are intended to be small tests to exercise individual code paths in the kernel. Tests are intended to be run after building, installing and booting a kernel.”…”�”}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hXÐKselftest from mainline can be run on older stable kernels. Running tests from mainline offers the best coverage. Several test rings run mainline kselftest suite on stable releases. The reason is that when a new test gets added to test existing code to regression test a bug, we should be able to run that test on an older kernel. Hence, it is important to keep code that can still test an older kernel and make sure it skips the test gracefully on newer releases.”h]”hXÐKselftest from mainline can be run on older stable kernels. Running tests from mainline offers the best coverage. Several test rings run mainline kselftest suite on stable releases. The reason is that when a new test gets added to test existing code to regression test a bug, we should be able to run that test on an older kernel. Hence, it is important to keep code that can still test an older kernel and make sure it skips the test gracefully on newer releases.”…”�”}”(hhÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubhÌ)�”}”(hX®On some systems, hot-plug tests could hang forever waiting for cpu and memory to be ready to be offlined. A special hot-plug target is created to run the full range of hot-plug tests. In default mode, hot-plug tests run in safe mode with a limited scope. In limited mode, cpu-hotplug test is run on a single cpu as opposed to all hotplug capable cpus, and memory hotplug test is run on 2% of hotplug capable memory instead of 10%.”h]”hX®On some systems, hot-plug tests could hang forever waiting for cpu and memory to be ready to be offlined. A special hot-plug target is created to run the full range of hot-plug tests. In default mode, hot-plug tests run in safe mode with a limited scope. In limited mode, cpu-hotplug test is run on a single cpu as opposed to all hotplug capable cpus, and memory hotplug test is run on 2% of hotplug capable memory instead of 10%.”…”�”}”(hhéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hŒÄkselftest runs as a userspace process. Tests that can be written/run in userspace may wish to use the `Test Harness`_. Tests that need to be run in kernel space may wish to use a `Test Module`_.”h]”(hŒgkselftest runs as a userspace process. Tests that can be written/run in userspace may wish to use the ”…”�”}”(hh÷h²hh³Nh´NubhŒ reference”“”)�”}”(hŒ`Test Harness`_”h]”hŒ Test Harness”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ Test Harness”Œrefid”Œ test-harness”uh1hÿhh÷Œresolved”KubhŒ?. Tests that need to be run in kernel space may wish to use a ”…”�”}”(hh÷h²hh³Nh´Nubj)�”}”(hŒ`Test Module`_”h]”hŒ Test Module”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ Test Module”jŒ test-module”uh1hÿhh÷jKubhŒ.”…”�”}”(hh÷h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒDocumentation on the tests”h]”hŒDocumentation on the tests”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj3h²hh³hÊh´KubhÌ)�”}”(hŒ4For documentation on the kselftests themselves, see:”h]”hŒ4For documentation on the kselftests themselves, see:”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hj3h²hubhŒcompound”“”)�”}”(hhh]”hŒtoctree”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”hŒdev-tools/kselftest”Œentries”]”NŒdev-tools/testing-devices”†”aŒ includefiles”]”jeaŒmaxdepth”JÿÿÿÿŒcaption”NŒglob”‰Œhidden”‰Œ includehidden”‰Œnumbered”KŒ titlesonly”‰Œ rawentries”]”uh1jWh³hÊh´K"hjTubah}”(h]”h ]”Œtoctree-wrapper”ah"]”h$]”h&]”uh1jRhj3h²hh³hÊh´K%ubeh}”(h]”Œdocumentation-on-the-tests”ah ]”h"]”Œdocumentation on the tests”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ=Running the selftests (hotplug tests are run in limited mode)”h]”hŒ=Running the selftests (hotplug tests are run in limited mode)”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj�h²hh³hÊh´K'ubhÌ)�”}”(hŒTo build the tests::”h]”hŒTo build the tests:”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K)hj�h²hubhŒ literal_block”“”)�”}”(hŒ0$ make headers $ make -C tools/testing/selftests”h]”hŒ0$ make headers $ make -C tools/testing/selftests”…”�”}”hj¢sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j h³hÊh´K+hj�h²hubhÌ)�”}”(hŒTo run the tests::”h]”hŒTo run the tests:”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K.hj�h²hubj¡)�”}”(hŒ+$ make -C tools/testing/selftests run_tests”h]”hŒ+$ make -C tools/testing/selftests run_tests”…”�”}”hjÀsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K0hj�h²hubhÌ)�”}”(hŒ7To build and run the tests with a single command, use::”h]”hŒ6To build and run the tests with a single command, use:”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K2hj�h²hubj¡)�”}”(hŒ$ make kselftest”h]”hŒ$ make kselftest”…”�”}”hjÜsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K4hj�h²hubhÌ)�”}”(hŒ2Note that some tests will require root privileges.”h]”hŒ2Note that some tests will require root privileges.”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K6hj�h²hubhÌ)�”}”(hX.Kselftest supports saving output files in a separate directory and then running tests. To locate output files in a separate directory two syntaxes are supported. In both cases the working directory must be the root of the kernel src. This is applicable to "Running a subset of selftests" section below.”h]”hX2Kselftest supports saving output files in a separate directory and then running tests. To locate output files in a separate directory two syntaxes are supported. In both cases the working directory must be the root of the kernel src. This is applicable to “Running a subset of selftestsâ€� section below.”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K8hj�h²hubhÌ)�”}”(hŒ>To build, save output files in a separate directory with O= ::”h]”hŒ;To build, save output files in a separate directory with O=”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K>hj�h²hubj¡)�”}”(hŒ!$ make O=/tmp/kselftest kselftest”h]”hŒ!$ make O=/tmp/kselftest kselftest”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K@hj�h²hubhÌ)�”}”(hŒITo build, save output files in a separate directory with KBUILD_OUTPUT ::”h]”hŒFTo build, save output files in a separate directory with KBUILD_OUTPUT”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KBhj�h²hubj¡)�”}”(hŒ5$ export KBUILD_OUTPUT=/tmp/kselftest; make kselftest”h]”hŒ5$ export KBUILD_OUTPUT=/tmp/kselftest; make kselftest”…”�”}”hj0sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´KDhj�h²hubhÌ)�”}”(hŒOThe O= assignment takes precedence over the KBUILD_OUTPUT environment variable.”h]”hŒOThe O= assignment takes precedence over the KBUILD_OUTPUT environment variable.”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KFhj�h²hubhÌ)�”}”(hXaThe above commands by default run the tests and print full pass/fail report. Kselftest supports "summary" option to make it easier to understand the test results. Please find the detailed individual test results for each test in /tmp/testname file(s) when summary option is specified. This is applicable to "Running a subset of selftests" section below.”h]”hXiThe above commands by default run the tests and print full pass/fail report. Kselftest supports “summaryâ€� option to make it easier to understand the test results. Please find the detailed individual test results for each test in /tmp/testname file(s) when summary option is specified. This is applicable to “Running a subset of selftestsâ€� section below.”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KIhj�h²hubhÌ)�”}”(hŒ/To run kselftest with summary option enabled ::”h]”hŒ,To run kselftest with summary option enabled”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KOhj�h²hubj¡)�”}”(hŒ$ make summary=1 kselftest”h]”hŒ$ make summary=1 kselftest”…”�”}”hjhsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´KQhj�h²hubeh}”(h]”Œ;running-the-selftests-hotplug-tests-are-run-in-limited-mode”ah ]”h"]”Œ=running the selftests (hotplug tests are run in limited mode)”ah$]”h&]”uh1hµhh·h²hh³hÊh´K'ubh¶)�”}”(hhh]”(h»)�”}”(hŒRunning a subset of selftests”h]”hŒRunning a subset of selftests”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj~h²hh³hÊh´KTubhÌ)�”}”(hŒuYou can use the "TARGETS" variable on the make command line to specify single test to run, or a list of tests to run.”h]”hŒyYou can use the “TARGETSâ€� variable on the make command line to specify single test to run, or a list of tests to run.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KVhj~h²hubhÌ)�”}”(hŒ3To run only tests targeted for a single subsystem::”h]”hŒ2To run only tests targeted for a single subsystem:”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KYhj~h²hubj¡)�”}”(hŒ:$ make -C tools/testing/selftests TARGETS=ptrace run_tests”h]”hŒ:$ make -C tools/testing/selftests TARGETS=ptrace run_tests”…”�”}”hj«sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K[hj~h²hubhÌ)�”}”(hŒ1You can specify multiple tests to build and run::”h]”hŒ0You can specify multiple tests to build and run:”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K]hj~h²hubj¡)�”}”(hŒ'$ make TARGETS="size timers" kselftest”h]”hŒ'$ make TARGETS="size timers" kselftest”…”�”}”hjÇsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K_hj~h²hubhÌ)�”}”(hŒ>To build, save output files in a separate directory with O= ::”h]”hŒ;To build, save output files in a separate directory with O=”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kahj~h²hubj¡)�”}”(hŒ7$ make O=/tmp/kselftest TARGETS="size timers" kselftest”h]”hŒ7$ make O=/tmp/kselftest TARGETS="size timers" kselftest”…”�”}”hjãsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Kchj~h²hubhÌ)�”}”(hŒITo build, save output files in a separate directory with KBUILD_OUTPUT ::”h]”hŒFTo build, save output files in a separate directory with KBUILD_OUTPUT”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kehj~h²hubj¡)�”}”(hŒK$ export KBUILD_OUTPUT=/tmp/kselftest; make TARGETS="size timers" kselftest”h]”hŒK$ export KBUILD_OUTPUT=/tmp/kselftest; make TARGETS="size timers" kselftest”…”�”}”hjÿsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Kghj~h²hubhÌ)�”}”(hŒŽAdditionally you can use the "SKIP_TARGETS" variable on the make command line to specify one or more targets to exclude from the TARGETS list.”h]”hŒ’Additionally you can use the “SKIP_TARGETSâ€� variable on the make command line to specify one or more targets to exclude from the TARGETS list.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kihj~h²hubhÌ)�”}”(hŒ)To run all tests but a single subsystem::”h]”hŒ(To run all tests but a single subsystem:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Klhj~h²hubj¡)�”}”(hŒ?$ make -C tools/testing/selftests SKIP_TARGETS=ptrace run_tests”h]”hŒ?$ make -C tools/testing/selftests SKIP_TARGETS=ptrace run_tests”…”�”}”hj)sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Knhj~h²hubhÌ)�”}”(hŒ(You can specify multiple tests to skip::”h]”hŒ'You can specify multiple tests to skip:”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kphj~h²hubj¡)�”}”(hŒ,$ make SKIP_TARGETS="size timers" kselftest”h]”hŒ,$ make SKIP_TARGETS="size timers" kselftest”…”�”}”hjEsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Krhj~h²hubhÌ)�”}”(hŒ[You can also specify a restricted list of tests to run together with a dedicated skiplist::”h]”hŒZYou can also specify a restricted list of tests to run together with a dedicated skiplist:”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kthj~h²hubj¡)�”}”(hŒE$ make TARGETS="breakpoints size timers" SKIP_TARGETS=size kselftest”h]”hŒE$ make TARGETS="breakpoints size timers" SKIP_TARGETS=size kselftest”…”�”}”hjasbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Kwhj~h²hubhÌ)�”}”(hŒXSee the top-level tools/testing/selftests/Makefile for the list of all possible targets.”h]”hŒXSee the top-level tools/testing/selftests/Makefile for the list of all possible targets.”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kyhj~h²hubeh}”(h]”Œrunning-a-subset-of-selftests”ah ]”h"]”Œrunning a subset of selftests”ah$]”h&]”uh1hµhh·h²hh³hÊh´KTŒ referenced”Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ+Requiring all targets to build successfully”h]”hŒ+Requiring all targets to build successfully”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj†h²hh³hÊh´K}ubhÌ)�”}”(hŒÐBy default, the build succeeds as long as at least one target builds without error. Set ``FORCE_TARGETS=1`` to instead require every target to build successfully; make will abort as soon as any target fails::”h]”(hŒXBy default, the build succeeds as long as at least one target builds without error. Set ”…”�”}”(hj—h²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``FORCE_TARGETS=1``”h]”hŒFORCE_TARGETS=1”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj—ubhŒd to instead require every target to build successfully; make will abort as soon as any target fails:”…”�”}”(hj—h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj†h²hubj¡)�”}”(hŒ1$ make -C tools/testing/selftests FORCE_TARGETS=1”h]”hŒ1$ make -C tools/testing/selftests FORCE_TARGETS=1”…”�”}”hj¹sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Kƒhj†h²hubhÌ)�”}”(hŒ‹This applies to both the ``all`` and ``install`` targets and is useful in CI environments where a silent partial build would be misleading.”h]”(hŒThis applies to both the ”…”�”}”(hjÇh²hh³Nh´Nubj )�”}”(hŒ``all``”h]”hŒall”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÇubhŒ and ”…”�”}”(hjÇh²hh³Nh´Nubj )�”}”(hŒ ``install``”h]”hŒinstall”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÇubhŒ[ targets and is useful in CI environments where a silent partial build would be misleading.”…”�”}”(hjÇh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K…hj†h²hubeh}”(h]”Œ+requiring-all-targets-to-build-successfully”ah ]”h"]”Œ+requiring all targets to build successfully”ah$]”h&]”uh1hµhh·h²hh³hÊh´K}ubh¶)�”}”(hhh]”(h»)�”}”(hŒRecording suite build results”h]”hŒRecording suite build results”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´K‰ubhÌ)�”}”(hXSince the build succeeds as long as one target builds, the exit status of make does not show which targets failed. Set ``KSFT_BUILD_REPORT`` to the absolute path of a file to have the ``all`` and ``install`` targets append a tab-separated record for each target they process::”h]”(hŒwSince the build succeeds as long as one target builds, the exit status of make does not show which targets failed. Set ”…”�”}”(hjh²hh³Nh´Nubj )�”}”(hŒ``KSFT_BUILD_REPORT``”h]”hŒKSFT_BUILD_REPORT”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjubhŒ, to the absolute path of a file to have the ”…”�”}”(hjh²hh³Nh´Nubj )�”}”(hŒ``all``”h]”hŒall”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjubhŒ and ”…”�”}”(hjh²hh³Nh´Nubj )�”}”(hŒ ``install``”h]”hŒinstall”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjubhŒD targets append a tab-separated record for each target they process:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‹hjh²hubj¡)�”}”(hŒ…$ : > /tmp/ksft-build.tsv $ make -C tools/testing/selftests O=/tmp/kernel-build \ KSFT_BUILD_REPORT=/tmp/ksft-build.tsv install”h]”hŒ…$ : > /tmp/ksft-build.tsv $ make -C tools/testing/selftests O=/tmp/kernel-build \ KSFT_BUILD_REPORT=/tmp/ksft-build.tsv install”…”�”}”hjVsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K�hjh²hubhÌ)�”}”(hXgEach record holds the phase (``all`` or ``install``), a name and the exit status of that step. Recording does not change which targets are built or installed, or the exit status of make, also with ``FORCE_TARGETS=1``. The caller creates or truncates the report before a build; the rules only append to it. Nothing is recorded by ``make -n``, ``-t`` or ``-q``.”h]”(hŒEach record holds the phase (”…”�”}”(hjdh²hh³Nh´Nubj )�”}”(hŒ``all``”h]”hŒall”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjdubhŒ or ”…”�”}”(hjdh²hh³Nh´Nubj )�”}”(hŒ ``install``”h]”hŒinstall”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjdubhŒ’), a name and the exit status of that step. Recording does not change which targets are built or installed, or the exit status of make, also with ”…”�”}”(hjdh²hh³Nh´Nubj )�”}”(hŒ``FORCE_TARGETS=1``”h]”hŒFORCE_TARGETS=1”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjdubhŒq. The caller creates or truncates the report before a build; the rules only append to it. Nothing is recorded by ”…”�”}”(hjdh²hh³Nh´Nubj )�”}”(hŒ ``make -n``”h]”hŒmake -n”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjdubhŒ, ”…”�”}”(hjdh²hh³Nh´Nubj )�”}”(hŒ``-t``”h]”hŒ-t”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjdubhŒ or ”…”�”}”hjdsbj )�”}”(hŒ``-q``”h]”hŒ-q”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjdubhŒ.”…”�”}”(hjdh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K”hjh²hubhÌ)�”}”(hXZThe same name can appear several times: ``install`` builds the targets again, and generating ``kselftest-list.txt`` is recorded as part of the ``install`` phase. Targets that are added automatically as installation dependencies of other targets, such as ``net/lib``, are recorded too. Suites that are built from several subdirectories may also record each subdirectory under its path, for example ``arm64/tags``; a failure there means that the suite was built or installed only partially. A record belongs to the target with the longest name that is equal to the record name or followed by ``/`` in it.”h]”(hŒ(The same name can appear several times: ”…”�”}”(hjÞh²hh³Nh´Nubj )�”}”(hŒ ``install``”h]”hŒinstall”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÞubhŒ* builds the targets again, and generating ”…”�”}”(hjÞh²hh³Nh´Nubj )�”}”(hŒ``kselftest-list.txt``”h]”hŒkselftest-list.txt”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÞubhŒ is recorded as part of the ”…”�”}”(hjÞh²hh³Nh´Nubj )�”}”(hŒ ``install``”h]”hŒinstall”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÞubhŒd phase. Targets that are added automatically as installation dependencies of other targets, such as ”…”�”}”(hjÞh²hh³Nh´Nubj )�”}”(hŒ ``net/lib``”h]”hŒnet/lib”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÞubhŒ„, are recorded too. Suites that are built from several subdirectories may also record each subdirectory under its path, for example ”…”�”}”(hjÞh²hh³Nh´Nubj )�”}”(hŒ``arm64/tags``”h]”hŒ arm64/tags”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÞubhŒ³; a failure there means that the suite was built or installed only partially. A record belongs to the target with the longest name that is equal to the record name or followed by ”…”�”}”(hjÞh²hh³Nh´Nubj )�”}”(hŒ``/``”h]”hŒ/”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÞubhŒ in it.”…”�”}”(hjÞh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kšhjh²hubhÌ)�”}”(hX•A target was built and installed successfully only if all of its records have a zero status. Missing records do not show that a target was built. A successful target that installs no tests has no entries in ``kselftest-list.txt``. Install the kernel headers with ``make headers`` before building: a suite that fails because the headers are missing is recorded as failed even if a later step installs them.”h]”(hŒÏA target was built and installed successfully only if all of its records have a zero status. Missing records do not show that a target was built. A successful target that installs no tests has no entries in ”…”�”}”(hjXh²hh³Nh´Nubj )�”}”(hŒ``kselftest-list.txt``”h]”hŒkselftest-list.txt”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjXubhŒ". Install the kernel headers with ”…”�”}”(hjXh²hh³Nh´Nubj )�”}”(hŒ``make headers``”h]”hŒ make headers”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjXubhŒ~ before building: a suite that fails because the headers are missing is recorded as failed even if a later step installs them.”…”�”}”(hjXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¤hjh²hubhÌ)�”}”(hŒt``KSFT_BUILD_REPORT_VERSION`` in tools/testing/selftests/Makefile gives the version of this format, currently ``1``.”h]”(j )�”}”(hŒ``KSFT_BUILD_REPORT_VERSION``”h]”hŒKSFT_BUILD_REPORT_VERSION”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjŠubhŒQ in tools/testing/selftests/Makefile gives the version of this format, currently ”…”�”}”(hjŠh²hh³Nh´Nubj )�”}”(hŒ``1``”h]”hŒ1”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjŠubhŒ.”…”�”}”(hjŠh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K«hjh²hubeh}”(h]”Œrecording-suite-build-results”ah ]”h"]”Œrecording suite build results”ah$]”h&]”uh1hµhh·h²hh³hÊh´K‰ubh¶)�”}”(hhh]”(h»)�”}”(hŒ(Running the full range hotplug selftests”h]”hŒ(Running the full range hotplug selftests”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÀh²hh³hÊh´K¯ubhÌ)�”}”(hŒTo build the hotplug tests::”h]”hŒTo build the hotplug tests:”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K±hjÀh²hubj¡)�”}”(hŒ)$ make -C tools/testing/selftests hotplug”h]”hŒ)$ make -C tools/testing/selftests hotplug”…”�”}”hjßsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K³hjÀh²hubhÌ)�”}”(hŒTo run the hotplug tests::”h]”hŒTo run the hotplug tests:”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KµhjÀh²hubj¡)�”}”(hŒ-$ make -C tools/testing/selftests run_hotplug”h]”hŒ-$ make -C tools/testing/selftests run_hotplug”…”�”}”hjûsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´K·hjÀh²hubhÌ)�”}”(hŒ2Note that some tests will require root privileges.”h]”hŒ2Note that some tests will require root privileges.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¹hjÀh²hubeh}”(h]”Œ(running-the-full-range-hotplug-selftests”ah ]”h"]”Œ(running the full range hotplug selftests”ah$]”h&]”uh1hµhh·h²hh³hÊh´K¯ubh¶)�”}”(hhh]”(h»)�”}”(hŒInstall selftests”h]”hŒInstall selftests”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´K½ubhÌ)�”}”(hŒüYou can use the "install" target of "make" (which calls the `kselftest_install.sh` tool) to install selftests in the default location (`tools/testing/selftests/kselftest_install`), or in a user specified location via the `INSTALL_PATH` "make" variable.”h]”(hŒDYou can use the “installâ€� target of “makeâ€� (which calls the ”…”�”}”(hj0h²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ`kselftest_install.sh`”h]”hŒkselftest_install.sh”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j8hj0ubhŒ5 tool) to install selftests in the default location (”…”�”}”(hj0h²hh³Nh´Nubj9)�”}”(hŒ+`tools/testing/selftests/kselftest_install`”h]”hŒ)tools/testing/selftests/kselftest_install”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j8hj0ubhŒ+), or in a user specified location via the ”…”�”}”(hj0h²hh³Nh´Nubj9)�”}”(hŒ`INSTALL_PATH`”h]”hŒ INSTALL_PATH”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j8hj0ubhŒ “makeâ€� variable.”…”�”}”(hj0h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¿hjh²hubhÌ)�”}”(hŒ*To install selftests in default location::”h]”hŒ)To install selftests in default location:”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÃhjh²hubj¡)�”}”(hŒ)$ make -C tools/testing/selftests install”h]”hŒ)$ make -C tools/testing/selftests install”…”�”}”hj„sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´KÅhjh²hubhÌ)�”}”(hŒ3To install selftests in a user specified location::”h]”hŒ2To install selftests in a user specified location:”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÇhjh²hubj¡)�”}”(hŒG$ make -C tools/testing/selftests install INSTALL_PATH=/some/other/path”h]”hŒG$ make -C tools/testing/selftests install INSTALL_PATH=/some/other/path”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´KÉhjh²hubeh}”(h]”Œinstall-selftests”ah ]”h"]”Œinstall selftests”ah$]”h&]”uh1hµhh·h²hh³hÊh´K½ubh¶)�”}”(hhh]”(h»)�”}”(hŒRunning installed selftests”h]”hŒRunning installed selftests”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¶h²hh³hÊh´KÌubhÌ)�”}”(hŒ{Found in the install directory, as well as in the Kselftest tarball, is a script named `run_kselftest.sh` to run the tests.”h]”(hŒWFound in the install directory, as well as in the Kselftest tarball, is a script named ”…”�”}”(hjÇh²hh³Nh´Nubj9)�”}”(hŒ`run_kselftest.sh`”h]”hŒrun_kselftest.sh”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j8hjÇubhŒ to run the tests.”…”�”}”(hjÇh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÎhj¶h²hubhÌ)�”}”(hŒvYou can simply do the following to run the installed Kselftests. Please note some tests will require root privileges::”h]”hŒuYou can simply do the following to run the installed Kselftests. Please note some tests will require root privileges:”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÑhj¶h²hubj¡)�”}”(hŒ+$ cd kselftest_install $ ./run_kselftest.sh”h]”hŒ+$ cd kselftest_install $ ./run_kselftest.sh”…”�”}”hjõsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´KÔhj¶h²hubhÌ)�”}”(hŒATo see the list of available tests, the `-l` option can be used::”h]”(hŒ(To see the list of available tests, the ”…”�”}”(hjh²hh³Nh´Nubj9)�”}”(hŒ`-l`”h]”hŒ-l”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j8hjubhŒ option can be used:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K×hj¶h²hubj¡)�”}”(hŒ$ ./run_kselftest.sh -l”h]”hŒ$ ./run_kselftest.sh -l”…”�”}”hj#sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´KÙhj¶h²hubhÌ)�”}”(hŒšThe `-c` option can be used to run all the tests from a test collection, or the `-t` option for specific single tests. Either can be used multiple times::”h]”(hŒThe ”…”�”}”(hj1h²hh³Nh´Nubj9)�”}”(hŒ`-c`”h]”hŒ-c”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j8hj1ubhŒH option can be used to run all the tests from a test collection, or the ”…”�”}”(hj1h²hh³Nh´Nubj9)�”}”(hŒ`-t`”h]”hŒ-t”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j8hj1ubhŒE option for specific single tests. Either can be used multiple times:”…”�”}”(hj1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÛhj¶h²hubj¡)�”}”(hŒQ$ ./run_kselftest.sh -c size -c seccomp -t timers:posix_timers -t timer:nanosleep”h]”hŒQ$ ./run_kselftest.sh -c size -c seccomp -t timers:posix_timers -t timer:nanosleep”…”�”}”hjcsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´KÞhj¶h²hubhÌ)�”}”(hŒJFor other features see the script usage output, seen with the `-h` option.”h]”(hŒ>For other features see the script usage output, seen with the ”…”�”}”(hjqh²hh³Nh´Nubj9)�”}”(hŒ`-h`”h]”hŒ-h”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j8hjqubhŒ option.”…”�”}”(hjqh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kàhj¶h²hubeh}”(h]”Œrunning-installed-selftests”ah ]”h"]”Œrunning installed selftests”ah$]”h&]”uh1hµhh·h²hh³hÊh´KÌubh¶)�”}”(hhh]”(h»)�”}”(hŒTimeout for selftests”h]”hŒTimeout for selftests”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj™h²hh³hÊh´KãubhÌ)�”}”(hX:Selftests are designed to be quick and so a default timeout is used of 45 seconds for each test. Tests can override the default timeout by adding a settings file in their directory and set a timeout variable there to the configured a desired upper timeout for the test. Only a few tests override the timeout with a value higher than 45 seconds, selftests strives to keep it that way. Timeouts in selftests are not considered fatal because the system under which a test runs may change and this can also modify the expected time it takes to run a test. If you have control over the systems which will run the tests you can configure a test runner on those systems to use a greater or lower timeout on the command line as with the `-o` or the `--override-timeout` argument. For example to use 165 seconds instead one would use::”h]”(hXÙSelftests are designed to be quick and so a default timeout is used of 45 seconds for each test. Tests can override the default timeout by adding a settings file in their directory and set a timeout variable there to the configured a desired upper timeout for the test. Only a few tests override the timeout with a value higher than 45 seconds, selftests strives to keep it that way. Timeouts in selftests are not considered fatal because the system under which a test runs may change and this can also modify the expected time it takes to run a test. If you have control over the systems which will run the tests you can configure a test runner on those systems to use a greater or lower timeout on the command line as with the ”…”�”}”(hjªh²hh³Nh´Nubj9)�”}”(hŒ`-o`”h]”hŒ-o”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j8hjªubhŒ or the ”…”�”}”(hjªh²hh³Nh´Nubj9)�”}”(hŒ`--override-timeout`”h]”hŒ--override-timeout”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j8hjªubhŒ@ argument. For example to use 165 seconds instead one would use:”…”�”}”(hjªh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kåhj™h²hubj¡)�”}”(hŒ+$ ./run_kselftest.sh --override-timeout 165”h]”hŒ+$ ./run_kselftest.sh --override-timeout 165”…”�”}”hjÜsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Kòhj™h²hubhÌ)�”}”(hŒ¸You can look at the TAP output to see if you ran into the timeout. Test runners which know a test must run under a specific time can then optionally treat these timeouts then as fatal.”h]”hŒ¸You can look at the TAP output to see if you ran into the timeout. Test runners which know a test must run under a specific time can then optionally treat these timeouts then as fatal.”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kôhj™h²hubeh}”(h]”Œtimeout-for-selftests”ah ]”h"]”Œtimeout for selftests”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kãubh¶)�”}”(hhh]”(h»)�”}”(hŒPackaging selftests”h]”hŒPackaging selftests”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KùubhÌ)�”}”(hŒuIn some cases packaging is desired, such as when tests need to run on a different system. To package selftests, run::”h]”hŒtIn some cases packaging is desired, such as when tests need to run on a different system. To package selftests, run:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kûhjh²hubj¡)�”}”(hŒ)$ make -C tools/testing/selftests gen_tar”h]”hŒ)$ make -C tools/testing/selftests gen_tar”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Kþhjh²hubhÌ)�”}”(hXThis generates a tarball in the `INSTALL_PATH/kselftest-packages` directory. By default, `.gz` format is used. The tar compression format can be overridden by specifying a `FORMAT` make variable. Any value recognized by `tar's auto-compress`_ option is supported, such as::”h]”(hŒ This generates a tarball in the ”…”�”}”(hj-h²hh³Nh´Nubj9)�”}”(hŒ!`INSTALL_PATH/kselftest-packages`”h]”hŒINSTALL_PATH/kselftest-packages”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j8hj-ubhŒ directory. By default, ”…”�”}”(hj-h²hh³Nh´Nubj9)�”}”(hŒ`.gz`”h]”hŒ.gz”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j8hj-ubhŒN format is used. The tar compression format can be overridden by specifying a ”…”�”}”(hj-h²hh³Nh´Nubj9)�”}”(hŒ`FORMAT`”h]”hŒFORMAT”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j8hj-ubhŒ( make variable. Any value recognized by ”…”�”}”(hj-h²hh³Nh´Nubj)�”}”(hŒ`tar's auto-compress`_”h]”hŒtar’s auto-compress”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œtar's auto-compress”Œrefuri”ŒMhttps://www.gnu.org/software/tar/manual/html_node/gzip.html#auto_002dcompress”uh1hÿhj-jKubhŒ option is supported, such as:”…”�”}”(hj-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjh²hubj¡)�”}”(hŒ4$ make -C tools/testing/selftests gen_tar FORMAT=.xz”h]”hŒ4$ make -C tools/testing/selftests gen_tar FORMAT=.xz”…”�”}”hj‡sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Mhjh²hubhÌ)�”}”(hŒŸ`make gen_tar` invokes `make install` so you can use it to package a subset of tests by using variables specified in `Running a subset of selftests`_ section::”h]”(j9)�”}”(hŒ`make gen_tar`”h]”hŒ make gen_tar”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j8hj•ubhŒ invokes ”…”�”}”(hj•h²hh³Nh´Nubj9)�”}”(hŒ`make install`”h]”hŒ make install”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j8hj•ubhŒP so you can use it to package a subset of tests by using variables specified in ”…”�”}”(hj•h²hh³Nh´Nubj)�”}”(hŒ `Running a subset of selftests`_”h]”hŒRunning a subset of selftests”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒRunning a subset of selftests”jjuh1hÿhj•jKubhŒ section:”…”�”}”(hj•h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjh²hubj¡)�”}”(hŒC$ make -C tools/testing/selftests gen_tar TARGETS="size" FORMAT=.xz”h]”hŒC$ make -C tools/testing/selftests gen_tar TARGETS="size" FORMAT=.xz”…”�”}”hj×sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´M hjh²hubhŒtarget”“”)�”}”(hŒf.. _tar's auto-compress: https://www.gnu.org/software/tar/manual/html_node/gzip.html#auto_002dcompress”h]”h}”(h]”Œtar-s-auto-compress”ah ]”h"]”Œtar's auto-compress”ah$]”h&]”j{j|uh1jåh´M hjh²hh³hÊj…Kubeh}”(h]”Œpackaging-selftests”ah ]”h"]”Œpackaging selftests”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kùubh¶)�”}”(hhh]”(h»)�”}”(hŒBuild and test on nommu target”h]”hŒBuild and test on nommu target”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjûh²hh³hÊh´MubhÌ)�”}”(hŒµThe nommu selftests detect NOMMU at runtime by checking for the ``MmapCopy`` entry in ``/proc/meminfo``. Ensure procfs is mounted at ``/proc`` before building and running the tests.”h]”(hŒ@The nommu selftests detect NOMMU at runtime by checking for the ”…”�”}”(hj h²hh³Nh´Nubj )�”}”(hŒ ``MmapCopy``”h]”hŒMmapCopy”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj ubhŒ entry in ”…”�”}”(hj h²hh³Nh´Nubj )�”}”(hŒ``/proc/meminfo``”h]”hŒ /proc/meminfo”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj ubhŒ. Ensure procfs is mounted at ”…”�”}”(hj h²hh³Nh´Nubj )�”}”(hŒ ``/proc``”h]”hŒ/proc”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj ubhŒ' before building and running the tests.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjûh²hubj¡)�”}”(hŒ½$ make ARCH=um O=build kselftest-all TARGETS=nommu # <= build-only $ make ARCH=um O=build kselftest-install TARGETS=nommu $ ./build/kselftest/kselftest_install/run_kselftest.sh -p -c nommu”h]”hŒ½$ make ARCH=um O=build kselftest-all TARGETS=nommu # <= build-only $ make ARCH=um O=build kselftest-install TARGETS=nommu $ ./build/kselftest/kselftest_install/run_kselftest.sh -p -c nommu”…”�”}”hjP sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Mhjûh²hubhÌ)�”}”(hXThe C tests report a skip if ``/proc/meminfo`` is unavailable. On a NOMMU system, the runner needs that file to avoid wrapping the tests in ``timeout`` before they can report a skip. Mounting procfs is therefore a prerequisite for running this target through the kselftest runner.”h]”(hŒThe C tests report a skip if ”…”�”}”(hj^ h²hh³Nh´Nubj )�”}”(hŒ``/proc/meminfo``”h]”hŒ /proc/meminfo”…”�”}”(hjf h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj^ ubhŒ^ is unavailable. On a NOMMU system, the runner needs that file to avoid wrapping the tests in ”…”�”}”(hj^ h²hh³Nh´Nubj )�”}”(hŒ ``timeout``”h]”hŒtimeout”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj^ ubhŒ� before they can report a skip. Mounting procfs is therefore a prerequisite for running this target through the kselftest runner.”…”�”}”(hj^ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjûh²hubeh}”(h]”Œbuild-and-test-on-nommu-target”ah ]”h"]”Œbuild and test on nommu target”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mubh¶)�”}”(hhh]”(h»)�”}”(hŒContributing new tests”h]”hŒContributing new tests”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj˜ h²hh³hÊh´M"ubhÌ)�”}”(hŒ'In general, the rules for selftests are”h]”hŒ'In general, the rules for selftests are”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M$hj˜ h²hubhŒ block_quote”“”)�”}”(hXS* Do as much as you can if you're not root; * Don't take too long; * Don't break the build on any architecture, and * Don't cause the top-level "make run_tests" to fail if your feature is unconfigured. * The output of tests must conform to the TAP standard to ensure high testing quality and to capture failures/errors with specific details. The kselftest.h and kselftest_harness.h headers provide wrappers for outputting test results. These wrappers should be used for pass, fail, exit, and skip messages. CI systems can easily parse TAP output messages to detect test results. ”h]”hŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ*Do as much as you can if you're not root; ”h]”hÌ)�”}”(hŒ)Do as much as you can if you're not root;”h]”hŒ+Do as much as you can if you’re not root;”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M&hjÄ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¿ ubjà )�”}”(hŒDon't take too long; ”h]”hÌ)�”}”(hŒDon't take too long;”h]”hŒDon’t take too long;”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M(hjÜ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¿ ubjà )�”}”(hŒ/Don't break the build on any architecture, and ”h]”hÌ)�”}”(hŒ.Don't break the build on any architecture, and”h]”hŒ0Don’t break the build on any architecture, and”…”�”}”(hjø h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M*hjô ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¿ ubjà )�”}”(hŒTDon't cause the top-level "make run_tests" to fail if your feature is unconfigured. ”h]”hÌ)�”}”(hŒSDon't cause the top-level "make run_tests" to fail if your feature is unconfigured.”h]”hŒYDon’t cause the top-level “make run_testsâ€� to fail if your feature is unconfigured.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M,hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¿ ubjà )�”}”(hXwThe output of tests must conform to the TAP standard to ensure high testing quality and to capture failures/errors with specific details. The kselftest.h and kselftest_harness.h headers provide wrappers for outputting test results. These wrappers should be used for pass, fail, exit, and skip messages. CI systems can easily parse TAP output messages to detect test results. ”h]”hÌ)�”}”(hXvThe output of tests must conform to the TAP standard to ensure high testing quality and to capture failures/errors with specific details. The kselftest.h and kselftest_harness.h headers provide wrappers for outputting test results. These wrappers should be used for pass, fail, exit, and skip messages. CI systems can easily parse TAP output messages to detect test results.”h]”hXvThe output of tests must conform to the TAP standard to ensure high testing quality and to capture failures/errors with specific details. The kselftest.h and kselftest_harness.h headers provide wrappers for outputting test results. These wrappers should be used for pass, fail, exit, and skip messages. CI systems can easily parse TAP output messages to detect test results.”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M/hj$ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¿ ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1j½ h³hÊh´M&hj¹ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j· h³hÊh´M&hj˜ h²hubeh}”(h]”Œcontributing-new-tests”ah ]”h"]”Œcontributing new tests”ah$]”h&]”uh1hµhh·h²hh³hÊh´M"ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Contributing new tests (details)”h]”hŒ Contributing new tests (details)”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjR h²hh³hÊh´M7ubj¸ )�”}”(hX9 * In your Makefile, use facilities from lib.mk by including it instead of reinventing the wheel. Specify flags and binaries generation flags on need basis before including lib.mk. :: CFLAGS = $(KHDR_INCLUDES) TEST_GEN_PROGS := close_range_test include ../lib.mk * Use TEST_GEN_XXX if such binaries or files are generated during compiling. TEST_PROGS, TEST_GEN_PROGS mean it is the executable tested by default. TEST_GEN_MODS_DIR should be used by tests that require modules to be built before the test starts. The variable will contain the name of the directory containing the modules. TEST_CUSTOM_PROGS should be used by tests that require custom build rules and prevent common build rule use. TEST_PROGS are for test shell scripts. Please ensure shell script has its exec bit set. Otherwise, lib.mk run_tests will generate a warning. TEST_CUSTOM_PROGS and TEST_PROGS will be run by common run_tests. TEST_PROGS_EXTENDED, TEST_GEN_PROGS_EXTENDED mean it is the executable which is not tested by default. TEST_FILES, TEST_GEN_FILES mean it is the file which is used by test. TEST_INCLUDES is similar to TEST_FILES, it lists files which should be included when exporting or installing the tests, with the following differences: * symlinks to files in other directories are preserved * the part of paths below tools/testing/selftests/ is preserved when copying the files to the output directory TEST_INCLUDES is meant to list dependencies located in other directories of the selftests hierarchy. * First use the headers inside the kernel source and/or git repo, and then the system headers. Headers for the kernel release as opposed to headers installed by the distro on the system should be the primary focus to be able to find regressions. Use KHDR_INCLUDES in Makefile to include headers from the kernel source. * If a test needs specific kernel config options enabled, add a config file in the test directory to enable them. e.g: tools/testing/selftests/android/config * Create a .gitignore file inside test directory and add all generated objects in it. * Add new test name in TARGETS in selftests/Makefile:: TARGETS += android * All changes should pass:: kselftest-{all,install,clean,gen_tar} kselftest-{all,install,clean,gen_tar} O=abo_path kselftest-{all,install,clean,gen_tar} O=rel_path make -C tools/testing/selftests {all,install,clean,gen_tar} make -C tools/testing/selftests {all,install,clean,gen_tar} O=abs_path make -C tools/testing/selftests {all,install,clean,gen_tar} O=rel_path ”h]”j¾ )�”}”(hhh]”(jà )�”}”(hXIn your Makefile, use facilities from lib.mk by including it instead of reinventing the wheel. Specify flags and binaries generation flags on need basis before including lib.mk. :: CFLAGS = $(KHDR_INCLUDES) TEST_GEN_PROGS := close_range_test include ../lib.mk ”h]”(hÌ)�”}”(hŒ´In your Makefile, use facilities from lib.mk by including it instead of reinventing the wheel. Specify flags and binaries generation flags on need basis before including lib.mk. ::”h]”hŒ±In your Makefile, use facilities from lib.mk by including it instead of reinventing the wheel. Specify flags and binaries generation flags on need basis before including lib.mk.”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M9hjj ubj¡)�”}”(hŒNCFLAGS = $(KHDR_INCLUDES) TEST_GEN_PROGS := close_range_test include ../lib.mk”h]”hŒNCFLAGS = $(KHDR_INCLUDES) TEST_GEN_PROGS := close_range_test include ../lib.mk”…”�”}”hj| sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´M=hjj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjg ubjà )�”}”(hXÝUse TEST_GEN_XXX if such binaries or files are generated during compiling. TEST_PROGS, TEST_GEN_PROGS mean it is the executable tested by default. TEST_GEN_MODS_DIR should be used by tests that require modules to be built before the test starts. The variable will contain the name of the directory containing the modules. TEST_CUSTOM_PROGS should be used by tests that require custom build rules and prevent common build rule use. TEST_PROGS are for test shell scripts. Please ensure shell script has its exec bit set. Otherwise, lib.mk run_tests will generate a warning. TEST_CUSTOM_PROGS and TEST_PROGS will be run by common run_tests. TEST_PROGS_EXTENDED, TEST_GEN_PROGS_EXTENDED mean it is the executable which is not tested by default. TEST_FILES, TEST_GEN_FILES mean it is the file which is used by test. TEST_INCLUDES is similar to TEST_FILES, it lists files which should be included when exporting or installing the tests, with the following differences: * symlinks to files in other directories are preserved * the part of paths below tools/testing/selftests/ is preserved when copying the files to the output directory TEST_INCLUDES is meant to list dependencies located in other directories of the selftests hierarchy. ”h]”(hÌ)�”}”(hŒJUse TEST_GEN_XXX if such binaries or files are generated during compiling.”h]”hŒJUse TEST_GEN_XXX if such binaries or files are generated during compiling.”…”�”}”(hj” h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MAhj� ubhÌ)�”}”(hŒGTEST_PROGS, TEST_GEN_PROGS mean it is the executable tested by default.”h]”hŒGTEST_PROGS, TEST_GEN_PROGS mean it is the executable tested by default.”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MDhj� ubhÌ)�”}”(hŒ®TEST_GEN_MODS_DIR should be used by tests that require modules to be built before the test starts. The variable will contain the name of the directory containing the modules.”h]”hŒ®TEST_GEN_MODS_DIR should be used by tests that require modules to be built before the test starts. The variable will contain the name of the directory containing the modules.”…”�”}”(hj° h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MGhj� ubhÌ)�”}”(hŒlTEST_CUSTOM_PROGS should be used by tests that require custom build rules and prevent common build rule use.”h]”hŒlTEST_CUSTOM_PROGS should be used by tests that require custom build rules and prevent common build rule use.”…”�”}”(hj¾ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MKhj� ubhÌ)�”}”(hŒŒTEST_PROGS are for test shell scripts. Please ensure shell script has its exec bit set. Otherwise, lib.mk run_tests will generate a warning.”h]”hŒŒTEST_PROGS are for test shell scripts. Please ensure shell script has its exec bit set. Otherwise, lib.mk run_tests will generate a warning.”…”�”}”(hjÌ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MNhj� ubhÌ)�”}”(hŒATEST_CUSTOM_PROGS and TEST_PROGS will be run by common run_tests.”h]”hŒATEST_CUSTOM_PROGS and TEST_PROGS will be run by common run_tests.”…”�”}”(hjÚ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MQhj� ubhÌ)�”}”(hŒfTEST_PROGS_EXTENDED, TEST_GEN_PROGS_EXTENDED mean it is the executable which is not tested by default.”h]”hŒfTEST_PROGS_EXTENDED, TEST_GEN_PROGS_EXTENDED mean it is the executable which is not tested by default.”…”�”}”(hjè h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MShj� ubhÌ)�”}”(hŒETEST_FILES, TEST_GEN_FILES mean it is the file which is used by test.”h]”hŒETEST_FILES, TEST_GEN_FILES mean it is the file which is used by test.”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MVhj� ubhÌ)�”}”(hŒ—TEST_INCLUDES is similar to TEST_FILES, it lists files which should be included when exporting or installing the tests, with the following differences:”h]”hŒ—TEST_INCLUDES is similar to TEST_FILES, it lists files which should be included when exporting or installing the tests, with the following differences:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MYhj� ubj¸ )�”}”(hŒ¨* symlinks to files in other directories are preserved * the part of paths below tools/testing/selftests/ is preserved when copying the files to the output directory ”h]”j¾ )�”}”(hhh]”(jà )�”}”(hŒ4symlinks to files in other directories are preserved”h]”hÌ)�”}”(hj h]”hŒ4symlinks to files in other directories are preserved”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M]hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubjà )�”}”(hŒmthe part of paths below tools/testing/selftests/ is preserved when copying the files to the output directory ”h]”hÌ)�”}”(hŒlthe part of paths below tools/testing/selftests/ is preserved when copying the files to the output directory”h]”hŒlthe part of paths below tools/testing/selftests/ is preserved when copying the files to the output directory”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M^hj0 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubeh}”(h]”h ]”h"]”h$]”h&]”jB jC uh1j½ h³hÊh´M]hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j· h³hÊh´M]hj� ubhÌ)�”}”(hŒdTEST_INCLUDES is meant to list dependencies located in other directories of the selftests hierarchy.”h]”hŒdTEST_INCLUDES is meant to list dependencies located in other directories of the selftests hierarchy.”…”�”}”(hjT h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mahj� ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjg ubjà )�”}”(hX>First use the headers inside the kernel source and/or git repo, and then the system headers. Headers for the kernel release as opposed to headers installed by the distro on the system should be the primary focus to be able to find regressions. Use KHDR_INCLUDES in Makefile to include headers from the kernel source. ”h]”hÌ)�”}”(hX=First use the headers inside the kernel source and/or git repo, and then the system headers. Headers for the kernel release as opposed to headers installed by the distro on the system should be the primary focus to be able to find regressions. Use KHDR_INCLUDES in Makefile to include headers from the kernel source.”h]”hX=First use the headers inside the kernel source and/or git repo, and then the system headers. Headers for the kernel release as opposed to headers installed by the distro on the system should be the primary focus to be able to find regressions. Use KHDR_INCLUDES in Makefile to include headers from the kernel source.”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mdhjh ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjg ubjà )�”}”(hŒ�If a test needs specific kernel config options enabled, add a config file in the test directory to enable them. e.g: tools/testing/selftests/android/config ”h]”(hÌ)�”}”(hŒoIf a test needs specific kernel config options enabled, add a config file in the test directory to enable them.”h]”hŒoIf a test needs specific kernel config options enabled, add a config file in the test directory to enable them.”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mjhj€ ubhÌ)�”}”(hŒ+e.g: tools/testing/selftests/android/config”h]”hŒ+e.g: tools/testing/selftests/android/config”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mmhj€ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjg ubjà )�”}”(hŒTCreate a .gitignore file inside test directory and add all generated objects in it. ”h]”hÌ)�”}”(hŒSCreate a .gitignore file inside test directory and add all generated objects in it.”h]”hŒSCreate a .gitignore file inside test directory and add all generated objects in it.”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mohj¦ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjg ubjà )�”}”(hŒJAdd new test name in TARGETS in selftests/Makefile:: TARGETS += android ”h]”(hÌ)�”}”(hŒ4Add new test name in TARGETS in selftests/Makefile::”h]”hŒ3Add new test name in TARGETS in selftests/Makefile:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mrhj¾ ubj¡)�”}”(hŒTARGETS += android”h]”hŒTARGETS += android”…”�”}”hjÐ sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Mthj¾ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjg ubjà )�”}”(hXsAll changes should pass:: kselftest-{all,install,clean,gen_tar} kselftest-{all,install,clean,gen_tar} O=abo_path kselftest-{all,install,clean,gen_tar} O=rel_path make -C tools/testing/selftests {all,install,clean,gen_tar} make -C tools/testing/selftests {all,install,clean,gen_tar} O=abs_path make -C tools/testing/selftests {all,install,clean,gen_tar} O=rel_path ”h]”(hÌ)�”}”(hŒAll changes should pass::”h]”hŒAll changes should pass:”…”�”}”(hjè h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mvhjä ubj¡)�”}”(hXQkselftest-{all,install,clean,gen_tar} kselftest-{all,install,clean,gen_tar} O=abo_path kselftest-{all,install,clean,gen_tar} O=rel_path make -C tools/testing/selftests {all,install,clean,gen_tar} make -C tools/testing/selftests {all,install,clean,gen_tar} O=abs_path make -C tools/testing/selftests {all,install,clean,gen_tar} O=rel_path”h]”hXQkselftest-{all,install,clean,gen_tar} kselftest-{all,install,clean,gen_tar} O=abo_path kselftest-{all,install,clean,gen_tar} O=rel_path make -C tools/testing/selftests {all,install,clean,gen_tar} make -C tools/testing/selftests {all,install,clean,gen_tar} O=abs_path make -C tools/testing/selftests {all,install,clean,gen_tar} O=rel_path”…”�”}”hjö sbah}”(h]”h ]”h"]”h$]”h&]”j°j±uh1j h³hÊh´Mxhjä ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjg ubeh}”(h]”h ]”h"]”h$]”h&]”jB jC uh1j½ h³hÊh´M9hjc ubah}”(h]”h ]”h"]”h$]”h&]”uh1j· h³hÊh´M9hjR h²hubeh}”(h]”Œcontributing-new-tests-details”ah ]”h"]”Œ contributing new tests (details)”ah$]”h&]”uh1hµhh·h²hh³hÊh´M7ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Test Module”h]”hŒ Test Module”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´M€ubhÌ)�”}”(hX˜Kselftest tests the kernel from userspace. Sometimes things need testing from within the kernel, one method of doing this is to create a test module. We can tie the module into the kselftest framework by using a shell script test runner. ``kselftest/module.sh`` is designed to facilitate this process. There is also a header file provided to assist writing kernel modules that are for use with kselftest:”h]”(hŒñKselftest tests the kernel from userspace. Sometimes things need testing from within the kernel, one method of doing this is to create a test module. We can tie the module into the kselftest framework by using a shell script test runner. ”…”�”}”(hj/ h²hh³Nh´Nubj )�”}”(hŒ``kselftest/module.sh``”h]”hŒkselftest/module.sh”…”�”}”(hj7 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj/ ubhŒ� is designed to facilitate this process. There is also a header file provided to assist writing kernel modules that are for use with kselftest:”…”�”}”(hj/ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M‚hj h²hubj¾ )�”}”(hhh]”(jà )�”}”(hŒ.``tools/testing/selftests/kselftest_module.h``”h]”hÌ)�”}”(hjT h]”j )�”}”(hjT h]”hŒ*tools/testing/selftests/kselftest_module.h”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjV ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M‰hjR ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjO h²hh³hÊh´Nubjà )�”}”(hŒ0``tools/testing/selftests/kselftest/module.sh`` ”h]”hÌ)�”}”(hŒ/``tools/testing/selftests/kselftest/module.sh``”h]”j )�”}”(hjx h]”hŒ+tools/testing/selftests/kselftest/module.sh”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjv ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MŠhjr ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjO h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jB Œ-”uh1j½ h³hÊh´M‰hj h²hubhÌ)�”}”(hXûNote that test modules should taint the kernel with TAINT_TEST. This will happen automatically for modules which are in the ``tools/testing/`` directory, or for modules which use the ``kselftest_module.h`` header above. Otherwise, you'll need to add ``MODULE_INFO(test, "Y")`` to your module source. selftests which do not load modules typically should not taint the kernel, but in cases where a non-test module is loaded, TEST_TAINT can be applied from userspace by writing to ``/proc/sys/kernel/tainted``.”h]”(hŒ|Note that test modules should taint the kernel with TAINT_TEST. This will happen automatically for modules which are in the ”…”�”}”(hjš h²hh³Nh´Nubj )�”}”(hŒ``tools/testing/``”h]”hŒtools/testing/”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjš ubhŒ) directory, or for modules which use the ”…”�”}”(hjš h²hh³Nh´Nubj )�”}”(hŒ``kselftest_module.h``”h]”hŒkselftest_module.h”…”�”}”(hj´ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjš ubhŒ/ header above. Otherwise, you’ll need to add ”…”�”}”(hjš h²hh³Nh´Nubj )�”}”(hŒ``MODULE_INFO(test, "Y")``”h]”hŒMODULE_INFO(test, "Y")”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjš ubhŒÊ to your module source. selftests which do not load modules typically should not taint the kernel, but in cases where a non-test module is loaded, TEST_TAINT can be applied from userspace by writing to ”…”�”}”(hjš h²hh³Nh´Nubj )�”}”(hŒ``/proc/sys/kernel/tainted``”h]”hŒ/proc/sys/kernel/tainted”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjš ubhŒ.”…”�”}”(hjš h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MŒhj h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ How to use”h]”hŒ How to use”…”�”}”(hjó h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjð h²hh³hÊh´M•ubhÌ)�”}”(hŒ|Here we show the typical steps to create a test module and tie it into kselftest. We use kselftests for lib/ as an example.”h]”hŒ|Here we show the typical steps to create a test module and tie it into kselftest. We use kselftests for lib/ as an example.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M—hjð h²hubhŒenumerated_list”“”)�”}”(hhh]”(jà )�”}”(hŒCreate the test module ”h]”hÌ)�”}”(hŒCreate the test module”h]”hŒCreate the test module”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mšhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubjà )�”}”(hŒmCreate the test script that will run (load/unload) the module e.g. ``tools/testing/selftests/lib/bitmap.sh`` ”h]”hÌ)�”}”(hŒlCreate the test script that will run (load/unload) the module e.g. ``tools/testing/selftests/lib/bitmap.sh``”h]”(hŒCCreate the test script that will run (load/unload) the module e.g. ”…”�”}”(hj0 h²hh³Nh´Nubj )�”}”(hŒ)``tools/testing/selftests/lib/bitmap.sh``”h]”hŒ%tools/testing/selftests/lib/bitmap.sh”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj0 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mœhj, ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubjà )�”}”(hŒDAdd line to config file e.g. ``tools/testing/selftests/lib/config`` ”h]”hÌ)�”}”(hŒCAdd line to config file e.g. ``tools/testing/selftests/lib/config``”h]”(hŒAdd line to config file e.g. ”…”�”}”(hjV h²hh³Nh´Nubj )�”}”(hŒ&``tools/testing/selftests/lib/config``”h]”hŒ"tools/testing/selftests/lib/config”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjV ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MŸhjR ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubjà )�”}”(hŒKAdd test script to makefile e.g. ``tools/testing/selftests/lib/Makefile`` ”h]”hÌ)�”}”(hŒJAdd test script to makefile e.g. ``tools/testing/selftests/lib/Makefile``”h]”(hŒ"Add test script to makefile e.g. ”…”�”}”(hj| h²hh³Nh´Nubj )�”}”(hŒ(``tools/testing/selftests/lib/Makefile``”h]”hŒ$tools/testing/selftests/lib/Makefile”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj| ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¡hjx ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubjà )�”}”(hŒVerify it works: ”h]”hÌ)�”}”(hŒVerify it works:”h]”hŒVerify it works:”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M£hjž ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1j hjð h²hh³hÊh´Mšubj¡)�”}”(hŒ©# Assumes you have booted a fresh build of this kernel tree cd /path/to/linux/tree make kselftest-merge make modules sudo make modules_install make TARGETS=lib kselftest”h]”hŒ©# Assumes you have booted a fresh build of this kernel tree cd /path/to/linux/tree make kselftest-merge make modules sudo make modules_install make TARGETS=lib kselftest”…”�”}”hjÁ sbah}”(h]”h ]”h"]”h$]”h&]”j°j±Œforce”‰Œlanguage”Œsh”Œhighlight_args”}”uh1j h³hÊh´M¥hjð h²hubeh}”(h]”Œ how-to-use”ah ]”h"]”Œ how to use”ah$]”h&]”uh1hµhj h²hh³hÊh´M•ubh¶)�”}”(hhh]”(h»)�”}”(hŒExample Module”h]”hŒExample Module”…”�”}”(hjß h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÜ h²hh³hÊh´M¯ubhÌ)�”}”(hŒ.A bare bones test module might look like this:”h]”hŒ.A bare bones test module might look like this:”…”�”}”(hjí h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M±hjÜ h²hubj¡)�”}”(hXß// SPDX-License-Identifier: GPL-2.0+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include "../tools/testing/selftests/kselftest_module.h" KSTM_MODULE_GLOBALS(); /* * Kernel module for testing the foobinator */ static int __init test_function() { ... } static void __init selftest(void) { KSTM_CHECK_ZERO(do_test_case("", 0)); } KSTM_MODULE_LOADERS(test_foo); MODULE_AUTHOR("John Developer "); MODULE_LICENSE("GPL"); MODULE_INFO(test, "Y");”h]”hXß// SPDX-License-Identifier: GPL-2.0+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include "../tools/testing/selftests/kselftest_module.h" KSTM_MODULE_GLOBALS(); /* * Kernel module for testing the foobinator */ static int __init test_function() { ... } static void __init selftest(void) { KSTM_CHECK_ZERO(do_test_case("", 0)); } KSTM_MODULE_LOADERS(test_foo); MODULE_AUTHOR("John Developer "); MODULE_LICENSE("GPL"); MODULE_INFO(test, "Y");”…”�”•}”hjû sbah}”(h]”h ]”h"]”h$]”h&]”j°j±jÏ ‰jÐ Œc”jÒ }”uh1j h³hÊh´M³hjÜ h²hubeh}”(h]”Œexample-module”ah ]”h"]”Œexample module”ah$]”h&]”uh1hµhj h²hh³hÊh´M¯ubh¶)�”}”(hhh]”(h»)�”}”(hŒExample test script”h]”hŒExample test script”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´MÑubj¡)�”}”(hŒc#!/bin/bash # SPDX-License-Identifier: GPL-2.0+ $(dirname $0)/../kselftest/module.sh "foo" test_foo”h]”hŒc#!/bin/bash # SPDX-License-Identifier: GPL-2.0+ $(dirname $0)/../kselftest/module.sh "foo" test_foo”…”�”}”hj$sbah}”(h]”h ]”h"]”h$]”h&]”j°j±jÏ ‰jÐ Œsh”jÒ }”uh1j h³hÊh´MÓhjh²hubeh}”(h]”Œexample-test-script”ah ]”h"]”Œexample test script”ah$]”h&]”uh1hµhj h²hh³hÊh´MÑubeh}”(h]”j(ah ]”h"]”Œ test module”ah$]”h&]”uh1hµhh·h²hh³hÊh´M€j…Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ Test Harness”h]”hŒ Test Harness”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjCh²hh³hÊh´MÛubhÌ)�”}”(hŒ£The kselftest_harness.h file contains useful helpers to build tests. The test harness is for userspace testing, for kernel space testing see `Test Module`_ above.”h]”(hŒŽThe kselftest_harness.h file contains useful helpers to build tests. The test harness is for userspace testing, for kernel space testing see ”…”�”}”(hjTh²hh³Nh´Nubj)�”}”(hŒ`Test Module`_”h]”hŒ Test Module”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ Test Module”jj(uh1hÿhjTjKubhŒ above.”…”�”}”(hjTh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÝhjCh²hubhÌ)�”}”(hŒTThe tests from tools/testing/selftests/seccomp/seccomp_bpf.c can be used as example.”h]”hŒTThe tests from tools/testing/selftests/seccomp/seccomp_bpf.c can be used as example.”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MáhjCh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒExample”h]”hŒExample”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj„h²hh³hÊh´Måubj¡)�”}”(hX—#include "kselftest_harness.h" TEST(standalone_test) { do_some_stuff; EXPECT_GT(10, stuff) { stuff_state_t state; enumerate_stuff_state(&state); TH_LOG("expectation failed with state: %s", state.msg); } more_stuff; ASSERT_NE(some_stuff, NULL) TH_LOG("how did it happen?!"); last_stuff; EXPECT_EQ(0, last_stuff); } FIXTURE(my_fixture) { mytype_t *data; int awesomeness_level; }; FIXTURE_SETUP(my_fixture) { self->data = mytype_new(); ASSERT_NE(NULL, self->data); } FIXTURE_TEARDOWN(my_fixture) { mytype_free(self->data); } TEST_F(my_fixture, data_is_good) { EXPECT_EQ(1, is_my_data_good(self->data)); } TEST_HARNESS_MAIN”h]”hX—#include "kselftest_harness.h" TEST(standalone_test) { do_some_stuff; EXPECT_GT(10, stuff) { stuff_state_t state; enumerate_stuff_state(&state); TH_LOG("expectation failed with state: %s", state.msg); } more_stuff; ASSERT_NE(some_stuff, NULL) TH_LOG("how did it happen?!"); last_stuff; EXPECT_EQ(0, last_stuff); } FIXTURE(my_fixture) { mytype_t *data; int awesomeness_level; }; FIXTURE_SETUP(my_fixture) { self->data = mytype_new(); ASSERT_NE(NULL, self->data); } FIXTURE_TEARDOWN(my_fixture) { mytype_free(self->data); } TEST_F(my_fixture, data_is_good) { EXPECT_EQ(1, is_my_data_good(self->data)); } TEST_HARNESS_MAIN”…”�”}”hj•sbah}”(h]”h ]”h"]”h$]”h&]”j°j±jÏ ‰jÐ j jÒ }”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:487: ./tools/testing/selftests/kselftest_harness.h”h´K hj„h²hubeh}”(h]”Œexample”ah ]”h"]”Œexample”ah$]”h&]”uh1hµhjCh²hh³hÊh´Måubh¶)�”}”(hhh]”(h»)�”}”(hŒHelpers”h]”hŒHelpers”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj­h²hh³hÊh´MìubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”ŒTH_LOG (C macro)”Œc.TH_LOG”hNt”auh1j¾hj­h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒTH_LOG”h]”hŒdesc_signature_line”“”)�”}”(hŒTH_LOG”h]”hŒ desc_name”“”)�”}”(hŒTH_LOG”h]”hŒ desc_sig_name”“”)�”}”(hjÙh]”hŒTH_LOG”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jçhjãubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”j°j±uh1jáhjÝh²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´K^ubah}”(h]”h ]”h"]”h$]”h&]”j°j±Œ add_permalink”ˆuh1jÛŒsphinx_line_type”Œ declarator”hj×h²hh³jÿh´K^ubah}”(h]”jÍah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jÕh³jÿh´K^hjÒh²hubhŒ desc_content”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhjÒh²hh³jÿh´K^ubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”Œdomain”j Œobjtype”j"Œdesctype”j"Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jÐh²hhj­h³jÏh´NubhÌ)�”}”(hŒ``TH_LOG (fmt, ...)``”h]”j )�”}”(hj.h]”hŒTH_LOG (fmt, ...)”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´K`hj­h²hubhŒ container”“”)�”}”(hX[**Parameters** ``fmt`` format string ``...`` optional arguments **Description** .. code-block:: c TH_LOG(format, ...) Optional debug logging function available for use in tests. Logging may be enabled or disabled by defining TH_LOG_ENABLED. E.g., #define TH_LOG_ENABLED 1 If no definition is provided, logging is enabled by default.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”hŒstrong”“”)�”}”(hjLh]”hŒ Parameters”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´KbhjFubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ``fmt`` format string ”h]”(hŒterm”“”)�”}”(hŒ``fmt``”h]”j )�”}”(hjsh]”hŒfmt”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´K`hjkubhŒ definition”“”)�”}”(hhh]”hÌ)�”}”(hŒ format string”h]”hŒ format string”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jˆh´K`hj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jˆh´K`hjfubjj)�”}”(hŒ``...`` optional arguments ”h]”(jp)�”}”(hŒ``...``”h]”j )�”}”(hj®h]”hŒ...”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´Kahj¨ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒoptional arguments”h]”hŒoptional arguments”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÃh´KahjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jÃh´Kahjfubeh}”(h]”h ]”h"]”h$]”h&]”uh1jdhjFubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hjéh]”hŒ Description”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´KchjFubj¡)�”}”(hŒTH_LOG(format, ...)”h]”hŒTH_LOG(format, ...)”…”�”}”hjÿsbah}”(h]”h ]”h"]”h$]”h&]”j°j±jÏ ‰jÐ j jÒ }”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´K_hjFubhÌ)�”}”(hŒ™Optional debug logging function available for use in tests. Logging may be enabled or disabled by defining TH_LOG_ENABLED. E.g., #define TH_LOG_ENABLED 1”h]”hŒ™Optional debug logging function available for use in tests. Logging may be enabled or disabled by defining TH_LOG_ENABLED. E.g., #define TH_LOG_ENABLED 1”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´KchjFubhÌ)�”}”(hŒOptionally called once per fixture to declare fixture variant ”h]”hÌ)�”}”(hŒ=Optionally called once per fixture to declare fixture variant”h]”hŒ=Optionally called once per fixture to declare fixture variant”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´MDhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j· h³jh´MDhj­h²hubjE)�”}”(hXO**Parameters** ``fixture_name`` fixture name **Description** .. code-block:: c FIXTURE_VARIANT(fixture_name) { type property1; ... }; Defines type of constant parameters provided to FIXTURE_SETUP(), TEST_F() and FIXTURE_TEARDOWN as *variant*. Variants allow the same tests to be run with different arguments.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hjh]”hŒ Parameters”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´MHhjubje)�”}”(hhh]”jj)�”}”(hŒ``fixture_name`` fixture name ”h]”(jp)�”}”(hŒ``fixture_name``”h]”j )�”}”(hj>h]”hŒ fixture_name”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´MGhj8ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ fixture name”h]”hŒ fixture name”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jSh´MGhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jSh´MGhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jdhjubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hjyh]”hŒ Description”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´MIhjubj¡)�”}”(hŒ:FIXTURE_VARIANT(fixture_name) { type property1; ... };”h]”hŒ:FIXTURE_VARIANT(fixture_name) { type property1; ... };”…”�”}”hj�sbah}”(h]”h ]”h"]”h$]”h&]”j°j±jÏ ‰jÐ j jÒ }”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´MHhjubhÌ)�”}”(hŒ®Defines type of constant parameters provided to FIXTURE_SETUP(), TEST_F() and FIXTURE_TEARDOWN as *variant*. Variants allow the same tests to be run with different arguments.”h]”(hŒbDefines type of constant parameters provided to FIXTURE_SETUP(), TEST_F() and FIXTURE_TEARDOWN as ”…”�”}”(hjŸh²hh³Nh´Nubj³)�”}”(hŒ *variant*”h]”hŒvariant”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j²hjŸubhŒC. Variants allow the same tests to be run with different arguments.”…”�”}”(hjŸh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´MOhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhj­h²hh³jÏh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒFIXTURE_VARIANT_ADD (C macro)”Œc.FIXTURE_VARIANT_ADD”hNt”auh1j¾hj­h²hh³jÏh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒFIXTURE_VARIANT_ADD”h]”jÜ)�”}”(hŒFIXTURE_VARIANT_ADD”h]”jâ)�”}”(hŒFIXTURE_VARIANT_ADD”h]”jè)�”}”(hjÚh]”hŒFIXTURE_VARIANT_ADD”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjàubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhjÜh²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´MWubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhjØh²hh³j÷h´MWubah}”(h]”jÓah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³j÷h´MWhjÕh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhjÕh²hh³j÷h´MWubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'jj(jj)‰j*‰j+‰uh1jÐh²hhj­h³jÏh´NubhÌ)�”}”(hŒ4``FIXTURE_VARIANT_ADD (fixture_name, variant_name)``”h]”j )�”}”(hjh]”hŒ0FIXTURE_VARIANT_ADD (fixture_name, variant_name)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´MYhj­h²hubj¸ )�”}”(hŒ?Called once per fixture variant to setup and register the data ”h]”hÌ)�”}”(hŒ>Called once per fixture variant to setup and register the data”h]”hŒ>Called once per fixture variant to setup and register the data”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´MWhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j· h³j>h´MWhj­h²hubjE)�”}”(hXz**Parameters** ``fixture_name`` fixture name ``variant_name`` name of the parameter set **Description** .. code-block:: c FIXTURE_VARIANT_ADD(fixture_name, variant_name) { .property1 = val1, ... }; Defines a variant of the test fixture, provided to FIXTURE_SETUP() and TEST_F() as *variant*. Tests of each fixture will be run once for each variant.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hjKh]”hŒ Parameters”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´M[hjEubje)�”}”(hhh]”(jj)�”}”(hŒ``fixture_name`` fixture name ”h]”(jp)�”}”(hŒ``fixture_name``”h]”j )�”}”(hjjh]”hŒ fixture_name”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´MZhjdubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ fixture name”h]”hŒ fixture name”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´MZhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jh´MZhjaubjj)�”}”(hŒ+``variant_name`` name of the parameter set ”h]”(jp)�”}”(hŒ``variant_name``”h]”j )�”}”(hj£h]”hŒ variant_name”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´M[hj�ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒname of the parameter set”h]”hŒname of the parameter set”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¸h´M[hj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³j¸h´M[hjaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jdhjEubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hjÞh]”hŒ Description”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´M]hjEubj¡)�”}”(hŒOFIXTURE_VARIANT_ADD(fixture_name, variant_name) { .property1 = val1, ... };”h]”hŒOFIXTURE_VARIANT_ADD(fixture_name, variant_name) { .property1 = val1, ... };”…”�”}”hjôsbah}”(h]”h ]”h"]”h$]”h&]”j°j±jÏ ‰jÐ j jÒ }”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´M\hjEubhÌ)�”}”(hŒ–Defines a variant of the test fixture, provided to FIXTURE_SETUP() and TEST_F() as *variant*. Tests of each fixture will be run once for each variant.”h]”(hŒSDefines a variant of the test fixture, provided to FIXTURE_SETUP() and TEST_F() as ”…”�”}”(hjh²hh³Nh´Nubj³)�”}”(hŒ *variant*”h]”hŒvariant”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j²hjubhŒ:. Tests of each fixture will be run once for each variant.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´MchjEubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhj­h²hh³jÏh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒTEST_F (C macro)”Œc.TEST_F”hNt”auh1j¾hj­h²hh³jÏh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒTEST_F”h]”jÜ)�”}”(hŒTEST_F”h]”jâ)�”}”(hŒTEST_F”h]”jè)�”}”(hj?h]”hŒTEST_F”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjEubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhjAh²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´Myubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhj=h²hh³j\h´Myubah}”(h]”j8ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³j\h´Myhj:h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj:h²hh³j\h´Myubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'juj(juj)‰j*‰j+‰uh1jÐh²hhj­h³jÏh´NubhÌ)�”}”(hŒ$``TEST_F (fixture_name, test_name)``”h]”j )�”}”(hj{h]”hŒ TEST_F (fixture_name, test_name)”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´M{hj­h²hubj¸ )�”}”(hŒAEmits test registration and helpers for fixture-based test cases ”h]”hÌ)�”}”(hŒ@Emits test registration and helpers for fixture-based test cases”h]”hŒ@Emits test registration and helpers for fixture-based test cases”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´Myhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j· h³j£h´Myhj­h²hubjE)�”}”(hXx**Parameters** ``fixture_name`` fixture name ``test_name`` test name **Description** .. code-block:: c TEST_F(fixture, name) { implementation } Defines a test that depends on a fixture (e.g., is part of a test case). Very similar to TEST() except that *self* is the setup instance of fixture's datatype exposed for use by the implementation. The _metadata object is shared (MAP_SHARED) with all the potential forked processes, which enables them to use EXCEPT_*() and ASSERT_*(). The *self* object is only shared with the potential forked processes if FIXTURE_TEARDOWN_PARENT() is used instead of FIXTURE_TEARDOWN().”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hj°h]”hŒ Parameters”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´M}hjªubje)�”}”(hhh]”(jj)�”}”(hŒ``fixture_name`` fixture name ”h]”(jp)�”}”(hŒ``fixture_name``”h]”j )�”}”(hjÏh]”hŒ fixture_name”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´M|hjÉubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ fixture name”h]”hŒ fixture name”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jäh´M|hjåubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jäh´M|hjÆubjj)�”}”(hŒ``test_name`` test name ”h]”(jp)�”}”(hŒ ``test_name``”h]”j )�”}”(hjh]”hŒ test_name”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´M}hjubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ test name”h]”hŒ test name”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´M}hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jh´M}hjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jdhjªubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hjCh]”hŒ Description”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´Mhjªubj¡)�”}”(hŒ(TEST_F(fixture, name) { implementation }”h]”hŒ(TEST_F(fixture, name) { implementation }”…”�”}”hjYsbah}”(h]”h ]”h"]”h$]”h&]”j°j±jÏ ‰jÐ j jÒ }”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´M~hjªubhÌ)�”}”(hŒÅDefines a test that depends on a fixture (e.g., is part of a test case). Very similar to TEST() except that *self* is the setup instance of fixture's datatype exposed for use by the implementation.”h]”(hŒlDefines a test that depends on a fixture (e.g., is part of a test case). Very similar to TEST() except that ”…”�”}”(hjih²hh³Nh´Nubj³)�”}”(hŒ*self*”h]”hŒself”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j²hjiubhŒU is the setup instance of fixture’s datatype exposed for use by the implementation.”…”�”}”(hjih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´M‚hjªubhÌ)�”}”(hŒ‰The _metadata object is shared (MAP_SHARED) with all the potential forked processes, which enables them to use EXCEPT_*() and ASSERT_*().”h]”hŒ‰The _metadata object is shared (MAP_SHARED) with all the potential forked processes, which enables them to use EXCEPT_*() and ASSERT_*().”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´M†hjªubhÌ)�”}”(hŒˆThe *self* object is only shared with the potential forked processes if FIXTURE_TEARDOWN_PARENT() is used instead of FIXTURE_TEARDOWN().”h]”(hŒThe ”…”�”}”(hj™h²hh³Nh´Nubj³)�”}”(hŒ*self*”h]”hŒself”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j²hj™ubhŒ~ object is only shared with the potential forked processes if FIXTURE_TEARDOWN_PARENT() is used instead of FIXTURE_TEARDOWN().”…”�”}”(hj™h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´M‰hjªubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhj­h²hh³jÏh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒTEST_HARNESS_MAIN (C macro)”Œc.TEST_HARNESS_MAIN”hNt”auh1j¾hj­h²hh³jÏh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒTEST_HARNESS_MAIN”h]”jÜ)�”}”(hŒTEST_HARNESS_MAIN”h]”jâ)�”}”(hŒTEST_HARNESS_MAIN”h]”jè)�”}”(hjÔh]”hŒTEST_HARNESS_MAIN”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjÚubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhjÖh²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´Mìubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhjÒh²hh³jñh´Mìubah}”(h]”jÍah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³jñh´MìhjÏh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhjÏh²hh³jñh´Mìubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'j j(j j)‰j*‰j+‰uh1jÐh²hhj­h³jÏh´NubhÌ)�”}”(hŒ``TEST_HARNESS_MAIN``”h]”j )�”}”(hjh]”hŒTEST_HARNESS_MAIN”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´Mîhj­h²hubj¸ )�”}”(hŒ“ Simple wrapper to run the test harness **Description** .. code-block:: c TEST_HARNESS_MAIN Use once to append a main() to the test file. ”h]”(j¸ )�”}”(hŒ'Simple wrapper to run the test harness ”h]”hÌ)�”}”(hŒ&Simple wrapper to run the test harness”h]”hŒ&Simple wrapper to run the test harness”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´Mìhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j· h³j<h´Mìhj&ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hjEh]”hŒ Description”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´Mîhj&ubj¡)�”}”(hŒTEST_HARNESS_MAIN”h]”hŒTEST_HARNESS_MAIN”…”�”}”hj[sbah}”(h]”h ]”h"]”h$]”h&]”j°j±jÏ ‰jÐ j jÒ }”uh1j h³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´Míhj&ubhÌ)�”}”(hŒ-Use once to append a main() to the test file.”h]”hŒ-Use once to append a main() to the test file.”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:494: ./tools/testing/selftests/kselftest_harness.h”h´Mñhj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j· h³j<h´Mìhj­h²hubeh}”(h]”Œhelpers”ah ]”h"]”Œhelpers”ah$]”h&]”uh1hµhjCh²hh³hÊh´Mìubh¶)�”}”(hhh]”(h»)�”}”(hŒ Operators”h]”hŒ Operators”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjˆh²hh³hÊh´MôubhÌ)�”}”(hŒ¡Operators for use in TEST() and TEST_F(). ASSERT_* calls will stop test execution immediately. EXPECT_* calls will emit a failure warning, note it, and continue.”h]”hŒ¡Operators for use in TEST() and TEST_F(). ASSERT_* calls will stop test execution immediately. EXPECT_* calls will emit a failure warning, note it, and continue.”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:502: ./tools/testing/selftests/kselftest_harness.h”h´Múhjˆh²hubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒASSERT_EQ (C macro)”Œ c.ASSERT_EQ”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ ASSERT_EQ”h]”jÜ)�”}”(hŒ ASSERT_EQ”h]”jâ)�”}”(hŒ ASSERT_EQ”h]”jè)�”}”(hj»h]”hŒ ASSERT_EQ”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjÁubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhj½h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhj¹h²hh³jØh´Mubah}”(h]”j´ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³jØh´Mhj¶h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶h²hh³jØh´Mubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'jñj(jñj)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ``ASSERT_EQ (expected, seen)``”h]”j )�”}”(hj÷h]”hŒASSERT_EQ (expected, seen)”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mhjˆh²hubjE)�”}”(hŒŽ**Parameters** ``expected`` expected value ``seen`` measured value **Description** ASSERT_EQ(expected, measured): expected == measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mhj ubje)�”}”(hhh]”(jj)�”}”(hŒ``expected`` expected value ”h]”(jp)�”}”(hŒ ``expected``”h]”j )�”}”(hj2h]”hŒexpected”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mhj,ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jGh´MhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jGh´Mhj)ubjj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hjkh]”hŒseen”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MhjeubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j€h´Mhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³j€h´Mhj)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jdhj ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hj¦h]”hŒ Description”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mhj ubhÌ)�”}”(hŒ3ASSERT_EQ(expected, measured): expected == measured”h]”hŒ3ASSERT_EQ(expected, measured): expected == measured”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒASSERT_NE (C macro)”Œ c.ASSERT_NE”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ ASSERT_NE”h]”jÜ)�”}”(hŒ ASSERT_NE”h]”jâ)�”}”(hŒ ASSERT_NE”h]”jè)�”}”(hjåh]”hŒ ASSERT_NE”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjëubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhjçh²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M ubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhjãh²hh³jh´M ubah}”(h]”jÞah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³jh´M hjàh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhjàh²hh³jh´M ubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'jj(jj)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ``ASSERT_NE (expected, seen)``”h]”j )�”}”(hj!h]”hŒASSERT_NE (expected, seen)”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mhjˆh²hubjE)�”}”(hŒŽ**Parameters** ``expected`` expected value ``seen`` measured value **Description** ASSERT_NE(expected, measured): expected != measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hj=h]”hŒ Parameters”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mhj7ubje)�”}”(hhh]”(jj)�”}”(hŒ``expected`` expected value ”h]”(jp)�”}”(hŒ ``expected``”h]”j )�”}”(hj\h]”hŒexpected”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MhjVubjŠ)�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jqh´Mhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jqh´MhjSubjj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hj•h]”hŒseen”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mhj�ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jªh´Mhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jªh´MhjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jdhj7ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hjÐh]”hŒ Description”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mhj7ubhÌ)�”}”(hŒ3ASSERT_NE(expected, measured): expected != measured”h]”hŒ3ASSERT_NE(expected, measured): expected != measured”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mhj7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒASSERT_LT (C macro)”Œ c.ASSERT_LT”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ ASSERT_LT”h]”jÜ)�”}”(hŒ ASSERT_LT”h]”jâ)�”}”(hŒ ASSERT_LT”h]”jè)�”}”(hjh]”hŒ ASSERT_LT”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhjh²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mubah}”(•h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhj h²hh³j,h´Mubah}”(h]”jah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³j,h´Mhj h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj h²hh³j,h´Mubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'jEj(jEj)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ``ASSERT_LT (expected, seen)``”h]”j )�”}”(hjKh]”hŒASSERT_LT (expected, seen)”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mhjˆh²hubjE)�”}”(hŒ�**Parameters** ``expected`` expected value ``seen`` measured value **Description** ASSERT_LT(expected, measured): expected < measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hjgh]”hŒ Parameters”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mhjaubje)�”}”(hhh]”(jj)�”}”(hŒ``expected`` expected value ”h]”(jp)�”}”(hŒ ``expected``”h]”j )�”}”(hj†h]”hŒexpected”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mhj€ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j›h´Mhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³j›h´Mhj}ubjj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hj¿h]”hŒseen”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mhj¹ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÔh´MhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jÔh´Mhj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jdhjaubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hjúh]”hŒ Description”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MhjaubhÌ)�”}”(hŒ2ASSERT_LT(expected, measured): expected < measured”h]”hŒ2ASSERT_LT(expected, measured): expected < measured”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mhjaubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒASSERT_LE (C macro)”Œ c.ASSERT_LE”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ ASSERT_LE”h]”jÜ)�”}”(hŒ ASSERT_LE”h]”jâ)�”}”(hŒ ASSERT_LE”h]”jè)�”}”(hj9 h]”hŒ ASSERT_LE”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj? ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhj; h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M#ubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhj7 h²hh³jV h´M#ubah}”(h]”j2 ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³jV h´M#hj4 h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj4 h²hh³jV h´M#ubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'jo j(jo j)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ``ASSERT_LE (expected, seen)``”h]”j )�”}”(hju h]”hŒASSERT_LE (expected, seen)”…”�”}”(hjw h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjs ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M%hjˆh²hubjE)�”}”(hŒŽ**Parameters** ``expected`` expected value ``seen`` measured value **Description** ASSERT_LE(expected, measured): expected <= measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hj‘ h]”hŒ Parameters”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M'hj‹ ubje)�”}”(hhh]”(jj)�”}”(hŒ``expected`` expected value ”h]”(jp)�”}”(hŒ ``expected``”h]”j )�”}”(hj° h]”hŒexpected”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj® ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M%hjª ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÅ h´M%hjÆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjª ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jÅ h´M%hj§ ubjj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hjé h]”hŒseen”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjç ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M&hjã ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jþ h´M&hjÿ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjã ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jþ h´M&hj§ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jdhj‹ ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hj$!h]”hŒ Description”…”�”}”(hj&!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj"!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M(hj‹ ubhÌ)�”}”(hŒ3ASSERT_LE(expected, measured): expected <= measured”h]”hŒ3ASSERT_LE(expected, measured): expected <= measured”…”�”}”(hj:!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M$hj‹ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒASSERT_GT (C macro)”Œ c.ASSERT_GT”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ ASSERT_GT”h]”jÜ)�”}”(hŒ ASSERT_GT”h]”jâ)�”}”(hŒ ASSERT_GT”h]”jè)�”}”(hjc!h]”hŒ ASSERT_GT”…”�”}”(hjm!h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhji!ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhje!h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M.ubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhja!h²hh³j€!h´M.ubah}”(h]”j\!ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³j€!h´M.hj^!h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj^!h²hh³j€!h´M.ubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'j™!j(j™!j)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ``ASSERT_GT (expected, seen)``”h]”j )�”}”(hjŸ!h]”hŒASSERT_GT (expected, seen)”…”�”}”(hj¡!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj�!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M0hjˆh²hubjE)�”}”(hŒ�**Parameters** ``expected`` expected value ``seen`` measured value **Description** ASSERT_GT(expected, measured): expected > measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hj»!h]”hŒ Parameters”…”�”}”(hj½!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj¹!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M2hjµ!ubje)�”}”(hhh]”(jj)�”}”(hŒ``expected`` expected value ”h]”(jp)�”}”(hŒ ``expected``”h]”j )�”}”(hjÚ!h]”hŒexpected”…”�”}”(hjÜ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjØ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M0hjÔ!ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hjó!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jï!h´M0hjð!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÔ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jï!h´M0hjÑ!ubjj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hj"h]”hŒseen”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M1hj "ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hj,"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j("h´M1hj)"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj "ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³j("h´M1hjÑ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jdhjµ!ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hjN"h]”hŒ Description”…”�”}”(hjP"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjL"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M3hjµ!ubhÌ)�”}”(hŒ2ASSERT_GT(expected, measured): expected > measured”h]”hŒ2ASSERT_GT(expected, measured): expected > measured”…”�”}”(hjd"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M/hjµ!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒASSERT_GE (C macro)”Œ c.ASSERT_GE”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ ASSERT_GE”h]”jÜ)�”}”(hŒ ASSERT_GE”h]”jâ)�”}”(hŒ ASSERT_GE”h]”jè)�”}”(hj�"h]”hŒ ASSERT_GE”…”�”}”(hj—"h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj“"ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhj�"h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M9ubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhj‹"h²hh³jª"h´M9ubah}”(h]”j†"ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³jª"h´M9hjˆ"h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆ"h²hh³jª"h´M9ubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'jÃ"j(jÃ"j)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ``ASSERT_GE (expected, seen)``”h]”j )�”}”(hjÉ"h]”hŒASSERT_GE (expected, seen)”…”�”}”(hjË"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÇ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M;hjˆh²hubjE)�”}”(hŒŽ**Parameters** ``expected`` expected value ``seen`` measured value **Description** ASSERT_GE(expected, measured): expected >= measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hjå"h]”hŒ Parameters”…”�”}”(hjç"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjã"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M=hjß"ubje)�”}”(hhh]”(jj)�”}”(hŒ``expected`` expected value ”h]”(jp)�”}”(hŒ ``expected``”h]”j )�”}”(hj#h]”hŒexpected”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M;hjþ"ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j#h´M;hj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjþ"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³j#h´M;hjû"ubjj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hj=#h]”hŒseen”…”�”}”(hj?#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj;#ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M<hj7#ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjV#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jR#h´M<hjS#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj7#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jR#h´M<hjû"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jdhjß"ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hjx#h]”hŒ Description”…”�”}”(hjz#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjv#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M>hjß"ubhÌ)�”}”(hŒ3ASSERT_GE(expected, measured): expected >= measured”h]”hŒ3ASSERT_GE(expected, measured): expected >= measured”…”�”}”(hjŽ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M:hjß"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒASSERT_NULL (C macro)”Œ c.ASSERT_NULL”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ ASSERT_NULL”h]”jÜ)�”}”(hŒ ASSERT_NULL”h]”jâ)�”}”(hŒ ASSERT_NULL”h]”jè)�”}”(hj·#h]”hŒ ASSERT_NULL”…”�”}”(hjÁ#h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj½#ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhj¹#h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MDubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhjµ#h²hh³jÔ#h´MDubah}”(h]”j°#ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³jÔ#h´MDhj²#h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj²#h²hh³jÔ#h´MDubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'jí#j(jí#j)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ``ASSERT_NULL (seen)``”h]”j )�”}”(hjó#h]”hŒASSERT_NULL (seen)”…”�”}”(hjõ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjñ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MFhjˆh²hubjE)�”}”(hŒc**Parameters** ``seen`` measured value **Description** ASSERT_NULL(measured): NULL == measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hj$h]”hŒ Parameters”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj $ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MHhj $ubje)�”}”(hhh]”jj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hj.$h]”hŒseen”…”�”}”(hj0$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj,$ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MFhj($ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjG$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jC$h´MFhjD$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj($ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jC$h´MFhj%$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jdhj $ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hji$h]”hŒ Description”…”�”}”(hjk$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjg$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MHhj $ubhÌ)�”}”(hŒ'ASSERT_NULL(measured): NULL == measured”h]”hŒ'ASSERT_NULL(measured): NULL == measured”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MEhj $ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒASSERT_TRUE (C macro)”Œ c.ASSERT_TRUE”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ ASSERT_TRUE”h]”jÜ)�”}”(hŒ ASSERT_TRUE”h]”jâ)�”}”(hŒ ASSERT_TRUE”h]”jè)�”}”(hj¨$h]”hŒ ASSERT_TRUE”…”�”}”(hj²$h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj®$ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhjª$h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MNubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhj¦$h²hh³jÅ$h´MNubah}”(h]”j¡$ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³jÅ$h´MNhj£$h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj£$h²hh³jÅ$h´MNubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'jÞ$j(jÞ$j)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ``ASSERT_TRUE (seen)``”h]”j )�”}”(hjä$h]”hŒASSERT_TRUE (seen)”…”�”}”(hjæ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjâ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MPhjˆh²hubjE)�”}”(hŒ`**Parameters** ``seen`` measured value **Description** ASSERT_TRUE(measured): measured != 0”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hj%h]”hŒ Parameters”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjþ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MRhjú$ubje)�”}”(hhh]”jj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hj%h]”hŒseen”…”�”}”(hj!%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MPhj%ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hj8%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j4%h´MPhj5%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³j4%h´MPhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jdhjú$ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hjZ%h]”hŒ Description”…”�”}”(hj\%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjX%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MRhjú$ubhÌ)�”}”(hŒ$ASSERT_TRUE(measured): measured != 0”h]”hŒ$ASSERT_TRUE(measured): measured != 0”…”�”}”(hjp%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MOhjú$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒASSERT_FALSE (C macro)”Œc.ASSERT_FALSE”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ ASSERT_FALSE”h]”jÜ)�”}”(hŒ ASSERT_FALSE”h]”jâ)�”}”(hŒ ASSERT_FALSE”h]”jè)�”}”(hj™%h]”hŒ ASSERT_FALSE”…”�”}”(hj£%h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjŸ%ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhj›%h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MXubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhj—%h²hh³j¶%h´MXubah}”(h]”j’%ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³j¶%h´MXhj”%h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj”%h²hh³j¶%h´MXubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'jÏ%j(jÏ%j)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ``ASSERT_FALSE (seen)``”h]”j )�”}”(hjÕ%h]”hŒASSERT_FALSE (seen)”…”�”}”(hj×%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÓ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MZhjˆh²hubjE)�”}”(hŒa**Parameters** ``seen`` measured value **Description** ASSERT_FALSE(measured): measured == 0”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hjñ%h]”hŒ Parameters”…”�”}”(hjó%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjï%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M\hjë%ubje)�”}”(hhh]”jj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hj&h]”hŒseen”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MZhj &ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hj)&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j%&h´MZhj&&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj &ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³j%&h´MZhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jdhjë%ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hjK&h]”hŒ Description”…”�”}”(hjM&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjI&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M\hjë%ubhÌ)�”}”(hŒ%ASSERT_FALSE(measured): measured == 0”h]”hŒ%ASSERT_FALSE(measured): measured == 0”…”�”}”(hja&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MYhjë%ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒASSERT_STREQ (C macro)”Œc.ASSERT_STREQ”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ ASSERT_STREQ”h]”jÜ)�”}”(hŒ ASSERT_STREQ”h]”jâ)�”}”(hŒ ASSERT_STREQ”h]”jè)�”}”(hjŠ&h]”hŒ ASSERT_STREQ”…”�”}”(hj”&h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj�&ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhjŒ&h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mbubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhjˆ&h²hh³j§&h´Mbubah}”(h]”jƒ&ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³j§&h´Mbhj…&h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj…&h²hh³j§&h´Mbubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'jÀ&j(jÀ&j)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ!``ASSERT_STREQ (expected, seen)``”h]”j )�”}”(hjÆ&h]”hŒASSERT_STREQ (expected, seen)”…”�”}”(hjÈ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÄ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mdhjˆh²hubjE)�”}”(hŒ˜**Parameters** ``expected`` expected value ``seen`` measured value **Description** ASSERT_STREQ(expected, measured): !strcmp(expected, measured)”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hjâ&h]”hŒ Parameters”…”�”}”(hjä&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjà&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MfhjÜ&ubje)�”}”(hhh]”(jj)�”}”(hŒ``expected`` expected value ”h]”(jp)�”}”(hŒ ``expected``”h]”j )�”}”(hj'h]”hŒexpected”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÿ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mdhjû&ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j'h´Mdhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjû&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³j'h´Mdhjø&ubjj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hj:'h]”hŒseen”…”�”}”(hj<'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj8'ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mehj4'ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjS'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jO'h´MehjP'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj4'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jO'h´Mehjø&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jdhjÜ&ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hju'h]”hŒ Description”…”�”}”(hjw'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjs'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MghjÜ&ubhÌ)�”}”(hŒ=ASSERT_STREQ(expected, measured): !strcmp(expected, measured)”h]”hŒ=ASSERT_STREQ(expected, measured): !strcmp(expected, measured)”…”�”}”(hj‹'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MchjÜ&ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒASSERT_STRNE (C macro)”Œc.ASSERT_STRNE”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ ASSERT_STRNE”h]”jÜ)�”}”(hŒ ASSERT_STRNE”h]”jâ)�”}”(hŒ ASSERT_STRNE”h]”jè)�”}”(hj´'h]”hŒ ASSERT_STRNE”…”�”}”(hj¾'h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjº'ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhj¶'h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mmubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhj²'h²hh³jÑ'h´Mmubah}”(h]”j­'ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³jÑ'h´Mmhj¯'h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯'h²hh³jÑ'h´Mmubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'jê'j(jê'j)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ!``ASSERT_STRNE (expected, seen)``”h]”j )�”}”(hjð'h]”hŒASSERT_STRNE (expected, seen)”…”�”}”(hjò'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjî'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mohjˆh²hubjE)�”}”(hŒ—**Parameters** ``expected`` expected value ``seen`` measured value **Description** ASSERT_STRNE(expected, measured): strcmp(expected, measured)”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hj (h]”hŒ Parameters”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj (ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mqhj(ubje)�”}”(hhh]”(jj)�”}”(hŒ``expected`` expected value ”h]”(jp)�”}”(hŒ ``expected``”h]”j )�”}”(hj+(h]”hŒexpected”…”�”}”(hj-(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj)(ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mohj%(ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hjD(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j@(h´MohjA(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj%(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³j@(h´Mohj"(ubjj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hjd(h]”hŒseen”…”�”}”(hjf(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjb(ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mphj^(ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hj}(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jy(h´Mphjz(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj^(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jy(h´Mphj"(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jdhj(ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hjŸ(h]”hŒ Description”…”�”}”(hj¡(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj�(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mrhj(ubhÌ)�”}”(hŒ*j(j>*j)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ``EXPECT_NE (expected, seen)``”h]”j )�”}”(hjD*h]”hŒEXPECT_NE (expected, seen)”…”�”}”(hjF*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjB*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M…hjˆh²hubjE)�”}”(hŒŽ**Parameters** ``expected`` expected value ``seen`` measured value **Description** EXPECT_NE(expected, measured): expected != measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hj`*h]”hŒ Parameters”…”�”}”(hjb*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj^*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M‡hjZ*ubje)�”}”(hhh]”(jj)�”}”(hŒ``expected`` expected value ”h]”(jp)�”}”(hŒ ``expected``”h]”j )�”}”(hj*h]”hŒexpected”…”�”}”(hj�*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj}*ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M…hjy*ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hj˜*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j”*h´M…hj•*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjy*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³j”*h´M…hjv*ubjj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hj¸*h]”hŒseen”…”�”}”(hjº*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj¶*ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M†hj²*ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjÑ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÍ*h´M†hjÎ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj²*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jÍ*h´M†hjv*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jdhjZ*ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hjó*h]”hŒ Description”…”�”}”(hjõ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjñ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MˆhjZ*ubhÌ)�”}”(hŒ3EXPECT_NE(expected, measured): expected != measured”h]”hŒ3EXPECT_NE(expected, measured): expected != measured”…”�”}”(hj +h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M„hjZ*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒEXPECT_LT (C macro)”Œ c.EXPECT_LT”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ EXPECT_LT”h]”jÜ)�”}”(hŒ EXPECT_LT”h]”jâ)�”}”(hŒ EXPECT_LT”h]”jè)�”}”(hj2+h]”hŒ EXPECT_LT”…”�”}”(hj<+h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj8+ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhj4+h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MŽubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhj0+h²hh³jO+h´MŽubah}”(h]”j++ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³jO+h´MŽhj-+h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj-+h²hh³jO+h´MŽubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'jh+j(jh+j)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ``EXPECT_LT (expected, seen)``”h]”j )�”}”(hjn+h]”hŒEXPECT_LT (expected, seen)”…”�”}”(hjp+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjl+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M�hjˆh²hubjE)�”}”(hŒ�**Parameters** ``expected`` expected value ``seen`` measured value **Description** EXPECT_LT(expected, measured): expected < measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hjŠ+h]”hŒ Parameters”…”�”}”(hjŒ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjˆ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M’hj„+ubje)�”}”(hhh]”(jj)�”}”(hŒ``expected`` expected value ”h]”(jp)�”}”(hŒ ``expected``”h]”j )�”}”(hj©+h]”hŒexpected”…”�”}”(hj«+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj§+ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M�hj£+ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hjÂ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¾+h´M�hj¿+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj£+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³j¾+h´M�hj +ubjj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hjâ+h]”hŒseen”…”�”}”(hjä+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjà+ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M‘hjÜ+ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjû+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j÷+h´M‘hjø+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÜ+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³j÷+h´M‘hj +ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jdhj„+ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hj,h]”hŒ Description”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M“hj„+ubhÌ)�”}”(hŒ2EXPECT_LT(expected, measured): expected < measured”h]”hŒ2EXPECT_LT(expected, measured): expected < measured”…”�”}”(hj3,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M�hj„+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒEXPECT_LE (C macro)”Œ c.EXPECT_LE”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ EXPECT_LE”h]”jÜ)�”}”(hŒ EXPECT_LE”h]”jâ)�”}”(hŒ EXPECT_LE”h]”jè)�”}”(hj\,h]”hŒ EXPECT_LE”…”�”}”(hjf,h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjb,ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhj^,h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M™ubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhjZ,h²hh³jy,h´M™ubah}”(h]”jU,ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³jy,h´M™hjW,h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhjW,h²hh³jy,h´M™ubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'j’,j(j’,j)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ``EXPECT_LE (expected, seen)``”h]”j )�”}”(hj˜,h]”hŒEXPECT_LE (expected, seen)”…”�”}”(hjš,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj–,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M›hjˆh²hubjE)�”}”(hŒŽ**Parameters** ``expected`` expected value ``seen`` measured value **Description** EXPECT_LE(expected, measured): expected <= measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hj´,h]”hŒ Parameters”…”�”}”(hj¶,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj²,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M�hj®,ubje)�”}”(hhh]”(jj)�”}”(hŒ``expected`` expected value ”h]”(jp)�”}”(hŒ ``expected``”h]”j )�”}”(hjÓ,h]”hŒexpected”…”�”}”(hjÕ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÑ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M›hjÍ,ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hjì,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jè,h´M›hjé,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÍ,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jè,h´M›hjÊ,ubjj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hj -h]”hŒseen”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj -ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mœhj-ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hj%-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j!-h´Mœhj"-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³j!-h´MœhjÊ,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jdhj®,ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hjG-h]”hŒ Description”…”�”}”(hjI-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjE-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mžhj®,ubhÌ)�”}”(hŒ3EXPECT_LE(expected, measured): expected <= measured”h]”hŒ3EXPECT_LE(expected, measured): expected <= measured”…”�”}”(hj]-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mšhj®,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒEXPECT_GT (C macro)”Œ c.EXPECT_GT”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ EXPECT_GT”h]”jÜ)�”}”(hŒ EXPECT_GT”h]”jâ)�”}”(hŒ EXPECT_GT”h]”jè)�”}”(hj†-h]”hŒ EXPECT_GT”…”�”}”(hj�-h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjŒ-ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhjˆ-h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M¤ubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhj„-h²hh³j£-h´M¤ubah}”(h]”j-ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³j£-h´M¤hj�-h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj�-h²hh³j£-h´M¤ubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'j¼-j(j¼-j)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ``EXPECT_GT (expected, seen)``”h]”j )�”}”(hjÂ-h]”hŒEXPECT_GT (expected, seen)”…”�”}”(hjÄ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÀ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M¦hjˆh²hubjE)�”}”(hŒ�**Parameters** ``expected`` expected value ``seen`` measured value **Description** EXPECT_GT(expected, measured): expected > measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hjÞ-h]”hŒ Parameters”…”�”}”(hjà-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjÜ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M¨hjØ-ubje)�”}”(hhh]”(jj)�”}”(hŒ``expected`` expected value ”h]”(jp)�”}”(hŒ ``expected``”h]”j )�”}”(hjý-h]”hŒexpected”…”�”}”(hjÿ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjû-ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M¦hj÷-ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j.h´M¦hj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj÷-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³j.h´M¦hjô-ubjj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hj6.h]”hŒseen”…”�”}”(hj8.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj4.ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M§hj0.ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjO.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jK.h´M§hjL.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj0.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jK.h´M§hjô-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jdhjØ-ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hjq.h]”hŒ Description”…”�”}”(hjs.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjo.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M©hjØ-ubhÌ)�”}”(hŒ2EXPECT_GT(expected, measured): expected > measured”h]”hŒ2EXPECT_GT(expected, measured): expected > measured”…”�”}”(hj‡.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M¥hjØ-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒEXPECT_GE (C macro)”Œ c.EXPECT_GE”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ EXPECT_GE”h]”jÜ)�”}”(hŒ EXPECT_GE”h]”jâ)�”}”(hŒ EXPECT_GE”h]”jè)�”}”(hj°.h]”hŒ EXPECT_GE”…”�”}”(hjº.h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj¶.ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhj².h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M¯ubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhj®.h²hh³jÍ.h´M¯ubah}”(h]”j©.ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³jÍ.h´M¯hj«.h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj«.h²hh³jÍ.h´M¯ubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'jæ.j(jæ.j)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ``EXPECT_GE (expected, seen)``”h]”j )�”}”(hjì.h]”hŒEXPECT_GE (expected, seen)”…”�”}”(hjî.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjê.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M±hjˆh²hubjE)�”}”(hŒŽ**Parameters** ``expected`` expected value ``seen`` measured value **Description** EXPECT_GE(expected, measured): expected >= measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hj/h]”hŒ Parameters”…”�”}”(hj /h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M³hj/ubje)�”}”(hhh]”(jj)�”}”(hŒ``expected`` expected value ”h]”(jp)�”}”(hŒ ``expected``”h]”j )�”}”(hj'/h]”hŒexpected”…”�”}”(hj)/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj%/ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M±hj!/ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hj@/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j= measured”h]”hŒ3EXPECT_GE(expected, measured): expected >= measured”…”�”}”(hj±/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M°hj/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒEXPECT_NULL (C macro)”Œ c.EXPECT_NULL”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ EXPECT_NULL”h]”jÜ)�”}”(hŒ EXPECT_NULL”h]”jâ)�”}”(hŒ EXPECT_NULL”h]”jè)�”}”(hjÚ/h]”hŒ EXPECT_NULL”…”�”}”(hjä/h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjà/ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhjÜ/h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mºubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhjØ/h²hh³j÷/h´Mºubah}”(h]”jÓ/ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³j÷/h´MºhjÕ/h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhjÕ/h²hh³j÷/h´Mºubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'j0j(j0j)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ``EXPECT_NULL (seen)``”h]”j )�”}”(hj0h]”hŒEXPECT_NULL (seen)”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M¼hjˆh²hubjE)�”}”(hŒc**Parameters** ``seen`` measured value **Description** EXPECT_NULL(measured): NULL == measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hj20h]”hŒ Parameters”…”�”}”(hj40h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj00ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M¾hj,0ubje)�”}”(hhh]”jj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hjQ0h]”hŒseen”…”�”}”(hjS0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjO0ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M¼hjK0ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jf0h´M¼hjg0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjK0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jf0h´M¼hjH0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jdhj,0ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hjŒ0h]”hŒ Description”…”�”}”(hjŽ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjŠ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M¾hj,0ubhÌ)�”}”(hŒ'EXPECT_NULL(measured): NULL == measured”h]”hŒ'EXPECT_NULL(measured): NULL == measured”…”�”}”(hj¢0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´M»hj,0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒEXPECT_TRUE (C macro)”Œ c.EXPECT_TRUE”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ EXPECT_TRUE”h]”jÜ)�”}”(hŒ EXPECT_TRUE”h]”jâ)�”}”(hŒ EXPECT_TRUE”h]”jè)�”}”(hjË0h]”hŒ EXPECT_TRUE”…”�”}”(hjÕ0h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjÑ0ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhjÍ0h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MÄubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhjÉ0h²hh³jè0h´MÄubah}”(h]”jÄ0ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³jè0h´MÄhjÆ0h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆ0h²hh³jè0h´MÄubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'j1j(j1j)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ``EXPECT_TRUE (seen)``”h]”j )�”}”(hj1h]”hŒEXPECT_TRUE (seen)”…”�”}”(hj 1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MÆhjˆh²hubjE)�”}”(hŒ`**Parameters** ``seen`` measured value **Description** EXPECT_TRUE(measured): 0 != measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hj#1h]”hŒ Parameters”…”�”}”(hj%1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj!1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MÈhj1ubje)�”}”(hhh]”jj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hjB1h]”hŒseen”…”�”}”(hjD1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj@1ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MÆhj<1ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hj[1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jW1h´MÆhjX1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj<1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jW1h´MÆhj91ubah}”(h]”h ]”h"]”h$]”h&]”uh1jdhj1ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hj}1h]”hŒ Description”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj{1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MÈhj1ubhÌ)�”}”(hŒ$EXPECT_TRUE(measured): 0 != measured”h]”hŒ$EXPECT_TRUE(measured): 0 != measured”…”�”}”(hj“1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MÅhj1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒEXPECT_FALSE (C macro)”Œc.EXPECT_FALSE”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ EXPECT_FALSE”h]”jÜ)�”}”(hŒ EXPECT_FALSE”h]”jâ)�”}”(hŒ EXPECT_FALSE”h]”jè)�”}”(hj¼1h]”hŒ EXPECT_FALSE”…”�”}”(hjÆ1h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjÂ1ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhj¾1h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MÎubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhjº1h²hh³jÙ1h´MÎubah}”(h]”jµ1ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³jÙ1h´MÎhj·1h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj·1h²hh³jÙ1h´MÎubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'jò1j(jò1j)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ``EXPECT_FALSE (seen)``”h]”j )�”}”(hjø1h]”hŒEXPECT_FALSE (seen)”…”�”}”(hjú1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjö1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MÐhjˆh²hubjE)�”}”(hŒa**Parameters** ``seen`` measured value **Description** EXPECT_FALSE(measured): 0 == measured”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hj2h]”hŒ Parameters”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MÒhj2ubje)�”}”(hhh]”jj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hj32h]”hŒseen”…”�”}”(hj52h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj12ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MÐhj-2ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjL2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jH2h´MÐhjI2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj-2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jH2h´MÐhj*2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jdhj2ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hjn2h]”hŒ Description”…”�”}”(hjp2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjl2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MÒhj2ubhÌ)�”}”(hŒ%EXPECT_FALSE(measured): 0 == measured”h]”hŒ%EXPECT_FALSE(measured): 0 == measured”…”�”}”(hj„2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MÏhj2ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒEXPECT_STREQ (C macro)”Œc.EXPECT_STREQ”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ EXPECT_STREQ”h]”jÜ)�”}”(hŒ EXPECT_STREQ”h]”jâ)�”}”(hŒ EXPECT_STREQ”h]”jè)�”}”(hj­2h]”hŒ EXPECT_STREQ”…”�”}”(hj·2h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj³2ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhj¯2h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MØubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhj«2h²hh³jÊ2h´MØubah}”(h]”j¦2ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³jÊ2h´MØhj¨2h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj¨2h²hh³jÊ2h´MØubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'jã2j(jã2j)‰j*‰j+‰uh1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ!``EXPECT_STREQ (expected, seen)``”h]”j )�”}”(hjé2h]”hŒEXPECT_STREQ (expected, seen)”…”�”}”(hjë2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjç2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MÚhjˆh²hubjE)�”}”(hŒ˜**Parameters** ``expected`` expected value ``seen`` measured value **Description** EXPECT_STREQ(expected, measured): !strcmp(expected, measured)”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hj3h]”hŒ Parameters”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MÜhjÿ2ubje)�”}”(hhh]”(jj)�”}”(hŒ``expected`` expected value ”h]”(jp)�”}”(hŒ ``expected``”h]”j )�”}”(hj$3h]”hŒexpected”…”�”}”(hj&3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj"3ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MÚhj3ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hj=3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j93h´MÚhj:3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³j93h´MÚhj3ubjj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hj]3h]”hŒseen”…”�”}”(hj_3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj[3ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MÛhjW3ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hjv3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jr3h´MÛhjs3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjW3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jr3h´MÛhj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jdhjÿ2ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hj˜3h]”hŒ Description”…”�”}”(hjš3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj–3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MÝhjÿ2ubhÌ)�”}”(hŒ=EXPECT_STREQ(expected, measured): !strcmp(expected, measured)”h]”hŒ=EXPECT_STREQ(expected, measured): !strcmp(expected, measured)”…”�”}”(hj®3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MÙhjÿ2ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jDhjˆh²hh³Nh´Nubj¿)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jËŒEXPECT_STRNE (C macro)”Œc.EXPECT_STRNE”hNt”auh1j¾hjˆh²hh³Nh´NubjÑ)�”}”(hhh]”(jÖ)�”}”(hŒ EXPECT_STRNE”h]”jÜ)�”}”(hŒ EXPECT_STRNE”h]”jâ)�”}”(hŒ EXPECT_STRNE”h]”jè)�”}”(hj×3h]”hŒ EXPECT_STRNE”…”�”}”(hjá3h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjÝ3ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”j°j±uh1jáhjÙ3h²hh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mãubah}”(h]”h ]”h"]”h$]”h&]”j°j±jˆuh1jÛjjhjÕ3h²hh³jô3h´Mãubah}”(h]”jÐ3ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1jÕh³jô3h´MãhjÒ3h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhjÒ3h²hh³jô3h´Mãubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”j&j j'j 4j(j 4j)‰j*‰j+‰u••h1jÐh²hhjˆh³Nh´NubhÌ)�”}”(hŒ!``EXPECT_STRNE (expected, seen)``”h]”j )�”}”(hj4h]”hŒEXPECT_STRNE (expected, seen)”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Måhjˆh²hubjE)�”}”(hŒ—**Parameters** ``expected`` expected value ``seen`` measured value **Description** EXPECT_STRNE(expected, measured): strcmp(expected, measured)”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jO)�”}”(hj/4h]”hŒ Parameters”…”�”}”(hj14h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj-4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mçhj)4ubje)�”}”(hhh]”(jj)�”}”(hŒ``expected`` expected value ”h]”(jp)�”}”(hŒ ``expected``”h]”j )�”}”(hjN4h]”hŒexpected”…”�”}”(hjP4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjL4ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´MåhjH4ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hjg4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jc4h´Måhjd4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjH4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jc4h´MåhjE4ubjj)�”}”(hŒ``seen`` measured value ”h]”(jp)�”}”(hŒ``seen``”h]”j )�”}”(hj‡4h]”hŒseen”…”�”}”(hj‰4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj…4ubah}”(h]”h ]”h"]”h$]”h&]”uh1joh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mæhj�4ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒmeasured value”h]”hŒmeasured value”…”�”}”(hj 4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœ4h´Mæhj�4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj�4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jih³jœ4h´MæhjE4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jdhj)4ubhÌ)�”}”(hŒ**Description**”h]”jO)�”}”(hjÂ4h]”hŒ Description”…”�”}”(hjÄ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjÀ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œp/var/lib/git/docbuild/linux/Documentation/dev-tools/kselftest:505: ./tools/testing/selftests/kselftest_harness.h”h´Mèhj)4ubhÌ)�”}”(hŒ