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(-)



Reply via email to