08 Aug, 2020

1 commit

  • Pull fdpick coredump update from Al Viro:
    "Switches fdpic coredumps away from original aout dumping primitives to
    the same kind of regset use as regular elf coredumps do"

    * 'work.fdpic' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    [elf-fdpic] switch coredump to regsets
    [elf-fdpic] use elf_dump_thread_status() for the dumper thread as well
    [elf-fdpic] move allocation of elf_thread_status into elf_dump_thread_status()
    [elf-fdpic] coredump: don't bother with cyclic list for per-thread objects
    kill elf_fpxregs_t
    take fdpic-related parts of elf_prstatus out
    unexport linux/elfcore.h

    Linus Torvalds
     

31 Jul, 2020

1 commit

  • - Add support for a zstd compressed initramfs.

    - Add compression for compressing built-in initramfs with zstd.

    I have tested this patch by boot testing with buildroot and QEMU.
    Specifically, I booted the kernel with both a zstd and gzip compressed
    initramfs, both built into the kernel and separate. I ensured that the
    correct compression algorithm was used. I tested on arm, aarch64, i386,
    and x86_64.

    This patch has been tested in production on aarch64 and x86_64 devices.

    Additionally, I have performance measurements from internal use in
    production. On an aarch64 device we saw 19 second boot time improvement
    from switching from lzma to zstd (27 seconds to 8 seconds). On an x86_64
    device we saw a 9 second boot time reduction from switching from xz to
    zstd.

    Signed-off-by: Nick Terrell
    Signed-off-by: Ingo Molnar
    Tested-by: Sedat Dilek
    Reviewed-by: Kees Cook
    Link: https://lore.kernel.org/r/20200730190841.2071656-5-nickrterrell@gmail.com

    Nick Terrell
     

28 Jul, 2020

1 commit

  • It's unusable from userland - it uses elf_gregset_t, which is not
    provided by exported headers. glibc has it in sys/procfs.h, but
    the same file defines struct elf_prstatus, so linux/elfcore.h can't
    be included once sys/procfs.h has been pulled. Same goes for uclibc
    and dietlibc simply doesn't have elf_gregset_t defined anywhere.

    IOW, no userland source is including that thing.

    Signed-off-by: Al Viro

    Al Viro
     

17 May, 2020

1 commit

  • bpfilter_umh is built for the default machine bit of the compiler,
    which may not match to the bit size of the kernel.

    This happens in the scenario below:

    You can use biarch GCC that defaults to 64-bit for building the 32-bit
    kernel. In this case, Kbuild passes -m32 to teach the compiler to
    produce 32-bit kernel space objects. However, it is missing when
    building bpfilter_umh. It is built as a 64-bit ELF, and then embedded
    into the 32-bit kernel.

    The 32-bit kernel and 64-bit umh is a bad combination.

    In theory, we can have 32-bit umh running on 64-bit kernel, but we do
    not have a good reason to support such a usecase.

    The best is to match the bit size between them.

    Pass -m32 or -m64 to the umh build command if it is found in
    $(KBUILD_CFLAGS). Evaluate CC_CAN_LINK against the kernel bit-size.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

12 May, 2020

1 commit

  • This omits system headers from the generated header dependency.

    System headers are not updated unless you upgrade the compiler. Nor do
    they contain CONFIG options, so fixdep does not need to parse them.

    Having said that, the effect of this optimization will be quite small
    because the kernel code generally does not include system headers
    except . Host programs include a lot of system headers,
    but there are not so many in the kernel tree.

    At first, keeping system headers in .*.cmd files might be useful to
    detect the compiler update, but there is no guarantee that
    is included from every file. So, I implemented a more reliable way in
    the previous commit.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

11 Apr, 2020

1 commit


25 Mar, 2020

1 commit


17 Mar, 2020

1 commit

  • Even though INITRAMFS_SOURCE kconfig option isn't set in most of
    defconfigs it is used (set) extensively by various build systems.
    Commit f26661e12765 ("initramfs: make initramfs compression choice
    non-optional") has changed default compression mode. Previously we
    compress initramfs using available compression algorithm. Now
    we don't use any compression at all by default.
    It significantly increases the image size in case of build system
    chooses embedded initramfs. Initially I faced with this issue while
    using buildroot.

    As of today it's not possible to set preferred compression mode
    in target defconfig as this option depends on INITRAMFS_SOURCE
    being set. Modification of all build systems either doesn't look
    like good option.

    Let's instead rewrite initramfs compression mode choices list
    the way that "INITRAMFS_COMPRESSION_NONE" will be the last option
    in the list. In that case it will be chosen only if all other
    options (which implements any compression) are not available.

    Signed-off-by: Eugeniy Paltsev
    Signed-off-by: Masahiro Yamada

    Eugeniy Paltsev
     

10 Feb, 2020

1 commit

  • Pull more Kbuild updates from Masahiro Yamada:

    - fix randconfig to generate a sane .config

    - rename hostprogs-y / always to hostprogs / always-y, which are more
    natual syntax.

    - optimize scripts/kallsyms

    - fix yes2modconfig and mod2yesconfig

    - make multiple directory targets ('make foo/ bar/') work

    * tag 'kbuild-v5.6-2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
    kbuild: make multiple directory targets work
    kconfig: Invalidate all symbols after changing to y or m.
    kallsyms: fix type of kallsyms_token_table[]
    scripts/kallsyms: change table to store (strcut sym_entry *)
    scripts/kallsyms: rename local variables in read_symbol()
    kbuild: rename hostprogs-y/always to hostprogs/always-y
    kbuild: fix the document to use extra-y for vmlinux.lds
    kconfig: fix broken dependency in randconfig-generated .config

    Linus Torvalds
     

04 Feb, 2020

2 commits

  • Since commit ddd09bcc899f ("initramfs: make compression options not
    depend on INITRAMFS_SOURCE"), Kconfig asks the compression mode for
    the built-in initramfs regardless of INITRAMFS_SOURCE.

    It is technically simpler, but pointless from a UI perspective,
    Linus says [1].

    When INITRAMFS_SOURCE is empty, usr/Makefile creates a tiny default
    cpio, which is so small that nobody cares about the compression.

    This commit hides the Kconfig choice in that case. The default cpio
    is embedded without compression, which was the original behavior.

    [1]: https://lkml.org/lkml/2020/2/1/160

    Suggested-by: Linus Torvalds
    Signed-off-by: Masahiro Yamada
    Signed-off-by: Linus Torvalds

    Masahiro Yamada
     
  • In old days, the "host-progs" syntax was used for specifying host
    programs. It was renamed to the current "hostprogs-y" in 2004.

    It is typically useful in scripts/Makefile because it allows Kbuild to
    selectively compile host programs based on the kernel configuration.

    This commit renames like follows:

    always -> always-y
    hostprogs-y -> hostprogs

    So, scripts/Makefile will look like this:

    always-$(CONFIG_BUILD_BIN2C) += ...
    always-$(CONFIG_KALLSYMS) += ...
    ...
    hostprogs := $(always-y) $(always-m)

    I think this makes more sense because a host program is always a host
    program, irrespective of the kernel configuration. We want to specify
    which ones to compile by CONFIG options, so always-y will be handier.

    The "always", "hostprogs-y", "hostprogs-m" will be kept for backward
    compatibility for a while.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

15 Jan, 2020

6 commits


14 Jan, 2020

7 commits


07 Jan, 2020

2 commits


03 Jan, 2020

1 commit

  • Prior to commit 858805b336be ("kbuild: add $(BASH) to run scripts with
    bash-extension"), this shell script was almost always run by bash since
    bash is usually installed on the system by default.

    Now, this script is run by sh, which might be a symlink to dash. On such
    distributions, the following code emits an error:

    local dev=`LC_ALL=C ls -l "${location}"`

    You can reproduce the build error, for example by setting
    CONFIG_INITRAMFS_SOURCE="/dev".

    GEN usr/initramfs_data.cpio.gz
    ./usr/gen_initramfs_list.sh: 131: local: 1: bad variable name
    make[1]: *** [usr/Makefile:61: usr/initramfs_data.cpio.gz] Error 2

    This is because `LC_ALL=C ls -l "${location}"` contains spaces.
    Surrounding it with double-quotes fixes the error.

    Fixes: 858805b336be ("kbuild: add $(BASH) to run scripts with bash-extension")
    Reported-by: Jory A. Pratt
    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

09 Dec, 2019

1 commit

  • Since commit fcbb8461fd23 ("kbuild: remove header compile test"),
    'make clean' with O= option in the pristine source tree emits
    'No such file or directory' warning.

    $ git clean -d -f -x
    $ make O=foo clean
    make[1]: Entering directory '/home/masahiro/linux/foo'
    find: ‘usr/include’: No such file or directory
    make[1]: Leaving directory '/home/masahiro/linux/foo'

    Fixes: fcbb8461fd23 ("kbuild: remove header compile test")
    Reported-by: kbuild test robot
    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

05 Dec, 2019

4 commits

  • Userspace cannot compile due to some missing type
    definitions. For example, building it for x86 fails as follows:

    CC usr/include/asm/sembuf.h.s
    In file included from :32:0:
    usr/include/asm/sembuf.h:17:20: error: field `sem_perm' has incomplete type
    struct ipc64_perm sem_perm; /* permissions .. see ipc.h */
    ^~~~~~~~
    usr/include/asm/sembuf.h:24:2: error: unknown type name `__kernel_time_t'
    __kernel_time_t sem_otime; /* last semop time */
    ^~~~~~~~~~~~~~~
    usr/include/asm/sembuf.h:25:2: error: unknown type name `__kernel_ulong_t'
    __kernel_ulong_t __unused1;
    ^~~~~~~~~~~~~~~~
    usr/include/asm/sembuf.h:26:2: error: unknown type name `__kernel_time_t'
    __kernel_time_t sem_ctime; /* last change time */
    ^~~~~~~~~~~~~~~
    usr/include/asm/sembuf.h:27:2: error: unknown type name `__kernel_ulong_t'
    __kernel_ulong_t __unused2;
    ^~~~~~~~~~~~~~~~
    usr/include/asm/sembuf.h:29:2: error: unknown type name `__kernel_ulong_t'
    __kernel_ulong_t sem_nsems; /* no. of semaphores in array */
    ^~~~~~~~~~~~~~~~
    usr/include/asm/sembuf.h:30:2: error: unknown type name `__kernel_ulong_t'
    __kernel_ulong_t __unused3;
    ^~~~~~~~~~~~~~~~
    usr/include/asm/sembuf.h:31:2: error: unknown type name `__kernel_ulong_t'
    __kernel_ulong_t __unused4;
    ^~~~~~~~~~~~~~~~

    It is just a matter of missing include directive.

    Include to make it self-contained, and add it to
    the compile-test coverage.

    Link: http://lkml.kernel.org/r/20191030063855.9989-3-yamada.masahiro@socionext.com
    Signed-off-by: Masahiro Yamada
    Cc: Arnd Bergmann
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Masahiro Yamada
     
  • Userspace cannot compile due to some missing type
    definitions. For example, building it for x86 fails as follows:

    CC usr/include/asm/msgbuf.h.s
    In file included from usr/include/asm/msgbuf.h:6:0,
    from :32:
    usr/include/asm-generic/msgbuf.h:25:20: error: field `msg_perm' has incomplete type
    struct ipc64_perm msg_perm;
    ^~~~~~~~
    usr/include/asm-generic/msgbuf.h:27:2: error: unknown type name `__kernel_time_t'
    __kernel_time_t msg_stime; /* last msgsnd time */
    ^~~~~~~~~~~~~~~
    usr/include/asm-generic/msgbuf.h:28:2: error: unknown type name `__kernel_time_t'
    __kernel_time_t msg_rtime; /* last msgrcv time */
    ^~~~~~~~~~~~~~~
    usr/include/asm-generic/msgbuf.h:29:2: error: unknown type name `__kernel_time_t'
    __kernel_time_t msg_ctime; /* last change time */
    ^~~~~~~~~~~~~~~
    usr/include/asm-generic/msgbuf.h:41:2: error: unknown type name `__kernel_pid_t'
    __kernel_pid_t msg_lspid; /* pid of last msgsnd */
    ^~~~~~~~~~~~~~
    usr/include/asm-generic/msgbuf.h:42:2: error: unknown type name `__kernel_pid_t'
    __kernel_pid_t msg_lrpid; /* last receive pid */
    ^~~~~~~~~~~~~~

    It is just a matter of missing include directive.

    Include to make it self-contained, and add it to
    the compile-test coverage.

    Link: http://lkml.kernel.org/r/20191030063855.9989-2-yamada.masahiro@socionext.com
    Signed-off-by: Masahiro Yamada
    Cc: Arnd Bergmann
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Masahiro Yamada
     
  • Userspace cannot compile due to some missing type
    definitions. For example, building it for x86 fails as follows:

    CC usr/include/asm/ipcbuf.h.s
    In file included from usr/include/asm/ipcbuf.h:1:0,
    from :32:
    usr/include/asm-generic/ipcbuf.h:21:2: error: unknown type name `__kernel_key_t'
    __kernel_key_t key;
    ^~~~~~~~~~~~~~
    usr/include/asm-generic/ipcbuf.h:22:2: error: unknown type name `__kernel_uid32_t'
    __kernel_uid32_t uid;
    ^~~~~~~~~~~~~~~~
    usr/include/asm-generic/ipcbuf.h:23:2: error: unknown type name `__kernel_gid32_t'
    __kernel_gid32_t gid;
    ^~~~~~~~~~~~~~~~
    usr/include/asm-generic/ipcbuf.h:24:2: error: unknown type name `__kernel_uid32_t'
    __kernel_uid32_t cuid;
    ^~~~~~~~~~~~~~~~
    usr/include/asm-generic/ipcbuf.h:25:2: error: unknown type name `__kernel_gid32_t'
    __kernel_gid32_t cgid;
    ^~~~~~~~~~~~~~~~
    usr/include/asm-generic/ipcbuf.h:26:2: error: unknown type name `__kernel_mode_t'
    __kernel_mode_t mode;
    ^~~~~~~~~~~~~~~
    usr/include/asm-generic/ipcbuf.h:28:35: error: `__kernel_mode_t' undeclared here (not in a function)
    unsigned char __pad1[4 - sizeof(__kernel_mode_t)];
    ^~~~~~~~~~~~~~~
    usr/include/asm-generic/ipcbuf.h:31:2: error: unknown type name `__kernel_ulong_t'
    __kernel_ulong_t __unused1;
    ^~~~~~~~~~~~~~~~
    usr/include/asm-generic/ipcbuf.h:32:2: error: unknown type name `__kernel_ulong_t'
    __kernel_ulong_t __unused2;
    ^~~~~~~~~~~~~~~~

    It is just a matter of missing include directive.

    Include to make it self-contained, and add it to
    the compile-test coverage.

    Link: http://lkml.kernel.org/r/20191030063855.9989-1-yamada.masahiro@socionext.com
    Signed-off-by: Masahiro Yamada
    Cc: Arnd Bergmann
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Masahiro Yamada
     
  • Userspace cannot compile

    CC usr/include/linux/scc.h.s
    In file included from :32:0:
    usr/include/linux/scc.h:20:20: error: `SIOCDEVPRIVATE' undeclared here (not in a function)
    SIOCSCCRESERVED = SIOCDEVPRIVATE,
    ^~~~~~~~~~~~~~

    Include to make it self-contained, and add it to the
    compile-test coverage.

    Link: http://lkml.kernel.org/r/20191108055809.26969-1-yamada.masahiro@socionext.com
    Signed-off-by: Masahiro Yamada
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Masahiro Yamada
     

14 Nov, 2019

2 commits

  • Currently, some sanity checks for uapi headers are done by
    scripts/headers_check.pl, which is wired up to the 'headers_check'
    target in the top Makefile.

    It is true compiling headers has better test coverage, but there
    are still several headers excluded from the compile test. I like
    to keep headers_check.pl for a while, but we can delete a lot of
    code by moving the build rule to usr/include/Makefile.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • There are both positive and negative options about this feature.
    At first, I thought it was a good idea, but actually Linus stated a
    negative opinion (https://lkml.org/lkml/2019/9/29/227). I admit it
    is ugly and annoying.

    The baseline I'd like to keep is the compile-test of uapi headers.
    (Otherwise, kernel developers have no way to ensure the correctness
    of the exported headers.)

    I will maintain a small build rule in usr/include/Makefile.
    Remove the other header test functionality.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

11 Nov, 2019

1 commit


05 Oct, 2019

1 commit


29 Sep, 2019

1 commit

  • Pull networking fixes from David Miller:

    1) Sanity check URB networking device parameters to avoid divide by
    zero, from Oliver Neukum.

    2) Disable global multicast filter in NCSI, otherwise LLDP and IPV6
    don't work properly. Longer term this needs a better fix tho. From
    Vijay Khemka.

    3) Small fixes to selftests (use ping when ping6 is not present, etc.)
    from David Ahern.

    4) Bring back rt_uses_gateway member of struct rtable, it's semantics
    were not well understood and trying to remove it broke things. From
    David Ahern.

    5) Move usbnet snaity checking, ignore endpoints with invalid
    wMaxPacketSize. From Bjørn Mork.

    6) Missing Kconfig deps for sja1105 driver, from Mao Wenan.

    7) Various small fixes to the mlx5 DR steering code, from Alaa Hleihel,
    Alex Vesker, and Yevgeny Kliteynik

    8) Missing CAP_NET_RAW checks in various places, from Ori Nimron.

    9) Fix crash when removing sch_cbs entry while offloading is enabled,
    from Vinicius Costa Gomes.

    10) Signedness bug fixes, generally in looking at the result given by
    of_get_phy_mode() and friends. From Dan Crapenter.

    11) Disable preemption around BPF_PROG_RUN() calls, from Eric Dumazet.

    12) Don't create VRF ipv6 rules if ipv6 is disabled, from David Ahern.

    13) Fix quantization code in tcp_bbr, from Kevin Yang.

    * git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (127 commits)
    net: tap: clean up an indentation issue
    nfp: abm: fix memory leak in nfp_abm_u32_knode_replace
    tcp: better handle TCP_USER_TIMEOUT in SYN_SENT state
    sk_buff: drop all skb extensions on free and skb scrubbing
    tcp_bbr: fix quantization code to not raise cwnd if not probing bandwidth
    mlxsw: spectrum_flower: Fail in case user specifies multiple mirror actions
    Documentation: Clarify trap's description
    mlxsw: spectrum: Clear VLAN filters during port initialization
    net: ena: clean up indentation issue
    NFC: st95hf: clean up indentation issue
    net: phy: micrel: add Asym Pause workaround for KSZ9021
    net: socionext: ave: Avoid using netdev_err() before calling register_netdev()
    ptp: correctly disable flags on old ioctls
    lib: dimlib: fix help text typos
    net: dsa: microchip: Always set regmap stride to 1
    nfp: flower: fix memory leak in nfp_flower_spawn_vnic_reprs
    nfp: flower: prevent memory leak in nfp_flower_spawn_phy_reprs
    net/sched: Set default of CONFIG_NET_TC_SKB_EXT to N
    vrf: Do not attempt to create IPv6 mcast rule if IPv6 is disabled
    net: sched: sch_sfb: don't call qdisc_put() while holding tree lock
    ...

    Linus Torvalds
     

25 Sep, 2019

2 commits

  • When CONFIG_UAPI_HEADER_TEST=y, exported headers are compile-tested to
    make sure they can be included from user-space.

    Currently, linux/netfilter_bridge/ebtables.h is excluded from the test
    coverage. To make it join the compile-test, we need to fix the build
    errors attached below.

    For a case like this, we decided to use __u{8,16,32,64} variable types
    in this discussion:

    https://lkml.org/lkml/2019/6/5/18

    Build log:

    CC usr/include/linux/netfilter_bridge/ebtables.h.s
    In file included from :32:0:
    ./usr/include/linux/netfilter_bridge/ebtables.h:126:4: error: unknown type name ‘uint8_t’
    uint8_t revision;
    ^~~~~~~
    ./usr/include/linux/netfilter_bridge/ebtables.h:139:4: error: unknown type name ‘uint8_t’
    uint8_t revision;
    ^~~~~~~
    ./usr/include/linux/netfilter_bridge/ebtables.h:152:4: error: unknown type name ‘uint8_t’
    uint8_t revision;
    ^~~~~~~

    Signed-off-by: Masahiro Yamada
    Signed-off-by: Pablo Neira Ayuso

    Masahiro Yamada
     
  • Since 9e3596b0c653 ("kbuild: initramfs cleanup, set target from Kconfig")
    "make clean" leaves behind compressed initramfs images. Example:

    $ make defconfig
    $ sed -i 's|CONFIG_INITRAMFS_SOURCE=""|CONFIG_INITRAMFS_SOURCE="/tmp/ir.cpio"|' .config
    $ make olddefconfig
    $ make -s
    $ make -s clean
    $ git clean -ndxf | grep initramfs
    Would remove usr/initramfs_data.cpio.gz

    clean rules do not have CONFIG_* context so they do not know which
    compression format was used. Thus they don't know which files to delete.

    Tell clean to delete all possible compression formats.

    Once patched usr/initramfs_data.cpio.gz and friends are deleted by
    "make clean".

    Link: http://lkml.kernel.org/r/20190722063251.55541-1-gthelen@google.com
    Fixes: 9e3596b0c653 ("kbuild: initramfs cleanup, set target from Kconfig")
    Signed-off-by: Greg Thelen
    Cc: Nicholas Piggin
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Greg Thelen
     

29 Aug, 2019

1 commit