zephyr/tests/kernel/mem_slab/mslab
Gerard Marull-Paretas 79e6b0e0f6 includes: prefer <zephyr/kernel.h> over <zephyr/zephyr.h>
As of today <zephyr/zephyr.h> is 100% equivalent to <zephyr/kernel.h>.
This patch proposes to then include <zephyr/kernel.h> instead of
<zephyr/zephyr.h> since it is more clear that you are including the
Kernel APIs and (probably) nothing else. <zephyr/zephyr.h> sounds like a
catch-all header that may be confusing. Most applications need to
include a bunch of other things to compile, e.g. driver headers or
subsystem headers like BT, logging, etc.

The idea of a catch-all header in Zephyr is probably not feasible
anyway. Reason is that Zephyr is not a library, like it could be for
example `libpython`. Zephyr provides many utilities nowadays: a kernel,
drivers, subsystems, etc and things will likely grow. A catch-all header
would be massive, difficult to keep up-to-date. It is also likely that
an application will only build a small subset. Note that subsystem-level
headers may use a catch-all approach to make things easier, though.

NOTE: This patch is **NOT** removing the header, just removing its usage
in-tree. I'd advocate for its deprecation (add a #warning on it), but I
understand many people will have concerns.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
2022-09-05 16:31:47 +02:00
..
src includes: prefer <zephyr/kernel.h> over <zephyr/zephyr.h> 2022-09-05 16:31:47 +02:00
CMakeLists.txt
prj.conf tests: kernel: mslab: move testcases to new ZTEST API 2022-08-15 08:22:21 +00:00
README.txt
testcase.yaml

Title: Memory Slab APIs

Description:

This test verifies that the kernel memory slab APIs operate as expected.

--------------------------------------------------------------------------------

Building and Running Project:

This project outputs to the console.  It can be built and executed
on QEMU as follows:

    make run

--------------------------------------------------------------------------------

Troubleshooting:

Problems caused by out-dated project information can be addressed by
issuing one of the following commands then rebuilding the project:

    make clean          # discard results of previous builds
                        # but keep existing configuration info
or
    make pristine       # discard results of previous builds
                        # and restore pre-defined configuration info

--------------------------------------------------------------------------------

Sample Output:

starting test - Test Kernel memory slabs
Starts main
===================================================================
(1) - Allocate and free 2 blocks in <main>
===================================================================
Function test_slab_get_all_blocks
MAP_LgBlks used 0 blocks
  k_mem_slab_alloc OK, p[0] = 0x00406400
MAP_LgBlks used 1 blocks
  k_mem_slab_alloc OK, p[1] = 0x00406000
MAP_LgBlks used 2 blocks
  k_mem_slab_alloc RC_FAIL expected as all (2) blocks are used.
===================================================================
print_pointers: p[0] = 0x00406400, p[1] = 0x00406000,
===================================================================
Function test_slab_free_all_blocks
MAP_LgBlks used 2 blocks
  block ptr to free p[0] = 0x00406400
MAP_LgBlks freed 1 block
MAP_LgBlks used 1 blocks
  block ptr to free p[1] = 0x00406000
MAP_LgBlks freed 2 block
MAP_LgBlks used 0 blocks
===================================================================
Starts helper_thread
===================================================================
(2) - Allocate 2 blocks in <helper_thread>
===================================================================
Function test_slab_get_all_blocks
MAP_LgBlks used 0 blocks
  k_mem_slab_alloc OK, p[0] = 0x00406000
MAP_LgBlks used 1 blocks
  k_mem_slab_alloc OK, p[1] = 0x00406400
MAP_LgBlks used 2 blocks
  k_mem_slab_alloc RC_FAIL expected as all (2) blocks are used.
===================================================================
===================================================================
(3) - Further allocation results in  timeout in <main>
===================================================================
main: k_mem_slab_alloc times out which is expected
main: start to wait for block
===================================================================
(4) - Free a block in <helper_thread> to unblock the other task from alloc timeout
===================================================================
helper_thread: About to free a memory block
main: k_mem_slab_alloc OK, block allocated at 0x00406000
main: start to wait for block
===================================================================
(5) <helper_thread> freeing the next block
===================================================================
helper_thread: About to free another memory block
main: k_mem_slab_alloc OK, block allocated at 0x00406400
helper_thread: freed all blocks allocated by this task
PASS - helper_thread.
===================================================================
main: Used 2 block
main: 1 block freed, used 1 block
PASS - main.
===================================================================
===================================================================
PROJECT EXECUTION SUCCESSFUL