Hi Heinrich,
On 12.12.2023 11:13, Heinrich Schuchardt wrote:
On 12.12.23 09:52, [email protected] wrote:
From: Lukas Funke <[email protected]>
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(-)