22 Sep, 2020

2 commits

  • Fix to remove tailing spaces after value. If there is a space
    after value, the bootconfig failed to remove it because it
    applies strim() before replacing the delimiter with null.

    For example,

    foo = var # comment

    was parsed as below.

    foo="var "

    but user will expect

    foo="var"

    This fixes it by applying strim() after removing the delimiter.

    Link: https://lkml.kernel.org/r/160068149134.1088739.8868306567670058853.stgit@devnote2

    Fixes: 76db5a27a827 ("bootconfig: Add Extra Boot Config support")
    Cc: Ingo Molnar
    Cc: stable@vger.kernel.org
    Signed-off-by: Masami Hiramatsu
    Signed-off-by: Steven Rostedt (VMware)

    Masami Hiramatsu
     
  • Fix a bug of breaking existing tree nodes by parsing the second
    and subsequent braces. Since the bootconfig parser uses the
    node.next field as a flag of current parent node, but this will
    break the existing tree if the same key node is specified again
    in the bootconfig.

    For example, the following bootconfig should be foo.buz and bar.

    foo
    bar
    foo { buz }

    However, when parsing the brace "{", it breaks foo->bar link
    by marking open-brace node. So the bootconfig unlinks bar
    from the bootconfig internal tree.

    This introduces a stack outside of the tree and record the
    last open-brace on the stack instead of using node.next field.

    Link: https://lkml.kernel.org/r/160068148267.1088739.8264704338030168660.stgit@devnote2

    Fixes: 76db5a27a827 ("bootconfig: Add Extra Boot Config support")
    Cc: Ingo Molnar
    Cc: stable@vger.kernel.org
    Signed-off-by: Masami Hiramatsu
    Signed-off-by: Steven Rostedt (VMware)

    Masami Hiramatsu
     

25 Aug, 2020

1 commit

  • The following build error for powerpc64 was reported by Nathan Chancellor:

    "$ scripts/config --file arch/powerpc/configs/powernv_defconfig -e KERNEL_XZ

    $ make -skj"$(nproc)" ARCH=powerpc CROSS_COMPILE=powerpc64le-linux- distclean powernv_defconfig zImage
    ...
    In file included from arch/powerpc/boot/../../../lib/decompress_unxz.c:234,
    from arch/powerpc/boot/decompress.c:38:
    arch/powerpc/boot/../../../lib/xz/xz_dec_stream.c: In function 'dec_main':
    arch/powerpc/boot/../../../lib/xz/xz_dec_stream.c:586:4: error: 'fallthrough' undeclared (first use in this function)
    586 | fallthrough;
    | ^~~~~~~~~~~

    This will end up affecting distribution configurations such as Debian
    and OpenSUSE according to my testing. I am not sure what the solution
    is, the PowerPC wrapper does not set -D__KERNEL__ so I am not sure
    that compiler_attributes.h can be safely included."

    In order to avoid these sort of problems, it seems that the best
    solution is to use /* fall through */ comments instead of the
    fallthrough pseudo-keyword macro in lib/, for now.

    Reported-by: Nathan Chancellor
    Fixes: df561f6688fe ("treewide: Use fallthrough pseudo-keyword")
    Signed-off-by: Gustavo A. R. Silva
    Reviewed-and-tested-by: Nathan Chancellor
    Signed-off-by: Linus Torvalds

    Gustavo A. R. Silva
     

24 Aug, 2020

1 commit

  • Replace the existing /* fall through */ comments and its variants with
    the new pseudo-keyword macro fallthrough[1]. Also, remove unnecessary
    fall-through markings when it is the case.

    [1] https://www.kernel.org/doc/html/v5.7/process/deprecated.html?highlight=fallthrough#implicit-switch-case-fall-through

    Signed-off-by: Gustavo A. R. Silva

    Gustavo A. R. Silva
     

04 Aug, 2020

1 commit

  • Add the value override operator (":=") support to the bootconfig.

    This value override operator will be useful for the bootloaders
    which will only update the existing bootconfig according to the
    bootloader boot options.

    Without this override operator, the bootloader needs to parse
    the existing bootconfig and update it. However, with this
    assignment, it can just append the updated (partial) bootconfig
    text at the tail of existing one without parsing it.
    (Of course, it must update the size, checksum and magic,
    but that will be done easily)

    Link: https://lkml.kernel.org/r/159482882954.126704.16209517125614438640.stgit@devnote2

    Signed-off-by: Masami Hiramatsu
    Signed-off-by: Steven Rostedt (VMware)

    Masami Hiramatsu
     

04 Mar, 2020

1 commit

  • Show line and column when we got a parse error in bootconfig tool.
    Current lib/bootconfig shows the parse error with byte offset, but
    that is not human readable.
    This makes xbc_init() not showing error message itself but able to
    pass the error message and position to caller, so that the caller
    can decode it and show the error message with line number and columns.

    With this patch, bootconfig tool shows an error with line:column as
    below.

    $ cat samples/bad-dotword.bconf
    # do not start keyword with .
    key {
    .word = 1
    }
    $ ./bootconfig -a samples/bad-dotword.bconf initrd
    Parse Error: Invalid keyword at 3:3

    Link: http://lkml.kernel.org/r/158323469002.10560.4023923847704522760.stgit@devnote2

    Signed-off-by: Masami Hiramatsu
    Signed-off-by: Steven Rostedt (VMware)

    Masami Hiramatsu
     

21 Feb, 2020

3 commits

  • Add append value operator "+=" support to bootconfig syntax.
    With this operator, user can add new value to the key as
    an entry of array instead of overwriting.
    For example,

    foo = bar
    ...
    foo += baz

    Then the key "foo" has "bar" and "baz" values as an array.

    Link: http://lkml.kernel.org/r/158227283195.12842.8310503105963275584.stgit@devnote2

    Signed-off-by: Masami Hiramatsu
    Signed-off-by: Steven Rostedt (VMware)

    Masami Hiramatsu
     
  • Currently, bootconfig adds a new value on the existing key to the tail of an
    array. But this looks a bit confusing because an admin can easily rewrite
    the original value in the same config file.

    This rejects the following value re-definition.

    key = value1
    ...
    key = value2

    You should rewrite value1 to value2 in this case.

    Link: http://lkml.kernel.org/r/158227282199.12842.10110929876059658601.stgit@devnote2

    Suggested-by: Steven Rostedt (VMware)
    Signed-off-by: Masami Hiramatsu
    [ Fixed spelling of arraies to arrays ]
    Signed-off-by: Steven Rostedt (VMware)

    Masami Hiramatsu
     
  • Reject if a value node is mixed with subkey node on same
    parent key node.

    A value node can not co-exist with subkey node under some key
    node, e.g.

    key = value
    key.subkey = another-value

    This is not be allowed because bootconfig API is not designed
    to handle such case.

    Link: http://lkml.kernel.org/r/158220115232.26565.7792340045009731803.stgit@devnote2

    Signed-off-by: Masami Hiramatsu
    Signed-off-by: Steven Rostedt (VMware)

    Masami Hiramatsu
     

11 Feb, 2020

1 commit

  • To reduce the large static array from kernel data, allocate
    xbc_nodes array dynamically only if the kernel loads a
    bootconfig.

    Note that this also add dummy memblock.h for user-spacae
    bootconfig tool.

    Link: http://lkml.kernel.org/r/158108569699.3187.6512834527603883707.stgit@devnote2

    Signed-off-by: Masami Hiramatsu
    Signed-off-by: Steven Rostedt (VMware)

    Masami Hiramatsu
     

06 Feb, 2020

2 commits

  • Show the number of bootconfig nodes when applying new bootconfig to
    initrd.

    Since there are limitations of bootconfig not only in its filesize,
    but also the number of nodes, the number should be shown when applying
    so that user can get the feeling of scale of current bootconfig.

    Link: http://lkml.kernel.org/r/158091061337.27924.10886706631693823982.stgit@devnote2

    Signed-off-by: Masami Hiramatsu
    Signed-off-by: Steven Rostedt (VMware)

    Masami Hiramatsu
     
  • Add more error messages for following cases.
    - Exceeding max number of nodes
    - Config tree data is empty (e.g. comment only)
    - Config data is empty or exceeding max size
    - bootconfig is already initialized

    Link: http://lkml.kernel.org/r/158091060401.27924.9024818742827122764.stgit@devnote2

    Signed-off-by: Masami Hiramatsu
    Signed-off-by: Steven Rostedt (VMware)

    Masami Hiramatsu
     

14 Jan, 2020

1 commit

  • Extra Boot Config (XBC) allows admin to pass a tree-structured
    boot configuration file when boot up the kernel. This extends
    the kernel command line in an efficient way.

    Boot config will contain some key-value commands, e.g.

    key.word = value1
    another.key.word = value2

    It can fold same keys with braces, also you can write array
    data. For example,

    key {
    word1 {
    setting1 = data
    setting2
    }
    word2.array = "val1", "val2"
    }

    User can access these key-value pair and tree structure via
    SKC APIs.

    Link: http://lkml.kernel.org/r/157867221257.17873.1775090991929862549.stgit@devnote2

    Signed-off-by: Masami Hiramatsu
    Signed-off-by: Steven Rostedt (VMware)

    Masami Hiramatsu