24 May, 2019

4 commits

  • Based on 1 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license as published by
    the free software foundation either version 2 of the license or at
    your option any later version this program is distributed in the
    hope that it will be useful but without any warranty without even
    the implied warranty of merchantability or fitness for a particular
    purpose see the gnu general public license for more details you
    should have received a copy of the gnu general public license along
    with this program if not write to the free software foundation inc
    675 mass ave cambridge ma 02139 usa

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-or-later

    has been chosen to replace the boilerplate/reference in 441 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Michael Ellerman (powerpc)
    Reviewed-by: Richard Fontana
    Reviewed-by: Allison Randal
    Reviewed-by: Kate Stewart
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190520071858.739733335@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     
  • Based on 1 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license as published by
    the free software foundation inc 53 temple place ste 330 boston ma
    02111 1307 usa either version 2 of the license or at your option any
    later version incorporated herein by reference

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-or-later

    has been chosen to replace the boilerplate/reference in 13 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Allison Randal
    Reviewed-by: Kate Stewart
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190520170858.645641371@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     
  • Based on 1 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public licence as published by
    the free software foundation either version 2 of the licence or at
    your option any later version

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-or-later

    has been chosen to replace the boilerplate/reference in 114 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Allison Randal
    Reviewed-by: Kate Stewart
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190520170857.552531963@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     
  • Based on 1 normalized pattern(s):

    gnupg is free software you can redistribute it and or modify it
    under the terms of the gnu general public license as published by
    the free software foundation either version 2 of the license or at
    your option any later version gnupg is distributed in the hope that
    it will be useful but without any warranty without even the implied
    warranty of merchantability or fitness for a particular purpose see
    the gnu general public license for more details you should have
    received a copy of the gnu general public license along with this
    program if not write to the free software foundation inc 59 temple
    place suite 330 boston ma 02111 1307 usa note this code is heavily
    based on the gnu mp library actually it s the same code with only
    minor changes in the way the data is stored this is to support the
    abstraction of an optional secure memory allocation which may be
    used to avoid revealing of sensitive data due to paging etc the gnu
    mp library itself is published under the lgpl however i decided to
    publish this code under the plain gpl

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-or-later

    has been chosen to replace the boilerplate/reference in 14 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Allison Randal
    Reviewed-by: Kate Stewart
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190520170856.639982569@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

22 May, 2019

1 commit

  • Pull SPDX update from Greg KH:
    "Here is a series of patches that add SPDX tags to different kernel
    files, based on two different things:

    - SPDX entries are added to a bunch of files that we missed a year
    ago that do not have any license information at all.

    These were either missed because the tool saw the MODULE_LICENSE()
    tag, or some EXPORT_SYMBOL tags, and got confused and thought the
    file had a real license, or the files have been added since the
    last big sweep, or they were Makefile/Kconfig files, which we
    didn't touch last time.

    - Add GPL-2.0-only or GPL-2.0-or-later tags to files where our scan
    tools can determine the license text in the file itself. Where this
    happens, the license text is removed, in order to cut down on the
    700+ different ways we have in the kernel today, in a quest to get
    rid of all of these.

    These patches have been out for review on the linux-spdx@vger mailing
    list, and while they were created by automatic tools, they were
    hand-verified by a bunch of different people, all whom names are on
    the patches are reviewers.

    The reason for these "large" patches is if we were to continue to
    progress at the current rate of change in the kernel, adding license
    tags to individual files in different subsystems, we would be finished
    in about 10 years at the earliest.

    There will be more series of these types of patches coming over the
    next few weeks as the tools and reviewers crunch through the more
    "odd" variants of how to say "GPLv2" that developers have come up with
    over the years, combined with other fun oddities (GPL + a BSD
    disclaimer?) that are being unearthed, with the goal for the whole
    kernel to be cleaned up.

    These diffstats are not small, 3840 files are touched, over 10k lines
    removed in just 24 patches"

    * tag 'spdx-5.2-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (24 commits)
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 25
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 24
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 23
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 22
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 21
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 20
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 19
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 18
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 17
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 15
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 14
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 13
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 12
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 11
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 10
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 9
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 7
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 5
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 4
    treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 3
    ...

    Linus Torvalds
     

21 May, 2019

4 commits

  • Based on 1 normalized pattern(s):

    licensed under the fsf s gnu public license v2 or later

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-or-later

    has been chosen to replace the boilerplate/reference in 2 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Kate Stewart
    Reviewed-by: Jilayne Lovejoy
    Reviewed-by: Steve Winslow
    Reviewed-by: Allison Randal
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190519154041.526489261@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     
  • Add SPDX license identifiers to all Make/Kconfig files which:

    - Have no license information of any form

    These files fall under the project license, GPL v2 only. The resulting SPDX
    license identifier is:

    GPL-2.0-only

    Signed-off-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     
  • Add SPDX license identifiers to all files which:

    - Have no license information of any form

    - Have MODULE_LICENCE("GPL*") inside which was used in the initial
    scan/conversion to ignore the file

    These files fall under the project license, GPL v2 only. The resulting SPDX
    license identifier is:

    GPL-2.0-only

    Signed-off-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     
  • Add SPDX license identifiers to all files which:

    - Have no license information of any form

    - Have EXPORT_.*_SYMBOL_GPL inside which was used in the
    initial scan/conversion to ignore the file

    These files fall under the project license, GPL v2 only. The resulting SPDX
    license identifier is:

    GPL-2.0-only

    Signed-off-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

20 May, 2019

1 commit

  • Pull networking fixes from David Miller:1) Use after free in __dev_map_entry_free(), from Eric Dumazet.

    1) Use after free in __dev_map_entry_free(), from Eric Dumazet.

    2) Fix TCP retransmission timestamps on passive Fast Open, from Yuchung
    Cheng.

    3) Orphan NFC, we'll take the patches directly into my tree. From
    Johannes Berg.

    4) We can't recycle cloned TCP skbs, from Eric Dumazet.

    5) Some flow dissector bpf test fixes, from Stanislav Fomichev.

    6) Fix RCU marking and warnings in rhashtable, from Herbert Xu.

    7) Fix some potential fib6 leaks, from Eric Dumazet.

    8) Fix a _decode_session4 uninitialized memory read bug fix that got
    lost in a merge. From Florian Westphal.

    9) Fix ipv6 source address routing wrt. exception route entries, from
    Wei Wang.

    10) The netdev_xmit_more() conversion was not done %100 properly in mlx5
    driver, fix from Tariq Toukan.

    11) Clean up botched merge on netfilter kselftest, from Florian
    Westphal.

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (74 commits)
    of_net: fix of_get_mac_address retval if compiled without CONFIG_OF
    net: fix kernel-doc warnings for socket.c
    net: Treat sock->sk_drops as an unsigned int when printing
    kselftests: netfilter: fix leftover net/net-next merge conflict
    mlxsw: core: Prevent reading unsupported slave address from SFP EEPROM
    mlxsw: core: Prevent QSFP module initialization for old hardware
    vsock/virtio: Initialize core virtio vsock before registering the driver
    net/mlx5e: Fix possible modify header actions memory leak
    net/mlx5e: Fix no rewrite fields with the same match
    net/mlx5e: Additional check for flow destination comparison
    net/mlx5e: Add missing ethtool driver info for representors
    net/mlx5e: Fix number of vports for ingress ACL configuration
    net/mlx5e: Fix ethtool rxfh commands when CONFIG_MLX5_EN_RXNFC is disabled
    net/mlx5e: Fix wrong xmit_more application
    net/mlx5: Fix peer pf disable hca command
    net/mlx5: E-Switch, Correct type to u16 for vport_num and int for vport_index
    net/mlx5: Add meaningful return codes to status_to_err function
    net/mlx5: Imply MLXFW in mlx5_core
    Revert "tipc: fix modprobe tipc failed after switch order of device registration"
    vsock/virtio: free packets during the socket release
    ...

    Linus Torvalds
     

18 May, 2019

1 commit

  • Variable 'entropy' was wrongly documented as 'seed', changed comment to
    reflect actual variable name.

    ../lib/random32.c:179: warning: Function parameter or member 'entropy' not described in 'prandom_seed'
    ../lib/random32.c:179: warning: Excess function parameter 'seed' description in 'prandom_seed'

    Signed-off-by: Philippe Mazenauer
    Acked-by: Lee Jones
    Signed-off-by: David S. Miller

    Philippe Mazenauer
     

17 May, 2019

4 commits

  • It turned out that DEBUG_SLAB_LEAK is still broken even after recent
    recue efforts that when there is a large number of objects like
    kmemleak_object which is normal on a debug kernel,

    # grep kmemleak /proc/slabinfo
    kmemleak_object 2243606 3436210 ...

    reading /proc/slab_allocators could easily loop forever while processing
    the kmemleak_object cache and any additional freeing or allocating
    objects will trigger a reprocessing. To make a situation worse,
    soft-lockups could easily happen in this sitatuion which will call
    printk() to allocate more kmemleak objects to guarantee an infinite
    loop.

    Also, since it seems no one had noticed when it was totally broken
    more than 2-year ago - see the commit fcf88917dd43 ("slab: fix a crash
    by reading /proc/slab_allocators"), probably nobody cares about it
    anymore due to the decline of the SLAB. Just remove it entirely.

    Suggested-by: Vlastimil Babka
    Suggested-by: Linus Torvalds
    Signed-off-by: Qian Cai
    Signed-off-by: Linus Torvalds

    Qian Cai
     
  • Pull nommu generic uaccess updates from Arnd Bergmann:
    "asm-generic: kill and improve nommu generic uaccess helpers

    Christoph Hellwig writes:

    This is a series doing two somewhat interwinded things. It improves
    the asm-generic nommu uaccess helper to optionally be entirely
    generic and not require any arch helpers for the actual uaccess.
    For the generic uaccess.h to actually be generically useful I also
    had to kill off the mess we made of , which really
    shouldn't exist on most architectures"

    * tag 'asm-generic-nommu' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic:
    asm-generic: optimize generic uaccess for 8-byte loads and stores
    asm-generic: provide entirely generic nommu uaccess
    arch: mostly remove
    asm-generic: don't include from

    Linus Torvalds
     
  • As cmpxchg is a non-RCU mechanism it will cause sparse warnings
    when we use it for RCU. This patch adds explicit casts to silence
    those warnings. This should probably be moved to RCU itself in
    future.

    Signed-off-by: Herbert Xu
    Signed-off-by: David S. Miller

    Herbert Xu
     
  • The opaque type rhash_lock_head should not be marked with __rcu
    because it can never be dereferenced. We should apply the RCU
    marking when we turn it into a pointer which can be dereferenced.

    This patch does exactly that. This fixes a number of sparse
    warnings as well as getting rid of some unnecessary RCU checking.

    Signed-off-by: Herbert Xu
    Signed-off-by: David S. Miller

    Herbert Xu
     

16 May, 2019

1 commit


15 May, 2019

20 commits

  • The kernel has only two users of proc_do_large_bitmap(), the kernel CPU
    watchdog, and the ip_local_reserved_ports. Refer to watchdog_cpumask
    and ip_local_reserved_ports in Documentation for further details on
    these. When you input a large buffer into these, when it is larger than
    PAGE_SIZE- 1, the input data gets misparsed, and the user get
    incorrectly informed that the desired input value was set. This commit
    implements a test which mimics and exploits that use case, it uses a
    bitmap size, as in the watchdog case. The bitmap is used to test the
    bitmap proc handler, proc_do_large_bitmap().

    The next commit fixes this issue.

    [akpm@linux-foundation.org: move proc_do_large_bitmap() export to EOF]
    [mcgrof@kernel.org: use new target description for backward compatibility]
    [mcgrof@kernel.org: augment test number to 50, ran into issues with bash string comparisons when testing up to 50 cases.]
    [mcgrof@kernel.org: introduce and use verify_diff_proc_file() to use diff]
    [mcgrof@kernel.org: use mktemp for tmp file]
    [mcgrof@kernel.org: merge shell test and C code]
    [mcgrof@kernel.org: commit log love]
    [mcgrof@kernel.org: export proc_do_large_bitmap() to allow for the test
    [mcgrof@kernel.org: check for the return value when writing to the proc file]
    Link: http://lkml.kernel.org/r/20190320222831.8243-6-mcgrof@kernel.org
    Signed-off-by: Eric Sandeen
    Signed-off-by: Luis Chamberlain
    Acked-by: Kees Cook
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Eric Sandeen
     
  • Patch series "init: Do not select DEBUG_KERNEL by default", v5.

    CONFIG_DEBUG_KERNEL has been designed to just enable Kconfig options.
    Kernel code generatoin should not depend on CONFIG_DEBUG_KERNEL.

    Proposed alternative plan: let's add a new symbol, something like
    DEBUG_MISC ("Miscellaneous debug code that should be under a more
    specific debug option but isn't"), make it depend on DEBUG_KERNEL and be
    "default DEBUG_KERNEL" but allow itself to be turned off, and then
    mechanically change the small handful of "#ifdef CONFIG_DEBUG_KERNEL" to
    "#ifdef CONFIG_DEBUG_MISC".

    This patch (of 5):

    Introduce DEBUG_MISC ("Miscellaneous debug code that should be under a
    more specific debug option but isn't"), make it depend on DEBUG_KERNEL
    and be "default DEBUG_KERNEL" but allow itself to be turned off, and
    then mechanically change the small handful of "#ifdef
    CONFIG_DEBUG_KERNEL" to "#ifdef CONFIG_DEBUG_MISC".

    Link: http://lkml.kernel.org/r/20190413224438.10802-2-okaya@kernel.org
    Signed-off-by: Sinan Kaya
    Reviewed-by: Josh Triplett
    Reviewed-by: Kees Cook
    Cc: Anders Roxell
    Cc: Benjamin Herrenschmidt
    Cc: Christophe Leroy
    Cc: Chris Zankel
    Cc: "David S. Miller"
    Cc: Florian Westphal
    Cc: Greg Kroah-Hartman
    Cc: James Hogan
    Cc: Jozsef Kadlecsik
    Cc: Max Filippov
    Cc: Michael Ellerman
    Cc: Michal Hocko
    Cc: Mike Rapoport
    Cc: Pablo Neira Ayuso
    Cc: Paul Burton
    Cc: Paul Mackerras
    Cc: Ralf Baechle
    Cc: Thomas Bogendoerfer
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sinan Kaya
     
  • Local 'ret' is unneeded and was poorly named: the variable `ret'
    generally means the "the value which this function will return".

    Cc: Roman Gushchin
    Cc: Uladzislau Rezki
    Cc: Michal Hocko
    Cc: Matthew Wilcox
    Cc: Thomas Garnier
    Cc: Oleksiy Avramchenko
    Cc: Steven Rostedt
    Cc: Joel Fernandes
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: Tejun Heo
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     
  • Propagate existing bitmap_parselist() tests to bitmap_parselist_user().

    Link: http://lkml.kernel.org/r/20190405173211.11373-6-ynorov@marvell.com
    Signed-off-by: Yury Norov
    Reviewed-by: Andy Shevchenko
    Cc: Arnd Bergmann
    Cc: Kees Cook
    Cc: Matthew Wilcox
    Cc: Mike Travis
    Cc: Rasmus Villemoes
    Cc: Tetsuo Handa
    Cc: Guenter Roeck
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Yury Norov
     
  • Add tests for non-number character, empty regions, integer overflow.

    [ynorov@marvell.com: v5]
    Link: http://lkml.kernel.org/r/20190416063801.20134-5-ynorov@marvell.com
    Link: http://lkml.kernel.org/r/20190405173211.11373-5-ynorov@marvell.com
    Signed-off-by: Yury Norov
    Reviewed-by: Andy Shevchenko
    Cc: Arnd Bergmann
    Cc: Kees Cook
    Cc: Matthew Wilcox
    Cc: Mike Travis
    Cc: Rasmus Villemoes
    Cc: Tetsuo Handa
    Cc: Guenter Roeck
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Yury Norov
     
  • test_bitmap_parselist currently uses get_cycles which is not implemented
    on some platforms, so use ktime_get() instead.

    Link: http://lkml.kernel.org/r/20190405173211.11373-4-ynorov@marvell.com
    Signed-off-by: Yury Norov
    Reviewed-by: Andy Shevchenko
    Cc: Arnd Bergmann
    Cc: Kees Cook
    Cc: Matthew Wilcox
    Cc: Mike Travis
    Cc: Rasmus Villemoes
    Cc: Tetsuo Handa
    Cc: Guenter Roeck
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Yury Norov
     
  • Remove __bitmap_parselist helper and split the function to logical
    parts.

    [ynorov@marvell.com: v5]
    Link: http://lkml.kernel.org/r/20190416063801.20134-3-ynorov@marvell.com
    Link: http://lkml.kernel.org/r/20190405173211.11373-3-ynorov@marvell.com
    Signed-off-by: Yury Norov
    Reviewed-by: Andy Shevchenko
    Cc: Arnd Bergmann
    Cc: Kees Cook
    Cc: Matthew Wilcox
    Cc: Mike Travis
    Cc: Rasmus Villemoes
    Cc: Tetsuo Handa
    Cc: Guenter Roeck
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Yury Norov
     
  • Patch series "lib: rework bitmap_parselist and tests", v5.

    bitmap_parselist has been evolved from a pretty simple idea for long and
    now lacks for refactoring. It is not structured, has nested loops and a
    set of opaque-named variables.

    Things are more complicated because bitmap_parselist() is a part of user
    interface, and its behavior should not change.

    In this patchset
    - bitmap_parselist_user() made a wrapper on bitmap_parselist();
    - bitmap_parselist() reworked (patch 2);
    - time measurement in test_bitmap_parselist switched to ktime_get
    (patch 3);
    - new tests introduced (patch 4), and
    - bitmap_parselist_user() testing enabled with the same testset as
    bitmap_parselist() (patch 5).

    This patch (of 5):

    Currently we parse user data byte after byte which leads to
    overcomplification of parsing algorithm. The only user of
    bitmap_parselist_user() is not performance-critical, and so we can
    duplicate user data to kernel buffer and simply call bitmap_parselist().
    This rework lets us unify and simplify bitmap_parselist() and
    bitmap_parselist_user(), which is done in the following patch.

    Link: http://lkml.kernel.org/r/20190405173211.11373-2-ynorov@marvell.com
    Signed-off-by: Yury Norov
    Reviewed-by: Andy Shevchenko
    Cc: Rasmus Villemoes
    Cc: Arnd Bergmann
    Cc: Kees Cook
    Cc: Matthew Wilcox
    Cc: Tetsuo Handa
    Cc: Mike Travis
    Cc: Guenter Roeck
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Yury Norov
     
  • The integer exponentiation is used in few places and might be used in
    the future by other call sites. Move it to wider use.

    Link: http://lkml.kernel.org/r/20190323172531.80025-2-andriy.shevchenko@linux.intel.com
    Signed-off-by: Andy Shevchenko
    Cc: Daniel Thompson
    Cc: Lee Jones
    Cc: Ray Jui
    Cc: Thierry Reding
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andy Shevchenko
     
  • For better maintenance and expansion move the mathematic helpers to the
    separate folder.

    No functional change intended.

    Note, the int_sqrt() is not used as a part of lib, so, moved to regular
    obj.

    Link: http://lkml.kernel.org/r/20190323172531.80025-1-andriy.shevchenko@linux.intel.com
    Signed-off-by: Andy Shevchenko
    Signed-off-by: Mauro Carvalho Chehab
    Cc: Randy Dunlap
    Cc: Thierry Reding
    Cc: Lee Jones
    Cc: Daniel Thompson
    Cc: Ray Jui
    [mchehab+samsung@kernel.org: fix broken doc references for div64.c and gcd.c]
    Link: http://lkml.kernel.org/r/734f49bae5d4052b3c25691dfefad59bea2e5843.1555580999.git.mchehab+samsung@kernel.org
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andy Shevchenko
     
  • CONFIG_RETPOLINE has severely degraded indirect function call
    performance, so it's worth putting some effort into reducing the number
    of times cmp() is called.

    This patch avoids badly unbalanced merges on unlucky input sizes. It
    slightly increases the code size, but saves an average of 0.2*n calls to
    cmp().

    x86-64 code size 739 -> 803 bytes (+64)

    Unfortunately, there's not a lot of low-hanging fruit in a merge sort;
    it already performs only n*log2(n) - K*n + O(1) compares. The leading
    coefficient is already at the theoretical limit (log2(n!) corresponds to
    K=1.4427), so we're fighting over the linear term, and the best
    mergesort can do is K=1.2645, achieved when n is a power of 2.

    The differences between mergesort variants appear when n is *not* a
    power of 2; K is a function of the fractional part of log2(n). Top-down
    mergesort does best of all, achieving a minimum K=1.2408, and an average
    (over all sizes) K=1.248. However, that requires knowing the number of
    entries to be sorted ahead of time, and making a full pass over the
    input to count it conflicts with a second performance goal, which is
    cache blocking.

    Obviously, we have to read the entire list into L1 cache at some point,
    and performance is best if it fits. But if it doesn't fit, each full
    pass over the input causes a cache miss per element, which is
    undesirable.

    While textbooks explain bottom-up mergesort as a succession of merging
    passes, practical implementations do merging in depth-first order: as
    soon as two lists of the same size are available, they are merged. This
    allows as many merge passes as possible to fit into L1; only the final
    few merges force cache misses.

    This cache-friendly depth-first merge order depends on us merging the
    beginning of the input as much as possible before we've even seen the
    end of the input (and thus know its size).

    The simple eager merge pattern causes bad performance when n is just
    over a power of 2. If n=1028, the final merge is between 1024- and
    4-element lists, which is wasteful of comparisons. (This is actually
    worse on average than n=1025, because a 1204:1 merge will, on average,
    end after 512 compares, while 1024:4 will walk 4/5 of the list.)

    Because of this, bottom-up mergesort achieves K < 0.5 for such sizes,
    and has an average (over all sizes) K of around 1. (My experiments show
    K=1.01, while theory predicts K=0.965.)

    There are "worst-case optimal" variants of bottom-up mergesort which
    avoid this bad performance, but the algorithms given in the literature,
    such as queue-mergesort and boustrodephonic mergesort, depend on the
    breadth-first multi-pass structure that we are trying to avoid.

    This implementation is as eager as possible while ensuring that all
    merge passes are at worst 1:2 unbalanced. This achieves the same
    average K=1.207 as queue-mergesort, which is 0.2*n better then
    bottom-up, and only 0.04*n behind top-down mergesort.

    Specifically, defers merging two lists of size 2^k until it is known
    that there are 2^k additional inputs following. This ensures that the
    final uneven merges triggered by reaching the end of the input will be
    at worst 2:1. This will avoid cache misses as long as 3*2^k elements
    fit into the cache.

    (I confess to being more than a little bit proud of how clean this code
    turned out. It took a lot of thinking, but the resultant inner loop is
    very simple and efficient.)

    Refs:
    Bottom-up Mergesort: A Detailed Analysis
    Wolfgang Panny, Helmut Prodinger
    Algorithmica 14(4):340--354, October 1995
    https://doi.org/10.1007/BF01294131
    https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.6.5260

    The cost distribution of queue-mergesort, optimal mergesorts, and
    power-of-two rules
    Wei-Mei Chen, Hsien-Kuei Hwang, Gen-Huey Chen
    Journal of Algorithms 30(2); Pages 423--448, February 1999
    https://doi.org/10.1006/jagm.1998.0986
    https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.5380

    Queue-Mergesort
    Mordecai J. Golin, Robert Sedgewick
    Information Processing Letters, 48(5):253--259, 10 December 1993
    https://doi.org/10.1016/0020-0190(93)90088-q
    https://sci-hub.tw/10.1016/0020-0190(93)90088-Q

    Feedback from Rasmus Villemoes .

    Link: http://lkml.kernel.org/r/fd560853cc4dca0d0f02184ffa888b4c1be89abc.1552704200.git.lkml@sdf.org
    Signed-off-by: George Spelvin
    Acked-by: Andrey Abramov
    Acked-by: Rasmus Villemoes
    Reviewed-by: Andy Shevchenko
    Cc: Daniel Wagner
    Cc: Dave Chinner
    Cc: Don Mullis
    Cc: Geert Uytterhoeven
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    George Spelvin
     
  • Rather than a fixed-size array of pending sorted runs, use the ->prev
    links to keep track of things. This reduces stack usage, eliminates
    some ugly overflow handling, and reduces the code size.

    Also:
    * merge() no longer needs to handle NULL inputs, so simplify.
    * The same applies to merge_and_restore_back_links(), which is renamed
    to the less ponderous merge_final(). (It's a static helper function,
    so we don't need a super-descriptive name; comments will do.)
    * Document the actual return value requirements on the (*cmp)()
    function; some callers are already using this feature.

    x86-64 code size 1086 -> 739 bytes (-347)

    (Yes, I see checkpatch complaining about no space after comma in
    "__attribute__((nonnull(2,3,4,5)))". Checkpatch is wrong.)

    Feedback from Rasmus Villemoes, Andy Shevchenko and Geert Uytterhoeven.

    [akpm@linux-foundation.org: remove __pure usage due to mysterious warning]
    Link: http://lkml.kernel.org/r/f63c410e0ff76009c9b58e01027e751ff7fdb749.1552704200.git.lkml@sdf.org
    Signed-off-by: George Spelvin
    Acked-by: Andrey Abramov
    Acked-by: Rasmus Villemoes
    Reviewed-by: Andy Shevchenko
    Cc: Geert Uytterhoeven
    Cc: Daniel Wagner
    Cc: Dave Chinner
    Cc: Don Mullis
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    George Spelvin
     
  • Similar to what's being done in the net code, this takes advantage of
    the fact that most invocations use only a few common swap functions, and
    replaces indirect calls to them with (highly predictable) conditional
    branches. (The downside, of course, is that if you *do* use a custom
    swap function, there are a few extra predicted branches on the code
    path.)

    This actually *shrinks* the x86-64 code, because it inlines the various
    swap functions inside do_swap, eliding function prologues & epilogues.

    x86-64 code size 767 -> 703 bytes (-64)

    Link: http://lkml.kernel.org/r/d10c5d4b393a1847f32f5b26f4bbaa2857140e1e.1552704200.git.lkml@sdf.org
    Signed-off-by: George Spelvin
    Acked-by: Andrey Abramov
    Acked-by: Rasmus Villemoes
    Reviewed-by: Andy Shevchenko
    Cc: Daniel Wagner
    Cc: Dave Chinner
    Cc: Don Mullis
    Cc: Geert Uytterhoeven
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    George Spelvin
     
  • This uses fewer comparisons than the previous code (approaching half as
    many for large random inputs), but produces identical results; it
    actually performs the exact same series of swap operations.

    Specifically, it reduces the average number of compares from
    2*n*log2(n) - 3*n + o(n)
    to
    n*log2(n) + 0.37*n + o(n).

    This is still 1.63*n worse than glibc qsort() which manages n*log2(n) -
    1.26*n, but at least the leading coefficient is correct.

    Standard heapsort, when sifting down, performs two comparisons per
    level: one to find the greater child, and a second to see if the current
    node should be exchanged with that child.

    Bottom-up heapsort observes that it's better to postpone the second
    comparison and search for the leaf where -infinity would be sent to,
    then search back *up* for the current node's destination.

    Since sifting down usually proceeds to the leaf level (that's where half
    the nodes are), this does O(1) second comparisons rather than log2(n).
    That saves a lot of (expensive since Spectre) indirect function calls.

    The one time it's worse than the previous code is if there are large
    numbers of duplicate keys, when the top-down algorithm is O(n) and
    bottom-up is O(n log n). For distinct keys, it's provably always
    better, doing 1.5*n*log2(n) + O(n) in the worst case.

    (The code is not significantly more complex. This patch also merges the
    heap-building and -extracting sift-down loops, resulting in a net code
    size savings.)

    x86-64 code size 885 -> 767 bytes (-118)

    (I see the checkpatch complaint about "else if (n -= size)". The
    alternative is significantly uglier.)

    Link: http://lkml.kernel.org/r/2de8348635a1a421a72620677898c7fd5bd4b19d.1552704200.git.lkml@sdf.org
    Signed-off-by: George Spelvin
    Acked-by: Andrey Abramov
    Acked-by: Rasmus Villemoes
    Reviewed-by: Andy Shevchenko
    Cc: Daniel Wagner
    Cc: Dave Chinner
    Cc: Don Mullis
    Cc: Geert Uytterhoeven
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    George Spelvin
     
  • Patch series "lib/sort & lib/list_sort: faster and smaller", v2.

    Because CONFIG_RETPOLINE has made indirect calls much more expensive, I
    thought I'd try to reduce the number made by the library sort functions.

    The first three patches apply to lib/sort.c.

    Patch #1 is a simple optimization. The built-in swap has special cases
    for aligned 4- and 8-byte objects. But those are almost never used;
    most calls to sort() work on larger structures, which fall back to the
    byte-at-a-time loop. This generalizes them to aligned *multiples* of 4
    and 8 bytes. (If nothing else, it saves an awful lot of energy by not
    thrashing the store buffers as much.)

    Patch #2 grabs a juicy piece of low-hanging fruit. I agree that nice
    simple solid heapsort is preferable to more complex algorithms (sorry,
    Andrey), but it's possible to implement heapsort with far fewer
    comparisons (50% asymptotically, 25-40% reduction for realistic sizes)
    than the way it's been done up to now. And with some care, the code
    ends up smaller, as well. This is the "big win" patch.

    Patch #3 adds the same sort of indirect call bypass that has been added
    to the net code of late. The great majority of the callers use the
    builtin swap functions, so replace the indirect call to sort_func with a
    (highly preditable) series of if() statements. Rather surprisingly,
    this decreased code size, as the swap functions were inlined and their
    prologue & epilogue code eliminated.

    lib/list_sort.c is a bit trickier, as merge sort is already close to
    optimal, and we don't want to introduce triumphs of theory over
    practicality like the Ford-Johnson merge-insertion sort.

    Patch #4, without changing the algorithm, chops 32% off the code size
    and removes the part[MAX_LIST_LENGTH+1] pointer array (and the
    corresponding upper limit on efficiently sortable input size).

    Patch #5 improves the algorithm. The previous code is already optimal
    for power-of-two (or slightly smaller) size inputs, but when the input
    size is just over a power of 2, there's a very unbalanced final merge.

    There are, in the literature, several algorithms which solve this, but
    they all depend on the "breadth-first" merge order which was replaced by
    commit 835cc0c8477f with a more cache-friendly "depth-first" order.
    Some hard thinking came up with a depth-first algorithm which defers
    merges as little as possible while avoiding bad merges. This saves
    0.2*n compares, averaged over all sizes.

    The code size increase is minimal (64 bytes on x86-64, reducing the net
    savings to 26%), but the comments expanded significantly to document the
    clever algorithm.

    TESTING NOTES: I have some ugly user-space benchmarking code which I
    used for testing before moving this code into the kernel. Shout if you
    want a copy.

    I'm running this code right now, with CONFIG_TEST_SORT and
    CONFIG_TEST_LIST_SORT, but I confess I haven't rebooted since the last
    round of minor edits to quell checkpatch. I figure there will be at
    least one round of comments and final testing.

    This patch (of 5):

    Rather than having special-case swap functions for 4- and 8-byte
    objects, special-case aligned multiples of 4 or 8 bytes. This speeds up
    most users of sort() by avoiding fallback to the byte copy loop.

    Despite what ca96ab859ab4 ("lib/sort: Add 64 bit swap function") claims,
    very few users of sort() sort pointers (or pointer-sized objects); most
    sort structures containing at least two words. (E.g.
    drivers/acpi/fan.c:acpi_fan_get_fps() sorts an array of 40-byte struct
    acpi_fan_fps.)

    The functions also got renamed to reflect the fact that they support
    multiple words. In the great tradition of bikeshedding, the names were
    by far the most contentious issue during review of this patch series.

    x86-64 code size 872 -> 886 bytes (+14)

    With feedback from Andy Shevchenko, Rasmus Villemoes and Geert
    Uytterhoeven.

    Link: http://lkml.kernel.org/r/f24f932df3a7fa1973c1084154f1cea596bcf341.1552704200.git.lkml@sdf.org
    Signed-off-by: George Spelvin
    Acked-by: Andrey Abramov
    Acked-by: Rasmus Villemoes
    Reviewed-by: Andy Shevchenko
    Cc: Rasmus Villemoes
    Cc: Geert Uytterhoeven
    Cc: Daniel Wagner
    Cc: Don Mullis
    Cc: Dave Chinner
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    George Spelvin
     
  • This is a lot more appropriate than PI_LIST, which in the kernel one
    would assume that it has to do with priority-inheritance; which is not
    -- furthermore futexes make use of plists so this can be even more
    confusing, albeit the debug nature of the config option.

    Link: http://lkml.kernel.org/r/20190317185434.1626-1-dave@stgolabs.net
    Signed-off-by: Davidlohr Bueso
    Reviewed-by: Andrew Morton
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Davidlohr Bueso
     
  • The bitmap_remap, _bitremap, _onto and _fold functions are only used,
    via their node_ wrappers, in mm/mempolicy.c, which is only built for
    CONFIG_NUMA. The helper bitmap_ord_to_pos used by these functions is
    global, but its only external caller is node_random() in lib/nodemask.c,
    which is also guarded by CONFIG_NUMA.

    For !CONFIG_NUMA:

    add/remove: 0/6 grow/shrink: 0/0 up/down: 0/-621 (-621)
    Function old new delta
    bitmap_pos_to_ord 20 - -20
    bitmap_ord_to_pos 70 - -70
    bitmap_bitremap 81 - -81
    bitmap_fold 113 - -113
    bitmap_onto 123 - -123
    bitmap_remap 214 - -214
    Total: Before=4776, After=4155, chg -13.00%

    Link: http://lkml.kernel.org/r/20190329205353.6010-2-linux@rasmusvillemoes.dk
    Signed-off-by: Rasmus Villemoes
    Cc: Andy Shevchenko
    Cc: Yury Norov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rasmus Villemoes
     
  • AFAICT, there have never been any callers of these functions outside
    mm/mempolicy.c (via their nodemask.h wrappers). In particular, no
    modular code has ever used them, and given their somewhat exotic
    semantics, I highly doubt they will ever find such a use. In any case,
    no need to export them currently.

    Link: http://lkml.kernel.org/r/20190329205353.6010-1-linux@rasmusvillemoes.dk
    Signed-off-by: Rasmus Villemoes
    Cc: Andy Shevchenko
    Cc: Yury Norov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rasmus Villemoes
     
  • Commit 60a3cdd06394 ("x86: add optimized inlining") introduced
    CONFIG_OPTIMIZE_INLINING, but it has been available only for x86.

    The idea is obviously arch-agnostic. This commit moves the config entry
    from arch/x86/Kconfig.debug to lib/Kconfig.debug so that all
    architectures can benefit from it.

    This can make a huge difference in kernel image size especially when
    CONFIG_OPTIMIZE_FOR_SIZE is enabled.

    For example, I got 3.5% smaller arm64 kernel for v5.1-rc1.

    dec file
    18983424 arch/arm64/boot/Image.before
    18321920 arch/arm64/boot/Image.after

    This also slightly improves the "Kernel hacking" Kconfig menu as
    e61aca5158a8 ("Merge branch 'kconfig-diet' from Dave Hansen') suggested;
    this config option would be a good fit in the "compiler option" menu.

    Link: http://lkml.kernel.org/r/20190423034959.13525-12-yamada.masahiro@socionext.com
    Signed-off-by: Masahiro Yamada
    Acked-by: Borislav Petkov
    Cc: Arnd Bergmann
    Cc: Benjamin Herrenschmidt
    Cc: Boris Brezillon
    Cc: Brian Norris
    Cc: Christophe Leroy
    Cc: David Woodhouse
    Cc: Heiko Carstens
    Cc: "H. Peter Anvin"
    Cc: Ingo Molnar
    Cc: Marek Vasut
    Cc: Mark Rutland
    Cc: Mathieu Malaterre
    Cc: Miquel Raynal
    Cc: Paul Mackerras
    Cc: Ralf Baechle
    Cc: Richard Weinberger
    Cc: Russell King
    Cc: Stefan Agner
    Cc: Thomas Gleixner
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Masahiro Yamada
     
  • To facilitate additional options to get_user_pages_fast() change the
    singular write parameter to be gup_flags.

    This patch does not change any functionality. New functionality will
    follow in subsequent patches.

    Some of the get_user_pages_fast() call sites were unchanged because they
    already passed FOLL_WRITE or 0 for the write parameter.

    NOTE: It was suggested to change the ordering of the get_user_pages_fast()
    arguments to ensure that callers were converted. This breaks the current
    GUP call site convention of having the returned pages be the final
    parameter. So the suggestion was rejected.

    Link: http://lkml.kernel.org/r/20190328084422.29911-4-ira.weiny@intel.com
    Link: http://lkml.kernel.org/r/20190317183438.2057-4-ira.weiny@intel.com
    Signed-off-by: Ira Weiny
    Reviewed-by: Mike Marshall
    Cc: Aneesh Kumar K.V
    Cc: Benjamin Herrenschmidt
    Cc: Borislav Petkov
    Cc: Dan Williams
    Cc: "David S. Miller"
    Cc: Heiko Carstens
    Cc: Ingo Molnar
    Cc: James Hogan
    Cc: Jason Gunthorpe
    Cc: John Hubbard
    Cc: "Kirill A. Shutemov"
    Cc: Martin Schwidefsky
    Cc: Michal Hocko
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Ralf Baechle
    Cc: Rich Felker
    Cc: Thomas Gleixner
    Cc: Yoshinori Sato
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ira Weiny
     

13 May, 2019

1 commit

  • Remove an unnecessary arch complication:

    arch/x86/include/asm/arch_hweight.h uses __sw_hweight{32,64} as
    alternatives, and they are implemented in arch/x86/lib/hweight.S

    x86 does not rely on the generic C implementation lib/hweight.c
    at all, so CONFIG_GENERIC_HWEIGHT should be disabled.

    __HAVE_ARCH_SW_HWEIGHT is not necessary either.

    No change in functionality intended.

    Signed-off-by: Masahiro Yamada
    Cc: Borislav Petkov
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: Uros Bizjak
    Link: http://lkml.kernel.org/r/1557665521-17570-1-git-send-email-yamada.masahiro@socionext.com
    Signed-off-by: Ingo Molnar

    Masahiro Yamada
     

11 May, 2019

1 commit


10 May, 2019

2 commits

  • The commit 3e5903eb9cff70730 ("vsprintf: Prevent crash when dereferencing
    invalid pointers") broke boot on several architectures. The common
    pattern is that probe_kernel_read() is not working during early
    boot because userspace access framework is not ready.

    It is a generic problem. We have to avoid any complex external
    functions in vsprintf() code, especially in the common path.
    They might break printk() easily and are hard to debug.

    Replace probe_kernel_read() with some simple checks for obvious
    problems.

    Details:

    1. Report on Power:

    Kernel crashes very early during boot with with CONFIG_PPC_KUAP and
    CONFIG_JUMP_LABEL_FEATURE_CHECK_DEBUG

    The problem is the combination of some new code called via printk(),
    check_pointer() which calls probe_kernel_read(). That then calls
    allow_user_access() (PPC_KUAP) and that uses mmu_has_feature() too early
    (before we've patched features). With the JUMP_LABEL debug enabled that
    causes us to call printk() & dump_stack() and we end up recursing and
    overflowing the stack.

    Because it happens so early you don't get any output, just an apparently
    dead system.

    The stack trace (which you don't see) is something like:

    ...
    dump_stack+0xdc
    probe_kernel_read+0x1a4
    check_pointer+0x58
    string+0x3c
    vsnprintf+0x1bc
    vscnprintf+0x20
    printk_safe_log_store+0x7c
    printk+0x40
    dump_stack_print_info+0xbc
    dump_stack+0x8
    probe_kernel_read+0x1a4
    probe_kernel_read+0x19c
    check_pointer+0x58
    string+0x3c
    vsnprintf+0x1bc
    vscnprintf+0x20
    vprintk_store+0x6c
    vprintk_emit+0xec
    vprintk_func+0xd4
    printk+0x40
    cpufeatures_process_feature+0xc8
    scan_cpufeatures_subnodes+0x380
    of_scan_flat_dt_subnodes+0xb4
    dt_cpu_ftrs_scan_callback+0x158
    of_scan_flat_dt+0xf0
    dt_cpu_ftrs_scan+0x3c
    early_init_devtree+0x360
    early_setup+0x9c

    2. Report on s390:

    vsnprintf invocations, are broken on s390. For example, the early boot
    output now looks like this where the first (efault) should be
    the linux_banner:

    [ 0.099985] (efault)
    [ 0.099985] setup: Linux is running as a z/VM guest operating system in 64-bit mode
    [ 0.100066] setup: The maximum memory size is 8192MB
    [ 0.100070] cma: Reserved 4 MiB at (efault)
    [ 0.100100] numa: NUMA mode: (efault)

    The reason for this, is that the code assumes that
    probe_kernel_address() works very early. This however is not true on
    at least s390. Uaccess on KERNEL_DS works only after page tables have
    been setup on s390, which happens with setup_arch()->paging_init().

    Any probe_kernel_address() invocation before that will return -EFAULT.

    Fixes: 3e5903eb9cff70730 ("vsprintf: Prevent crash when dereferencing invalid pointers")
    Link: http://lkml.kernel.org/r/20190510084213.22149-1-pmladek@suse.com
    Cc: Andy Shevchenko
    Cc: Rasmus Villemoes
    Cc: "Tobin C . Harding"
    Cc: Michal Hocko
    Cc: Sergey Senozhatsky
    Cc: Steven Rostedt
    Cc: linux-kernel@vger.kernel.org
    Cc: Michael Ellerman
    Cc: linuxppc-dev@lists.ozlabs.org
    Cc: Russell Currey
    Cc: Christophe Leroy
    Cc: Stephen Rothwell
    Cc: Heiko Carstens
    Cc: linux-arch@vger.kernel.org
    Cc: linux-s390@vger.kernel.org
    Cc: Martin Schwidefsky
    Cc: Petr Mladek
    Reviewed-by: Sergey Senozhatsky
    Signed-off-by: Petr Mladek

    Petr Mladek
     
  • Pull rdma updates from Jason Gunthorpe:
    "This has been a smaller cycle than normal. One new driver was
    accepted, which is unusual, and at least one more driver remains in
    review on the list.

    Summary:

    - Driver fixes for hns, hfi1, nes, rxe, i40iw, mlx5, cxgb4,
    vmw_pvrdma

    - Many patches from MatthewW converting radix tree and IDR users to
    use xarray

    - Introduction of tracepoints to the MAD layer

    - Build large SGLs at the start for DMA mapping and get the driver to
    split them

    - Generally clean SGL handling code throughout the subsystem

    - Support for restricting RDMA devices to net namespaces for
    containers

    - Progress to remove object allocation boilerplate code from drivers

    - Change in how the mlx5 driver shows representor ports linked to VFs

    - mlx5 uapi feature to access the on chip SW ICM memory

    - Add a new driver for 'EFA'. This is HW that supports user space
    packet processing through QPs in Amazon's cloud"

    * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: (186 commits)
    RDMA/ipoib: Allow user space differentiate between valid dev_port
    IB/core, ipoib: Do not overreact to SM LID change event
    RDMA/device: Don't fire uevent before device is fully initialized
    lib/scatterlist: Remove leftover from sg_page_iter comment
    RDMA/efa: Add driver to Kconfig/Makefile
    RDMA/efa: Add the efa module
    RDMA/efa: Add EFA verbs implementation
    RDMA/efa: Add common command handlers
    RDMA/efa: Implement functions that submit and complete admin commands
    RDMA/efa: Add the ABI definitions
    RDMA/efa: Add the com service API definitions
    RDMA/efa: Add the efa_com.h file
    RDMA/efa: Add the efa.h header file
    RDMA/efa: Add EFA device definitions
    RDMA: Add EFA related definitions
    RDMA/umem: Remove hugetlb flag
    RDMA/bnxt_re: Use core helpers to get aligned DMA address
    RDMA/i40iw: Use core helpers to get aligned DMA address within a supported page size
    RDMA/verbs: Add a DMA iterator to return aligned contiguous memory blocks
    RDMA/umem: Add API to find best driver supported page size in an MR
    ...

    Linus Torvalds