02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

30 Jun, 2017

3 commits

  • The thin archives build currently puts all lib.a and built-in.o
    files together and links them with --whole-archive.

    This works because thin archives can recursively refer to thin
    archives. However some architectures include libgcc.a, which may
    not be a thin archive, or it may not be constructed with the "P"
    option, in which case its contents do not get linked correctly.

    So don't pull .a libs into the root built-in.o archive. These
    libs should already have symbol tables and indexes built, so they
    can be direct linker inputs. Move them out of the --whole-archive
    option, which restore the conditional linking behaviour of lib.a
    to thin archives builds.

    Signed-off-by: Nicholas Piggin
    Signed-off-by: Masahiro Yamada

    Nicholas Piggin
     
  • The P option makes ar do full path name matching and can prevent ar
    from discarding files with duplicate names in some cases of creating
    thin archives from thin archives. The sh architecture in particular
    loses some object files from its kernel/cpu/sh*/ directories without
    this option.

    This could be a bug in binutils ar, but the P option should not cause
    any negative effects so it is safe to use to work around this with.

    Signed-off-by: Nicholas Piggin
    Signed-off-by: Masahiro Yamada

    Nicholas Piggin
     
  • Close the --whole-archives option with --no-whole-archive. Some
    architectures end up including additional .o and files multiple
    times after this, and they get duplicate symbols when they are
    brought under the --whole-archives option.

    This matches more closely with the incremental final link.

    Signed-off-by: Nicholas Piggin
    Signed-off-by: Masahiro Yamada

    Nicholas Piggin
     

29 Nov, 2016

2 commits

  • The root built-in.o archive is currently generated before all object
    files are built for the final link, due to final build of init/ after
    version update. In practice it seems like it doesn't matter because
    the archive symbol table does not change, but it is more logical to
    create the final archive as the last step.

    Signed-off-by: Nicholas Piggin
    Signed-off-by: Michal Marek

    Nicholas Piggin
     
  • kallsyms generation is not foolproof, due to some linkers adding
    symbols (e.g., branch trampolines) when a binary size changes.
    Have it attempt a 3rd pass automatically if the kallsyms size changes
    in the 2nd pass.

    This allows powerpc64 allyesconfig to build without adding another
    pass when it's not required.

    This can be solved other ways by directing the linker not to add labels
    on branch stubs, or to move kallsyms near the end of the image. The
    former is undesirable for debugging/tracing, and the latter is a more
    significant change that requires more testing and review.

    Signed-off-by: Nicholas Piggin
    Signed-off-by: Michal Marek

    Nicholas Piggin
     

09 Sep, 2016

1 commit

  • ld -r is an incremental link used to create built-in.o files in build
    subdirectories. It produces relocatable object files containing all
    its input files, and these are are then pulled together and relocated
    in the final link. Aside from the bloat, this constrains the final
    link relocations, which has bitten large powerpc builds with
    unresolvable relocations in the final link.

    Alan Modra has recommended the kernel use thin archives for linking.
    This is an alternative and means that the linker has more information
    available to it when it links the kernel.

    This patch enables a config option architectures can select, which
    causes all built-in.o files to be built as thin archives. built-in.o
    files in subdirectories do not get symbol table or index attached,
    which improves speed and size. The final link pass creates a
    built-in.o archive in the root output directory which includes the
    symbol table and index. The linker then uses takes this file to link.

    The --whole-archive linker option is required, because the linker now
    has visibility to every individual object file, and it will otherwise
    just completely avoid including those without external references
    (consider a file with EXPORT_SYMBOL or initcall or hardware exceptions
    as its only entry points). The traditional built works "by luck" as
    built-in.o files are large enough that they're going to get external
    references. However this optimisation is unpredictable for the kernel
    (due to above external references), ineffective at culling unused, and
    costly because the .o files have to be searched for references.
    Superior alternatives for link-time culling should be used instead.

    Build characteristics for inclink vs thinarc, on a small powerpc64le
    pseries VM with a modest .config:

    inclink thinarc
    sizes
    vmlinux 15 618 680 15 625 028
    sum of all built-in.o 56 091 808 1 054 334
    sum excluding root built-in.o 151 430

    find -name built-in.o | xargs rm ; time make vmlinux
    real 22.772s 21.143s
    user 13.280s 13.430s
    sys 4.310s 2.750s

    - Final kernel pulled in only about 6K more, which shows how
    ineffective the object file culling is.
    - Build performance looks improved due to less pagecache activity.
    On IO constrained systems it could be a bigger win.
    - Build size saving is significant.

    Side note, the toochain understands archives, so there's some tricks,
    $ ar t built-in.o # list all files you linked with
    $ size built-in.o # and their sizes
    $ objdump -d built-in.o # disassembly (unrelocated) with filenames

    Implementation by sfr, minor tweaks by npiggin.

    Signed-off-by: Stephen Rothwell
    Signed-off-by: Nicholas Piggin
    Signed-off-by: Michal Marek

    Stephen Rothwell
     

08 Jun, 2016

1 commit

  • This patch allows to build the whole kernel with GCC plugins. It was ported from
    grsecurity/PaX. The infrastructure supports building out-of-tree modules and
    building in a separate directory. Cross-compilation is supported too.
    Currently the x86, arm, arm64 and uml architectures enable plugins.

    The directory of the gcc plugins is scripts/gcc-plugins. You can use a file or a directory
    there. The plugins compile with these options:
    * -fno-rtti: gcc is compiled with this option so the plugins must use it too
    * -fno-exceptions: this is inherited from gcc too
    * -fasynchronous-unwind-tables: this is inherited from gcc too
    * -ggdb: it is useful for debugging a plugin (better backtrace on internal
    errors)
    * -Wno-narrowing: to suppress warnings from gcc headers (ipa-utils.h)
    * -Wno-unused-variable: to suppress warnings from gcc headers (gcc_version
    variable, plugin-version.h)

    The infrastructure introduces a new Makefile target called gcc-plugins. It
    supports all gcc versions from 4.5 to 6.0. The scripts/gcc-plugin.sh script
    chooses the proper host compiler (gcc-4.7 can be built by either gcc or g++).
    This script also checks the availability of the included headers in
    scripts/gcc-plugins/gcc-common.h.

    The gcc-common.h header contains frequently included headers for GCC plugins
    and it has a compatibility layer for the supported gcc versions.

    The gcc-generate-*-pass.h headers automatically generate the registration
    structures for GIMPLE, SIMPLE_IPA, IPA and RTL passes.

    Note that 'make clean' keeps the *.so files (only the distclean or mrproper
    targets clean all) because they are needed for out-of-tree modules.

    Based on work created by the PaX Team.

    Signed-off-by: Emese Revfy
    Acked-by: Kees Cook
    Signed-off-by: Michal Marek

    Emese Revfy
     

08 Apr, 2016

1 commit


25 Mar, 2016

1 commit

  • Pull kbuild updates from Michal Marek:

    - make dtbs_install fix

    - Error handling fix fixdep and link-vmlinux.sh

    - __UNIQUE_ID fix for clang

    - Fix for if_changed_* to suppress the "is up to date." message

    - The kernel is built with -Werror=incompatible-pointer-types

    * 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
    kbuild: Add option to turn incompatible pointer check into error
    kbuild: suppress annoying "... is up to date." message
    kbuild: fixdep: Check fstat(2) return value
    scripts/link-vmlinux.sh: force error on kallsyms failure
    Kbuild: provide a __UNIQUE_ID for clang
    dtbsinstall: don't move target directory out of the way

    Linus Torvalds
     

16 Mar, 2016

2 commits

  • Similar to how relative extables are implemented, it is possible to emit
    the kallsyms table in such a way that it contains offsets relative to
    some anchor point in the kernel image rather than absolute addresses.

    On 64-bit architectures, it cuts the size of the kallsyms address table
    in half, since offsets between kernel symbols can typically be expressed
    in 32 bits. This saves several hundreds of kilobytes of permanent
    .rodata on average. In addition, the kallsyms address table is no
    longer subject to dynamic relocation when CONFIG_RELOCATABLE is in
    effect, so the relocation work done after decompression now doesn't have
    to do relocation updates for all these values. This saves up to 24
    bytes (i.e., the size of a ELF64 RELA relocation table entry) per value,
    which easily adds up to a couple of megabytes of uncompressed __init
    data on ppc64 or arm64. Even if these relocation entries typically
    compress well, the combined size reduction of 2.8 MB uncompressed for a
    ppc64_defconfig build (of which 2.4 MB is __init data) results in a ~500
    KB space saving in the compressed image.

    Since it is useful for some architectures (like x86) to retain the
    ability to emit absolute values as well, this patch also adds support
    for capturing both absolute and relative values when
    KALLSYMS_ABSOLUTE_PERCPU is in effect, by emitting absolute per-cpu
    addresses as positive 32-bit values, and addresses relative to the
    lowest encountered relative symbol as negative values, which are
    subtracted from the runtime address of this base symbol to produce the
    actual address.

    Support for the above is enabled by default for all architectures except
    IA-64 and Tile-GX, whose symbols are too far apart to capture in this
    manner.

    Signed-off-by: Ard Biesheuvel
    Tested-by: Guenter Roeck
    Reviewed-by: Kees Cook
    Tested-by: Kees Cook
    Cc: Heiko Carstens
    Cc: Michael Ellerman
    Cc: Ingo Molnar
    Cc: H. Peter Anvin
    Cc: Benjamin Herrenschmidt
    Cc: Michal Marek
    Cc: Rusty Russell
    Cc: Arnd Bergmann
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ard Biesheuvel
     
  • scripts/kallsyms.c has a special --absolute-percpu command line option
    which deals with the zero based per cpu offsets that are used when
    building for SMP on x86_64. This means that the option should only be
    passed in that case, so add a Kconfig symbol with the correct predicate,
    and use that instead.

    Signed-off-by: Ard Biesheuvel
    Tested-by: Guenter Roeck
    Reviewed-by: Kees Cook
    Tested-by: Kees Cook
    Acked-by: Rusty Russell
    Cc: Heiko Carstens
    Cc: Michael Ellerman
    Cc: Ingo Molnar
    Cc: H. Peter Anvin
    Cc: Benjamin Herrenschmidt
    Cc: Michal Marek
    Cc: Arnd Bergmann
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ard Biesheuvel
     

09 Feb, 2016

1 commit

  • Since the output of the invocation of scripts/kallsyms is piped directly
    into the assembler, error messages it emits are visible on stderr, but
    a non-zero return code is ignored, and the build simply proceeds in that
    case. However, the resulting kernel is most likely broken, and will crash
    at boot.

    So instead, capture the output of kallsyms in a separate .S file, and pass
    that to the assembler in a separate step.

    Signed-off-by: Ard Biesheuvel
    Signed-off-by: Michal Marek

    Ard Biesheuvel
     

11 Jan, 2016

1 commit

  • Similarly to commit fb1770aa78a43530940d0c2dd161e77bc705bdac, with gcc 5
    on Ubuntu and CONFIG_STATIC_LINK=y I was seeing these linker errors:

    /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/librt.a(timer_create.o): In function `__timer_create_new':
    (.text+0xcd): undefined reference to `pthread_once'
    /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/librt.a(timer_create.o): In function `__timer_create_new':
    (.text+0x126): undefined reference to `pthread_attr_init'
    /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/librt.a(timer_create.o): In function `__timer_create_new':
    (.text+0x168): undefined reference to `pthread_attr_setdetachstate'
    [...]

    Obviously we also need -lpthread for librt.a.

    Cc: stable@vger.kernel.org # 4.4
    Signed-off-by: Vegard Nossum
    Signed-off-by: Richard Weinberger

    Vegard Nossum
     

09 Dec, 2015

1 commit

  • On gcc Ubuntu 4.8.4-2ubuntu1~14.04, linking vmlinux fails with:

    arch/um/os-Linux/built-in.o: In function `os_timer_create':
    /android/kernel/android/arch/um/os-Linux/time.c:51: undefined reference to `timer_create'
    arch/um/os-Linux/built-in.o: In function `os_timer_set_interval':
    /android/kernel/android/arch/um/os-Linux/time.c:84: undefined reference to `timer_settime'
    arch/um/os-Linux/built-in.o: In function `os_timer_remain':
    /android/kernel/android/arch/um/os-Linux/time.c:109: undefined reference to `timer_gettime'
    arch/um/os-Linux/built-in.o: In function `os_timer_one_shot':
    /android/kernel/android/arch/um/os-Linux/time.c:132: undefined reference to `timer_settime'
    arch/um/os-Linux/built-in.o: In function `os_timer_disable':
    /android/kernel/android/arch/um/os-Linux/time.c:145: undefined reference to `timer_settime'

    This is because -lrt appears in the generated link commandline
    after arch/um/os-Linux/built-in.o. Fix this by removing -lrt from
    arch/um/Makefile and adding it to the UM-specific section of
    scripts/link-vmlinux.sh.

    Signed-off-by: Lorenzo Colitti
    Signed-off-by: Richard Weinberger

    Lorenzo Colitti
     

21 May, 2015

1 commit


07 May, 2015

1 commit

  • While building linux with dash shell:
    LINK vmlinux
    trap: SIGHUP: bad trap
    /src/linux-4.0/Makefile:933: recipe for target 'vmlinux' failed
    make[1]: *** [vmlinux] Error 1

    See the following document for behavior of posix shell trap instruction:
    http://pubs.opengroup.org/onlinepubs/000095399/utilities/trap.html

    Cc: Ingo Molnar
    Signed-off-by: Sylvain BERTRAND
    Signed-off-by: Michal Marek

    Sylvain BERTRAND
     

20 Aug, 2014

1 commit


17 Mar, 2014

1 commit

  • x86-64 has a problem: per-cpu variables are actually represented by
    their absolute offsets within the per-cpu area, but the symbols are
    not emitted as absolute. Thus kallsyms naively creates them as offsets
    from _text, meaning their values change if the kernel is relocated
    (especially noticeable with CONFIG_RANDOMIZE_BASE):

    $ egrep ' (gdt_|_(stext|_per_cpu_))' /root/kallsyms.nokaslr
    0000000000000000 D __per_cpu_start
    0000000000004000 D gdt_page
    0000000000014280 D __per_cpu_end
    ffffffff810001c8 T _stext
    ffffffff81ee53c0 D __per_cpu_offset
    $ egrep ' (gdt_|_(stext|_per_cpu_))' /root/kallsyms.kaslr1
    000000001f200000 D __per_cpu_start
    000000001f204000 D gdt_page
    000000001f214280 D __per_cpu_end
    ffffffffa02001c8 T _stext
    ffffffffa10e53c0 D __per_cpu_offset

    Making them absolute symbols is the Right Thing, but requires fixes to
    the relocs tool. So for the moment, we add a --absolute-percpu option
    which makes them absolute from a kallsyms perspective:

    $ egrep ' (gdt_|_(stext|_per_cpu_))' /proc/kallsyms # no KASLR
    0000000000000000 A __per_cpu_start
    000000000000a000 A gdt_page
    0000000000013040 A __per_cpu_end
    ffffffff802001c8 T _stext
    ffffffff8099b180 D __per_cpu_offset
    ffffffff809a3000 D __per_cpu_load
    $ egrep ' (gdt_|_(stext|_per_cpu_))' /proc/kallsyms # With KASLR
    0000000000000000 A __per_cpu_start
    000000000000a000 A gdt_page
    0000000000013040 A __per_cpu_end
    ffffffff89c001c8 T _stext
    ffffffff8a39d180 D __per_cpu_offset
    ffffffff8a3a5000 D __per_cpu_load

    Based-on-the-original-screenplay-by: Andy Honig
    Signed-off-by: Rusty Russell
    Acked-by: Kees Cook

    Rusty Russell
     

10 Dec, 2013

1 commit

  • Actually CONFIG_PAGE_OFFSET isn't same with PAGE_OFFSET, so
    it isn't easy to figue out PAGE_OFFSET defined in header
    file from scripts.

    Because CONFIG_PAGE_OFFSET may not be defined in some ARCHs(
    64bit ARCH), or defined as bogus value in !MMU case, so
    this patch only applys the filter on ARM when CONFIG_PAGE_OFFSET
    is defined as the original problem is only on ARM.

    Cc:
    Cc: Rusty Russell
    Fixes: f6537f2f0eba4eba3354e48dbe3047db6d8b6254
    Singed-off-by: Ming Lei
    Signed-off-by: Rusty Russell

    Ming Lei
     

02 Nov, 2013

1 commit

  • This patch uses CONFIG_PAGE_OFFSET to filter symbols which
    are not in kernel address space because these symbols are
    generally for generating code purpose and can't be run at
    kernel mode, so we needn't keep them in /proc/kallsyms.

    For example, on ARM there are some symbols which may be
    linked in relocatable code section, then perf can't parse
    symbols any more from /proc/kallsyms, this patch fixes the
    problem (introduced b9b32bf70f2fb710b07c94e13afbc729afe221da)

    Cc: Russell King
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Michal Marek
    Signed-off-by: Ming Lei
    Signed-off-by: Rusty Russell
    Cc: stable@vger.kernel.org

    Ming Lei
     

15 Mar, 2013

1 commit

  • We have CONFIG_SYMBOL_PREFIX, which three archs define to the string
    "_". But Al Viro broke this in "consolidate cond_syscall and
    SYSCALL_ALIAS declarations" (in linux-next), and he's not the first to
    do so.

    Using CONFIG_SYMBOL_PREFIX is awkward, since we usually just want to
    prefix it so something. So various places define helpers which are
    defined to nothing if CONFIG_SYMBOL_PREFIX isn't set:

    1) include/asm-generic/unistd.h defines __SYMBOL_PREFIX.
    2) include/asm-generic/vmlinux.lds.h defines VMLINUX_SYMBOL(sym)
    3) include/linux/export.h defines MODULE_SYMBOL_PREFIX.
    4) include/linux/kernel.h defines SYMBOL_PREFIX (which differs from #7)
    5) kernel/modsign_certificate.S defines ASM_SYMBOL(sym)
    6) scripts/modpost.c defines MODULE_SYMBOL_PREFIX
    7) scripts/Makefile.lib defines SYMBOL_PREFIX on the commandline if
    CONFIG_SYMBOL_PREFIX is set, so that we have a non-string version
    for pasting.

    (arch/h8300/include/asm/linkage.h defines SYMBOL_NAME(), too).

    Let's solve this properly:
    1) No more generic prefix, just CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX.
    2) Make linux/export.h usable from asm.
    3) Define VMLINUX_SYMBOL() and VMLINUX_SYMBOL_STR().
    4) Make everyone use them.

    Signed-off-by: Rusty Russell
    Reviewed-by: James Hogan
    Tested-by: James Hogan (metag)

    Rusty Russell
     

25 Feb, 2013

1 commit

  • The shell '.' command is not required to search the current directory as
    a fallback and in fact newer versions of bash in sh-mode do not do this.
    Force reading the file from the current directory if $KCONFIG_CONFIG
    contains no '/'.

    Reported-by: Stephen Rothwell
    Signed-off-by: Michal Marek

    Michal Marek
     

22 Feb, 2013

1 commit


12 Sep, 2012

1 commit


11 Sep, 2012

1 commit

  • Commit 1f2bfbd00e466ff3489b2ca5cc75b1cccd14c123 ("kbuild: link of
    vmlinux moved to a script") introduced in v3.5-rc1 broke kallsyms on
    architectures which have symbol prefixes.

    The --symbol-prefix argument used to be added to the KALLSYMS command
    line from the architecture Makefile, however this isn't picked up by the
    new scripts/link-vmlinux.sh. This resulted in symbols like
    kallsyms_addresses being added which weren't correctly overriding the
    weak symbols such as _kallsyms_addresses. These could then trigger
    BUG_ONs in kallsyms code.

    This is fixed by removing the KALLSYMS addition from the architecture
    Makefile, and using CONFIG_SYMBOL_PREFIX in the link-vmlinux.sh script
    to determine whether to add the --symbol-prefix argument.

    Signed-off-by: James Hogan
    Signed-off-by: Bob Liu

    James Hogan
     

10 Aug, 2012

1 commit


08 Jul, 2012

1 commit

  • ... at least in the top-level Makefile and scripts/link-vmlinux.sh.
    There are some more instances of the 'echo ; exit 1' pattern in
    some arch Makefiles and kconfig.

    Reported-by: Linus Torvalds
    Signed-off-by: Michal Marek

    Michal Marek
     

29 May, 2012

1 commit

  • Pull kbuild updates from Michal Marek.

    Fixed up nontrivial merge conflict in Makefile as per Stephen Rothwell
    and linux-next (and trivial arch/sparc/Makefile changes due to removed
    sparc32 logic).

    * 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
    mips: Fix KBUILD_CPPFLAGS definition
    kbuild: fix ia64 link
    kbuild: document KBUILD_LDS, KBUILD_VMLINUX_{INIT,MAIN} and LDFLAGS_vmlinux
    kbuild: link of vmlinux moved to a script
    kbuild: refactor final link of sparc32
    kbuild: drop unused KBUILD_VMLINUX_OBJS from top-level Makefile
    kbuild: Makefile: remove unnecessary check for m68knommu ARCH

    Linus Torvalds
     

10 May, 2012

1 commit

  • ia64 build failed like this:

    CC init/version.o
    LD init/built-in.o
    KSYM .tmp_kallsyms1.o
    ld: .tmp_kallsyms1.o: linking constant-gp files with non-constant-gp files
    ld: failed to merge target specific data of file .tmp_kallsyms1.o
    make: *** [vmlinux] Error 1

    This was introduced when link of vmlinux was migrated to a script.
    Add missing option to as to fix this.

    Reported-by: Tony Luck
    Tested-by: Tony Luck
    Signed-off-by: Sam Ravnborg
    Signed-off-by: Michal Marek

    Sam Ravnborg
     

06 May, 2012

1 commit

  • Move the final link of vmlinux to a script to improve
    readability and maintainability of the code.

    The Makefile fragments used to link vmlinux has over the
    years seen far too many changes and the logic had become
    hard to follow.

    As the process by nature is serialized there was
    nothing gained including this in the Makefile.

    "um" has special link requirments - and the
    only way to handle this was to hard-code the linking
    of "um" in the script.
    This was better than trying to modularize it only for the
    benefit of "um" anyway.

    The shell script has been improved after input from:
    Arnaud Lacombe
    Nick Bowler

    Signed-off-by: Sam Ravnborg
    Cc: Arnaud Lacombe
    Cc: Nick Bowler
    Cc: Richard Weinberger
    Signed-off-by: Michal Marek

    Sam Ravnborg