
From: Lukas Funke lukas.funke@weidmueller.com
This series enables the 'setexpr' command to print "cpu list"-like bitmaps based on the printk format specifier [1].
One use-case is to pass cpu list [2] based kernel parameter like 'isolcpu', 'nohz_full', irq affinity or RCU related CPU parameter to the kernel via a separate firmware variable without exposing the 'bootargs' variable to directly.
Example:
=> env set value 0xdeadbeef => setexpr a fmt isolcpus=%32pbl $value => echo $a isolcpus=0-3,5-7,9-13,15-16,18-19,21,23,25-28,30-31
[1] https://www.kernel.org/doc/Documentation/printk-formats.txt [2] https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html
Changes in v3: - Use generic find_next_zero_bit() from arch/arm/include/asm/bitops.h - Redirect sandbox ffz() implementation to generic __ffs() impl - Remove '%bp' from documentation - Give an example output in the documentation - Remove bitmap_string() conversion function since the same function can be achieved using other format specifier - Dereference pointer argument (i.e. *value) in the 'setexpr name fmt <format> value' case. This is currently only supported in the 'setexptr <name> [*]<value>' and 'setexptr <name> [*]<value> <op> [*]<value2>' case
Changes in v2: - Add bitmap format specifier to documentation
Lukas Funke (11): sandbox: add generic find_next_zero_bit implementation linux: bitmap.h: add 'for_each_set_bitrange' iteration macro test: cmd: setexpr: Add tests for bitmap string format doc: printf() codes: Add bitmap format specifier cmd: printf: Correctly handle field width lib: Add hextobarray() function lib: vsprintf: enable '%pbl' format specifier setexpr: rename 'get_arg()' to 'setexpr_get_arg()' setexpr: Promote 'setexpr_get_arg()' to a public function setexptr: Extend setexpr_get_arg() to handle pointer to memory cmd: printf: forward '%p' format string specifier
arch/sandbox/include/asm/bitops.h | 60 +++++++++++++++++++------------ cmd/printf.c | 53 ++++++++++++++++++++++++++- cmd/setexpr.c | 48 +++++++++++++++---------- doc/develop/printf.rst | 4 +++ include/command.h | 27 ++++++++++++++ include/linux/bitmap.h | 7 ++++ include/vsprintf.h | 7 ++++ lib/strto.c | 35 ++++++++++++++++++ lib/vsprintf.c | 42 ++++++++++++++++++++++ test/cmd/setexpr.c | 22 ++++++++++++ 10 files changed, 263 insertions(+), 42 deletions(-)