commit 14cfdbd39e316efd91ae6e403ef8211f0b022603
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Fri Mar 20 11:56:00 2020 +0100

    Linux 4.19.112

commit b4176d3b1a820f792e36d7cadd5bf0eeaf71fb09
Author: Matteo Croce <mcroce@redhat.com>
Date:   Fri Feb 21 12:28:38 2020 +0100

    ipv4: ensure rcu_read_lock() in cipso_v4_error()
    
    commit 3e72dfdf8227b052393f71d820ec7599909dddc2 upstream.
    
    Similarly to commit c543cb4a5f07 ("ipv4: ensure rcu_read_lock() in
    ipv4_link_failure()"), __ip_options_compile() must be called under rcu
    protection.
    
    Fixes: 3da1ed7ac398 ("net: avoid use IPCB in cipso_v4_error")
    Suggested-by: Guillaume Nault <gnault@redhat.com>
    Signed-off-by: Matteo Croce <mcroce@redhat.com>
    Acked-by: Paul Moore <paul@paul-moore.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a44324b0bdcace26e4fd94489b4eb78232df0e4d
Author: Waiman Long <longman@redhat.com>
Date:   Wed Nov 14 09:55:40 2018 -0800

    efi: Fix debugobjects warning on 'efi_rts_work'
    
    commit ef1491e791308317bb9851a0ad380c4a68b58d54 upstream.
    
    The following commit:
    
      9dbbedaa6171 ("efi: Make efi_rts_work accessible to efi page fault handler")
    
    converted 'efi_rts_work' from an auto variable to a global variable.
    However, when submitting the work, INIT_WORK_ONSTACK() was still used,
    causing the following complaint from debugobjects:
    
      ODEBUG: object 00000000ed27b500 is NOT on stack 00000000c7d38760, but annotated.
    
    Change the macro to just INIT_WORK() to eliminate the warning.
    
    Signed-off-by: Waiman Long <longman@redhat.com>
    Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Acked-by: Sai Praneeth Prakhya <sai.praneeth.prakhya@intel.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-efi@vger.kernel.org
    Fixes: 9dbbedaa6171 ("efi: Make efi_rts_work accessible to efi page fault handler")
    Link: http://lkml.kernel.org/r/20181114175544.12860-2-ard.biesheuvel@linaro.org
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 705d1b54a70aba759daf42612890341c6c87cf37
Author: Chen-Tsung Hsieh <chentsung@chromium.org>
Date:   Mon Mar 16 15:24:19 2020 +0800

    HID: google: add moonball USB id
    
    commit 58322a1590fc189a8e1e349d309637d4a4942840 upstream.
    
    Add 1 additional hammer-like device.
    
    Signed-off-by: Chen-Tsung Hsieh <chentsung@chromium.org>
    Reviewed-by: Nicolas Boichat <drinkcat@chromium.org>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 30f6cae722654caef2ab4bacb2e910bfd766866b
Author: Jann Horn <jannh@google.com>
Date:   Tue Mar 17 01:28:45 2020 +0100

    mm: slub: add missing TID bump in kmem_cache_alloc_bulk()
    
    commit fd4d9c7d0c71866ec0c2825189ebd2ce35bd95b8 upstream.
    
    When kmem_cache_alloc_bulk() attempts to allocate N objects from a percpu
    freelist of length M, and N > M > 0, it will first remove the M elements
    from the percpu freelist, then call ___slab_alloc() to allocate the next
    element and repopulate the percpu freelist. ___slab_alloc() can re-enable
    IRQs via allocate_slab(), so the TID must be bumped before ___slab_alloc()
    to properly commit the freelist head change.
    
    Fix it by unconditionally bumping c->tid when entering the slowpath.
    
    Cc: stable@vger.kernel.org
    Fixes: ebe909e0fdb3 ("slub: improve bulk alloc strategy")
    Signed-off-by: Jann Horn <jannh@google.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c1a9559a24b0ae78ea1f7a6ac453cc5aedda32b3
Author: Kees Cook <keescook@chromium.org>
Date:   Mon Feb 10 02:04:17 2020 +0100

    ARM: 8958/1: rename missed uaccess .fixup section
    
    commit f87b1c49bc675da30d8e1e8f4b60b800312c7b90 upstream.
    
    When the uaccess .fixup section was renamed to .text.fixup, one case was
    missed. Under ld.bfd, the orphaned section was moved close to .text
    (since they share the "ax" bits), so things would work normally on
    uaccess faults. Under ld.lld, the orphaned section was placed outside
    the .text section, making it unreachable.
    
    Link: https://github.com/ClangBuiltLinux/linux/issues/282
    Link: https://bugs.chromium.org/p/chromium/issues/detail?id=1020633#c44
    Link: https://lore.kernel.org/r/nycvar.YSQ.7.76.1912032147340.17114@knanqh.ubzr
    Link: https://lore.kernel.org/lkml/202002071754.F5F073F1D@keescook/
    
    Fixes: c4a84ae39b4a5 ("ARM: 8322/1: keep .text and .fixup regions closer together")
    Cc: stable@vger.kernel.org
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
    Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
    Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8cf58ea4abd3debe79c714400232f1e312dec621
Author: Florian Fainelli <f.fainelli@gmail.com>
Date:   Tue Jan 28 20:22:13 2020 +0100

    ARM: 8957/1: VDSO: Match ARMv8 timer in cntvct_functional()
    
    commit 45939ce292b4b11159719faaf60aba7d58d5fe33 upstream.
    
    It is possible for a system with an ARMv8 timer to run a 32-bit kernel.
    When this happens we will unconditionally have the vDSO code remove the
    __vdso_gettimeofday and __vdso_clock_gettime symbols because
    cntvct_functional() returns false since it does not match that
    compatibility string.
    
    Fixes: ecf99a439105 ("ARM: 8331/1: VDSO initialization, mapping, and synchronization")
    Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bc97a345d97556dea71f0748acb5d9ea413c7cc7
Author: Carl Huang <cjhuang@codeaurora.org>
Date:   Fri Jan 3 12:50:16 2020 +0800

    net: qrtr: fix len of skb_put_padto in qrtr_node_enqueue
    
    commit ce57785bf91b1ceaef4f4bffed8a47dc0919c8da upstream.
    
    The len used for skb_put_padto is wrong, it need to add len of hdr.
    
    In qrtr_node_enqueue, local variable size_t len is assign with
    skb->len, then skb_push(skb, sizeof(*hdr)) will add skb->len with
    sizeof(*hdr), so local variable size_t len is not same with skb->len
    after skb_push(skb, sizeof(*hdr)).
    
    Then the purpose of skb_put_padto(skb, ALIGN(len, 4)) is to add add
    pad to the end of the skb's data if skb->len is not aligned to 4, but
    unfortunately it use len instead of skb->len, at this line, skb->len
    is 32 bytes(sizeof(*hdr)) more than len, for example, len is 3 bytes,
    then skb->len is 35 bytes(3 + 32), and ALIGN(len, 4) is 4 bytes, so
    __skb_put_padto will do nothing after check size(35) < len(4), the
    correct value should be 36(sizeof(*hdr) + ALIGN(len, 4) = 32 + 4),
    then __skb_put_padto will pass check size(35) < len(36) and add 1 byte
    to the end of skb's data, then logic is correct.
    
    function of skb_push:
    void *skb_push(struct sk_buff *skb, unsigned int len)
    {
            skb->data -= len;
            skb->len  += len;
            if (unlikely(skb->data < skb->head))
                    skb_under_panic(skb, len, __builtin_return_address(0));
            return skb->data;
    }
    
    function of skb_put_padto
    static inline int skb_put_padto(struct sk_buff *skb, unsigned int len)
    {
            return __skb_put_padto(skb, len, true);
    }
    
    function of __skb_put_padto
    static inline int __skb_put_padto(struct sk_buff *skb, unsigned int len,
                                      bool free_on_error)
    {
            unsigned int size = skb->len;
    
            if (unlikely(size < len)) {
                    len -= size;
                    if (__skb_pad(skb, len, free_on_error))
                            return -ENOMEM;
                    __skb_put(skb, len);
            }
            return 0;
    }
    
    Signed-off-by: Carl Huang <cjhuang@codeaurora.org>
    Signed-off-by: Wen Gong <wgong@codeaurora.org>
    Cc: Doug Anderson <dianders@chromium.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cda3bca05e2ccd8177197328cf32d868f063c2d2
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Tue Jul 30 11:28:57 2019 +0200

    driver core: Fix creation of device links with PM-runtime flags
    
    commit fb583c8eeeb1fd57e24ef41ed94c9112067aeac9 upstream.
    
    After commit 515db266a9da ("driver core: Remove device link creation
    limitation"), if PM-runtime flags are passed to device_link_add(), it
    will fail (returning NULL) due to an overly restrictive flags check
    introduced by that commit.
    
    Fix this issue by extending the check in question to cover the
    PM-runtime flags too.
    
    Fixes: 515db266a9da ("driver core: Remove device link creation limitation")
    Reported-by: Dmitry Osipenko <digetx@gmail.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Tested-by: Dmitry Osipenko <digetx@gmail.com>
    Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Link: https://lore.kernel.org/r/7674989.cD04D8YV3U@kreacher
    Signed-off-by: Saravana Kannan <saravanak@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 53a895ff19bd3424605b804530c43d065eab262b
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Tue Jul 16 17:21:06 2019 +0200

    driver core: Remove device link creation limitation
    
    commit 515db266a9dace92b0cbaed9a6044dd5304b8ca9 upstream.
    
    If device_link_add() is called for a consumer/supplier pair with an
    existing device link between them and the existing link's type is
    not in agreement with the flags passed to that function by its
    caller, NULL will be returned.  That is seriously inconvenient,
    because it forces the callers of device_link_add() to worry about
    what others may or may not do even if that is not relevant to them
    for any other reasons.
    
    It turns out, however, that this limitation can be made go away
    relatively easily.
    
    The underlying observation is that if DL_FLAG_STATELESS has been
    passed to device_link_add() in flags for the given consumer/supplier
    pair at least once, calling either device_link_del() or
    device_link_remove() to release the link returned by it should work,
    but there are no other requirements associated with that flag.  In
    turn, if at least one of the callers of device_link_add() for the
    given consumer/supplier pair has not passed DL_FLAG_STATELESS to it
    in flags, the driver core should track the status of the link and act
    on it as appropriate (ie. the link should be treated as "managed").
    This means that DL_FLAG_STATELESS needs to be set for managed device
    links and it should be valid to call device_link_del() or
    device_link_remove() to drop references to them in certain
    sutiations.
    
    To allow that to happen, introduce a new (internal) device link flag
    called DL_FLAG_MANAGED and make device_link_add() set it automatically
    whenever DL_FLAG_STATELESS is not passed to it.  Also make it take
    additional references to existing device links that were previously
    stateless (that is, with DL_FLAG_STATELESS set and DL_FLAG_MANAGED
    unset) and will need to be managed going forward and initialize
    their status (which has been DL_STATE_NONE so far).
    
    Accordingly, when a managed device link is dropped automatically
    by the driver core, make it clear DL_FLAG_MANAGED, reset the link's
    status back to DL_STATE_NONE and drop the reference to it associated
    with DL_FLAG_MANAGED instead of just deleting it right away (to
    allow it to stay around in case it still needs to be released
    explicitly by someone).
    
    With that, since setting DL_FLAG_STATELESS doesn't mean that the
    device link in question is not managed any more, replace all of the
    status-tracking checks against DL_FLAG_STATELESS with analogous
    checks against DL_FLAG_MANAGED and update the documentation to
    reflect these changes.
    
    While at it, make device_link_add() reject flags that it does not
    recognize, including DL_FLAG_MANAGED.
    
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Reviewed-by: Saravana Kannan <saravanak@google.com>
    Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Review-by: Saravana Kannan <saravanak@google.com>
    Link: https://lore.kernel.org/r/2305283.AStDPdUUnE@kreacher
    Signed-off-by: Saravana Kannan <saravanak@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 822e87b74f1e0ef543b298c8121a78c382cceeb3
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Fri Feb 1 01:59:42 2019 +0100

    driver core: Add device link flag DL_FLAG_AUTOPROBE_CONSUMER
    
    commit e7dd40105aac9ba051e44ad711123bc53a5e4c71 upstream.
    
    Add a new device link flag, DL_FLAG_AUTOPROBE_CONSUMER, to request the
    driver core to probe for a consumer driver automatically after binding
    a driver to the supplier device on a persistent managed device link.
    
    As unbinding the supplier driver on a managed device link causes the
    consumer driver to be detached from its device automatically, this
    flag provides a complementary mechanism which is needed to address
    some "composite device" use cases.
    
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Saravana Kannan <saravanak@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1f5102cb6bc935eadb8d543c31119195a3e60a14
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Fri Feb 1 01:58:33 2019 +0100

    driver core: Make driver core own stateful device links
    
    commit 72175d4ea4c442d95cf690c3e968eeee90fd43ca upstream.
    
    Even though stateful device links are managed by the driver core in
    principle, their creators are allowed and sometimes even expected
    to drop references to them via device_link_del() or
    device_link_remove(), but that doesn't really play well with the
    "persistent" link concept.
    
    If "persistent" managed device links are created from driver
    probe callbacks, device_link_add() called to do that will take a
    new reference on the link each time the callback runs and those
    references will never be dropped, which kind of isn't nice.
    
    This issues arises because of the link reference counting carried
    out by device_link_add() for existing links, but that is only done to
    avoid deleting device links that may still be necessary, which
    shouldn't be a concern for managed (stateful) links.  These device
    links are managed by the driver core and whoever creates one of them
    will need it at least as long as until the consumer driver is detached
    from its device and deleting it may be left to the driver core just
    fine.
    
    For this reason, rework device_link_add() to apply the reference
    counting to stateless links only and make device_link_del() and
    device_link_remove() drop references to stateless links only too.
    After this change, if called to add a stateful device link for
    a consumer-supplier pair for which a stateful device link is
    present already, device_link_add() will return the existing link
    without incrementing its reference counter.  Accordingly,
    device_link_del() and device_link_remove() will WARN() and do
    nothing when called to drop a reference to a stateful link.  Thus,
    effectively, all stateful device links will be owned by the driver
    core.
    
    In addition, clean up the handling of the link management flags,
    DL_FLAG_AUTOREMOVE_CONSUMER and DL_FLAG_AUTOREMOVE_SUPPLIER, so that
    (a) they are never set at the same time and (b) if device_link_add()
    is called for a consumer-supplier pair with an existing stateful link
    between them, the flags of that link will be combined with the flags
    passed to device_link_add() to ensure that the life time of the link
    is sufficient for all of the callers of device_link_add() for the
    same consumer-supplier pair.
    
    Update the device_link_add() kerneldoc comment to reflect the
    above changes.
    
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Saravana Kannan <saravanak@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1c89b531db4269712f689f3ddc55625c60aadab1
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Fri Feb 1 01:50:39 2019 +0100

    driver core: Fix adding device links to probing suppliers
    
    commit 15cfb094160385cc0b303c4cda483caa102af654 upstream.
    
    Currently, it is not valid to add a device link from a consumer
    driver ->probe callback to a supplier that is still probing too, but
    generally this is a valid use case.  For example, if the consumer has
    just acquired a resource that can only be available if the supplier
    is functional, adding a device link to that supplier right away
    should be safe (and even desirable arguably), but device_link_add()
    doesn't handle that case correctly and the initial state of the link
    created by it is wrong then.
    
    To address this problem, change the initial state of device links
    added between a probing supplier and a probing consumer to
    DL_STATE_CONSUMER_PROBE and update device_links_driver_bound() to
    skip such links on the supplier side.
    
    With this change, if the supplier probe completes first,
    device_links_driver_bound() called for it will skip the link state
    update and when it is called for the consumer, the link state will
    be updated to "active".  In turn, if the consumer probe completes
    first, device_links_driver_bound() called for it will change the
    state of the link to "active" and when it is called for the
    supplier, the link status update will be skipped.
    
    However, in principle the supplier or consumer probe may still fail
    after the link has been added, so modify device_links_no_driver() to
    change device links in the "active" or "consumer probe" state to
    "dormant" on the supplier side and update __device_links_no_driver()
    to change the link state to "available" only if it is "consumer
    probe" or "active".
    
    Then, if the supplier probe fails first, the leftover link to the
    probing consumer will become "dormant" and device_links_no_driver()
    called for the consumer (when its probe fails) will clean it up.
    In turn, if the consumer probe fails first, it will either drop the
    link, or change its state to "available" and, in the latter case,
    when device_links_no_driver() is called for the supplier, it will
    update the link state to "dormant".  [If the supplier probe fails,
    but the consumer probe succeeds, which should not happen as long as
    the consumer driver is correct, the link still will be around, but
    it will be "dormant" until the supplier is probed again.]
    
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Saravana Kannan <saravanak@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b600c5a14eb9676bd62e034d3c699f0405fe8ad9
Author: Yong Wu <yong.wu@mediatek.com>
Date:   Tue Jan 1 12:51:05 2019 +0800

    driver core: Remove the link if there is no driver with AUTO flag
    
    commit 0fe6f7874d467456da6f6a221dd92499a3ab1780 upstream.
    
    DL_FLAG_AUTOREMOVE_CONSUMER/SUPPLIER means "Remove the link
    automatically on consumer/supplier driver unbind", that means we should
    remove whole the device_link when there is no this driver no matter what
    the ref_count of the link is.
    
    CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Yong Wu <yong.wu@mediatek.com>
    Signed-off-by: Saravana Kannan <saravanak@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6bdf6513f33087fb2280c8c40439f362e7ee6fdc
Author: Faiz Abbas <faiz_abbas@ti.com>
Date:   Thu Oct 10 16:22:30 2019 +0530

    mmc: sdhci-omap: Fix Tuning procedure for temperatures < -20C
    
    [ Upstream commit feb40824d78eac5e48f56498dca941754dff33d7 ]
    
    According to the App note[1] detailing the tuning algorithm, for
    temperatures < -20C, the initial tuning value should be min(largest value
    in LPW - 24, ceil(13/16 ratio of LPW)). The largest value in LPW is
    (max_window + 4 * (max_len - 1)) and not (max_window + 4 * max_len) itself.
    Fix this implementation.
    
    [1] http://www.ti.com/lit/an/spraca9b/spraca9b.pdf
    
    Fixes: 961de0a856e3 ("mmc: sdhci-omap: Workaround errata regarding SDR104/HS200 tuning failures (i929)")
    Cc: stable@vger.kernel.org
    Signed-off-by: Faiz Abbas <faiz_abbas@ti.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 3f909e15839c1c9edaa02d061f1198fb24de32ff
Author: Faiz Abbas <faiz_abbas@ti.com>
Date:   Thu Apr 11 14:29:37 2019 +0530

    mmc: sdhci-omap: Don't finish_mrq() on a command error during tuning
    
    [ Upstream commit 5c41ea6d52003b5bc77c2a82fd5ca7d480237d89 ]
    
    commit 5b0d62108b46 ("mmc: sdhci-omap: Add platform specific reset
    callback") skips data resets during tuning operation. Because of this,
    a data error or data finish interrupt might still arrive after a command
    error has been handled and the mrq ended. This ends up with a "mmc0: Got
    data interrupt 0x00000002 even though no data operation was in progress"
    error message.
    
    Fix this by adding a platform specific callback for sdhci_irq. Mark the
    mrq as a failure but wait for a data interrupt instead of calling
    finish_mrq().
    
    Fixes: 5b0d62108b46 ("mmc: sdhci-omap: Add platform specific reset
    callback")
    Signed-off-by: Faiz Abbas <faiz_abbas@ti.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit dfb827019bcc6d549cf9265185eacf67c391b42d
Author: Navid Emamdoost <navid.emamdoost@gmail.com>
Date:   Fri Oct 25 23:53:30 2019 -0500

    wimax: i2400: Fix memory leak in i2400m_op_rfkill_sw_toggle
    
    [ Upstream commit 6f3ef5c25cc762687a7341c18cbea5af54461407 ]
    
    In the implementation of i2400m_op_rfkill_sw_toggle() the allocated
    buffer for cmd should be released before returning. The
    documentation for i2400m_msg_to_dev() says when it returns the buffer
    can be reused. Meaning cmd should be released in either case. Move
    kfree(cmd) before return to be reached by all execution paths.
    
    Fixes: 2507e6ab7a9a ("wimax: i2400: fix memory leak")
    Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit dd5a14630d81827520f19b669625033105e05475
Author: Navid Emamdoost <navid.emamdoost@gmail.com>
Date:   Tue Sep 10 18:01:40 2019 -0500

    wimax: i2400: fix memory leak
    
    [ Upstream commit 2507e6ab7a9a440773be476141a255934468c5ef ]
    
    In i2400m_op_rfkill_sw_toggle cmd buffer should be released along with
    skb response.
    
    Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit b0caab0e619e8a8d807e7b483357ef13e0a33fb9
Author: Qian Cai <cai@lca.pw>
Date:   Fri Feb 21 23:31:11 2020 -0500

    jbd2: fix data races at struct journal_head
    
    [ Upstream commit 6c5d911249290f41f7b50b43344a7520605b1acb ]
    
    journal_head::b_transaction and journal_head::b_next_transaction could
    be accessed concurrently as noticed by KCSAN,
    
     LTP: starting fsync04
     /dev/zero: Can't open blockdev
     EXT4-fs (loop0): mounting ext3 file system using the ext4 subsystem
     EXT4-fs (loop0): mounted filesystem with ordered data mode. Opts: (null)
     ==================================================================
     BUG: KCSAN: data-race in __jbd2_journal_refile_buffer [jbd2] / jbd2_write_access_granted [jbd2]
    
     write to 0xffff99f9b1bd0e30 of 8 bytes by task 25721 on cpu 70:
      __jbd2_journal_refile_buffer+0xdd/0x210 [jbd2]
      __jbd2_journal_refile_buffer at fs/jbd2/transaction.c:2569
      jbd2_journal_commit_transaction+0x2d15/0x3f20 [jbd2]
      (inlined by) jbd2_journal_commit_transaction at fs/jbd2/commit.c:1034
      kjournald2+0x13b/0x450 [jbd2]
      kthread+0x1cd/0x1f0
      ret_from_fork+0x27/0x50
    
     read to 0xffff99f9b1bd0e30 of 8 bytes by task 25724 on cpu 68:
      jbd2_write_access_granted+0x1b2/0x250 [jbd2]
      jbd2_write_access_granted at fs/jbd2/transaction.c:1155
      jbd2_journal_get_write_access+0x2c/0x60 [jbd2]
      __ext4_journal_get_write_access+0x50/0x90 [ext4]
      ext4_mb_mark_diskspace_used+0x158/0x620 [ext4]
      ext4_mb_new_blocks+0x54f/0xca0 [ext4]
      ext4_ind_map_blocks+0xc79/0x1b40 [ext4]
      ext4_map_blocks+0x3b4/0x950 [ext4]
      _ext4_get_block+0xfc/0x270 [ext4]
      ext4_get_block+0x3b/0x50 [ext4]
      __block_write_begin_int+0x22e/0xae0
      __block_write_begin+0x39/0x50
      ext4_write_begin+0x388/0xb50 [ext4]
      generic_perform_write+0x15d/0x290
      ext4_buffered_write_iter+0x11f/0x210 [ext4]
      ext4_file_write_iter+0xce/0x9e0 [ext4]
      new_sync_write+0x29c/0x3b0
      __vfs_write+0x92/0xa0
      vfs_write+0x103/0x260
      ksys_write+0x9d/0x130
      __x64_sys_write+0x4c/0x60
      do_syscall_64+0x91/0xb05
      entry_SYSCALL_64_after_hwframe+0x49/0xbe
    
     5 locks held by fsync04/25724:
      #0: ffff99f9911093f8 (sb_writers#13){.+.+}, at: vfs_write+0x21c/0x260
      #1: ffff99f9db4c0348 (&sb->s_type->i_mutex_key#15){+.+.}, at: ext4_buffered_write_iter+0x65/0x210 [ext4]
      #2: ffff99f5e7dfcf58 (jbd2_handle){++++}, at: start_this_handle+0x1c1/0x9d0 [jbd2]
      #3: ffff99f9db4c0168 (&ei->i_data_sem){++++}, at: ext4_map_blocks+0x176/0x950 [ext4]
      #4: ffffffff99086b40 (rcu_read_lock){....}, at: jbd2_write_access_granted+0x4e/0x250 [jbd2]
     irq event stamp: 1407125
     hardirqs last  enabled at (1407125): [<ffffffff980da9b7>] __find_get_block+0x107/0x790
     hardirqs last disabled at (1407124): [<ffffffff980da8f9>] __find_get_block+0x49/0x790
     softirqs last  enabled at (1405528): [<ffffffff98a0034c>] __do_softirq+0x34c/0x57c
     softirqs last disabled at (1405521): [<ffffffff97cc67a2>] irq_exit+0xa2/0xc0
    
     Reported by Kernel Concurrency Sanitizer on:
     CPU: 68 PID: 25724 Comm: fsync04 Tainted: G L 5.6.0-rc2-next-20200221+ #7
     Hardware name: HPE ProLiant DL385 Gen10/ProLiant DL385 Gen10, BIOS A40 07/10/2019
    
    The plain reads are outside of jh->b_state_lock critical section which result
    in data races. Fix them by adding pairs of READ|WRITE_ONCE().
    
    Reviewed-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Qian Cai <cai@lca.pw>
    Link: https://lore.kernel.org/r/20200222043111.2227-1-cai@lca.pw
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 04a244c8e61f043d22207a0451c6175d86b3b30d
Author: Alex Maftei (amaftei) <amaftei@solarflare.com>
Date:   Wed Feb 26 17:33:19 2020 +0000

    sfc: fix timestamp reconstruction at 16-bit rollover points
    
    [ Upstream commit 23797b98909f34b75fd130369bde86f760db69d0 ]
    
    We can't just use the top bits of the last sync event as they could be
    off-by-one every 65,536 seconds, giving an error in reconstruction of
    65,536 seconds.
    
    This patch uses the difference in the bottom 16 bits (mod 2^16) to
    calculate an offset that needs to be applied to the last sync event to
    get to the current time.
    
    Signed-off-by: Alexandru-Mihai Maftei <amaftei@solarflare.com>
    Acked-by: Martin Habets <mhabets@solarflare.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 5043d35d37381cff1d37ae32e5fc3be070ee4e50
Author: Taehee Yoo <ap420073@gmail.com>
Date:   Thu Feb 27 12:26:15 2020 +0000

    net: rmnet: fix packet forwarding in rmnet bridge mode
    
    [ Upstream commit ad3cc31b599ea80f06b29ebdc18b3a39878a48d6 ]
    
    Packet forwarding is not working in rmnet bridge mode.
    Because when a packet is forwarded, skb_push() for an ethernet header
    is needed. But it doesn't call skb_push().
    So, the ethernet header will be lost.
    
    Test commands:
        modprobe rmnet
        ip netns add nst
        ip netns add nst2
        ip link add veth0 type veth peer name veth1
        ip link add veth2 type veth peer name veth3
        ip link set veth1 netns nst
        ip link set veth3 netns nst2
    
        ip link add rmnet0 link veth0 type rmnet mux_id 1
        ip link set veth2 master rmnet0
        ip link set veth0 up
        ip link set veth2 up
        ip link set rmnet0 up
        ip a a 192.168.100.1/24 dev rmnet0
    
        ip netns exec nst ip link set veth1 up
        ip netns exec nst ip a a 192.168.100.2/24 dev veth1
        ip netns exec nst2 ip link set veth3 up
        ip netns exec nst2 ip a a 192.168.100.3/24 dev veth3
        ip netns exec nst2 ping 192.168.100.2
    
    Fixes: 60d58f971c10 ("net: qualcomm: rmnet: Implement bridge mode")
    Signed-off-by: Taehee Yoo <ap420073@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 8cf81bf8ec15cbc46d4b5965cf8d11765254c1f1
Author: Taehee Yoo <ap420073@gmail.com>
Date:   Thu Feb 27 12:26:02 2020 +0000

    net: rmnet: fix bridge mode bugs
    
    [ Upstream commit d939b6d30bea1a2322bc536b12be0a7c4c2bccd7 ]
    
    In order to attach a bridge interface to the rmnet interface,
    "master" operation is used.
    (e.g. ip link set dummy1 master rmnet0)
    But, in the rmnet_add_bridge(), which is a callback of ->ndo_add_slave()
    doesn't register lower interface.
    So, ->ndo_del_slave() doesn't work.
    There are other problems too.
    1. It couldn't detect circular upper/lower interface relationship.
    2. It couldn't prevent stack overflow because of too deep depth
    of upper/lower interface
    3. It doesn't check the number of lower interfaces.
    4. Panics because of several reasons.
    
    The root problem of these issues is actually the same.
    So, in this patch, these all problems will be fixed.
    
    Test commands:
        modprobe rmnet
        ip link add dummy0 type dummy
        ip link add rmnet0 link dummy0 type rmnet mux_id 1
        ip link add dummy1 master rmnet0 type dummy
        ip link add dummy2 master rmnet0 type dummy
        ip link del rmnet0
        ip link del dummy2
        ip link del dummy1
    
    Splat looks like:
    [   41.867595][ T1164] general protection fault, probably for non-canonical address 0xdffffc0000000101I
    [   41.869993][ T1164] KASAN: null-ptr-deref in range [0x0000000000000808-0x000000000000080f]
    [   41.872950][ T1164] CPU: 0 PID: 1164 Comm: ip Not tainted 5.6.0-rc1+ #447
    [   41.873915][ T1164] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
    [   41.875161][ T1164] RIP: 0010:rmnet_unregister_bridge.isra.6+0x71/0xf0 [rmnet]
    [   41.876178][ T1164] Code: 48 89 ef 48 89 c6 5b 5d e9 fc fe ff ff e8 f7 f3 ff ff 48 8d b8 08 08 00 00 48 ba 00 7
    [   41.878925][ T1164] RSP: 0018:ffff8880c4d0f188 EFLAGS: 00010202
    [   41.879774][ T1164] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000101
    [   41.887689][ T1164] RDX: dffffc0000000000 RSI: ffffffffb8cf64f0 RDI: 0000000000000808
    [   41.888727][ T1164] RBP: ffff8880c40e4000 R08: ffffed101b3c0e3c R09: 0000000000000001
    [   41.889749][ T1164] R10: 0000000000000001 R11: ffffed101b3c0e3b R12: 1ffff110189a1e3c
    [   41.890783][ T1164] R13: ffff8880c4d0f200 R14: ffffffffb8d56160 R15: ffff8880ccc2c000
    [   41.891794][ T1164] FS:  00007f4300edc0c0(0000) GS:ffff8880d9c00000(0000) knlGS:0000000000000000
    [   41.892953][ T1164] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   41.893800][ T1164] CR2: 00007f43003bc8c0 CR3: 00000000ca53e001 CR4: 00000000000606f0
    [   41.894824][ T1164] Call Trace:
    [   41.895274][ T1164]  ? rcu_is_watching+0x2c/0x80
    [   41.895895][ T1164]  rmnet_config_notify_cb+0x1f7/0x590 [rmnet]
    [   41.896687][ T1164]  ? rmnet_unregister_bridge.isra.6+0xf0/0xf0 [rmnet]
    [   41.897611][ T1164]  ? rmnet_unregister_bridge.isra.6+0xf0/0xf0 [rmnet]
    [   41.898508][ T1164]  ? __module_text_address+0x13/0x140
    [   41.899162][ T1164]  notifier_call_chain+0x90/0x160
    [   41.899814][ T1164]  rollback_registered_many+0x660/0xcf0
    [   41.900544][ T1164]  ? netif_set_real_num_tx_queues+0x780/0x780
    [   41.901316][ T1164]  ? __lock_acquire+0xdfe/0x3de0
    [   41.901958][ T1164]  ? memset+0x1f/0x40
    [   41.902468][ T1164]  ? __nla_validate_parse+0x98/0x1ab0
    [   41.903166][ T1164]  unregister_netdevice_many.part.133+0x13/0x1b0
    [   41.903988][ T1164]  rtnl_delete_link+0xbc/0x100
    [ ... ]
    
    Fixes: 60d58f971c10 ("net: qualcomm: rmnet: Implement bridge mode")
    Signed-off-by: Taehee Yoo <ap420073@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 799781649bb5830cd28fe88e7b45f552bc3bb2e4
Author: Taehee Yoo <ap420073@gmail.com>
Date:   Thu Feb 27 12:25:43 2020 +0000

    net: rmnet: use upper/lower device infrastructure
    
    [ Upstream commit 037f9cdf72fb8a7ff9ec2b5dd05336ec1492bdf1 ]
    
    netdev_upper_dev_link() is useful to manage lower/upper interfaces.
    And this function internally validates looping, maximum depth.
    All or most virtual interfaces that could have a real interface
    (e.g. macsec, macvlan, ipvlan etc.) use lower/upper infrastructure.
    
    Test commands:
        modprobe rmnet
        ip link add dummy0 type dummy
        ip link add rmnet1 link dummy0 type rmnet mux_id 1
        for i in {2..100}
        do
            let A=$i-1
            ip link add rmnet$i link rmnet$A type rmnet mux_id $i
        done
        ip link del dummy0
    
    The purpose of the test commands is to make stack overflow.
    
    Splat looks like:
    [   52.411438][ T1395] BUG: KASAN: slab-out-of-bounds in find_busiest_group+0x27e/0x2c00
    [   52.413218][ T1395] Write of size 64 at addr ffff8880c774bde0 by task ip/1395
    [   52.414841][ T1395]
    [   52.430720][ T1395] CPU: 1 PID: 1395 Comm: ip Not tainted 5.6.0-rc1+ #447
    [   52.496511][ T1395] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
    [   52.513597][ T1395] Call Trace:
    [   52.546516][ T1395]
    [   52.558773][ T1395] Allocated by task 3171537984:
    [   52.588290][ T1395] BUG: unable to handle page fault for address: ffffffffb999e260
    [   52.589311][ T1395] #PF: supervisor read access in kernel mode
    [   52.590529][ T1395] #PF: error_code(0x0000) - not-present page
    [   52.591374][ T1395] PGD d6818067 P4D d6818067 PUD d6819063 PMD 0
    [   52.592288][ T1395] Thread overran stack, or stack corrupted
    [   52.604980][ T1395] Oops: 0000 [#1] SMP DEBUG_PAGEALLOC KASAN PTI
    [   52.605856][ T1395] CPU: 1 PID: 1395 Comm: ip Not tainted 5.6.0-rc1+ #447
    [   52.611764][ T1395] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
    [   52.621520][ T1395] RIP: 0010:stack_depot_fetch+0x10/0x30
    [   52.622296][ T1395] Code: ff e9 f9 fe ff ff 48 89 df e8 9c 1d 91 ff e9 ca fe ff ff cc cc cc cc cc cc cc 89 f8 0
    [   52.627887][ T1395] RSP: 0018:ffff8880c774bb60 EFLAGS: 00010006
    [   52.628735][ T1395] RAX: 00000000001f8880 RBX: ffff8880c774d140 RCX: 0000000000000000
    [   52.631773][ T1395] RDX: 000000000000001d RSI: ffff8880c774bb68 RDI: 0000000000003ff0
    [   52.649584][ T1395] RBP: ffffea00031dd200 R08: ffffed101b43e403 R09: ffffed101b43e403
    [   52.674857][ T1395] R10: 0000000000000001 R11: ffffed101b43e402 R12: ffff8880d900e5c0
    [   52.678257][ T1395] R13: ffff8880c774c000 R14: 0000000000000000 R15: dffffc0000000000
    [   52.694541][ T1395] FS:  00007fe867f6e0c0(0000) GS:ffff8880da000000(0000) knlGS:0000000000000000
    [   52.764039][ T1395] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   52.815008][ T1395] CR2: ffffffffb999e260 CR3: 00000000c26aa005 CR4: 00000000000606e0
    [   52.862312][ T1395] Call Trace:
    [   52.887133][ T1395] Modules linked in: dummy rmnet veth openvswitch nsh nf_conncount nf_nat nf_conntrack nf_dex
    [   52.936749][ T1395] CR2: ffffffffb999e260
    [   52.965695][ T1395] ---[ end trace 7e32ca99482dbb31 ]---
    [   52.966556][ T1395] RIP: 0010:stack_depot_fetch+0x10/0x30
    [   52.971083][ T1395] Code: ff e9 f9 fe ff ff 48 89 df e8 9c 1d 91 ff e9 ca fe ff ff cc cc cc cc cc cc cc 89 f8 0
    [   53.003650][ T1395] RSP: 0018:ffff8880c774bb60 EFLAGS: 00010006
    [   53.043183][ T1395] RAX: 00000000001f8880 RBX: ffff8880c774d140 RCX: 0000000000000000
    [   53.076480][ T1395] RDX: 000000000000001d RSI: ffff8880c774bb68 RDI: 0000000000003ff0
    [   53.093858][ T1395] RBP: ffffea00031dd200 R08: ffffed101b43e403 R09: ffffed101b43e403
    [   53.112795][ T1395] R10: 0000000000000001 R11: ffffed101b43e402 R12: ffff8880d900e5c0
    [   53.139837][ T1395] R13: ffff8880c774c000 R14: 0000000000000000 R15: dffffc0000000000
    [   53.141500][ T1395] FS:  00007fe867f6e0c0(0000) GS:ffff8880da000000(0000) knlGS:0000000000000000
    [   53.143343][ T1395] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   53.152007][ T1395] CR2: ffffffffb999e260 CR3: 00000000c26aa005 CR4: 00000000000606e0
    [   53.156459][ T1395] Kernel panic - not syncing: Fatal exception
    [   54.213570][ T1395] Shutting down cpus with NMI
    [   54.354112][ T1395] Kernel Offset: 0x33000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0x)
    [   54.355687][ T1395] Rebooting in 5 seconds..
    
    Fixes: b37f78f234bf ("net: qualcomm: rmnet: Fix crash on real dev unregistration")
    Signed-off-by: Taehee Yoo <ap420073@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 48c5bfbbcec1e9218451611ff576901807bbbfc5
Author: Taehee Yoo <ap420073@gmail.com>
Date:   Thu Feb 27 12:25:19 2020 +0000

    net: rmnet: do not allow to change mux id if mux id is duplicated
    
    [ Upstream commit 1dc49e9d164cd7e11c81279c83db84a147e14740 ]
    
    Basically, duplicate mux id isn't be allowed.
    So, the creation of rmnet will be failed if there is duplicate mux id
    is existing.
    But, changelink routine doesn't check duplicate mux id.
    
    Test commands:
        modprobe rmnet
        ip link add dummy0 type dummy
        ip link add rmnet0 link dummy0 type rmnet mux_id 1
        ip link add rmnet1 link dummy0 type rmnet mux_id 2
        ip link set rmnet1 type rmnet mux_id 1
    
    Fixes: 23790ef12082 ("net: qualcomm: rmnet: Allow to configure flags for existing devices")
    Signed-off-by: Taehee Yoo <ap420073@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 7111ec0927f14b52c16577d281862faae2178fed
Author: Taehee Yoo <ap420073@gmail.com>
Date:   Thu Feb 27 12:25:05 2020 +0000

    net: rmnet: remove rcu_read_lock in rmnet_force_unassociate_device()
    
    [ Upstream commit c026d970102e9af9958edefb4a015702c6aab636 ]
    
    The notifier_call() of the slave interface removes rmnet interface with
    unregister_netdevice_queue().
    But, before calling unregister_netdevice_queue(), it acquires
    rcu readlock.
    In the RCU critical section, sleeping isn't be allowed.
    But, unregister_netdevice_queue() internally calls synchronize_net(),
    which would sleep.
    So, suspicious RCU usage warning occurs.
    
    Test commands:
        modprobe rmnet
        ip link add dummy0 type dummy
        ip link add dummy1 type dummy
        ip link add rmnet0 link dummy0 type rmnet mux_id 1
        ip link set dummy1 master rmnet0
        ip link del dummy0
    
    Splat looks like:
    [   79.639245][ T1195] =============================
    [   79.640134][ T1195] WARNING: suspicious RCU usage
    [   79.640852][ T1195] 5.6.0-rc1+ #447 Not tainted
    [   79.641657][ T1195] -----------------------------
    [   79.642472][ T1195] ./include/linux/rcupdate.h:273 Illegal context switch in RCU read-side critical section!
    [   79.644043][ T1195]
    [   79.644043][ T1195] other info that might help us debug this:
    [   79.644043][ T1195]
    [   79.645682][ T1195]
    [   79.645682][ T1195] rcu_scheduler_active = 2, debug_locks = 1
    [   79.646980][ T1195] 2 locks held by ip/1195:
    [   79.647629][ T1195]  #0: ffffffffa3cf64f0 (rtnl_mutex){+.+.}, at: rtnetlink_rcv_msg+0x457/0x890
    [   79.649312][ T1195]  #1: ffffffffa39256c0 (rcu_read_lock){....}, at: rmnet_config_notify_cb+0xf0/0x590 [rmnet]
    [   79.651717][ T1195]
    [   79.651717][ T1195] stack backtrace:
    [   79.652650][ T1195] CPU: 3 PID: 1195 Comm: ip Not tainted 5.6.0-rc1+ #447
    [   79.653702][ T1195] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
    [   79.655037][ T1195] Call Trace:
    [   79.655560][ T1195]  dump_stack+0x96/0xdb
    [   79.656252][ T1195]  ___might_sleep+0x345/0x440
    [   79.656994][ T1195]  synchronize_net+0x18/0x30
    [   79.661132][ T1195]  netdev_rx_handler_unregister+0x40/0xb0
    [   79.666266][ T1195]  rmnet_unregister_real_device+0x42/0xb0 [rmnet]
    [   79.667211][ T1195]  rmnet_config_notify_cb+0x1f7/0x590 [rmnet]
    [   79.668121][ T1195]  ? rmnet_unregister_bridge.isra.6+0xf0/0xf0 [rmnet]
    [   79.669166][ T1195]  ? rmnet_unregister_bridge.isra.6+0xf0/0xf0 [rmnet]
    [   79.670286][ T1195]  ? __module_text_address+0x13/0x140
    [   79.671139][ T1195]  notifier_call_chain+0x90/0x160
    [   79.671973][ T1195]  rollback_registered_many+0x660/0xcf0
    [   79.672893][ T1195]  ? netif_set_real_num_tx_queues+0x780/0x780
    [   79.675091][ T1195]  ? __lock_acquire+0xdfe/0x3de0
    [   79.675825][ T1195]  ? memset+0x1f/0x40
    [   79.676367][ T1195]  ? __nla_validate_parse+0x98/0x1ab0
    [   79.677290][ T1195]  unregister_netdevice_many.part.133+0x13/0x1b0
    [   79.678163][ T1195]  rtnl_delete_link+0xbc/0x100
    [ ... ]
    
    Fixes: ceed73a2cf4a ("drivers: net: ethernet: qualcomm: rmnet: Initial implementation")
    Signed-off-by: Taehee Yoo <ap420073@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 5cd211aa255f6de3e1b525a206e388f916aad482
Author: Taehee Yoo <ap420073@gmail.com>
Date:   Thu Feb 27 12:24:45 2020 +0000

    net: rmnet: fix suspicious RCU usage
    
    [ Upstream commit 102210f7664442d8c0ce332c006ea90626df745b ]
    
    rmnet_get_port() internally calls rcu_dereference_rtnl(),
    which checks RTNL.
    But rmnet_get_port() could be called by packet path.
    The packet path is not protected by RTNL.
    So, the suspicious RCU usage problem occurs.
    
    Test commands:
        modprobe rmnet
        ip netns add nst
        ip link add veth0 type veth peer name veth1
        ip link set veth1 netns nst
        ip link add rmnet0 link veth0 type rmnet mux_id 1
        ip netns exec nst ip link add rmnet1 link veth1 type rmnet mux_id 1
        ip netns exec nst ip link set veth1 up
        ip netns exec nst ip link set rmnet1 up
        ip netns exec nst ip a a 192.168.100.2/24 dev rmnet1
        ip link set veth0 up
        ip link set rmnet0 up
        ip a a 192.168.100.1/24 dev rmnet0
        ping 192.168.100.2
    
    Splat looks like:
    [  146.630958][ T1174] WARNING: suspicious RCU usage
    [  146.631735][ T1174] 5.6.0-rc1+ #447 Not tainted
    [  146.632387][ T1174] -----------------------------
    [  146.633151][ T1174] drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c:386 suspicious rcu_dereference_check() !
    [  146.634742][ T1174]
    [  146.634742][ T1174] other info that might help us debug this:
    [  146.634742][ T1174]
    [  146.645992][ T1174]
    [  146.645992][ T1174] rcu_scheduler_active = 2, debug_locks = 1
    [  146.646937][ T1174] 5 locks held by ping/1174:
    [  146.647609][ T1174]  #0: ffff8880c31dea70 (sk_lock-AF_INET){+.+.}, at: raw_sendmsg+0xab8/0x2980
    [  146.662463][ T1174]  #1: ffffffff93925660 (rcu_read_lock_bh){....}, at: ip_finish_output2+0x243/0x2150
    [  146.671696][ T1174]  #2: ffffffff93925660 (rcu_read_lock_bh){....}, at: __dev_queue_xmit+0x213/0x2940
    [  146.673064][ T1174]  #3: ffff8880c19ecd58 (&dev->qdisc_running_key#7){+...}, at: ip_finish_output2+0x714/0x2150
    [  146.690358][ T1174]  #4: ffff8880c5796898 (&dev->qdisc_xmit_lock_key#3){+.-.}, at: sch_direct_xmit+0x1e2/0x1020
    [  146.699875][ T1174]
    [  146.699875][ T1174] stack backtrace:
    [  146.701091][ T1174] CPU: 0 PID: 1174 Comm: ping Not tainted 5.6.0-rc1+ #447
    [  146.705215][ T1174] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
    [  146.706565][ T1174] Call Trace:
    [  146.707102][ T1174]  dump_stack+0x96/0xdb
    [  146.708007][ T1174]  rmnet_get_port.part.9+0x76/0x80 [rmnet]
    [  146.709233][ T1174]  rmnet_egress_handler+0x107/0x420 [rmnet]
    [  146.710492][ T1174]  ? sch_direct_xmit+0x1e2/0x1020
    [  146.716193][ T1174]  rmnet_vnd_start_xmit+0x3d/0xa0 [rmnet]
    [  146.717012][ T1174]  dev_hard_start_xmit+0x160/0x740
    [  146.717854][ T1174]  sch_direct_xmit+0x265/0x1020
    [  146.718577][ T1174]  ? register_lock_class+0x14d0/0x14d0
    [  146.719429][ T1174]  ? dev_watchdog+0xac0/0xac0
    [  146.723738][ T1174]  ? __dev_queue_xmit+0x15fd/0x2940
    [  146.724469][ T1174]  ? lock_acquire+0x164/0x3b0
    [  146.725172][ T1174]  __dev_queue_xmit+0x20c7/0x2940
    [ ... ]
    
    Fixes: ceed73a2cf4a ("drivers: net: ethernet: qualcomm: rmnet: Initial implementation")
    Signed-off-by: Taehee Yoo <ap420073@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit be045358257744bb90c17c593db4358cadc8b37d
Author: Taehee Yoo <ap420073@gmail.com>
Date:   Thu Feb 27 12:24:26 2020 +0000

    net: rmnet: fix NULL pointer dereference in rmnet_changelink()
    
    [ Upstream commit 1eb1f43a6e37282348a41e3d68f5e9a6a4359212 ]
    
    In the rmnet_changelink(), it uses IFLA_LINK without checking
    NULL pointer.
    tb[IFLA_LINK] could be NULL pointer.
    So, NULL-ptr-deref could occur.
    
    rmnet already has a lower interface (real_dev).
    So, after this patch, rmnet_changelink() does not use IFLA_LINK anymore.
    
    Test commands:
        modprobe rmnet
        ip link add dummy0 type dummy
        ip link add rmnet0 link dummy0 type rmnet mux_id 1
        ip link set rmnet0 type rmnet mux_id 2
    
    Splat looks like:
    [   90.578726][ T1131] general protection fault, probably for non-canonical address 0xdffffc0000000000I
    [   90.581121][ T1131] KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
    [   90.582380][ T1131] CPU: 2 PID: 1131 Comm: ip Not tainted 5.6.0-rc1+ #447
    [   90.584285][ T1131] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
    [   90.587506][ T1131] RIP: 0010:rmnet_changelink+0x5a/0x8a0 [rmnet]
    [   90.588546][ T1131] Code: 83 ec 20 48 c1 ea 03 80 3c 02 00 0f 85 6f 07 00 00 48 8b 5e 28 48 b8 00 00 00 00 00 0
    [   90.591447][ T1131] RSP: 0018:ffff8880ce78f1b8 EFLAGS: 00010247
    [   90.592329][ T1131] RAX: dffffc0000000000 RBX: 0000000000000000 RCX: ffff8880ce78f8b0
    [   90.593253][ T1131] RDX: 0000000000000000 RSI: ffff8880ce78f4a0 RDI: 0000000000000004
    [   90.594058][ T1131] RBP: ffff8880cf543e00 R08: 0000000000000002 R09: 0000000000000002
    [   90.594859][ T1131] R10: ffffffffc0586a40 R11: 0000000000000000 R12: ffff8880ca47c000
    [   90.595690][ T1131] R13: ffff8880ca47c000 R14: ffff8880cf545000 R15: 0000000000000000
    [   90.596553][ T1131] FS:  00007f21f6c7e0c0(0000) GS:ffff8880da400000(0000) knlGS:0000000000000000
    [   90.597504][ T1131] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   90.599418][ T1131] CR2: 0000556e413db458 CR3: 00000000c917a002 CR4: 00000000000606e0
    [   90.600289][ T1131] Call Trace:
    [   90.600631][ T1131]  __rtnl_newlink+0x922/0x1270
    [   90.601194][ T1131]  ? lock_downgrade+0x6e0/0x6e0
    [   90.601724][ T1131]  ? rtnl_link_unregister+0x220/0x220
    [   90.602309][ T1131]  ? lock_acquire+0x164/0x3b0
    [   90.602784][ T1131]  ? is_bpf_image_address+0xff/0x1d0
    [   90.603331][ T1131]  ? rtnl_newlink+0x4c/0x90
    [   90.603810][ T1131]  ? kernel_text_address+0x111/0x140
    [   90.604419][ T1131]  ? __kernel_text_address+0xe/0x30
    [   90.604981][ T1131]  ? unwind_get_return_address+0x5f/0xa0
    [   90.605616][ T1131]  ? create_prof_cpu_mask+0x20/0x20
    [   90.606304][ T1131]  ? arch_stack_walk+0x83/0xb0
    [   90.606985][ T1131]  ? stack_trace_save+0x82/0xb0
    [   90.607656][ T1131]  ? stack_trace_consume_entry+0x160/0x160
    [   90.608503][ T1131]  ? deactivate_slab.isra.78+0x2c5/0x800
    [   90.609336][ T1131]  ? kasan_unpoison_shadow+0x30/0x40
    [   90.610096][ T1131]  ? kmem_cache_alloc_trace+0x135/0x350
    [   90.610889][ T1131]  ? rtnl_newlink+0x4c/0x90
    [   90.611512][ T1131]  rtnl_newlink+0x65/0x90
    [ ... ]
    
    Fixes: 23790ef12082 ("net: qualcomm: rmnet: Allow to configure flags for existing devices")
    Signed-off-by: Taehee Yoo <ap420073@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 71ae5b69149098417f3720ece61a008d81c6d617
Author: Taehee Yoo <ap420073@gmail.com>
Date:   Thu Feb 27 12:23:52 2020 +0000

    net: rmnet: fix NULL pointer dereference in rmnet_newlink()
    
    [ Upstream commit 93b5cbfa9636d385126f211dca9efa7e3f683202 ]
    
    rmnet registers IFLA_LINK interface as a lower interface.
    But, IFLA_LINK could be NULL.
    In the current code, rmnet doesn't check IFLA_LINK.
    So, panic would occur.
    
    Test commands:
        modprobe rmnet
        ip link add rmnet0 type rmnet mux_id 1
    
    Splat looks like:
    [   36.826109][ T1115] general protection fault, probably for non-canonical address 0xdffffc0000000000I
    [   36.838817][ T1115] KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
    [   36.839908][ T1115] CPU: 1 PID: 1115 Comm: ip Not tainted 5.6.0-rc1+ #447
    [   36.840569][ T1115] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
    [   36.841408][ T1115] RIP: 0010:rmnet_newlink+0x54/0x510 [rmnet]
    [   36.841986][ T1115] Code: 83 ec 18 48 c1 e9 03 80 3c 01 00 0f 85 d4 03 00 00 48 8b 6a 28 48 b8 00 00 00 00 00 c
    [   36.843923][ T1115] RSP: 0018:ffff8880b7e0f1c0 EFLAGS: 00010247
    [   36.844756][ T1115] RAX: dffffc0000000000 RBX: ffff8880d14cca00 RCX: 1ffff11016fc1e99
    [   36.845859][ T1115] RDX: 0000000000000000 RSI: ffff8880c3d04000 RDI: 0000000000000004
    [   36.846961][ T1115] RBP: 0000000000000000 R08: ffff8880b7e0f8b0 R09: ffff8880b6ac2d90
    [   36.848020][ T1115] R10: ffffffffc0589a40 R11: ffffed1016d585b7 R12: ffffffff88ceaf80
    [   36.848788][ T1115] R13: ffff8880c3d04000 R14: ffff8880b7e0f8b0 R15: ffff8880c3d04000
    [   36.849546][ T1115] FS:  00007f50ab3360c0(0000) GS:ffff8880da000000(0000) knlGS:0000000000000000
    [   36.851784][ T1115] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   36.852422][ T1115] CR2: 000055871afe5ab0 CR3: 00000000ae246001 CR4: 00000000000606e0
    [   36.853181][ T1115] Call Trace:
    [   36.853514][ T1115]  __rtnl_newlink+0xbdb/0x1270
    [   36.853967][ T1115]  ? lock_downgrade+0x6e0/0x6e0
    [   36.854420][ T1115]  ? rtnl_link_unregister+0x220/0x220
    [   36.854936][ T1115]  ? lock_acquire+0x164/0x3b0
    [   36.855376][ T1115]  ? is_bpf_image_address+0xff/0x1d0
    [   36.855884][ T1115]  ? rtnl_newlink+0x4c/0x90
    [   36.856304][ T1115]  ? kernel_text_address+0x111/0x140
    [   36.856857][ T1115]  ? __kernel_text_address+0xe/0x30
    [   36.857440][ T1115]  ? unwind_get_return_address+0x5f/0xa0
    [   36.858063][ T1115]  ? create_prof_cpu_mask+0x20/0x20
    [   36.858644][ T1115]  ? arch_stack_walk+0x83/0xb0
    [   36.859171][ T1115]  ? stack_trace_save+0x82/0xb0
    [   36.859710][ T1115]  ? stack_trace_consume_entry+0x160/0x160
    [   36.860357][ T1115]  ? deactivate_slab.isra.78+0x2c5/0x800
    [   36.860928][ T1115]  ? kasan_unpoison_shadow+0x30/0x40
    [   36.861520][ T1115]  ? kmem_cache_alloc_trace+0x135/0x350
    [   36.862125][ T1115]  ? rtnl_newlink+0x4c/0x90
    [   36.864073][ T1115]  rtnl_newlink+0x65/0x90
    [ ... ]
    
    Fixes: ceed73a2cf4a ("drivers: net: ethernet: qualcomm: rmnet: Initial implementation")
    Signed-off-by: Taehee Yoo <ap420073@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 6bd688f39430f8b1a3a7ba1951db4bdc16634242
Author: Luo bin <luobin9@huawei.com>
Date:   Thu Feb 27 06:34:43 2020 +0000

    hinic: fix a bug of setting hw_ioctxt
    
    [ Upstream commit d2ed69ce9ed3477e2a9527e6b89fe4689d99510e ]
    
    a reserved field is used to signify prime physical function index
    in the latest firmware version, so we must assign a value to it
    correctly
    
    Signed-off-by: Luo bin <luobin9@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit e78ae0038ee8dd366fc9e306596a9cfa1266878c
Author: Luo bin <luobin9@huawei.com>
Date:   Thu Feb 27 06:34:42 2020 +0000

    hinic: fix a irq affinity bug
    
    [ Upstream commit 0bff777bd0cba73ad4cd0145696ad284d7e6a99f ]
    
    can not use a local variable as an input parameter of
    irq_set_affinity_hint
    
    Signed-off-by: Luo bin <luobin9@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 851346e59122de504f185d83cd9315a4170f1fc5
Author: yangerkun <yangerkun@huawei.com>
Date:   Wed Feb 26 11:54:35 2020 +0800

    slip: not call free_netdev before rtnl_unlock in slip_open
    
    [ Upstream commit f596c87005f7b1baeb7d62d9a9e25d68c3dfae10 ]
    
    As the description before netdev_run_todo, we cannot call free_netdev
    before rtnl_unlock, fix it by reorder the code.
    
    Signed-off-by: yangerkun <yangerkun@huawei.com>
    Reviewed-by: Oliver Hartkopp <socketcan@hartkopp.net>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 797479da0ae9cf7c45d0e97c0258622b4325a919
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Mon Feb 24 12:47:14 2020 -0800

    signal: avoid double atomic counter increments for user accounting
    
    [ Upstream commit fda31c50292a5062332fa0343c084bd9f46604d9 ]
    
    When queueing a signal, we increment both the users count of pending
    signals (for RLIMIT_SIGPENDING tracking) and we increment the refcount
    of the user struct itself (because we keep a reference to the user in
    the signal structure in order to correctly account for it when freeing).
    
    That turns out to be fairly expensive, because both of them are atomic
    updates, and particularly under extreme signal handling pressure on big
    machines, you can get a lot of cache contention on the user struct.
    That can then cause horrid cacheline ping-pong when you do these
    multiple accesses.
    
    So change the reference counting to only pin the user for the _first_
    pending signal, and to unpin it when the last pending signal is
    dequeued.  That means that when a user sees a lot of concurrent signal
    queuing - which is the only situation when this matters - the only
    atomic access needed is generally the 'sigpending' count update.
    
    This was noticed because of a particularly odd timing artifact on a
    dual-socket 96C/192T Cascade Lake platform: when you get into bad
    contention, on that machine for some reason seems to be much worse when
    the contention happens in the upper 32-byte half of the cacheline.
    
    As a result, the kernel test robot will-it-scale 'signal1' benchmark had
    an odd performance regression simply due to random alignment of the
    'struct user_struct' (and pointed to a completely unrelated and
    apparently nonsensical commit for the regression).
    
    Avoiding the double increments (and decrements on the dequeueing side,
    of course) makes for much less contention and hugely improved
    performance on that will-it-scale microbenchmark.
    
    Quoting Feng Tang:
    
     "It makes a big difference, that the performance score is tripled! bump
      from original 17000 to 54000. Also the gap between 5.0-rc6 and
      5.0-rc6+Jiri's patch is reduced to around 2%"
    
    [ The "2% gap" is the odd cacheline placement difference on that
      platform: under the extreme contention case, the effect of which half
      of the cacheline was hot was 5%, so with the reduced contention the
      odd timing artifact is reduced too ]
    
    It does help in the non-contended case too, but is not nearly as
    noticeable.
    
    Reported-and-tested-by: Feng Tang <feng.tang@intel.com>
    Cc: Eric W. Biederman <ebiederm@xmission.com>
    Cc: Huang, Ying <ying.huang@intel.com>
    Cc: Philip Li <philip.li@intel.com>
    Cc: Andi Kleen <andi.kleen@intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit ebd1b09e811295d5ea96daad0caa7eae19a2e984
Author: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>
Date:   Sun Feb 23 20:03:02 2020 +0530

    mac80211: rx: avoid RCU list traversal under mutex
    
    [ Upstream commit 253216ffb2a002a682c6f68bd3adff5b98b71de8 ]
    
    local->sta_mtx is held in __ieee80211_check_fast_rx_iface().
    No need to use list_for_each_entry_rcu() as it also requires
    a cond argument to avoid false lockdep warnings when not used in
    RCU read-side section (with CONFIG_PROVE_RCU_LIST).
    Therefore use list_for_each_entry();
    
    Signed-off-by: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>
    Link: https://lore.kernel.org/r/20200223143302.15390-1-madhuparnabhowmik10@gmail.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit a17fcd59a2c89106733412e4e26695dd062bba02
Author: Marek Vasut <marex@denx.de>
Date:   Sun Feb 23 14:38:40 2020 +0100

    net: ks8851-ml: Fix IRQ handling and locking
    
    [ Upstream commit 44343418d0f2f623cb9da6f5000df793131cbe3b ]
    
    The KS8851 requires that packet RX and TX are mutually exclusive.
    Currently, the driver hopes to achieve this by disabling interrupt
    from the card by writing the card registers and by disabling the
    interrupt on the interrupt controller. This however is racy on SMP.
    
    Replace this approach by expanding the spinlock used around the
    ks_start_xmit() TX path to ks_irq() RX path to assure true mutual
    exclusion and remove the interrupt enabling/disabling, which is
    now not needed anymore. Furthermore, disable interrupts also in
    ks_net_stop(), which was missing before.
    
    Note that a massive improvement here would be to re-use the KS8851
    driver approach, which is to move the TX path into a worker thread,
    interrupt handling to threaded interrupt, and synchronize everything
    with mutexes, but that would be a much bigger rework, for a separate
    patch.
    
    Signed-off-by: Marek Vasut <marex@denx.de>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Lukas Wunner <lukas@wunner.de>
    Cc: Petr Stetiar <ynezz@true.cz>
    Cc: YueHaibing <yuehaibing@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 90d77cff14fe51aff4a99846655e3988a9a2aa09
Author: Daniele Palmas <dnlplm@gmail.com>
Date:   Fri Feb 21 14:17:05 2020 +0100

    net: usb: qmi_wwan: restore mtu min/max values after raw_ip switch
    
    [ Upstream commit eae7172f8141eb98e64e6e81acc9e9d5b2add127 ]
    
    usbnet creates network interfaces with min_mtu = 0 and
    max_mtu = ETH_MAX_MTU.
    
    These values are not modified by qmi_wwan when the network interface
    is created initially, allowing, for example, to set mtu greater than 1500.
    
    When a raw_ip switch is done (raw_ip set to 'Y', then set to 'N') the mtu
    values for the network interface are set through ether_setup, with
    min_mtu = ETH_MIN_MTU and max_mtu = ETH_DATA_LEN, not allowing anymore to
    set mtu greater than 1500 (error: mtu greater than device maximum).
    
    The patch restores the original min/max mtu values set by usbnet after a
    raw_ip switch.
    
    Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
    Acked-by: Bjørn Mork <bjorn@mork.no>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 8343dffacc1b4b0388d5ff848f000e831d93f73e
Author: Igor Druzhinin <igor.druzhinin@citrix.com>
Date:   Tue Jan 14 14:43:19 2020 +0000

    scsi: libfc: free response frame from GPN_ID
    
    [ Upstream commit ff6993bb79b9f99bdac0b5378169052931b65432 ]
    
    fc_disc_gpn_id_resp() should be the last function using it so free it here
    to avoid memory leak.
    
    Link: https://lore.kernel.org/r/1579013000-14570-2-git-send-email-igor.druzhinin@citrix.com
    Reviewed-by: Hannes Reinecke <hare@suse.de>
    Signed-off-by: Igor Druzhinin <igor.druzhinin@citrix.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 81aebc37d223ca58c9102399c38fce601cb1b084
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Fri Feb 21 10:44:50 2020 +0100

    cfg80211: check reg_rule for NULL in handle_channel_custom()
    
    [ Upstream commit a7ee7d44b57c9ae174088e53a668852b7f4f452d ]
    
    We may end up with a NULL reg_rule after the loop in
    handle_channel_custom() if the bandwidth didn't fit,
    check if this is the case and bail out if so.
    
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Link: https://lore.kernel.org/r/20200221104449.3b558a50201c.I4ad3725c4dacaefd2d18d3cc65ba6d18acd5dbfe@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 70056047a678e9325bada5efbb7d3a0cf6ac343f
Author: Kai-Heng Feng <kai.heng.feng@canonical.com>
Date:   Fri Feb 14 14:53:07 2020 +0800

    HID: i2c-hid: add Trekstor Surfbook E11B to descriptor override
    
    [ Upstream commit be0aba826c4a6ba5929def1962a90d6127871969 ]
    
    The Surfbook E11B uses the SIPODEV SP1064 touchpad, which does not supply
    descriptors, so it has to be added to the override list.
    
    BugLink: https://bugs.launchpad.net/bugs/1858299
    Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 2ca4fec1d0f0e6fcfb81fc4af0fed07eea8f687c
Author: Mansour Behabadi <mansour@oxplot.com>
Date:   Wed Jan 29 17:26:31 2020 +1100

    HID: apple: Add support for recent firmware on Magic Keyboards
    
    [ Upstream commit e433be929e63265b7412478eb7ff271467aee2d7 ]
    
    Magic Keyboards with more recent firmware (0x0100) report Fn key differently.
    Without this patch, Fn key may not behave as expected and may not be
    configurable via hid_apple fnmode module parameter.
    
    Signed-off-by: Mansour Behabadi <mansour@oxplot.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit e8faa2c49b863f2c545ec7087c03829335dda140
Author: Jean Delvare <jdelvare@suse.de>
Date:   Thu Feb 6 16:58:45 2020 +0100

    ACPI: watchdog: Allow disabling WDAT at boot
    
    [ Upstream commit 3f9e12e0df012c4a9a7fd7eb0d3ae69b459d6b2c ]
    
    In case the WDAT interface is broken, give the user an option to
    ignore it to let a native driver bind to the watchdog device instead.
    
    Signed-off-by: Jean Delvare <jdelvare@suse.de>
    Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 625d0b132e8a24e8b82a51ae81adce3745c548f6
Author: Faiz Abbas <faiz_abbas@ti.com>
Date:   Wed Jan 9 18:13:12 2019 +0530

    mmc: host: Fix Kconfig warnings on keystone_defconfig
    
    [ Upstream commit 287b1da6a458a30da2e5be745498d31092ebb001 ]
    
    Commit 961de0a856e3 ("mmc: sdhci-omap: Workaround errata regarding
    SDR104/HS200 tuning failures (i929)") added a select on TI_SOC_THERMAL
    for the driver to get temperature for tuning.
    
    However, this causes the following warning on keystone_defconfig because
    keystone does not support TI_SOC_THERMAL:
    
    "WARNING: unmet direct dependencies detected for TI_SOC_THERMAL"
    
    Fix this by changing the select to imply.
    
    Fixes: 961de0a856e3 ("mmc: sdhci-omap: Workaround errata regarding
    SDR104/HS200 tuning failures (i929)")
    Signed-off-by: Faiz Abbas <faiz_abbas@ti.com>
    Tested-by: Borislav Petkov <bp@suse.de>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 971d1725572158c9df4427b42070d3ccdd7ae6fd
Author: Faiz Abbas <faiz_abbas@ti.com>
Date:   Tue Dec 11 19:52:53 2018 +0530

    mmc: sdhci-omap: Workaround errata regarding SDR104/HS200 tuning failures (i929)
    
    [ Upstream commit 961de0a856e3a30c0238d1269c0b17f9b179b6c3 ]
    
    Errata i929 in certain OMAP5/DRA7XX/AM57XX silicon revisions
    (SPRZ426D - November 2014 - Revised February 2018 [1]) mentions
    unexpected tuning pattern errors. A small failure band may be present
    in the tuning range which may be missed by the current algorithm.
    Furthermore, the failure bands vary with temperature leading to
    different optimum tuning values for different temperatures.
    
    As suggested in the related Application Report (SPRACA9B - October 2017
    - Revised July 2018 [2]), tuning should be done in two stages.
    In stage 1, assign the optimum ratio in the maximum pass window for the
    current temperature. In stage 2, if the chosen value is close to the
    small failure band, move away from it in the appropriate direction.
    
    References:
    [1] http://www.ti.com/lit/pdf/sprz426
    [2] http://www.ti.com/lit/pdf/SPRACA9
    
    Signed-off-by: Faiz Abbas <faiz_abbas@ti.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 6811f1727af00233db22f67559b9e924e6c19593
Author: Faiz Abbas <faiz_abbas@ti.com>
Date:   Wed Nov 21 16:03:56 2018 +0530

    mmc: sdhci-omap: Add platform specific reset callback
    
    [ Upstream commit 5b0d62108b468b13410533c0ceea3821942bf592 ]
    
    The TRM (SPRUIC2C - January 2017 - Revised May 2018 [1]) forbids
    assertion of data reset while tuning is happening. Implement a
    platform specific callback that takes care of this condition.
    
    [1] http://www.ti.com/lit/pdf/spruic2 Section 25.5.1.2.4
    
    Acked-by: Kishon Vijay Abraham I <kishon@ti.com>
    Signed-off-by: Faiz Abbas <faiz_abbas@ti.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit e01975190d7b4932c002b96562fce26ffdd9e1e7
Author: Kim Phillips <kim.phillips@amd.com>
Date:   Wed Mar 11 14:13:21 2020 -0500

    perf/amd/uncore: Replace manual sampling check with CAP_NO_INTERRUPT flag
    
    [ Upstream commit f967140dfb7442e2db0868b03b961f9c59418a1b ]
    
    Enable the sampling check in kernel/events/core.c::perf_event_open(),
    which returns the more appropriate -EOPNOTSUPP.
    
    BEFORE:
    
      $ sudo perf record -a -e instructions,l3_request_g1.caching_l3_cache_accesses true
      Error:
      The sys_perf_event_open() syscall returned with 22 (Invalid argument) for event (l3_request_g1.caching_l3_cache_accesses).
      /bin/dmesg | grep -i perf may provide additional information.
    
    With nothing relevant in dmesg.
    
    AFTER:
    
      $ sudo perf record -a -e instructions,l3_request_g1.caching_l3_cache_accesses true
      Error:
      l3_request_g1.caching_l3_cache_accesses: PMU Hardware doesn't support sampling/overflow-interrupts. Try 'perf stat'
    
    Fixes: c43ca5091a37 ("perf/x86/amd: Add support for AMD NB and L2I "uncore" counters")
    Signed-off-by: Kim Phillips <kim.phillips@amd.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Acked-by: Peter Zijlstra <peterz@infradead.org>
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/20200311191323.13124-1-kim.phillips@amd.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>