
Hi Heinrich,
On 12.12.2023 11:13, Heinrich Schuchardt wrote:
On 12.12.23 09:52, lukas.funke-oss@weidmueller.com wrote:
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:
setexpr isolcpu_bootarg=%32pbl $myCPUisolation
I applied your patches on top of origin/next but your example simply does not work:
=> setenv myCPUisolation 123456789abcdef0 => setexpr isolcpu_bootarg=%32pbl $myCPUisolation ## Error: illegal character '='in variable name "isolcpu_bootarg=%32pbl"
Thanks for testing.
I messed up the example in the cover letter. In your case it actually should be
=> setenv myCPUisolation 0x123456789abcdef0 => setexpr bootargs fmt isolcpu_bootarg=%64pbl $myCPUisolation => echo $bootargs isolcpu_bootarg=4-7,9-12,14-15,18-21,23,25,27-28,31,35-37,41,44,46-47,50,52,57-59
...which is wrong btw (the upper half bitmask is crooked).
This produces some output:
=> setexpr a fmt '%32pbl' 64; echo $a 6
But the result is completely unexpected. Number arguments in U-Boot are always hexadecimal. So the output should be
Thanks for pointing it out! The internals use autodetect from strtoll(...) which handles decimal and hexadecimal. All other uses of strtoll use 16 as base. I'll address this issue in the next version.
2,5-6
Best regards
Heinrich
&& env set bootargs "$isolcpu_bootarg" && bootm
[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 v2:
- Add bitmap format specifier to documentation
Lukas Funke (6): sandbox: add generic find_next_zero_bit implementation linux: bitmap.h: add 'for_each_set_bitrange' iteration macro test: cmd: setexptr: Add tests for bitmap string format doc: printf() codes: Add bitmap format specifier lib: vsprintf: enable '%*pb[l]' format specifier cmd: printf: forward '%p' format string specifier
arch/sandbox/include/asm/bitops.h | 16 ++++++- cmd/printf.c | 29 ++++++++++++ doc/develop/printf.rst | 6 +++ include/linux/bitmap.h | 7 +++ lib/vsprintf.c | 75 +++++++++++++++++++++++++++++++ test/cmd/setexpr.c | 9 ++++ 6 files changed, 140 insertions(+), 2 deletions(-)