13 Jan, 2021

40 commits

  • [ Upstream commit cedd1862be7e666be87ec824dabc6a2b05618f36 ]

    Commit 436e980e2ed5 ("kbuild: don't hardcode depmod path") stopped
    hard-coding the path of depmod, but in the process caused trouble for
    distributions that had that /sbin location, but didn't have it in the
    PATH (generally because /sbin is limited to the super-user path).

    Work around it for now by just adding /sbin to the end of PATH in the
    depmod.sh script.

    Reported-and-tested-by: Sedat Dilek
    Signed-off-by: Linus Torvalds
    Signed-off-by: Sasha Levin

    Linus Torvalds
     
  • [ Upstream commit 36845663843fc59c5d794e3dc0641472e3e572da ]

    Some graphic card has very big memory on chip, such as 32G bytes.

    In the following case, it will cause overflow:

    pool = gen_pool_create(PAGE_SHIFT, NUMA_NO_NODE);
    ret = gen_pool_add(pool, 0x1000000, SZ_32G, NUMA_NO_NODE);

    va = gen_pool_alloc(pool, SZ_4G);

    The overflow occurs in gen_pool_alloc_algo_owner():

    ....
    size = nbits << order;
    ....

    The @nbits is "int" type, so it will overflow.
    Then the gen_pool_avail() will return the wrong value.

    This patch converts some "int" to "unsigned long", and
    changes the compare code in while.

    Link: https://lkml.kernel.org/r/20201229060657.3389-1-sjhuang@iluvatar.ai
    Signed-off-by: Huang Shijie
    Reported-by: Shi Jiasheng
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Sasha Levin

    Huang Shijie
     
  • [ Upstream commit 87dbc209ea04645fd2351981f09eff5d23f8e2e9 ]

    Make mandatory in include/asm-generic/Kbuild and
    remove all arch/*/include/asm/local64.h arch-specific files since they
    only #include .

    This fixes build errors on arch/c6x/ and arch/nios2/ for
    block/blk-iocost.c.

    Build-tested on 21 of 25 arch-es. (tools problems on the others)

    Yes, we could even rename to
    and change all #includes to use
    instead.

    Link: https://lkml.kernel.org/r/20201227024446.17018-1-rdunlap@infradead.org
    Signed-off-by: Randy Dunlap
    Suggested-by: Christoph Hellwig
    Reviewed-by: Masahiro Yamada
    Cc: Jens Axboe
    Cc: Ley Foon Tan
    Cc: Mark Salter
    Cc: Aurelien Jacquiot
    Cc: Peter Zijlstra
    Cc: Arnd Bergmann
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Sasha Levin

    Randy Dunlap
     
  • [ Upstream commit e6044f714b256259df9611ff49af433e5411c5c8 ]

    Instead of submitting all SCSI commands submitted with scsi_execute() to a
    SCSI device if rpm_status != RPM_ACTIVE, only submit RQF_PM (power
    management requests) if rpm_status != RPM_ACTIVE. This patch makes the SCSI
    core handle the runtime power management status (rpm_status) as it should
    be handled.

    Link: https://lore.kernel.org/r/20201209052951.16136-7-bvanassche@acm.org
    Cc: Can Guo
    Cc: Stanley Chu
    Cc: Alan Stern
    Cc: Ming Lei
    Cc: Rafael J. Wysocki
    Cc: Martin Kepplinger
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Reviewed-by: Jens Axboe
    Reviewed-by: Can Guo
    Signed-off-by: Bart Van Assche
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin

    Bart Van Assche
     
  • [ Upstream commit cfefd9f8240a7b9fdd96fcd54cb029870b6d8d88 ]

    Disable runtime power management during domain validation. Since a later
    patch removes RQF_PREEMPT, set RQF_PM for domain validation commands such
    that these are executed in the quiesced SCSI device state.

    Link: https://lore.kernel.org/r/20201209052951.16136-6-bvanassche@acm.org
    Cc: Alan Stern
    Cc: James Bottomley
    Cc: Woody Suwalski
    Cc: Can Guo
    Cc: Stanley Chu
    Cc: Ming Lei
    Cc: Rafael J. Wysocki
    Cc: Stan Johnson
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Jens Axboe
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Bart Van Assche
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin

    Bart Van Assche
     
  • [ Upstream commit 5ae65383fc7633e0247c31b0c8bf0e6ea63b95a3 ]

    This is another step that prepares for the removal of RQF_PREEMPT.

    Link: https://lore.kernel.org/r/20201209052951.16136-5-bvanassche@acm.org
    Cc: David S. Miller
    Cc: Alan Stern
    Cc: Can Guo
    Cc: Stanley Chu
    Cc: Ming Lei
    Cc: Rafael J. Wysocki
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Reviewed-by: Jens Axboe
    Signed-off-by: Bart Van Assche
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin

    Bart Van Assche
     
  • [ Upstream commit 96d86e6a80a3ab9aff81d12f9f1f2a0da2917d38 ]

    RQF_PREEMPT is used for two different purposes in the legacy IDE code:

    1. To mark power management requests.

    2. To mark requests that should preempt another request. An (old)
    explanation of that feature is as follows: "The IDE driver in the Linux
    kernel normally uses a series of busywait delays during its
    initialization. When the driver executes these busywaits, the kernel
    does nothing for the duration of the wait. The time spent in these
    waits could be used for other initialization activities, if they could
    be run concurrently with these waits.

    More specifically, busywait-style delays such as udelay() in module
    init functions inhibit kernel preemption because the Big Kernel Lock is
    held, while yielding APIs such as schedule_timeout() allow
    preemption. This is true because the kernel handles the BKL specially
    and releases and reacquires it across reschedules allowed by the
    current thread.

    This IDE-preempt specification requires that the driver eliminate these
    busywaits and replace them with a mechanism that allows other work to
    proceed while the IDE driver is initializing."

    Since I haven't found an implementation of (2), do not set the PREEMPT flag
    for sense requests. This patch causes sense requests to be postponed while
    a drive is suspended instead of being submitted to ide_queue_rq().

    If it would ever be necessary to restore the IDE PREEMPT functionality,
    that can be done by introducing a new flag in struct ide_request.

    Link: https://lore.kernel.org/r/20201209052951.16136-4-bvanassche@acm.org
    Cc: David S. Miller
    Cc: Alan Stern
    Cc: Can Guo
    Cc: Stanley Chu
    Cc: Ming Lei
    Cc: Rafael J. Wysocki
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Reviewed-by: Jens Axboe
    Signed-off-by: Bart Van Assche
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin

    Bart Van Assche
     
  • [ Upstream commit 0854bcdcdec26aecdc92c303816f349ee1fba2bc ]

    Introduce the BLK_MQ_REQ_PM flag. This flag makes the request allocation
    functions set RQF_PM. This is the first step towards removing
    BLK_MQ_REQ_PREEMPT.

    Link: https://lore.kernel.org/r/20201209052951.16136-3-bvanassche@acm.org
    Cc: Alan Stern
    Cc: Stanley Chu
    Cc: Ming Lei
    Cc: Rafael J. Wysocki
    Cc: Can Guo
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Reviewed-by: Jens Axboe
    Reviewed-by: Can Guo
    Signed-off-by: Bart Van Assche
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin

    Bart Van Assche
     
  • [ Upstream commit dd78bdb6f810bdcb173b42379af558c676c8e0aa ]

    Enable runtime PM auto-suspend by default for Intel host controllers.

    Link: https://lore.kernel.org/r/20201207083120.26732-5-adrian.hunter@intel.com
    Signed-off-by: Adrian Hunter
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin

    Adrian Hunter
     
  • [ Upstream commit 044d5bda7117891d6d0d56f2f807b7b11e120abd ]

    Intel controllers can end up in an unrecoverable state after a hibernate
    exit error unless a full reset and restore is done before anything else.
    Force that to happen.

    Link: https://lore.kernel.org/r/20201207083120.26732-4-adrian.hunter@intel.com
    Signed-off-by: Adrian Hunter
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin

    Adrian Hunter
     
  • [ Upstream commit af423534d2de86cd0db729a5ac41f056ca8717de ]

    The expectation for suspend-to-disk is that devices will be powered-off, so
    the UFS device should be put in PowerDown mode. If spm_lvl is not 5, then
    that will not happen. Change the pm callbacks to force spm_lvl 5 for
    suspend-to-disk poweroff.

    Link: https://lore.kernel.org/r/20201207083120.26732-3-adrian.hunter@intel.com
    Signed-off-by: Adrian Hunter
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin

    Adrian Hunter
     
  • [ Upstream commit c763729a10e538d997744317cf4a1c4f25266066 ]

    Currently, ufshcd-pci is the only UFS driver with support for
    suspend-to-disk PM callbacks (i.e. freeze/thaw/restore/poweroff). These
    callbacks are set by the macro SET_SYSTEM_SLEEP_PM_OPS to the same
    functions as system suspend/resume. That will work with spm_lvl 5 because
    spm_lvl 5 will result in a full restore for the ->restore() callback. In
    the absence of a full restore, the host controller registers will have
    values set up by the restore kernel (the kernel that boots and loads the
    restore image) which are not necessarily the same. However it turns out,
    the only registers that sometimes need restore are the base address
    registers. This has gone un-noticed because, depending on IOMMU settings,
    the kernel can end up allocating the same addresses every time.

    For Intel controllers, an spm_lvl other than 5 can be used, so to support
    S4 (suspend-to-disk) with spm_lvl other than 5, restore the base address
    registers.

    Link: https://lore.kernel.org/r/20201207083120.26732-2-adrian.hunter@intel.com
    Signed-off-by: Adrian Hunter
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin

    Adrian Hunter
     
  • [ Upstream commit 1fa0570002e3f66db9b58c32c60de4183b857a19 ]

    Change dev_err() print message from "dme-reset" to "dme_enable" in function
    ufshcd_dme_enable().

    Link: https://lore.kernel.org/r/20201207190137.6858-3-huobean@gmail.com
    Acked-by: Alim Akhtar
    Acked-by: Avri Altman
    Signed-off-by: Bean Huo
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin

    Bean Huo
     
  • [ Upstream commit 01341fbd0d8d4e717fc1231cdffe00343088ce0b ]

    In realtime scenario, We do not want to have interference on the
    isolated cpu cores. but when invoking alloc_workqueue() for percpu wq
    on the housekeeping cpu, it kick a kworker on the isolated cpu.

    alloc_workqueue
    pwq_adjust_max_active
    wake_up_worker

    The comment in pwq_adjust_max_active() said:
    "Need to kick a worker after thawed or an unbound wq's
    max_active is bumped"

    So it is unnecessary to kick a kworker for percpu's wq when invoking
    alloc_workqueue(). this patch only kick a worker based on the actual
    activation of delayed works.

    Signed-off-by: Yunfeng Ye
    Reviewed-by: Lai Jiangshan
    Signed-off-by: Tejun Heo
    Signed-off-by: Sasha Levin

    Yunfeng Ye
     
  • [ Upstream commit dc30432605bbbd486dfede3852ea4d42c40a84b4 ]

    This was missed in 021a24460dc2. Leads to the numeric value of
    QUEUE_FLAG_NOWAIT (i.e. 29) showing up in
    /sys/kernel/debug/block/*/state.

    Fixes: 021a24460dc28e7412aecfae89f60e1847e685c0
    Cc: Konstantin Khlebnikov
    Cc: Mike Snitzer
    Cc: Christoph Hellwig
    Cc: Jens Axboe
    Signed-off-by: Andres Freund
    Signed-off-by: Jens Axboe
    Signed-off-by: Sasha Levin

    Andres Freund
     
  • [ Upstream commit 7cf22a1c88c05ea3807f95b1edfebb729016ae52 ]

    Commit d8cbe8bfa7d ("tools/testing/selftests/vm: fix build error") tried
    to include a ARCH check for powerpc, however ARCH is not defined in the
    Makefile before including lib.mk. This makes test building to skip on
    both x86 and powerpc.

    Fix the arch check by replacing it using machine type as it is already
    defined and used in the test.

    Link: https://lkml.kernel.org/r/20201215100402.257376-1-harish@linux.ibm.com
    Fixes: d8cbe8bfa7d ("tools/testing/selftests/vm: fix build error")
    Signed-off-by: Harish
    Reviewed-by: Sandipan Das
    Cc: Shuah Khan
    Cc: Sandipan Das
    Cc: John Hubbard
    Cc: Dave Hansen
    Cc: Kirill A. Shutemov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Sasha Levin

    Harish
     
  • [ Upstream commit 8450e23f142f629e40bd67afc8375c86c7fbf8f1 ]

    Add TGL-H PCI info and PCI IDs for the new TSN Controller to the list
    of supported devices.

    Signed-off-by: Noor Azura Ahmad Tarmizi
    Signed-off-by: Voon Weifeng
    Signed-off-by: Muhammad Husaini Zulkifli
    Link: https://lore.kernel.org/r/20201222160337.30870-1-muhammad.husaini.zulkifli@intel.com
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Greg Kroah-Hartman

    Noor Azura Ahmad Tarmizi
     
  • [ Upstream commit 2ff2c7e274392871bfdee00ff2adbb8ebae5d240 ]

    The test was setting the headroom size of the wrong port. This was not
    visible because of a firmware bug that canceled this bug.

    Set the headroom size of the correct port, so that the test will pass
    with both old and new firmware versions.

    Fixes: bfa804784e32 ("selftests: mlxsw: Add a PFC test")
    Signed-off-by: Ido Schimmel
    Reviewed-by: Petr Machata
    Link: https://lore.kernel.org/r/20201230114251.394009-1-idosch@idosch.org
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Greg Kroah-Hartman

    Ido Schimmel
     
  • [ Upstream commit cfd82dfc9799c53ef109343a23af006a0f6860a9 ]

    New modem using ff/ff/30 for QCDM, ff/00/00 for AT and NMEA,
    and ff/ff/ff for RMNET/QMI.

    T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=5000 MxCh= 0
    D: Ver= 3.20 Cls=ef(misc ) Sub=02 Prot=01 MxPS= 9 #Cfgs= 1
    P: Vendor=2c7c ProdID=0620 Rev= 4.09
    S: Manufacturer=Quectel
    S: Product=EM160R-GL
    S: SerialNumber=e31cedc1
    C:* #Ifs= 5 Cfg#= 1 Atr=a0 MxPwr=896mA
    I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=(none)
    E: Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E: Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
    E: Ad=83(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
    E: Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E: Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
    E: Ad=85(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
    E: Ad=84(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E: Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
    E: Ad=87(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
    E: Ad=86(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E: Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
    E: Ad=88(I) Atr=03(Int.) MxPS= 8 Ivl=32ms
    E: Ad=8e(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E: Ad=0f(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms

    Signed-off-by: Bjørn Mork
    Link: https://lore.kernel.org/r/20201230152451.245271-1-bjorn@mork.no
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Greg Kroah-Hartman

    Bjørn Mork
     
  • [ Upstream commit 862aecbd9569e563b979c0e23a908b43cda4b0b9 ]

    The error is due to dereference a null pointer in function
    reset_one_sub_crq_queue():

    if (!scrq) {
    netdev_dbg(adapter->netdev,
    "Invalid scrq reset. irq (%d) or msgs(%p).\n",
    scrq->irq, scrq->msgs);
    return -EINVAL;
    }

    If the expression is true, scrq must be a null pointer and cannot
    dereference.

    Fixes: 9281cf2d5840 ("ibmvnic: avoid memset null scrq msgs")
    Signed-off-by: YANG LI
    Reported-by: Abaci
    Acked-by: Lijun Pan
    Link: https://lore.kernel.org/r/1609312994-121032-1-git-send-email-abaci-bugfix@linux.alibaba.com
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Greg Kroah-Hartman

    YANG LI
     
  • [ Upstream commit 59b4a8fa27f5a895582ada1ae5034af7c94a57b5 ]

    The cdc_ncm driver passes network connection notifications up to
    usbnet_link_change(), which is the right place for any logging.
    Remove the netdev_info() duplicating this from the driver itself.

    This stops devices such as my "TRENDnet USB 10/100/1G/2.5G LAN"
    (ID 20f4:e02b) adapter from spamming the kernel log with

    cdc_ncm 2-2:2.0 enp0s2u2c2: network connection: connected

    messages every 60 msec or so.

    Signed-off-by: Roland Dreier
    Reviewed-by: Greg Kroah-Hartman
    Link: https://lore.kernel.org/r/20201224032116.2453938-1-roland@kernel.org
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Greg Kroah-Hartman

    Roland Dreier
     
  • [ Upstream commit 709a3c9dff2a639966ae7d8ba6239d2b8aba036d ]

    There is one GSWIP_MII_CFG register for each switch-port except the CPU
    port. The register offset for the first port is 0x0, 0x02 for the
    second, 0x04 for the third and so on.

    Update the driver to not only restrict the GSWIP_MII_CFG registers to
    ports 0, 1 and 5. Handle ports 0..5 instead but skip the CPU port. This
    means we are not overwriting the configuration for the third port (port
    two since we start counting from zero) with the settings for the sixth
    port (with number five) anymore.

    The GSWIP_MII_PCDU(p) registers are not updated because there's really
    only three (one for each of the following ports: 0, 1, 5).

    Fixes: 14fceff4771e51 ("net: dsa: Add Lantiq / Intel DSA driver for vrx200")
    Signed-off-by: Martin Blumenstingl
    Acked-by: Hauke Mehrtens
    Reviewed-by: Florian Fainelli
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Greg Kroah-Hartman

    Martin Blumenstingl
     
  • [ Upstream commit c1a9ec7e5d577a9391660800c806c53287fca991 ]

    Enable GSWIP_MII_CFG_EN also for internal PHYs to make traffic flow.
    Without this the PHY link is detected properly and ethtool statistics
    for TX are increasing but there's no RX traffic coming in.

    Fixes: 14fceff4771e51 ("net: dsa: Add Lantiq / Intel DSA driver for vrx200")
    Suggested-by: Hauke Mehrtens
    Signed-off-by: Martin Blumenstingl
    Acked-by: Hauke Mehrtens
    Reviewed-by: Florian Fainelli
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Greg Kroah-Hartman

    Martin Blumenstingl
     
  • [ Upstream commit e80bd76fbf563cc7ed8c9e9f3bbcdf59b0897f69 ]

    A user reported failing network with RTL8168dp (a quite rare chip
    version). Realtek confirmed that few chip versions suffer from a PLL
    power-down hw bug.

    Fixes: 07df5bd874f0 ("r8169: power down chip in probe")
    Signed-off-by: Heiner Kallweit
    Link: https://lore.kernel.org/r/a1c39460-d533-7f9e-fa9d-2b8990b02426@gmail.com
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Greg Kroah-Hartman

    Heiner Kallweit
     
  • [ Upstream commit 01e31bea7e622f1890c274f4aaaaf8bccd296aa5 ]

    Currently the vhost_zerocopy_callback() maybe be called to decrease
    the refcount when sendmsg fails in tun. The error handling in vhost
    handle_tx_zerocopy() will try to decrease the same refcount again.
    This is wrong. To fix this issue, we only call vhost_net_ubuf_put()
    when vq->heads[nvq->desc].len == VHOST_DMA_IN_PROGRESS.

    Fixes: bab632d69ee4 ("vhost: vhost TX zero-copy support")
    Signed-off-by: Yunjian Wang
    Acked-by: Willem de Bruijn
    Acked-by: Michael S. Tsirkin
    Acked-by: Jason Wang
    Link: https://lore.kernel.org/r/1609207308-20544-1-git-send-email-wangyunjian@huawei.com
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Greg Kroah-Hartman

    Yunjian Wang
     
  • [ Upstream commit 10ad3e998fa0c25315f27cf3002ff8b02dc31c38 ]

    In the bareudp6_xmit_skb(), it calculates min_headroom.
    At that point, it uses struct iphdr, but it's not correct.
    So panic could occur.
    The struct ipv6hdr should be used.

    Test commands:
    ip netns add A
    ip netns add B
    ip link add veth0 netns A type veth peer name veth1 netns B
    ip netns exec A ip link set veth0 up
    ip netns exec A ip a a 2001:db8:0::1/64 dev veth0
    ip netns exec B ip link set veth1 up
    ip netns exec B ip a a 2001:db8:0::2/64 dev veth1

    for i in {10..1}
    do
    let A=$i-1
    ip netns exec A ip link add bareudp$i type bareudp dstport $i \
    ethertype 0x86dd
    ip netns exec A ip link set bareudp$i up
    ip netns exec A ip -6 a a 2001:db8:$i::1/64 dev bareudp$i
    ip netns exec A ip -6 r a 2001:db8:$i::2 encap ip6 src \
    2001:db8:$A::1 dst 2001:db8:$A::2 via 2001:db8:$i::2 \
    dev bareudp$i

    ip netns exec B ip link add bareudp$i type bareudp dstport $i \
    ethertype 0x86dd
    ip netns exec B ip link set bareudp$i up
    ip netns exec B ip -6 a a 2001:db8:$i::2/64 dev bareudp$i
    ip netns exec B ip -6 r a 2001:db8:$i::1 encap ip6 src \
    2001:db8:$A::2 dst 2001:db8:$A::1 via 2001:db8:$i::1 \
    dev bareudp$i
    done
    ip netns exec A ping 2001:db8:7::2

    Splat looks like:
    [ 66.436679][ C2] skbuff: skb_under_panic: text:ffffffff928614c8 len:454 put:14 head:ffff88810abb4000 data:ffff88810abb3ffa tail:0x1c0 end:0x3ec0 dev:veth0
    [ 66.441626][ C2] ------------[ cut here ]------------
    [ 66.443458][ C2] kernel BUG at net/core/skbuff.c:109!
    [ 66.445313][ C2] invalid opcode: 0000 [#1] SMP DEBUG_PAGEALLOC KASAN PTI
    [ 66.447606][ C2] CPU: 2 PID: 913 Comm: ping Not tainted 5.10.0+ #819
    [ 66.450251][ C2] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1ubuntu1 04/01/2014
    [ 66.453713][ C2] RIP: 0010:skb_panic+0x15d/0x15f
    [ 66.455345][ C2] Code: 98 fe 4c 8b 4c 24 10 53 8b 4d 70 45 89 e0 48 c7 c7 60 8b 78 93 41 57 41 56 41 55 48 8b 54 24 20 48 8b 74 24 28 e8 b5 40 f9 ff 0b 48 8b 6c 24 20 89 34 24 e8 08 c9 98 fe 8b 34 24 48 c7 c1 80
    [ 66.462314][ C2] RSP: 0018:ffff888119209648 EFLAGS: 00010286
    [ 66.464281][ C2] RAX: 0000000000000089 RBX: ffff888003159000 RCX: 0000000000000000
    [ 66.467216][ C2] RDX: 0000000000000089 RSI: 0000000000000008 RDI: ffffed10232412c0
    [ 66.469768][ C2] RBP: ffff88810a53d440 R08: ffffed102328018d R09: ffffed102328018d
    [ 66.472297][ C2] R10: ffff888119400c67 R11: ffffed102328018c R12: 000000000000000e
    [ 66.474833][ C2] R13: ffff88810abb3ffa R14: 00000000000001c0 R15: 0000000000003ec0
    [ 66.477361][ C2] FS: 00007f37c0c72f00(0000) GS:ffff888119200000(0000) knlGS:0000000000000000
    [ 66.480214][ C2] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 66.482296][ C2] CR2: 000055a058808570 CR3: 000000011039e002 CR4: 00000000003706e0
    [ 66.484811][ C2] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [ 66.487793][ C2] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [ 66.490424][ C2] Call Trace:
    [ 66.491469][ C2]
    [ 66.492374][ C2] ? eth_header+0x28/0x190
    [ 66.494054][ C2] ? eth_header+0x28/0x190
    [ 66.495401][ C2] skb_push.cold.99+0x22/0x22
    [ 66.496700][ C2] eth_header+0x28/0x190
    [ 66.497867][ C2] neigh_resolve_output+0x3de/0x720
    [ 66.499615][ C2] ? __neigh_update+0x7e8/0x20a0
    [ 66.501176][ C2] __neigh_update+0x8bd/0x20a0
    [ 66.502749][ C2] ndisc_update+0x34/0xc0
    [ 66.504010][ C2] ndisc_recv_na+0x8da/0xb80
    [ 66.505041][ C2] ? pndisc_redo+0x20/0x20
    [ 66.505888][ C2] ? rcu_read_lock_sched_held+0xc0/0xc0
    [ 66.506965][ C2] ndisc_rcv+0x3a0/0x470
    [ 66.507797][ C2] icmpv6_rcv+0xad9/0x1b00
    [ 66.508645][ C2] ip6_protocol_deliver_rcu+0xcd6/0x1560
    [ 66.509719][ C2] ip6_input_finish+0x5b/0xf0
    [ 66.510615][ C2] ip6_input+0xcd/0x2d0
    [ 66.511406][ C2] ? ip6_input_finish+0xf0/0xf0
    [ 66.512327][ C2] ? rcu_read_lock_held+0x91/0xa0
    [ 66.513279][ C2] ? ip6_protocol_deliver_rcu+0x1560/0x1560
    [ 66.514414][ C2] ipv6_rcv+0xe8/0x300
    [ ... ]

    Acked-by: Guillaume Nault
    Fixes: 571912c69f0e ("net: UDP tunnel encapsulation module for tunnelling different protocols like MPLS, IP, NSH etc.")
    Signed-off-by: Taehee Yoo
    Link: https://lore.kernel.org/r/20201228152146.24270-1-ap420073@gmail.com
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Greg Kroah-Hartman

    Taehee Yoo
     
  • [ Upstream commit d9e44981739a96f1a468c13bbbd54ace378caf1c ]

    Like other tunneling interfaces, the bareudp doesn't need TXLOCK.
    So, It is good to set the NETIF_F_LLTX flag to improve performance and
    to avoid lockdep's false-positive warning.

    Test commands:
    ip netns add A
    ip netns add B
    ip link add veth0 netns A type veth peer name veth1 netns B
    ip netns exec A ip link set veth0 up
    ip netns exec A ip a a 10.0.0.1/24 dev veth0
    ip netns exec B ip link set veth1 up
    ip netns exec B ip a a 10.0.0.2/24 dev veth1

    for i in {2..1}
    do
    let A=$i-1
    ip netns exec A ip link add bareudp$i type bareudp \
    dstport $i ethertype ip
    ip netns exec A ip link set bareudp$i up
    ip netns exec A ip a a 10.0.$i.1/24 dev bareudp$i
    ip netns exec A ip r a 10.0.$i.2 encap ip src 10.0.$A.1 \
    dst 10.0.$A.2 via 10.0.$i.2 dev bareudp$i

    ip netns exec B ip link add bareudp$i type bareudp \
    dstport $i ethertype ip
    ip netns exec B ip link set bareudp$i up
    ip netns exec B ip a a 10.0.$i.2/24 dev bareudp$i
    ip netns exec B ip r a 10.0.$i.1 encap ip src 10.0.$A.2 \
    dst 10.0.$A.1 via 10.0.$i.1 dev bareudp$i
    done
    ip netns exec A ping 10.0.2.2

    Splat looks like:
    [ 96.992803][ T822] ============================================
    [ 96.993954][ T822] WARNING: possible recursive locking detected
    [ 96.995102][ T822] 5.10.0+ #819 Not tainted
    [ 96.995927][ T822] --------------------------------------------
    [ 96.997091][ T822] ping/822 is trying to acquire lock:
    [ 96.998083][ T822] ffff88810f753898 (_xmit_NONE#2){+.-.}-{2:2}, at: __dev_queue_xmit+0x1f52/0x2960
    [ 96.999813][ T822]
    [ 96.999813][ T822] but task is already holding lock:
    [ 97.001192][ T822] ffff88810c385498 (_xmit_NONE#2){+.-.}-{2:2}, at: __dev_queue_xmit+0x1f52/0x2960
    [ 97.002908][ T822]
    [ 97.002908][ T822] other info that might help us debug this:
    [ 97.004401][ T822] Possible unsafe locking scenario:
    [ 97.004401][ T822]
    [ 97.005784][ T822] CPU0
    [ 97.006407][ T822] ----
    [ 97.007010][ T822] lock(_xmit_NONE#2);
    [ 97.007779][ T822] lock(_xmit_NONE#2);
    [ 97.008550][ T822]
    [ 97.008550][ T822] *** DEADLOCK ***
    [ 97.008550][ T822]
    [ 97.010057][ T822] May be due to missing lock nesting notation
    [ 97.010057][ T822]
    [ 97.011594][ T822] 7 locks held by ping/822:
    [ 97.012426][ T822] #0: ffff888109a144f0 (sk_lock-AF_INET){+.+.}-{0:0}, at: raw_sendmsg+0x12f7/0x2b00
    [ 97.014191][ T822] #1: ffffffffbce2f5a0 (rcu_read_lock_bh){....}-{1:2}, at: ip_finish_output2+0x249/0x2020
    [ 97.016045][ T822] #2: ffffffffbce2f5a0 (rcu_read_lock_bh){....}-{1:2}, at: __dev_queue_xmit+0x1fd/0x2960
    [ 97.017897][ T822] #3: ffff88810c385498 (_xmit_NONE#2){+.-.}-{2:2}, at: __dev_queue_xmit+0x1f52/0x2960
    [ 97.019684][ T822] #4: ffffffffbce2f600 (rcu_read_lock){....}-{1:2}, at: bareudp_xmit+0x31b/0x3690 [bareudp]
    [ 97.021573][ T822] #5: ffffffffbce2f5a0 (rcu_read_lock_bh){....}-{1:2}, at: ip_finish_output2+0x249/0x2020
    [ 97.023424][ T822] #6: ffffffffbce2f5a0 (rcu_read_lock_bh){....}-{1:2}, at: __dev_queue_xmit+0x1fd/0x2960
    [ 97.025259][ T822]
    [ 97.025259][ T822] stack backtrace:
    [ 97.026349][ T822] CPU: 3 PID: 822 Comm: ping Not tainted 5.10.0+ #819
    [ 97.027609][ T822] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1ubuntu1 04/01/2014
    [ 97.029407][ T822] Call Trace:
    [ 97.030015][ T822] dump_stack+0x99/0xcb
    [ 97.030783][ T822] __lock_acquire.cold.77+0x149/0x3a9
    [ 97.031773][ T822] ? stack_trace_save+0x81/0xa0
    [ 97.032661][ T822] ? register_lock_class+0x1910/0x1910
    [ 97.033673][ T822] ? register_lock_class+0x1910/0x1910
    [ 97.034679][ T822] ? rcu_read_lock_sched_held+0x91/0xc0
    [ 97.035697][ T822] ? rcu_read_lock_bh_held+0xa0/0xa0
    [ 97.036690][ T822] lock_acquire+0x1b2/0x730
    [ 97.037515][ T822] ? __dev_queue_xmit+0x1f52/0x2960
    [ 97.038466][ T822] ? check_flags+0x50/0x50
    [ 97.039277][ T822] ? netif_skb_features+0x296/0x9c0
    [ 97.040226][ T822] ? validate_xmit_skb+0x29/0xb10
    [ 97.041151][ T822] _raw_spin_lock+0x30/0x70
    [ 97.041977][ T822] ? __dev_queue_xmit+0x1f52/0x2960
    [ 97.042927][ T822] __dev_queue_xmit+0x1f52/0x2960
    [ 97.043852][ T822] ? netdev_core_pick_tx+0x290/0x290
    [ 97.044824][ T822] ? mark_held_locks+0xb7/0x120
    [ 97.045712][ T822] ? lockdep_hardirqs_on_prepare+0x12c/0x3e0
    [ 97.046824][ T822] ? __local_bh_enable_ip+0xa5/0xf0
    [ 97.047771][ T822] ? ___neigh_create+0x12a8/0x1eb0
    [ 97.048710][ T822] ? trace_hardirqs_on+0x41/0x120
    [ 97.049626][ T822] ? ___neigh_create+0x12a8/0x1eb0
    [ 97.050556][ T822] ? __local_bh_enable_ip+0xa5/0xf0
    [ 97.051509][ T822] ? ___neigh_create+0x12a8/0x1eb0
    [ 97.052443][ T822] ? check_chain_key+0x244/0x5f0
    [ 97.053352][ T822] ? rcu_read_lock_bh_held+0x56/0xa0
    [ 97.054317][ T822] ? ip_finish_output2+0x6ea/0x2020
    [ 97.055263][ T822] ? pneigh_lookup+0x410/0x410
    [ 97.056135][ T822] ip_finish_output2+0x6ea/0x2020
    [ ... ]

    Acked-by: Guillaume Nault
    Fixes: 571912c69f0e ("net: UDP tunnel encapsulation module for tunnelling different protocols like MPLS, IP, NSH etc.")
    Signed-off-by: Taehee Yoo
    Link: https://lore.kernel.org/r/20201228152136.24215-1-ap420073@gmail.com
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Greg Kroah-Hartman

    Taehee Yoo
     
  • [ Upstream commit 1fef73597fa545c35fddc953979013882fbd4e55 ]

    ppp_cp_event is called directly or indirectly by ppp_rx with "ppp->lock"
    held. It may call mod_timer to add a new timer. However, at the same time
    ppp_timer may be already running and waiting for "ppp->lock". In this
    case, there's no need for ppp_timer to continue running and it can just
    exit.

    If we let ppp_timer continue running, it may call add_timer. This causes
    kernel panic because add_timer can't be called with a timer pending.
    This patch fixes this problem.

    Fixes: e022c2f07ae5 ("WAN: new synchronous PPP implementation for generic HDLC.")
    Cc: Krzysztof Halasa
    Signed-off-by: Xie He
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Xie He
     
  • [ Upstream commit 085c7c4e1c0e50d90b7d90f61a12e12b317a91e2 ]

    Both version 0 and version 1 use ETH_P_ERSPAN, but version 0 does not
    have an erspan header. So the check in gre_parse_header() is wrong,
    we have to distinguish version 1 from version 0.

    We can just check the gre header length like is_erspan_type1().

    Fixes: cb73ee40b1b3 ("net: ip_gre: use erspan key field for tunnel lookup")
    Reported-by: syzbot+f583ce3d4ddf9836b27a@syzkaller.appspotmail.com
    Cc: William Tu
    Cc: Lorenzo Bianconi
    Signed-off-by: Cong Wang
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Cong Wang
     
  • [ Upstream commit 5ede3ada3da7f050519112b81badc058190b9f9f ]

    The function skb_copy() could return NULL, the return value
    need to be checked.

    Fixes: b5996f11ea54 ("net: add Hisilicon Network Subsystem basic ethernet support")
    Signed-off-by: Yunjian Wang
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Yunjian Wang
     
  • [ Upstream commit bd1248f1ddbc48b0c30565fce897a3b6423313b8 ]

    Check Scell_log shift size in red_check_params() and modify all callers
    of red_check_params() to pass Scell_log.

    This prevents a shift out-of-bounds as detected by UBSAN:
    UBSAN: shift-out-of-bounds in ./include/net/red.h:252:22
    shift exponent 72 is too large for 32-bit type 'int'

    Fixes: 8afa10cbe281 ("net_sched: red: Avoid illegal values")
    Signed-off-by: Randy Dunlap
    Reported-by: syzbot+97c5bd9cc81eca63d36e@syzkaller.appspotmail.com
    Cc: Nogah Frankel
    Cc: Jamal Hadi Salim
    Cc: Cong Wang
    Cc: Jiri Pirko
    Cc: netdev@vger.kernel.org
    Cc: "David S. Miller"
    Cc: Jakub Kicinski
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Randy Dunlap
     
  • [ Upstream commit 21fdca22eb7df2a1e194b8adb812ce370748b733 ]

    RT_TOS() only clears one of the ECN bits. Therefore, when
    fib_compute_spec_dst() resorts to a fib lookup, it can return
    different results depending on the value of the second ECN bit.

    For example, ECT(0) and ECT(1) packets could be treated differently.

    $ ip netns add ns0
    $ ip netns add ns1
    $ ip link add name veth01 netns ns0 type veth peer name veth10 netns ns1
    $ ip -netns ns0 link set dev lo up
    $ ip -netns ns1 link set dev lo up
    $ ip -netns ns0 link set dev veth01 up
    $ ip -netns ns1 link set dev veth10 up

    $ ip -netns ns0 address add 192.0.2.10/24 dev veth01
    $ ip -netns ns1 address add 192.0.2.11/24 dev veth10

    $ ip -netns ns1 address add 192.0.2.21/32 dev lo
    $ ip -netns ns1 route add 192.0.2.10/32 tos 4 dev veth10 src 192.0.2.21
    $ ip netns exec ns1 sysctl -wq net.ipv4.icmp_echo_ignore_broadcasts=0

    With TOS 4 and ECT(1), ns1 replies using source address 192.0.2.21
    (ping uses -Q to set all TOS and ECN bits):

    $ ip netns exec ns0 ping -c 1 -b -Q 5 192.0.2.255
    [...]
    64 bytes from 192.0.2.21: icmp_seq=1 ttl=64 time=0.544 ms

    But with TOS 4 and ECT(0), ns1 replies using source address 192.0.2.11
    because the "tos 4" route isn't matched:

    $ ip netns exec ns0 ping -c 1 -b -Q 6 192.0.2.255
    [...]
    64 bytes from 192.0.2.11: icmp_seq=1 ttl=64 time=0.597 ms

    After this patch the ECN bits don't affect the result anymore:

    $ ip netns exec ns0 ping -c 1 -b -Q 6 192.0.2.255
    [...]
    64 bytes from 192.0.2.21: icmp_seq=1 ttl=64 time=0.591 ms

    Fixes: 35ebf65e851c ("ipv4: Create and use fib_compute_spec_dst() helper.")
    Signed-off-by: Guillaume Nault
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Guillaume Nault
     
  • [ Upstream commit fb1e6e562b37b39adfe251919c9abfdb3e01f921 ]

    A recent change skips sending firmware messages to the firmware when
    pci_channel_offline() is true during fatal AER error. To make this
    complete, we need to move the re-initialization sequence to
    bnxt_io_resume(), otherwise the firmware messages to re-initialize
    will all be skipped. In any case, it is more correct to re-initialize
    in bnxt_io_resume().

    Also, fix the reverse x-mas tree format when defining variables
    in bnxt_io_slot_reset().

    Fixes: b340dc680ed4 ("bnxt_en: Avoid sending firmware messages when AER error is detected.")
    Reviewed-by: Edwin Peer
    Signed-off-by: Vasundhara Volam
    Signed-off-by: Michael Chan
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Greg Kroah-Hartman

    Vasundhara Volam
     
  • [ Upstream commit 4f374d2c43a9e5e773f1dee56db63bd6b8a36276 ]

    The packet coalescing interrupt threshold has separated registers
    for different aggregated/cpu (sw-thread). The required value should
    be loaded for every thread but not only for 1 current cpu.

    Fixes: 213f428f5056 ("net: mvpp2: add support for TX interrupts and RX queue distribution modes")
    Signed-off-by: Stefan Chulski
    Link: https://lore.kernel.org/r/1608748521-11033-1-git-send-email-stefanc@marvell.com
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Greg Kroah-Hartman

    Stefan Chulski
     
  • [ Upstream commit a029a2fef5d11bb85587433c3783615442abac96 ]

    TQM rings are hardware resources that require host context memory
    managed by the driver. The driver supports up to 9 TQM rings and
    the number of rings to use is requested by firmware during run-time.
    Cap this number to the maximum supported to prevent accessing beyond
    the array. Future firmware may request more than 9 TQM rings. Define
    macros to remove the magic number 9 from the C code.

    Fixes: ac3158cb0108 ("bnxt_en: Allocate TQM ring context memory according to fw specification.")
    Reviewed-by: Pavan Chebbi
    Reviewed-by: Vasundhara Volam
    Signed-off-by: Michael Chan
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Greg Kroah-Hartman

    Michael Chan
     
  • [ Upstream commit 3c98cbf22a96c1b12f48c1b2a4680dfe5cb280f9 ]

    This flag can be used by an end user to disable S0ix flows on a
    buggy system or by an OEM for development purposes.

    If you need this flag to be persisted across reboots, it's suggested
    to use a udev rule to call adjust it until the kernel could have your
    configuration in a disallow list.

    Signed-off-by: Mario Limonciello
    Reviewed-by: Hans de Goede
    Tested-by: Yijun Shen
    Signed-off-by: Tony Nguyen
    Signed-off-by: Greg Kroah-Hartman

    Mario Limonciello
     
  • [ Upstream commit 6cecf02e77ab9bf97e9252f9fcb8f0738a6de12c ]

    commit e086ba2fccda ("e1000e: disable s0ix entry and exit flows for ME
    systems") disabled s0ix flows for systems that have various incarnations of
    the i219-LM ethernet controller. This changed caused power consumption
    regressions on the following shipping Dell Comet Lake based laptops:
    * Latitude 5310
    * Latitude 5410
    * Latitude 5410
    * Latitude 5510
    * Precision 3550
    * Latitude 5411
    * Latitude 5511
    * Precision 3551
    * Precision 7550
    * Precision 7750

    This commit was introduced because of some regressions on certain Thinkpad
    laptops. This comment was potentially caused by an earlier
    commit 632fbd5eb5b0e ("e1000e: fix S0ix flows for cable connected case").
    or it was possibly caused by a system not meeting platform architectural
    requirements for low power consumption. Other changes made in the driver
    with extended timeouts are expected to make the driver more impervious to
    platform firmware behavior.

    Fixes: e086ba2fccda ("e1000e: disable s0ix entry and exit flows for ME systems")
    Reviewed-by: Alexander Duyck
    Signed-off-by: Mario Limonciello
    Reviewed-by: Hans de Goede
    Tested-by: Yijun Shen
    Signed-off-by: Tony Nguyen
    Signed-off-by: Greg Kroah-Hartman

    Mario Limonciello
     
  • [ Upstream commit 3cf31b1a9effd859bb3d6ff9f8b5b0d5e6cac952 ]

    Per guidance from Intel ethernet architecture team, it may take
    up to 1 second for unconfiguring ULP mode.

    However in practice this seems to be taking up to 2 seconds on
    some Lenovo machines. Detect scenarios that take more than 1 second
    but less than 2.5 seconds and emit a warning on resume for those
    scenarios.

    Suggested-by: Aaron Ma
    Suggested-by: Sasha Netfin
    Suggested-by: Hans de Goede
    CC: Mark Pearson
    Fixes: f15bb6dde738cc8fa0 ("e1000e: Add support for S0ix")
    BugLink: https://bugs.launchpad.net/bugs/1865570
    Link: https://patchwork.ozlabs.org/project/intel-wired-lan/patch/20200323191639.48826-1-aaron.ma@canonical.com/
    Link: https://lkml.org/lkml/2020/12/13/15
    Link: https://lkml.org/lkml/2020/12/14/708
    Signed-off-by: Mario Limonciello
    Reviewed-by: Hans de Goede
    Tested-by: Yijun Shen
    Signed-off-by: Tony Nguyen
    Signed-off-by: Greg Kroah-Hartman

    Mario Limonciello
     
  • [ Upstream commit 808e0d8832cc81738f3e8df12dff0688352baf50 ]

    If the shutdown failed, the part will be thawed and running
    S0ix flows will put it into an undefined state.

    Reported-by: Alexander Duyck
    Reviewed-by: Alexander Duyck
    Signed-off-by: Mario Limonciello
    Tested-by: Yijun Shen
    Signed-off-by: Tony Nguyen
    Signed-off-by: Greg Kroah-Hartman

    Mario Limonciello
     
  • [ Upstream commit 950271d7cc0b4546af3549d8143c4132d6e1f138 ]

    Currently the tun_napi_alloc_frags() function returns -ENOMEM when the
    number of iovs exceeds MAX_SKB_FRAGS + 1. However this is inappropriate,
    we should use -EMSGSIZE instead of -ENOMEM.

    The following distinctions are matters:
    1. the caller need to drop the bad packet when -EMSGSIZE is returned,
    which means meeting a persistent failure.
    2. the caller can try again when -ENOMEM is returned, which means
    meeting a transient failure.

    Fixes: 90e33d459407 ("tun: enable napi_gro_frags() for TUN/TAP driver")
    Signed-off-by: Yunjian Wang
    Acked-by: Willem de Bruijn
    Acked-by: Jason Wang
    Acked-by: Michael S. Tsirkin
    Link: https://lore.kernel.org/r/1608864736-24332-1-git-send-email-wangyunjian@huawei.com
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Greg Kroah-Hartman

    Yunjian Wang