commit 9ca505aaffe7bb6f9fe5271256cb0be02928edf2
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Fri Jun 24 10:22:27 2016 -0700

    Linux 4.6.3

commit c6ad700afe337609d7d0ee37be0e469f08e86a1a
Author: Linus Walleij <linus.walleij@linaro.org>
Date:   Wed Jun 15 22:57:38 2016 +0200

    gpio: make sure gpiod_to_irq() returns negative on NULL desc
    
    commit 79bb71bd1d93197ce227fa167b450b633f30a52b upstream.
    
    commit 54d77198fdfbc4f0fe11b4252c1d9c97d51a3264
    ("gpio: bail out silently on NULL descriptors")
    doesn't work for gpiod_to_irq(): drivers assume that NULL
    descriptors will give negative IRQ numbers in return.
    
    It has been pointed out that returning 0 is NO_IRQ and that
    drivers should be amended to treat this as an error, but that
    is for the longer term: now let us repair the semantics.
    
    Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
    Reported-by: Hans de Goede <hdegoede@redhat.com>
    Tested-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a5b62e5e2089996dc87189ea605f9f16e8920528
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Apr 1 15:37:59 2016 +0200

    netfilter: x_tables: introduce and use xt_copy_counters_from_user
    
    commit d7591f0c41ce3e67600a982bab6989ef0f07b3ce upstream.
    
    The three variants use same copy&pasted code, condense this into a
    helper and use that.
    
    Make sure info.name is 0-terminated.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1eed4f80c35ff0284de952803f72d459b776b798
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Apr 1 14:17:34 2016 +0200

    netfilter: x_tables: do compat validation via translate_table
    
    commit 09d9686047dbbe1cf4faa558d3ecc4aae2046054 upstream.
    
    This looks like refactoring, but its also a bug fix.
    
    Problem is that the compat path (32bit iptables, 64bit kernel) lacks a few
    sanity tests that are done in the normal path.
    
    For example, we do not check for underflows and the base chain policies.
    
    While its possible to also add such checks to the compat path, its more
    copy&pastry, for instance we cannot reuse check_underflow() helper as
    e->target_offset differs in the compat case.
    
    Other problem is that it makes auditing for validation errors harder; two
    places need to be checked and kept in sync.
    
    At a high level 32 bit compat works like this:
    1- initial pass over blob:
       validate match/entry offsets, bounds checking
       lookup all matches and targets
       do bookkeeping wrt. size delta of 32/64bit structures
       assign match/target.u.kernel pointer (points at kernel
       implementation, needed to access ->compatsize etc.)
    
    2- allocate memory according to the total bookkeeping size to
       contain the translated ruleset
    
    3- second pass over original blob:
       for each entry, copy the 32bit representation to the newly allocated
       memory.  This also does any special match translations (e.g.
       adjust 32bit to 64bit longs, etc).
    
    4- check if ruleset is free of loops (chase all jumps)
    
    5-first pass over translated blob:
       call the checkentry function of all matches and targets.
    
    The alternative implemented by this patch is to drop steps 3&4 from the
    compat process, the translation is changed into an intermediate step
    rather than a full 1:1 translate_table replacement.
    
    In the 2nd pass (step #3), change the 64bit ruleset back to a kernel
    representation, i.e. put() the kernel pointer and restore ->u.user.name .
    
    This gets us a 64bit ruleset that is in the format generated by a 64bit
    iptables userspace -- we can then use translate_table() to get the
    'native' sanity checks.
    
    This has two drawbacks:
    
    1. we re-validate all the match and target entry structure sizes even
    though compat translation is supposed to never generate bogus offsets.
    2. we put and then re-lookup each match and target.
    
    THe upside is that we get all sanity tests and ruleset validations
    provided by the normal path and can remove some duplicated compat code.
    
    iptables-restore time of autogenerated ruleset with 300k chains of form
    -A CHAIN0001 -m limit --limit 1/s -j CHAIN0002
    -A CHAIN0002 -m limit --limit 1/s -j CHAIN0003
    
    shows no noticeable differences in restore times:
    old:   0m30.796s
    new:   0m31.521s
    64bit: 0m25.674s
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 18a9d8f5228f1212d7c942b6c2f5957d4e4cdffb
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Apr 1 14:17:33 2016 +0200

    netfilter: x_tables: xt_compat_match_from_user doesn't need a retval
    
    commit 0188346f21e6546498c2a0f84888797ad4063fc5 upstream.
    
    Always returned 0.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6aeee1b1daee2cb73f174bac83d8414e821b0a8e
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Apr 1 14:17:31 2016 +0200

    netfilter: ip6_tables: simplify translate_compat_table args
    
    commit 329a0807124f12fe1c8032f95d8a8eb47047fb0e upstream.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5ff1827be7f3802f7689750a5c57573bcf4ce206
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Apr 1 14:17:30 2016 +0200

    netfilter: ip_tables: simplify translate_compat_table args
    
    commit 7d3f843eed29222254c9feab481f55175a1afcc9 upstream.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 352455661112a2300d70a0c322cd31389256b56f
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Apr 1 14:17:32 2016 +0200

    netfilter: arp_tables: simplify translate_compat_table args
    
    commit 8dddd32756f6fe8e4e82a63361119b7e2384e02f upstream.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit dd218276595f35a9a3e2fe1d0f1ed34634cac623
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed Jun 22 15:23:03 2016 -0700

    Revert "drm/i915: Exit cherryview_irq_handler() after one pass"
    
    This reverts commit 9dbaab56ac09f07a73fe83bf69bec3e31060080a.
    
    Turns out it was a bad idea and was fixed up "properly" in 4.7 but those
    patches are too big to put into 4.6, so let's just revert it for now.
    
    Reported-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Cc: Daniel Vetter <daniel@ffwll.ch>
    Cc: Peter Frühberger <peter.fruehberger@gmail.com>
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Cc: Jani Nikula <jani.nikula@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 842426d4e7085d7e3f65d9dc7d94e50f79cbbfe9
Author: Florian Westphal <fw@strlen.de>
Date:   Wed Jun 1 02:04:44 2016 +0200

    netfilter: x_tables: don't reject valid target size on some architectures
    
    commit 7b7eba0f3515fca3296b8881d583f7c1042f5226 upstream.
    
    Quoting John Stultz:
      In updating a 32bit arm device from 4.6 to Linus' current HEAD, I
      noticed I was having some trouble with networking, and realized that
      /proc/net/ip_tables_names was suddenly empty.
      Digging through the registration process, it seems we're catching on the:
    
       if (strcmp(t->u.user.name, XT_STANDARD_TARGET) == 0 &&
           target_offset + sizeof(struct xt_standard_target) != next_offset)
             return -EINVAL;
    
      Where next_offset seems to be 4 bytes larger then the
      offset + standard_target struct size.
    
    next_offset needs to be aligned via XT_ALIGN (so we can access all members
    of ip(6)t_entry struct).
    
    This problem didn't show up on i686 as it only needs 4-byte alignment for
    u64, but iptables userspace on other 32bit arches does insert extra padding.
    
    Reported-by: John Stultz <john.stultz@linaro.org>
    Tested-by: John Stultz <john.stultz@linaro.org>
    Fixes: 7ed2abddd20cf ("netfilter: x_tables: check standard target size too")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 04704bca3eef35f8874221750e11fad72b0764a3
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Apr 1 14:17:29 2016 +0200

    netfilter: x_tables: validate all offsets and sizes in a rule
    
    commit 13631bfc604161a9d69cd68991dff8603edd66f9 upstream.
    
    Validate that all matches (if any) add up to the beginning of
    the target and that each match covers at least the base structure size.
    
    The compat path should be able to safely re-use the function
    as the structures only differ in alignment; added a
    BUILD_BUG_ON just in case we have an arch that adds padding as well.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 98e02ab689f15b088f8d0baade85280ab21867b5
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Apr 1 14:17:28 2016 +0200

    netfilter: x_tables: check for bogus target offset
    
    commit ce683e5f9d045e5d67d1312a42b359cb2ab2a13c upstream.
    
    We're currently asserting that targetoff + targetsize <= nextoff.
    
    Extend it to also check that targetoff is >= sizeof(xt_entry).
    Since this is generic code, add an argument pointing to the start of the
    match/target, we can then derive the base structure size from the delta.
    
    We also need the e->elems pointer in a followup change to validate matches.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 71437bbb15d0ab06e344e8642895f59d18758ca7
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Apr 1 14:17:27 2016 +0200

    netfilter: x_tables: check standard target size too
    
    commit 7ed2abddd20cf8f6bd27f65bd218f26fa5bf7f44 upstream.
    
    We have targets and standard targets -- the latter carries a verdict.
    
    The ip/ip6tables validation functions will access t->verdict for the
    standard targets to fetch the jump offset or verdict for chainloop
    detection, but this happens before the targets get checked/validated.
    
    Thus we also need to check for verdict presence here, else t->verdict
    can point right after a blob.
    
    Spotted with UBSAN while testing malformed blobs.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0406d64a5de5676fb0c29e3f32cb0450fceab683
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Apr 1 14:17:26 2016 +0200

    netfilter: x_tables: add compat version of xt_check_entry_offsets
    
    commit fc1221b3a163d1386d1052184202d5dc50d302d1 upstream.
    
    32bit rulesets have different layout and alignment requirements, so once
    more integrity checks get added to xt_check_entry_offsets it will reject
    well-formed 32bit rulesets.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3902b6dcc704a07dbf79df7ba3cab990b808b6de
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Apr 1 14:17:25 2016 +0200

    netfilter: x_tables: assert minimum target size
    
    commit a08e4e190b866579896c09af59b3bdca821da2cd upstream.
    
    The target size includes the size of the xt_entry_target struct.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 23b109710e1b3223c1a581016fbdbf475346a539
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Apr 1 14:17:24 2016 +0200

    netfilter: x_tables: kill check_entry helper
    
    commit aa412ba225dd3bc36d404c28cdc3d674850d80d0 upstream.
    
    Once we add more sanity testing to xt_check_entry_offsets it
    becomes relvant if we're expecting a 32bit 'config_compat' blob
    or a normal one.
    
    Since we already have a lot of similar-named functions (check_entry,
    compat_check_entry, find_and_check_entry, etc.) and the current
    incarnation is short just fold its contents into the callers.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c164b34eaaa38fd49383996a6af4d65183bf289c
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Apr 1 14:17:23 2016 +0200

    netfilter: x_tables: add and use xt_check_entry_offsets
    
    commit 7d35812c3214afa5b37a675113555259cfd67b98 upstream.
    
    Currently arp/ip and ip6tables each implement a short helper to check that
    the target offset is large enough to hold one xt_entry_target struct and
    that t->u.target_size fits within the current rule.
    
    Unfortunately these checks are not sufficient.
    
    To avoid adding new tests to all of ip/ip6/arptables move the current
    checks into a helper, then extend this helper in followup patches.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a1a983f0dc802a9cead25a3d02f2b58ed2e41720
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Apr 1 14:17:22 2016 +0200

    netfilter: x_tables: validate targets of jumps
    
    commit 36472341017529e2b12573093cc0f68719300997 upstream.
    
    When we see a jump also check that the offset gets us to beginning of
    a rule (an ipt_entry).
    
    The extra overhead is negible, even with absurd cases.
    
    300k custom rules, 300k jumps to 'next' user chain:
    [ plus one jump from INPUT to first userchain ]:
    
    Before:
    real    0m24.874s
    user    0m7.532s
    sys     0m16.076s
    
    After:
    real    0m27.464s
    user    0m7.436s
    sys     0m18.840s
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 765dd5d6d074e28ce20fbe09469b4d7760e00934
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Apr 1 14:17:21 2016 +0200

    netfilter: x_tables: don't move to non-existent next rule
    
    commit f24e230d257af1ad7476c6e81a8dc3127a74204e upstream.
    
    Ben Hawkes says:
    
     In the mark_source_chains function (net/ipv4/netfilter/ip_tables.c) it
     is possible for a user-supplied ipt_entry structure to have a large
     next_offset field. This field is not bounds checked prior to writing a
     counter value at the supplied offset.
    
    Base chains enforce absolute verdict.
    
    User defined chains are supposed to end with an unconditional return,
    xtables userspace adds them automatically.
    
    But if such return is missing we will move to non-existent next rule.
    
    Reported-by: Ben Hawkes <hawkes@google.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0f5302662f1be744d7b89fbb7a27d30aec40ebad
Author: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Date:   Wed May 4 14:38:26 2016 +0200

    drm/core: Do not preserve framebuffer on rmfb, v4.
    
    commit f2d580b9a8149735cbc4b59c4a8df60173658140 upstream.
    
    It turns out that preserving framebuffers after the rmfb call breaks
    vmwgfx userspace. This was originally introduced because it was thought
    nobody relied on the behavior, but unfortunately it seems there are
    exceptions.
    
    drm_framebuffer_remove may fail with -EINTR now, so a straight revert
    is impossible. There is no way to remove the framebuffer from the lists
    and active planes without introducing a race because of the different
    locking requirements. Instead call drm_framebuffer_remove from a
    workqueue, which is unaffected by signals.
    
    Changes since v1:
    - Add comment.
    Changes since v2:
    - Add fastpath for refcount = 1. (danvet)
    Changes since v3:
    - Rebased.
    - Restore lastclose framebuffer removal too.
    
    Fixes: 13803132818c ("drm/core: Preserve the framebuffer after removing it.")
    Testcase: kms_rmfb_basic
    References: https://lists.freedesktop.org/archives/dri-devel/2016-March/102876.html
    Cc: Thomas Hellstrom <thellstrom@vmware.com>
    Cc: David Herrmann <dh.herrmann@gmail.com>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    Tested-by: Thomas Hellstrom <thellstrom@vmware.com> #v3
    Tested-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    Link: http://patchwork.freedesktop.org/patch/msgid/6c63ca37-0e7e-ac7f-a6d2-c7822e3d611f@linux.intel.com
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit faa9a645642292e354709e92dcf436b344961d92
Author: Helmut Grohne <h.grohne@intenta.de>
Date:   Fri Jun 3 14:15:32 2016 +0200

    gpio: zynq: initialize clock even without CONFIG_PM
    
    commit 0f84f29ff30bdb1bca23017b118b4ea3999cac32 upstream.
    
    When the PM initialization was moved in the commit referenced below, the
    code enabling the clock was removed from the probe function. On
    CONFIG_PM=y kernels, this is not a problem as the pm resume hook enables
    the clock, but when power management is disabled, all those pm_*
    functions are noops and the clock is never enabled resulting in a
    dysfunctional gpio controller.
    
    Put the clock initialization back to support CONFIG_PM=n.
    
    Signed-off-by: Helmut Grohne <h.grohne@intenta.de>
    Fixes: 3773c195d387 ("gpio: zynq: Do PM initialization earlier to support gpio hogs")
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9216cad7f40c7f0727b1367482555ffa647edd9d
Author: Shubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
Date:   Mon Apr 4 23:44:06 2016 +0530

    gpio: zynq: Fix the error path
    
    commit 615d23f80efc60f8c5146223f305d19207c742e4 upstream.
    
    pm_runtime_disable is called only in remove it is missed
    out in the error path.
    Fix the same.
    
    Signed-off-by: Shubhrajyoti Datta <shubhraj@xilinx.com>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Cc: Helmut Grohne <h.grohne@intenta.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7225e46619870eb023e1f80980cebda2a55ae4b4
Author: David S. Miller <davem@davemloft.net>
Date:   Sat May 28 20:41:12 2016 -0700

    sparc64: Fix return from trap window fill crashes.
    
    [ Upstream commit 7cafc0b8bf130f038b0ec2dcdd6a9de6dc59b65a ]
    
    We must handle data access exception as well as memory address unaligned
    exceptions from return from trap window fill faults, not just normal
    TLB misses.
    
    Otherwise we can get an OOPS that looks like this:
    
    ld-linux.so.2(36808): Kernel bad sw trap 5 [#1]
    CPU: 1 PID: 36808 Comm: ld-linux.so.2 Not tainted 4.6.0 #34
    task: fff8000303be5c60 ti: fff8000301344000 task.ti: fff8000301344000
    TSTATE: 0000004410001601 TPC: 0000000000a1a784 TNPC: 0000000000a1a788 Y: 00000002    Not tainted
    TPC: <do_sparc64_fault+0x5c4/0x700>
    g0: fff8000024fc8248 g1: 0000000000db04dc g2: 0000000000000000 g3: 0000000000000001
    g4: fff8000303be5c60 g5: fff800030e672000 g6: fff8000301344000 g7: 0000000000000001
    o0: 0000000000b95ee8 o1: 000000000000012b o2: 0000000000000000 o3: 0000000200b9b358
    o4: 0000000000000000 o5: fff8000301344040 sp: fff80003013475c1 ret_pc: 0000000000a1a77c
    RPC: <do_sparc64_fault+0x5bc/0x700>
    l0: 00000000000007ff l1: 0000000000000000 l2: 000000000000005f l3: 0000000000000000
    l4: fff8000301347e98 l5: fff8000024ff3060 l6: 0000000000000000 l7: 0000000000000000
    i0: fff8000301347f60 i1: 0000000000102400 i2: 0000000000000000 i3: 0000000000000000
    i4: 0000000000000000 i5: 0000000000000000 i6: fff80003013476a1 i7: 0000000000404d4c
    I7: <user_rtt_fill_fixup+0x6c/0x7c>
    Call Trace:
     [0000000000404d4c] user_rtt_fill_fixup+0x6c/0x7c
    
    The window trap handlers are slightly clever, the trap table entries for them are
    composed of two pieces of code.  First comes the code that actually performs
    the window fill or spill trap handling, and then there are three instructions at
    the end which are for exception processing.
    
    The userland register window fill handler is:
    
            add     %sp, STACK_BIAS + 0x00, %g1;            \
            ldxa    [%g1 + %g0] ASI, %l0;                   \
            mov     0x08, %g2;                              \
            mov     0x10, %g3;                              \
            ldxa    [%g1 + %g2] ASI, %l1;                   \
            mov     0x18, %g5;                              \
            ldxa    [%g1 + %g3] ASI, %l2;                   \
            ldxa    [%g1 + %g5] ASI, %l3;                   \
            add     %g1, 0x20, %g1;                         \
            ldxa    [%g1 + %g0] ASI, %l4;                   \
            ldxa    [%g1 + %g2] ASI, %l5;                   \
            ldxa    [%g1 + %g3] ASI, %l6;                   \
            ldxa    [%g1 + %g5] ASI, %l7;                   \
            add     %g1, 0x20, %g1;                         \
            ldxa    [%g1 + %g0] ASI, %i0;                   \
            ldxa    [%g1 + %g2] ASI, %i1;                   \
            ldxa    [%g1 + %g3] ASI, %i2;                   \
            ldxa    [%g1 + %g5] ASI, %i3;                   \
            add     %g1, 0x20, %g1;                         \
            ldxa    [%g1 + %g0] ASI, %i4;                   \
            ldxa    [%g1 + %g2] ASI, %i5;                   \
            ldxa    [%g1 + %g3] ASI, %i6;                   \
            ldxa    [%g1 + %g5] ASI, %i7;                   \
            restored;                                       \
            retry; nop; nop; nop; nop;                      \
            b,a,pt  %xcc, fill_fixup_dax;                   \
            b,a,pt  %xcc, fill_fixup_mna;                   \
            b,a,pt  %xcc, fill_fixup;
    
    And the way this works is that if any of those memory accesses
    generate an exception, the exception handler can revector to one of
    those final three branch instructions depending upon which kind of
    exception the memory access took.  In this way, the fault handler
    doesn't have to know if it was a spill or a fill that it's handling
    the fault for.  It just always branches to the last instruction in
    the parent trap's handler.
    
    For example, for a regular fault, the code goes:
    
    winfix_trampoline:
            rdpr    %tpc, %g3
            or      %g3, 0x7c, %g3
            wrpr    %g3, %tnpc
            done
    
    All window trap handlers are 0x80 aligned, so if we "or" 0x7c into the
    trap time program counter, we'll get that final instruction in the
    trap handler.
    
    On return from trap, we have to pull the register window in but we do
    this by hand instead of just executing a "restore" instruction for
    several reasons.  The largest being that from Niagara and onward we
    simply don't have enough levels in the trap stack to fully resolve all
    possible exception cases of a window fault when we are already at
    trap level 1 (which we enter to get ready to return from the original
    trap).
    
    This is executed inline via the FILL_*_RTRAP handlers.  rtrap_64.S's
    code branches directly to these to do the window fill by hand if
    necessary.  Now if you look at them, we'll see at the end:
    
                ba,a,pt    %xcc, user_rtt_fill_fixup;
                ba,a,pt    %xcc, user_rtt_fill_fixup;
                ba,a,pt    %xcc, user_rtt_fill_fixup;
    
    And oops, all three cases are handled like a fault.
    
    This doesn't work because each of these trap types (data access
    exception, memory address unaligned, and faults) store their auxiliary
    info in different registers to pass on to the C handler which does the
    real work.
    
    So in the case where the stack was unaligned, the unaligned trap
    handler sets up the arg registers one way, and then we branched to
    the fault handler which expects them setup another way.
    
    So the FAULT_TYPE_* value ends up basically being garbage, and
    randomly would generate the backtrace seen above.
    
    Reported-by: Nick Alcock <nix@esperi.org.uk>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 51385a951b1cd7fd3ac29b26fedb182fbfce1a73
Author: David S. Miller <davem@davemloft.net>
Date:   Sat May 28 21:21:31 2016 -0700

    sparc: Harden signal return frame checks.
    
    [ Upstream commit d11c2a0de2824395656cf8ed15811580c9dd38aa ]
    
    All signal frames must be at least 16-byte aligned, because that is
    the alignment we explicitly create when we build signal return stack
    frames.
    
    All stack pointers must be at least 8-byte aligned.
    
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 859f30806733299db9759a0b394cf320346ca5c9
Author: David S. Miller <davem@davemloft.net>
Date:   Wed May 25 12:51:20 2016 -0700

    sparc64: Take ctx_alloc_lock properly in hugetlb_setup().
    
    [ Upstream commit 9ea46abe22550e3366ff7cee2f8391b35b12f730 ]
    
    On cheetahplus chips we take the ctx_alloc_lock in order to
    modify the TLB lookup parameters for the indexed TLBs, which
    are stored in the context register.
    
    This is called with interrupts disabled, however ctx_alloc_lock
    is an IRQ safe lock, therefore we must take acquire/release it
    properly with spin_{lock,unlock}_irq().
    
    Reported-by: Meelis Roos <mroos@linux.ee>
    Tested-by: Meelis Roos <mroos@linux.ee>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4bf8d0467c45ade31c32e95ce48158713e426417
Author: Nitin Gupta <nitin.m.gupta@oracle.com>
Date:   Wed Mar 30 11:17:13 2016 -0700

    sparc64: Reduce TLB flushes during hugepte changes
    
    [ Upstream commit 24e49ee3d76b70853a96520e46b8837e5eae65b2 ]
    
    During hugepage map/unmap, TSB and TLB flushes are currently
    issued at every PAGE_SIZE'd boundary which is unnecessary.
    We now issue the flush at REAL_HPAGE_SIZE boundaries only.
    
    Without this patch workloads which unmap a large hugepage
    backed VMA region get CPU lockups due to excessive TLB
    flush calls.
    
    Orabug: 22365539, 22643230, 22995196
    
    Signed-off-by: Nitin Gupta <nitin.m.gupta@oracle.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 21ceba1bc304d20334391da62f4d446c0ad3db1f
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Tue Jun 7 21:26:55 2016 -0400

    fix d_walk()/non-delayed __d_free() race
    
    commit 3d56c25e3bb0726a5c5e16fc2d9e38f8ed763085 upstream.
    
    Ascend-to-parent logics in d_walk() depends on all encountered child
    dentries not getting freed without an RCU delay.  Unfortunately, in
    quite a few cases it is not true, with hard-to-hit oopsable race as
    the result.
    
    Fortunately, the fix is simiple; right now the rule is "if it ever
    been hashed, freeing must be delayed" and changing it to "if it
    ever had a parent, freeing must be delayed" closes that hole and
    covers all cases the old rule used to cover.  Moreover, pipes and
    sockets remain _not_ covered, so we do not introduce RCU delay in
    the cases which are the reason for having that delay conditional
    in the first place.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 80f7d5b00a4d325e114d4dff2e77c632f811a589
Author: Jann Horn <jannh@google.com>
Date:   Wed Jun 1 11:55:07 2016 +0200

    sched: panic on corrupted stack end
    
    commit 29d6455178a09e1dc340380c582b13356227e8df upstream.
    
    Until now, hitting this BUG_ON caused a recursive oops (because oops
    handling involves do_exit(), which calls into the scheduler, which in
    turn raises an oops), which caused stuff below the stack to be
    overwritten until a panic happened (e.g.  via an oops in interrupt
    context, caused by the overwritten CPU index in the thread_info).
    
    Just panic directly.
    
    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 c4fd3264feffb503336a43f9bf132d9d385678b5
Author: Jann Horn <jannh@google.com>
Date:   Wed Jun 1 11:55:05 2016 +0200

    proc: prevent stacking filesystems on top
    
    commit e54ad7f1ee263ffa5a2de9c609d58dfa27b21cd9 upstream.
    
    This prevents stacking filesystems (ecryptfs and overlayfs) from using
    procfs as lower filesystem.  There is too much magic going on inside
    procfs, and there is no good reason to stack stuff on top of procfs.
    
    (For example, procfs does access checks in VFS open handlers, and
    ecryptfs by design calls open handlers from a kernel thread that doesn't
    drop privileges or so.)
    
    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 af1a31e7e4df5adc832fc9b22d9fbcc578ab0ea6
Author: Andy Lutomirski <luto@kernel.org>
Date:   Tue May 24 15:54:04 2016 -0700

    x86/entry/traps: Don't force in_interrupt() to return true in IST handlers
    
    commit aaee8c3c5cce2d9107310dd9f3026b4f901d441c upstream.
    
    Forcing in_interrupt() to return true if we're not in a bona fide
    interrupt confuses the softirq code.  This fixes warnings like:
    
      NOHZ: local_softirq_pending 282
    
    ... which can happen when running things like selftests/x86.
    
    This will change perf's static percpu buffer usage in IST context.
    I think this is okay, and it's changing the behavior to match
    historical (pre-4.0) behavior.
    
    Signed-off-by: Andy Lutomirski <luto@kernel.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Fixes: 959274753857 ("x86, traps: Track entry into and exit from IST context")
    Link: http://lkml.kernel.org/r/cdc215f94d118d691d73df35275022331156fb45.1464130360.git.luto@kernel.org
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a5f09a92b7ec8ae20ea227d09cfc6f377c39bd80
Author: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Date:   Wed Jun 8 15:33:50 2016 -0700

    mm: thp: broken page count after commit aa88b68c3b1d
    
    commit 770a5370226cb207461bbad902543381c1fad521 upstream.
    
    Christian Borntraeger reported a kernel panic after corrupt page counts,
    and it turned out to be a regression introduced with commit aa88b68c3b1d
    ("thp: keep huge zero page pinned until tlb flush"), at least on s390.
    
    put_huge_zero_page() was moved over from zap_huge_pmd() to
    release_pages(), and it was replaced by tlb_remove_page().  However,
    release_pages() might not always be triggered by (the arch-specific)
    tlb_remove_page().
    
    On s390 we call free_page_and_swap_cache() from tlb_remove_page(), and
    not tlb_flush_mmu() -> free_pages_and_swap_cache() like the generic
    version, because we don't use the MMU-gather logic.  Although both
    functions have very similar names, they are doing very unsimilar things,
    in particular free_page_xxx is just doing a put_page(), while
    free_pages_xxx calls release_pages().
    
    This of course results in very harmful put_page()s on the huge zero
    page, on architectures where tlb_remove_page() is implemented in this
    way.  It seems to affect only s390 and sh, but sh doesn't have THP
    support, so the problem (currently) probably only exists on s390.
    
    The following quick hack fixed the issue:
    
    Link: http://lkml.kernel.org/r/20160602172141.75c006a9@thinkpad
    Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
    Reported-by: Christian Borntraeger <borntraeger@de.ibm.com>
    Tested-by: Christian Borntraeger <borntraeger@de.ibm.com>
    Cc: "Kirill A. Shutemov" <kirill@shutemov.name>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 99642546dbf3cebc5005895deebd101f357223f3
Author: Prasun Maiti <prasunmaiti87@gmail.com>
Date:   Mon Jun 6 20:04:19 2016 +0530

    wext: Fix 32 bit iwpriv compatibility issue with 64 bit Kernel
    
    commit 3d5fdff46c4b2b9534fa2f9fc78e90a48e0ff724 upstream.
    
    iwpriv app uses iw_point structure to send data to Kernel. The iw_point
    structure holds a pointer. For compatibility Kernel converts the pointer
    as required for WEXT IOCTLs (SIOCIWFIRST to SIOCIWLAST). Some drivers
    may use iw_handler_def.private_args to populate iwpriv commands instead
    of iw_handler_def.private. For those case, the IOCTLs from
    SIOCIWFIRSTPRIV to SIOCIWLASTPRIV will follow the path ndo_do_ioctl().
    Accordingly when the filled up iw_point structure comes from 32 bit
    iwpriv to 64 bit Kernel, Kernel will not convert the pointer and sends
    it to driver. So, the driver may get the invalid data.
    
    The pointer conversion for the IOCTLs (SIOCIWFIRSTPRIV to
    SIOCIWLASTPRIV), which follow the path ndo_do_ioctl(), is mandatory.
    This patch adds pointer conversion from 32 bit to 64 bit and vice versa,
    if the ioctl comes from 32 bit iwpriv to 64 bit Kernel.
    
    Signed-off-by: Prasun Maiti <prasunmaiti87@gmail.com>
    Signed-off-by: Ujjal Roy <royujjal@gmail.com>
    Tested-by: Dibyajyoti Ghosh <dibyajyotig@gmail.com>
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit de4307f6ee6ba9c292760bf27fd86baf48fc1b4b
Author: Jann Horn <jannh@google.com>
Date:   Wed Jun 1 11:55:06 2016 +0200

    ecryptfs: forbid opening files without mmap handler
    
    commit 2f36db71009304b3f0b95afacd8eba1f9f046b87 upstream.
    
    This prevents users from triggering a stack overflow through a recursive
    invocation of pagefault handling that involves mapping procfs files into
    virtual memory.
    
    Signed-off-by: Jann Horn <jannh@google.com>
    Acked-by: Tyler Hicks <tyhicks@canonical.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 50c596c23c08384375beffbbbd271207088d5e5b
Author: Tejun Heo <tj@kernel.org>
Date:   Fri Jun 3 14:55:44 2016 -0700

    memcg: add RCU locking around css_for_each_descendant_pre() in memcg_offline_kmem()
    
    commit 3a06bb78ceeceacc86a1e31133a7944013f9775b upstream.
    
    memcg_offline_kmem() may be called from memcg_free_kmem() after a css
    init failure.  memcg_free_kmem() is a ->css_free callback which is
    called without cgroup_mutex and memcg_offline_kmem() ends up using
    css_for_each_descendant_pre() without any locking.  Fix it by adding rcu
    read locking around it.
    
        mkdir: cannot create directory `65530': No space left on device
        ===============================
        [ INFO: suspicious RCU usage. ]
        4.6.0-work+ #321 Not tainted
        -------------------------------
        kernel/cgroup.c:4008 cgroup_mutex or RCU read lock required!
         [  527.243970] other info that might help us debug this:
         [  527.244715]
        rcu_scheduler_active = 1, debug_locks = 0
        2 locks held by kworker/0:5/1664:
         #0:  ("cgroup_destroy"){.+.+..}, at: [<ffffffff81060ab5>] process_one_work+0x165/0x4a0
         #1:  ((&css->destroy_work)#3){+.+...}, at: [<ffffffff81060ab5>] process_one_work+0x165/0x4a0
         [  527.248098] stack backtrace:
        CPU: 0 PID: 1664 Comm: kworker/0:5 Not tainted 4.6.0-work+ #321
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.9.1-1.fc24 04/01/2014
        Workqueue: cgroup_destroy css_free_work_fn
        Call Trace:
          dump_stack+0x68/0xa1
          lockdep_rcu_suspicious+0xd7/0x110
          css_next_descendant_pre+0x7d/0xb0
          memcg_offline_kmem.part.44+0x4a/0xc0
          mem_cgroup_css_free+0x1ec/0x200
          css_free_work_fn+0x49/0x5e0
          process_one_work+0x1c5/0x4a0
          worker_thread+0x49/0x490
          kthread+0xea/0x100
          ret_from_fork+0x1f/0x40
    
    Link: http://lkml.kernel.org/r/20160526203018.GG23194@mtj.duckdns.org
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Acked-by: Vladimir Davydov <vdavydov@virtuozzo.com>
    Acked-by: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Michal Hocko <mhocko@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 05e1ad39d5924a55255a39d4d404e81fe9685b58
Author: Helge Deller <deller@gmx.de>
Date:   Sat Jun 4 17:21:33 2016 +0200

    parisc: Fix pagefault crash in unaligned __get_user() call
    
    commit 8b78f260887df532da529f225c49195d18fef36b upstream.
    
    One of the debian buildd servers had this crash in the syslog without
    any other information:
    
     Unaligned handler failed, ret = -2
     clock_adjtime (pid 22578): Unaligned data reference (code 28)
     CPU: 1 PID: 22578 Comm: clock_adjtime Tainted: G  E  4.5.0-2-parisc64-smp #1 Debian 4.5.4-1
     task: 000000007d9960f8 ti: 00000001bde7c000 task.ti: 00000001bde7c000
    
          YZrvWESTHLNXBCVMcbcbcbcbOGFRQPDI
     PSW: 00001000000001001111100000001111 Tainted: G            E
     r00-03  000000ff0804f80f 00000001bde7c2b0 00000000402d2be8 00000001bde7c2b0
     r04-07  00000000409e1fd0 00000000fa6f7fff 00000001bde7c148 00000000fa6f7fff
     r08-11  0000000000000000 00000000ffffffff 00000000fac9bb7b 000000000002b4d4
     r12-15  000000000015241c 000000000015242c 000000000000002d 00000000fac9bb7b
     r16-19  0000000000028800 0000000000000001 0000000000000070 00000001bde7c218
     r20-23  0000000000000000 00000001bde7c210 0000000000000002 0000000000000000
     r24-27  0000000000000000 0000000000000000 00000001bde7c148 00000000409e1fd0
     r28-31  0000000000000001 00000001bde7c320 00000001bde7c350 00000001bde7c218
     sr00-03  0000000001200000 0000000001200000 0000000000000000 0000000001200000
     sr04-07  0000000000000000 0000000000000000 0000000000000000 0000000000000000
    
     IASQ: 0000000000000000 0000000000000000 IAOQ: 00000000402d2e84 00000000402d2e88
      IIR: 0ca0d089    ISR: 0000000001200000  IOR: 00000000fa6f7fff
      CPU:        1   CR30: 00000001bde7c000 CR31: ffffffffffffffff
      ORIG_R28: 00000002369fe628
      IAOQ[0]: compat_get_timex+0x2dc/0x3c0
      IAOQ[1]: compat_get_timex+0x2e0/0x3c0
      RP(r2): compat_get_timex+0x40/0x3c0
     Backtrace:
      [<00000000402d4608>] compat_SyS_clock_adjtime+0x40/0xc0
      [<0000000040205024>] syscall_exit+0x0/0x14
    
    This means the userspace program clock_adjtime called the clock_adjtime()
    syscall and then crashed inside the compat_get_timex() function.
    Syscalls should never crash programs, but instead return EFAULT.
    
    The IIR register contains the executed instruction, which disassebles
    into "ldw 0(sr3,r5),r9".
    This load-word instruction is part of __get_user() which tried to read the word
    at %r5/IOR (0xfa6f7fff). This means the unaligned handler jumped in.  The
    unaligned handler is able to emulate all ldw instructions, but it fails if it
    fails to read the source e.g. because of page fault.
    
    The following program reproduces the problem:
    
    #define _GNU_SOURCE
    #include <unistd.h>
    #include <sys/syscall.h>
    #include <sys/mman.h>
    
    int main(void) {
            /* allocate 8k */
            char *ptr = mmap(NULL, 2*4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
            /* free second half (upper 4k) and make it invalid. */
            munmap(ptr+4096, 4096);
            /* syscall where first int is unaligned and clobbers into invalid memory region */
            /* syscall should return EFAULT */
            return syscall(__NR_clock_adjtime, 0, ptr+4095);
    }
    
    To fix this issue we simply need to check if the faulting instruction address
    is in the exception fixup table when the unaligned handler failed. If it
    is, call the fixup routine instead of crashing.
    
    While looking at the unaligned handler I found another issue as well: The
    target register should not be modified if the handler was unsuccessful.
    
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a958e05dfbbda33ed17bd0d82f5a32f52af49ab5
Author: hongkun.cao <hongkun.cao@mediatek.com>
Date:   Sat May 21 15:23:39 2016 +0800

    pinctrl: mediatek: fix dual-edge code defect
    
    commit 5edf673d07fdcb6498be24914f3f38f8d8843199 upstream.
    
    When a dual-edge irq is triggered, an incorrect irq will be reported on
    condition that the external signal is not stable and this incorrect irq
    has been registered.
    Correct the register offset.
    
    Signed-off-by: Hongkun Cao <hongkun.cao@mediatek.com>
    Reviewed-by: Matthias Brugger <matthias.bgg@gmail.com>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 05036294d3a9ed84e7fe5b42dfa323740912f2b3
Author: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Date:   Tue May 31 11:56:30 2016 +0530

    powerpc/mm/hash: Fix the reference bit update when handling hash fault
    
    commit dc47c0c1f8099fccb2c1e2f3775855066a9e4484 upstream.
    
    When we converted the asm routines to C functions, we missed updating
    HPTE_R_R based on _PAGE_ACCESSED. ASM code used to copy over the lower
    bits from pte via.
    
    andi.   r3,r30,0x1fe            /* Get basic set of flags */
    
    We also update the code such that we won't update the Change bit ('C'
    bit) always. This was added by commit c5cf0e30bf3d8 ("powerpc: Fix
    buglet with MMU hash management").
    
    With hash64, we need to make sure that hardware doesn't do a pte update
    directly. This is because we do end up with entries in TLB with no hash
    page table entry. This happens because when we find a hash bucket full,
    we "evict" a more/less random entry from it. When we do that we don't
    invalidate the TLB (hpte_remove) because we assume the old translation
    is still technically "valid". For more info look at commit
    0608d692463("powerpc/mm: Always invalidate tlb on hpte invalidate and
    update").
    
    Thus it's critical that valid hash PTEs always have reference bit set
    and writeable ones have change bit set. We do this by hashing a
    non-dirty linux PTE as read-only and always setting _PAGE_ACCESSED (and
    thus R) when hashing anything else in. Any attempt by Linux at clearing
    those bits also removes the corresponding hash entry.
    
    Commit 5cf0e30bf3d8 did that for 'C' bit by enabling 'C' bit always.
    We don't really need to do that because we never map a RW pte entry
    without setting 'C' bit. On READ fault on a RW pte entry, we still map
    it READ only, hence a store update in the page will still cause a hash
    pte fault.
    
    This patch reverts the part of commit c5cf0e30bf3d8 ("[PATCH] powerpc:
    Fix buglet with MMU hash management") and retain the updatepp part.
    
    - If we hit the updatepp path on native, the old code without that
      commit, would fail to set C bcause native_hpte_updatepp()
      was implemented to filter the same bits as H_PROTECT and not let C
      through thus we would "upgrade" a RO HPTE to RW without setting C
      thus causing the bug. So the real fix in that commit was the change
      to native_hpte_updatepp
    
    Fixes: 89ff725051d1 ("powerpc/mm: Convert __hash_page_64K to C")
    Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 39d615c344e1fd7cb3d636fa116c2abc658c5435
Author: Thomas Huth <thuth@redhat.com>
Date:   Tue May 31 07:51:17 2016 +0200

    powerpc/pseries: Add POWER8NVL support to ibm,client-architecture-support call
    
    commit 7cc851039d643a2ee7df4d18177150f2c3a484f5 upstream.
    
    If we do not provide the PVR for POWER8NVL, a guest on this system
    currently ends up in PowerISA 2.06 compatibility mode on KVM, since QEMU
    does not provide a generic PowerISA 2.07 mode yet. So some new
    instructions from POWER8 (like "mtvsrd") get disabled for the guest,
    resulting in crashes when using code compiled explicitly for
    POWER8 (e.g. with the "-mcpu=power8" option of GCC).
    
    Fixes: ddee09c099c3 ("powerpc: Add PVR for POWER8NVL processor")
    Signed-off-by: Thomas Huth <thuth@redhat.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 59f286ba1ae015cd7f303cacd908723a2b137591
Author: Thomas Huth <thuth@redhat.com>
Date:   Thu May 12 13:29:11 2016 +0200

    powerpc: Use privileged SPR number for MMCR2
    
    commit 8dd75ccb571f3c92c48014b3dabd3d51a115ab41 upstream.
    
    We are already using the privileged versions of MMCR0, MMCR1
    and MMCRA in the kernel, so for MMCR2, we should better use
    the privileged versions, too, to be consistent.
    
    Fixes: 240686c13687 ("powerpc: Initialise PMU related regs on Power8")
    Suggested-by: Paul Mackerras <paulus@ozlabs.org>
    Signed-off-by: Thomas Huth <thuth@redhat.com>
    Acked-by: Paul Mackerras <paulus@ozlabs.org>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d2f0f1d0a00845c867c0c46145a51251611fabbc
Author: Thomas Huth <thuth@redhat.com>
Date:   Thu May 12 13:26:44 2016 +0200

    powerpc: Fix definition of SIAR and SDAR registers
    
    commit d23fac2b27d94aeb7b65536a50d32bfdc21fe01e upstream.
    
    The SIAR and SDAR registers are available twice, one time as SPRs
    780 / 781 (unprivileged, but read-only), and one time as the SPRs
    796 / 797 (privileged, but read and write). The Linux kernel code
    currently uses the unprivileged  SPRs - while this is OK for reading,
    writing to that register of course does not work.
    Since the KVM code tries to write to this register, too (see the mtspr
    in book3s_hv_rmhandlers.S), the contents of this register sometimes get
    lost for the guests, e.g. during migration of a VM.
    To fix this issue, simply switch to the privileged SPR numbers instead.
    
    Signed-off-by: Thomas Huth <thuth@redhat.com>
    Acked-by: Paul Mackerras <paulus@ozlabs.org>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f3db676723ee128554e8f5ce45d26d5c988046bd
Author: Russell Currey <ruscur@russell.cc>
Date:   Thu Apr 7 16:28:26 2016 +1000

    powerpc/pseries/eeh: Handle RTAS delay requests in configure_bridge
    
    commit 871e178e0f2c4fa788f694721a10b4758d494ce1 upstream.
    
    In the "ibm,configure-pe" and "ibm,configure-bridge" RTAS calls, the
    spec states that values of 9900-9905 can be returned, indicating that
    software should delay for 10^x (where x is the last digit, i.e. 990x)
    milliseconds and attempt the call again. Currently, the kernel doesn't
    know about this, and respecting it fixes some PCI failures when the
    hypervisor is busy.
    
    The delay is capped at 0.2 seconds.
    
    Signed-off-by: Russell Currey <ruscur@russell.cc>
    Acked-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 24ba19ec0ae2add10b8788bfcf6963030ef37dcd
Author: Will Deacon <will.deacon@arm.com>
Date:   Tue Jun 7 17:55:15 2016 +0100

    arm64: mm: always take dirty state from new pte in ptep_set_access_flags
    
    commit 0106d456c4cb1770253fefc0ab23c9ca760b43f7 upstream.
    
    Commit 66dbd6e61a52 ("arm64: Implement ptep_set_access_flags() for
    hardware AF/DBM") ensured that pte flags are updated atomically in the
    face of potential concurrent, hardware-assisted updates. However, Alex
    reports that:
    
     | This patch breaks swapping for me.
     | In the broken case, you'll see either systemd cpu time spike (because
     | it's stuck in a page fault loop) or the system hang (because the
     | application owning the screen is stuck in a page fault loop).
    
    It turns out that this is because the 'dirty' argument to
    ptep_set_access_flags is always 0 for read faults, and so we can't use
    it to set PTE_RDONLY. The failing sequence is:
    
      1. We put down a PTE_WRITE | PTE_DIRTY | PTE_AF pte
      2. Memory pressure -> pte_mkold(pte) -> clear PTE_AF
      3. A read faults due to the missing access flag
      4. ptep_set_access_flags is called with dirty = 0, due to the read fault
      5. pte is then made PTE_WRITE | PTE_DIRTY | PTE_AF | PTE_RDONLY (!)
      6. A write faults, but pte_write is true so we get stuck
    
    The solution is to check the new page table entry (as would be done by
    the generic, non-atomic definition of ptep_set_access_flags that just
    calls set_pte_at) to establish the dirty state.
    
    Fixes: 66dbd6e61a52 ("arm64: Implement ptep_set_access_flags() for hardware AF/DBM")
    Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
    Reported-by: Alexander Graf <agraf@suse.de>
    Tested-by: Alexander Graf <agraf@suse.de>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 60a61375d80d04eacec563807daaee639ba08443
Author: Catalin Marinas <catalin.marinas@arm.com>
Date:   Tue May 31 15:55:03 2016 +0100

    arm64: Provide "model name" in /proc/cpuinfo for PER_LINUX32 tasks
    
    commit e47b020a323d1b2a7b1e9aac86e99eae19463630 upstream.
    
    This patch brings the PER_LINUX32 /proc/cpuinfo format more in line with
    the 32-bit ARM one by providing an additional line:
    
    model name      : ARMv8 Processor rev X (v8l)
    
    Acked-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d6d35c96fdaca395f93e55d9ac314073f5ff7713
Author: Tom Lendacky <thomas.lendacky@amd.com>
Date:   Fri May 20 17:33:03 2016 -0500

    crypto: ccp - Fix AES XTS error for request sizes above 4096
    
    commit ab6a11a7c8ef47f996974dd3c648c2c0b1a36ab1 upstream.
    
    The ccp-crypto module for AES XTS support has a bug that can allow requests
    greater than 4096 bytes in size to be passed to the CCP hardware. The CCP
    hardware does not support request sizes larger than 4096, resulting in
    incorrect output. The request should actually be handled by the fallback
    mechanism instantiated by the ccp-crypto module.
    
    Add a check to insure the request size is less than or equal to the maximum
    supported size and use the fallback mechanism if it is not.
    
    Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5aabc1b763f2e6d53732515450d751dc174ca104
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed May 18 16:55:56 2016 +0200

    crypto: public_key: select CRYPTO_AKCIPHER
    
    commit bad6a185b4d6f81d0ed2b6e4c16307969f160b95 upstream.
    
    In some rare randconfig builds, we can end up with
    ASYMMETRIC_PUBLIC_KEY_SUBTYPE enabled but CRYPTO_AKCIPHER disabled,
    which fails to link because of the reference to crypto_alloc_akcipher:
    
    crypto/built-in.o: In function `public_key_verify_signature':
    :(.text+0x110e4): undefined reference to `crypto_alloc_akcipher'
    
    This adds a Kconfig 'select' statement to ensure the dependency
    is always there.
    
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 48f23accd5bf4a91b5698a3acf23148b89e9eaec
Author: Marc Zyngier <marc.zyngier@arm.com>
Date:   Thu Jun 2 09:00:28 2016 +0100

    irqchip/gic-v3: Fix ICC_SGI1R_EL1.INTID decoding mask
    
    commit dd5f1b049dc139876801db3cdd0f20d21fd428cc upstream.
    
    The INTID mask is wrong, and is made a signed value, which has
    nteresting effects in the KVM emulation. Let's sanitize it.
    
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 73e6619018a702f23001fda820dd124c87a68a73
Author: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Date:   Thu May 12 18:10:48 2016 +0200

    s390/bpf: reduce maximum program size to 64 KB
    
    commit 0fa963553a5c28d8f8aabd8878326d3f782045fc upstream.
    
    The s390 BFP compiler currently uses relative branch instructions
    that only support jumps up to 64 KB. Examples are "j", "jnz", "cgrj",
    etc.  Currently the maximum size of s390 BPF programs is set
    to 0x7ffff.  If branches over 64 KB are generated the, kernel can
    crash due to incorrect code.
    
    So fix this an reduce the maximum size to 64 KB. Programs larger than
    that will be interpreted.
    
    Fixes: ce2b6ad9c185 ("s390/bpf: increase BPF_SIZE_MAX")
    Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 66babd49e858d58ad9f9e9b644f5ffdd16bc37ac
Author: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Date:   Wed May 11 21:13:13 2016 +0200

    s390/bpf: fix recache skb->data/hlen for skb_vlan_push/pop
    
    commit 6edf0aa4f8bbdfbb4d6d786892fa02728d05dc36 upstream.
    
    In case of usage of skb_vlan_push/pop, in the prologue we store
    the SKB pointer on the stack and restore it after BPF_JMP_CALL
    to skb_vlan_push/pop.
    
    Unfortunately currently there are two bugs in the code:
    
     1) The wrong stack slot (offset 170 instead of 176) is used
     2) The wrong register (W1 instead of B1) is saved
    
    So fix this and use correct stack slot and register.
    
    Fixes: 9db7f2b81880 ("s390/bpf: recache skb->data/hlen for skb_vlan_push/pop")
    Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 55d32af72aba4e0310fc38a39ef38b2ac73163a5
Author: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Date:   Fri Jun 3 19:10:02 2016 +0200

    gpiolib: Fix unaligned used of reference counters
    
    commit f4833b8cc7edab57d3f3033e549111a546c2e02b upstream.
    
    gpiolib relies on the reference counters to clean up the gpio_device
    structure.
    
    Although the number of get/put is properly aligned on gpiolib.c
    itself, it does not take into consideration how the referece counters
    are affected by other external functions such as cdev_add and device_add.
    
    Because of this, after the last call to put_device, the reference counter
    has a value of +3, therefore never calling gpiodevice_release.
    
    Due to the fact that some of the device  has already been cleaned on
    gpiochip_remove, the library will end up OOPsing the kernel (e.g. a call
    to of_gpiochip_find_and_xlate).
    
    Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d917611dc7234bc15662b07cde0ad4d5438277ce
Author: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Date:   Fri Jun 3 19:10:01 2016 +0200

    gpiolib: Fix NULL pointer deference
    
    commit 11f33a6d15bfa397867ac0d7f3481b6dd683286f upstream.
    
    Under some circumstances, a gpiochip might be half cleaned from the
    gpio_device list.
    
    This patch makes sure that the chip pointer is still valid, before
    calling the match function.
    
    [  104.088296] BUG: unable to handle kernel NULL pointer dereference at
    0000000000000090
    [  104.089772] IP: [<ffffffff813d2045>] of_gpiochip_find_and_xlate+0x15/0x80
    [  104.128273] Call Trace:
    [  104.129802]  [<ffffffff813d2030>] ? of_parse_own_gpio+0x1f0/0x1f0
    [  104.131353]  [<ffffffff813cd910>] gpiochip_find+0x60/0x90
    [  104.132868]  [<ffffffff813d21ba>] of_get_named_gpiod_flags+0x9a/0x120
    ...
    [  104.141586]  [<ffffffff8163d12b>] gpio_led_probe+0x11b/0x360
    
    Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ac63dc3fb6c8f20f50944c3c6214ffe1490a28c4
Author: Ben Dooks <ben.dooks@codethink.co.uk>
Date:   Tue Jun 7 17:22:17 2016 +0100

    gpio: bcm-kona: fix bcm_kona_gpio_reset() warnings
    
    commit b66b2a0adf0e48973b582e055758b9907a7eee7c upstream.
    
    The bcm_kona_gpio_reset() calls bcm_kona_gpio_write_lock_regs()
    with what looks like the wrong parameter. The write_lock_regs
    function takes a pointer to the registers, not the bcm_kona_gpio
    structure.
    
    Fix the warning, and probably bug by changing the function to
    pass reg_base instead of kona_gpio, fixing the following warning:
    
    drivers/gpio/gpio-bcm-kona.c:550:47: warning: incorrect type in argument 1
      (different address spaces)
      expected void [noderef] <asn:2>*reg_base
      got struct bcm_kona_gpio *kona_gpio
      warning: incorrect type in argument 1 (different address spaces)
      expected void [noderef] <asn:2>*reg_base
      got struct bcm_kona_gpio *kona_gpio
    
    Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
    Acked-by: Ray Jui <ray.jui@broadcom.com>
    Reviewed-by: Markus Mayer <mmayer@broadcom.com>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ecfb6ce5c09ce1fbfde39418123d4fc8ab4b7985
Author: Linus Walleij <linus.walleij@linaro.org>
Date:   Mon May 30 16:48:39 2016 +0200

    gpio: bail out silently on NULL descriptors
    
    commit 54d77198fdfbc4f0fe11b4252c1d9c97d51a3264 upstream.
    
    In fdeb8e1547cb9dd39d5d7223b33f3565cf86c28e
    ("gpio: reflect base and ngpio into gpio_device")
    assumed that GPIO descriptors are either valid or error
    pointers, but gpiod_get_[index_]optional() actually return
    NULL descriptors and then all subsequent calls should just
    bail out.
    
    Cc: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
    Cc: Florian Fainelli <f.fainelli@gmail.com>
    Cc: Andrew Lunn <andrew@lunn.ch>
    Fixes: fdeb8e1547cb ("gpio: reflect base and ngpio into gpio_device")
    Reported-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3a2ec1551c13f5a3e8a405bb92babc11c473fa7f
Author: Russell King <rmk+kernel@armlinux.org.uk>
Date:   Mon May 30 23:14:56 2016 +0100

    ARM: fix PTRACE_SETVFPREGS on SMP systems
    
    commit e2dfb4b880146bfd4b6aa8e138c0205407cebbaf upstream.
    
    PTRACE_SETVFPREGS fails to properly mark the VFP register set to be
    reloaded, because it undoes one of the effects of vfp_flush_hwstate().
    
    Specifically vfp_flush_hwstate() sets thread->vfpstate.hard.cpu to
    an invalid CPU number, but vfp_set() overwrites this with the original
    CPU number, thereby rendering the hardware state as apparently "valid",
    even though the software state is more recent.
    
    Fix this by reverting the previous change.
    
    Fixes: 8130b9d7b9d8 ("ARM: 7308/1: vfp: flush thread hwstate before copying ptrace registers")
    Acked-by: Will Deacon <will.deacon@arm.com>
    Tested-by: Simon Marchi <simon.marchi@ericsson.com>
    Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0f16822c314f379bc3047a3fd66b92dda4987eab
Author: Torsten Hilbrich <torsten.hilbrich@secunet.com>
Date:   Tue Jun 7 13:14:21 2016 +0200

    ALSA: hda/realtek: Add T560 docking unit fixup
    
    commit dab38e43b298501a4e8807b56117c029e2e98383 upstream.
    
    Tested with Lenovo Ultradock. Fixes the non-working headphone jack on
    the docking unit.
    
    Signed-off-by: Torsten Hilbrich <torsten.hilbrich@secunet.com>
    Tested-by: Torsten Hilbrich <torsten.hilbrich@secunet.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b4d79b9bc8afd4533b44bd2ccd3dc6d4786e03cb
Author: Kailang Yang <kailang@realtek.com>
Date:   Mon May 30 16:44:20 2016 +0800

    ALSA: hda/realtek - Add support for new codecs ALC700/ALC701/ALC703
    
    commit 6fbae35a3170c3e2b1b9d7b9cc943cbe48771362 upstream.
    
    Support new codecs for ALC700/ALC701/ALC703.
    
    Signed-off-by: Kailang Yang <kailang@realtek.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cd8edeef0a00974ea850e79133e7a5f948804b11
Author: Kailang Yang <kailang@realtek.com>
Date:   Mon May 30 15:58:28 2016 +0800

    ALSA: hda/realtek - ALC256 speaker noise issue
    
    commit e69e7e03ed225abf3e1c43545aa3bcb68dc81d5f upstream.
    
    That is some different register for ALC255 and ALC256.
    ALC256 can't fit with some ALC255 register.
    This issue is cause from LDO output voltage control.
    This patch is updated the right LDO register value.
    
    Signed-off-by: Kailang Yang <kailang@realtek.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 05c40c5b7b356157edaf0ac77486f34d8c9257bf
Author: AceLan Kao <acelan.kao@canonical.com>
Date:   Fri Jun 3 14:45:25 2016 +0800

    ALSA: hda - Fix headset mic detection problem for Dell machine
    
    commit f90d83b301701026b2e4c437a3613f377f63290e upstream.
    
    Add the pin configuration value of this machine into the pin_quirk
    table to make DELL1_MIC_NO_PRESENCE apply to this machine.
    
    Signed-off-by: AceLan Kao <acelan.kao@canonical.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 71cf12da24e870d9f3569f7bc0d0fc178b6eb727
Author: Vinod Koul <vinod.koul@intel.com>
Date:   Thu Jun 9 11:32:14 2016 +0530

    ALSA: hda - Add PCI ID for Kabylake
    
    commit 35639a0e98391036a4c7f23253c321d6621a8897 upstream.
    
    Kabylake shows up as PCI ID 0xa171. And Kabylake-LP as 0x9d71.
    Since these are similar to Skylake add these to SKL_PLUS macro
    
    Signed-off-by: Vinod Koul <vinod.koul@intel.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 711d9f5dd7ff4e386b865bb8f6357f805a55f92c
Author: Julien Grall <julien.grall@arm.com>
Date:   Tue May 31 12:41:22 2016 +0100

    drivers/perf: arm_pmu: Defer the setting of __oprofile_cpu_pmu
    
    commit 0f254c7671e851243412bce6c2e618732831d0f8 upstream.
    
    The global variable __oprofile_cpu_pmu is set before the PMU is fully
    initialized. If an error occurs before the end of the initialization,
    the PMU will be freed and the variable will contain an invalid pointer.
    
    This will result in a kernel crash when perf will be used.
    
    Fix it by moving the setting of __oprofile_cpu_pmu when the PMU is fully
    initialized (i.e when it is no longer possible to fail).
    
    Signed-off-by: Julien Grall <julien.grall@arm.com>
    Acked-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9ae6bfa44168a15674769027922cba52a530f3bd
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Wed Jun 1 14:09:21 2016 +0200

    KVM: irqfd: fix NULL pointer dereference in kvm_irq_map_gsi
    
    commit c622a3c21ede892e370b56e1ceb9eb28f8bbda6b upstream.
    
    Found by syzkaller:
    
        BUG: unable to handle kernel NULL pointer dereference at 0000000000000120
        IP: [<ffffffffa0797202>] kvm_irq_map_gsi+0x12/0x90 [kvm]
        PGD 6f80b067 PUD b6535067 PMD 0
        Oops: 0000 [#1] SMP
        CPU: 3 PID: 4988 Comm: a.out Not tainted 4.4.9-300.fc23.x86_64 #1
        [...]
        Call Trace:
         [<ffffffffa0795f62>] irqfd_update+0x32/0xc0 [kvm]
         [<ffffffffa0796c7c>] kvm_irqfd+0x3dc/0x5b0 [kvm]
         [<ffffffffa07943f4>] kvm_vm_ioctl+0x164/0x6f0 [kvm]
         [<ffffffff81241648>] do_vfs_ioctl+0x298/0x480
         [<ffffffff812418a9>] SyS_ioctl+0x79/0x90
         [<ffffffff817a1062>] tracesys_phase2+0x84/0x89
        Code: b5 71 a7 e0 5b 41 5c 41 5d 5d f3 c3 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 55 48 8b 8f 10 2e 00 00 31 c0 48 89 e5 <39> 91 20 01 00 00 76 6a 48 63 d2 48 8b 94 d1 28 01 00 00 48 85
        RIP  [<ffffffffa0797202>] kvm_irq_map_gsi+0x12/0x90 [kvm]
         RSP <ffff8800926cbca8>
        CR2: 0000000000000120
    
    Testcase:
    
        #include <unistd.h>
        #include <sys/syscall.h>
        #include <string.h>
        #include <stdint.h>
        #include <linux/kvm.h>
        #include <fcntl.h>
        #include <sys/ioctl.h>
    
        long r[26];
    
        int main()
        {
            memset(r, -1, sizeof(r));
            r[2] = open("/dev/kvm", 0);
            r[3] = ioctl(r[2], KVM_CREATE_VM, 0);
    
            struct kvm_irqfd ifd;
            ifd.fd = syscall(SYS_eventfd2, 5, 0);
            ifd.gsi = 3;
            ifd.flags = 2;
            ifd.resamplefd = ifd.fd;
            r[25] = ioctl(r[3], KVM_IRQFD, &ifd);
            return 0;
        }
    
    Reported-by: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3076e1a62807397e1f671e91297801b58e28b23c
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Wed Jun 1 14:09:23 2016 +0200

    KVM: x86: fix OOPS after invalid KVM_SET_DEBUGREGS
    
    commit d14bdb553f9196169f003058ae1cdabe514470e6 upstream.
    
    MOV to DR6 or DR7 causes a #GP if an attempt is made to write a 1 to
    any of bits 63:32.  However, this is not detected at KVM_SET_DEBUGREGS
    time, and the next KVM_RUN oopses:
    
       general protection fault: 0000 [#1] SMP
       CPU: 2 PID: 14987 Comm: a.out Not tainted 4.4.9-300.fc23.x86_64 #1
       Hardware name: LENOVO 2325F51/2325F51, BIOS G2ET32WW (1.12 ) 05/30/2012
       [...]
       Call Trace:
        [<ffffffffa072c93d>] kvm_arch_vcpu_ioctl_run+0x141d/0x14e0 [kvm]
        [<ffffffffa071405d>] kvm_vcpu_ioctl+0x33d/0x620 [kvm]
        [<ffffffff81241648>] do_vfs_ioctl+0x298/0x480
        [<ffffffff812418a9>] SyS_ioctl+0x79/0x90
        [<ffffffff817a0f2e>] entry_SYSCALL_64_fastpath+0x12/0x71
       Code: 55 83 ff 07 48 89 e5 77 27 89 ff ff 24 fd 90 87 80 81 0f 23 fe 5d c3 0f 23 c6 5d c3 0f 23 ce 5d c3 0f 23 d6 5d c3 0f 23 de 5d c3 <0f> 23 f6 5d c3 0f 0b 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00
       RIP  [<ffffffff810639eb>] native_set_debugreg+0x2b/0x40
        RSP <ffff88005836bd50>
    
    Testcase (beautified/reduced from syzkaller output):
    
        #include <unistd.h>
        #include <sys/syscall.h>
        #include <string.h>
        #include <stdint.h>
        #include <linux/kvm.h>
        #include <fcntl.h>
        #include <sys/ioctl.h>
    
        long r[8];
    
        int main()
        {
            struct kvm_debugregs dr = { 0 };
    
            r[2] = open("/dev/kvm", O_RDONLY);
            r[3] = ioctl(r[2], KVM_CREATE_VM, 0);
            r[4] = ioctl(r[3], KVM_CREATE_VCPU, 7);
    
            memcpy(&dr,
                   "\x5d\x6a\x6b\xe8\x57\x3b\x4b\x7e\xcf\x0d\xa1\x72"
                   "\xa3\x4a\x29\x0c\xfc\x6d\x44\x00\xa7\x52\xc7\xd8"
                   "\x00\xdb\x89\x9d\x78\xb5\x54\x6b\x6b\x13\x1c\xe9"
                   "\x5e\xd3\x0e\x40\x6f\xb4\x66\xf7\x5b\xe3\x36\xcb",
                   48);
            r[7] = ioctl(r[4], KVM_SET_DEBUGREGS, &dr);
            r[6] = ioctl(r[4], KVM_RUN, 0);
        }
    
    Reported-by: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f25ef62ec07b063ec87be042ec0a84be6307d899
Author: Christoffer Dall <christoffer.dall@linaro.org>
Date:   Wed May 25 15:26:34 2016 +0100

    KVM: arm/arm64: vgic-v3: Clear all dirty LRs
    
    commit fa89c77e891917b5913f9be080f9131a9457bb3e upstream.
    
    When saving the state of the list registers, it is critical to
    reset them zero, as we could otherwise leave unexpected EOI
    interrupts pending for virtual level interrupts.
    
    Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 05be09606e9421fe2b4af0f37a5420216efd0ecc
Author: Christoffer Dall <christoffer.dall@linaro.org>
Date:   Wed May 25 15:26:33 2016 +0100

    KVM: arm/arm64: vgic-v2: Clear all dirty LRs
    
    commit 4d3afc9bad2b67b118a0cc204dc94703f7a44e74 upstream.
    
    When saving the state of the list registers, it is critical to
    reset them zero, as we could otherwise leave unexpected EOI
    interrupts pending for virtual level interrupts.
    
    Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 48fc8f94672afcaf5900f3e40761a25c6912c39c
Author: Jakub Sitnicki <jkbs@redhat.com>
Date:   Wed Jun 8 15:13:34 2016 +0200

    ipv6: Skip XFRM lookup if dst_entry in socket cache is valid
    
    [ Upstream commit 00bc0ef5880dc7b82f9c320dead4afaad48e47be ]
    
    At present we perform an xfrm_lookup() for each UDPv6 message we
    send. The lookup involves querying the flow cache (flow_cache_lookup)
    and, in case of a cache miss, creating an XFRM bundle.
    
    If we miss the flow cache, we can end up creating a new bundle and
    deriving the path MTU (xfrm_init_pmtu) from on an already transformed
    dst_entry, which we pass from the socket cache (sk->sk_dst_cache) down
    to xfrm_lookup(). This can happen only if we're caching the dst_entry
    in the socket, that is when we're using a connected UDP socket.
    
    To put it another way, the path MTU shrinks each time we miss the flow
    cache, which later on leads to incorrectly fragmented payload. It can
    be observed with ESPv6 in transport mode:
    
      1) Set up a transformation and lower the MTU to trigger fragmentation
        # ip xfrm policy add dir out src ::1 dst ::1 \
          tmpl src ::1 dst ::1 proto esp spi 1
        # ip xfrm state add src ::1 dst ::1 \
          proto esp spi 1 enc 'aes' 0x0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
        # ip link set dev lo mtu 1500
    
      2) Monitor the packet flow and set up an UDP sink
        # tcpdump -ni lo -ttt &
        # socat udp6-listen:12345,fork /dev/null &
    
      3) Send a datagram that needs fragmentation with a connected socket
        # perl -e 'print "@" x 1470 | socat - udp6:[::1]:12345
        2016/06/07 18:52:52 socat[724] E read(3, 0x555bb3d5ba00, 8192): Protocol error
        00:00:00.000000 IP6 ::1 > ::1: frag (0|1448) ESP(spi=0x00000001,seq=0x2), length 1448
        00:00:00.000014 IP6 ::1 > ::1: frag (1448|32)
        00:00:00.000050 IP6 ::1 > ::1: ESP(spi=0x00000001,seq=0x3), length 1272
        (^ ICMPv6 Parameter Problem)
        00:00:00.000022 IP6 ::1 > ::1: ESP(spi=0x00000001,seq=0x5), length 136
    
      4) Compare it to a non-connected socket
        # perl -e 'print "@" x 1500' | socat - udp6-sendto:[::1]:12345
        00:00:40.535488 IP6 ::1 > ::1: frag (0|1448) ESP(spi=0x00000001,seq=0x6), length 1448
        00:00:00.000010 IP6 ::1 > ::1: frag (1448|64)
    
    What happens in step (3) is:
    
      1) when connecting the socket in __ip6_datagram_connect(), we
         perform an XFRM lookup, miss the flow cache, create an XFRM
         bundle, and cache the destination,
    
      2) afterwards, when sending the datagram, we perform an XFRM lookup,
         again, miss the flow cache (due to mismatch of flowi6_iif and
         flowi6_oif, which is an issue of its own), and recreate an XFRM
         bundle based on the cached (and already transformed) destination.
    
    To prevent the recreation of an XFRM bundle, avoid an XFRM lookup
    altogether whenever we already have a destination entry cached in the
    socket. This prevents the path MTU shrinkage and brings us on par with
    UDPv4.
    
    The fix also benefits connected PINGv6 sockets, another user of
    ip6_sk_dst_lookup_flow(), who also suffer messages being transformed
    twice.
    
    Joint work with Hannes Frederic Sowa.
    
    Reported-by: Jan Tluka <jtluka@redhat.com>
    Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
    Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d532139b6a7633a8989de065fa66c336a96c614d
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Wed Jun 8 12:59:17 2016 +0200

    l2tp: fix configuration passed to setup_udp_tunnel_sock()
    
    [ Upstream commit a5c5e2da8551eb69e5d5d09d51d526140b5db9fb ]
    
    Unused fields of udp_cfg must be all zeros. Otherwise
    setup_udp_tunnel_sock() fills ->gro_receive and ->gro_complete
    callbacks with garbage, eventually resulting in panic when used by
    udp_gro_receive().
    
    [   72.694123] BUG: unable to handle kernel paging request at ffff880033f87d78
    [   72.695518] IP: [<ffff880033f87d78>] 0xffff880033f87d78
    [   72.696530] PGD 26e2067 PUD 26e3067 PMD 342ed063 PTE 8000000033f87163
    [   72.696530] Oops: 0011 [#1] SMP KASAN
    [   72.696530] Modules linked in: l2tp_ppp l2tp_netlink l2tp_core ip6_udp_tunnel udp_tunnel pptp gre pppox ppp_generic slhc crc32c_intel ghash_clmulni_intel jitterentropy_rng sha256_generic hmac drbg ansi_cprng aesni_intel evdev aes_x86_64 ablk_helper cryptd lrw gf128mul glue_helper serio_raw acpi_cpufreq button proc\
    essor ext4 crc16 jbd2 mbcache virtio_blk virtio_net virtio_pci virtio_ring virtio
    [   72.696530] CPU: 3 PID: 0 Comm: swapper/3 Not tainted 4.7.0-rc1 #1
    [   72.696530] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Debian-1.8.2-1 04/01/2014
    [   72.696530] task: ffff880035b59700 ti: ffff880035b70000 task.ti: ffff880035b70000
    [   72.696530] RIP: 0010:[<ffff880033f87d78>]  [<ffff880033f87d78>] 0xffff880033f87d78
    [   72.696530] RSP: 0018:ffff880035f87bc0  EFLAGS: 00010246
    [   72.696530] RAX: ffffed000698f996 RBX: ffff88003326b840 RCX: ffffffff814cc823
    [   72.696530] RDX: ffff88003326b840 RSI: ffff880033e48038 RDI: ffff880034c7c780
    [   72.696530] RBP: ffff880035f87c18 R08: 000000000000a506 R09: 0000000000000000
    [   72.696530] R10: ffff880035f87b38 R11: ffff880034b9344d R12: 00000000ebfea715
    [   72.696530] R13: 0000000000000000 R14: ffff880034c7c780 R15: 0000000000000000
    [   72.696530] FS:  0000000000000000(0000) GS:ffff880035f80000(0000) knlGS:0000000000000000
    [   72.696530] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   72.696530] CR2: ffff880033f87d78 CR3: 0000000033c98000 CR4: 00000000000406a0
    [   72.696530] Stack:
    [   72.696530]  ffffffff814cc834 ffff880034b93468 0000001481416818 ffff88003326b874
    [   72.696530]  ffff880034c7ccb0 ffff880033e48038 ffff88003326b840 ffff880034b93462
    [   72.696530]  ffff88003326b88a ffff88003326b88c ffff880034b93468 ffff880035f87c70
    [   72.696530] Call Trace:
    [   72.696530]  <IRQ>
    [   72.696530]  [<ffffffff814cc834>] ? udp_gro_receive+0x1c6/0x1f9
    [   72.696530]  [<ffffffff814ccb1c>] udp4_gro_receive+0x2b5/0x310
    [   72.696530]  [<ffffffff814d989b>] inet_gro_receive+0x4a3/0x4cd
    [   72.696530]  [<ffffffff81431b32>] dev_gro_receive+0x584/0x7a3
    [   72.696530]  [<ffffffff810adf7a>] ? __lock_is_held+0x29/0x64
    [   72.696530]  [<ffffffff814321f7>] napi_gro_receive+0x124/0x21d
    [   72.696530]  [<ffffffffa000b145>] virtnet_receive+0x8df/0x8f6 [virtio_net]
    [   72.696530]  [<ffffffffa000b27e>] virtnet_poll+0x1d/0x8d [virtio_net]
    [   72.696530]  [<ffffffff81431350>] net_rx_action+0x15b/0x3b9
    [   72.696530]  [<ffffffff815893d6>] __do_softirq+0x216/0x546
    [   72.696530]  [<ffffffff81062392>] irq_exit+0x49/0xb6
    [   72.696530]  [<ffffffff81588e9a>] do_IRQ+0xe2/0xfa
    [   72.696530]  [<ffffffff81587a49>] common_interrupt+0x89/0x89
    [   72.696530]  <EOI>
    [   72.696530]  [<ffffffff810b05df>] ? trace_hardirqs_on_caller+0x229/0x270
    [   72.696530]  [<ffffffff8102b3c7>] ? default_idle+0x1c/0x2d
    [   72.696530]  [<ffffffff8102b3c5>] ? default_idle+0x1a/0x2d
    [   72.696530]  [<ffffffff8102bb8c>] arch_cpu_idle+0xa/0xc
    [   72.696530]  [<ffffffff810a6c39>] default_idle_call+0x1a/0x1c
    [   72.696530]  [<ffffffff810a6d96>] cpu_startup_entry+0x15b/0x20f
    [   72.696530]  [<ffffffff81039a81>] start_secondary+0x12c/0x133
    [   72.696530] Code: ff ff ff ff ff ff ff ff ff ff 7f ff ff ff ff ff ff ff 7f 00 7e f8 33 00 88 ff ff 6d 61 58 81 ff ff ff ff 5e de 0a 81 ff ff ff ff <00> 5c e2 34 00 88 ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00
    [   72.696530] RIP  [<ffff880033f87d78>] 0xffff880033f87d78
    [   72.696530]  RSP <ffff880035f87bc0>
    [   72.696530] CR2: ffff880033f87d78
    [   72.696530] ---[ end trace ad7758b9a1dccf99 ]---
    [   72.696530] Kernel panic - not syncing: Fatal exception in interrupt
    [   72.696530] Kernel Offset: disabled
    [   72.696530] ---[ end Kernel panic - not syncing: Fatal exception in interrupt
    
    v2: use empty initialiser instead of "{ NULL }" to avoid relying on
        first field's type.
    
    Fixes: 38fd2af24fcf ("udp: Add socket based GRO and config")
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit df181e8442068b5914cc1b102c1ce68985d9a95a
Author: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Date:   Tue Jun 7 19:14:17 2016 +0900

    bridge: Don't insert unnecessary local fdb entry on changing mac address
    
    [ Upstream commit 0b148def403153a4d1565f1640356cb78ce5109f ]
    
    The missing br_vlan_should_use() test caused creation of an unneeded
    local fdb entry on changing mac address of a bridge device when there is
    a vlan which is configured on a bridge port but not on the bridge
    device.
    
    Fixes: 2594e9064a57 ("bridge: vlan: add per-vlan struct and move to rhashtables")
    Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
    Acked-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1a5a4a9d96c9cd97bbcdc54ccaf410c0f93877b2
Author: Yuchung Cheng <ycheng@google.com>
Date:   Mon Jun 6 15:07:18 2016 -0700

    tcp: record TLP and ER timer stats in v6 stats
    
    [ Upstream commit ce3cf4ec0305919fc69a972f6c2b2efd35d36abc ]
    
    The v6 tcp stats scan do not provide TLP and ER timer information
    correctly like the v4 version . This patch fixes that.
    
    Fixes: 6ba8a3b19e76 ("tcp: Tail loss probe (TLP)")
    Fixes: eed530b6c676 ("tcp: early retransmit")
    Signed-off-by: Yuchung Cheng <ycheng@google.com>
    Signed-off-by: Neal Cardwell <ncardwell@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a6878f9fa2040bd2c2407a678736512f4685292f
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Sat Jun 4 20:50:59 2016 +0200

    bpf, trace: use READ_ONCE for retrieving file ptr
    
    [ Upstream commit 5b6c1b4d46b0dae4edea636a776d09f2064f4cd7 ]
    
    In bpf_perf_event_read() and bpf_perf_event_output(), we must use
    READ_ONCE() for fetching the struct file pointer, which could get
    updated concurrently, so we must prevent the compiler from potential
    refetching.
    
    We already do this with tail calls for fetching the related bpf_prog,
    but not so on stored perf events. Semantics for both are the same
    with regards to updates.
    
    Fixes: a43eec304259 ("bpf: introduce bpf_perf_event_output() helper")
    Fixes: 35578d798400 ("bpf: Implement function bpf_perf_event_read() that get the selected hardware PMU conuter")
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2d83aedee4aac5452f598e13df8982b929ba27bd
Author: Elad Kanfi <eladkan@mellanox.com>
Date:   Thu May 26 15:00:06 2016 +0300

    net: nps_enet: Disable interrupts before napi reschedule
    
    [ Upstream commit 86651650d16a359e4142c6a8b0467c87e48c4c94 ]
    
    Since NAPI works by shutting down event interrupts when theres
    work and turning them on when theres none, the net driver must
    make sure that interrupts are disabled when it reschedules polling.
    By calling napi_reschedule, the driver switches to polling mode,
    therefor there should be no interrupt interference.
    Any received packets will be handled in nps_enet_poll by polling the HW
    indication of received packet until all packets are handled.
    
    Signed-off-by: Elad Kanfi <eladkan@mellanox.com>
    Acked-by: Noam Camus <noamca@mellanox.com>
    Tested-by: Alexey Brodkin <abrodkin@synopsys.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2e42134e1894ab69ab0343e2c561bd25aee47d42
Author: Chen Haiquan <oc@yunify.com>
Date:   Fri May 27 10:49:11 2016 +0800

    vxlan: Accept user specified MTU value when create new vxlan link
    
    [ Upstream commit ce577668a426c6a9e2470a09dcd07fbd6e45272a ]
    
    When create a new vxlan link, example:
      ip link add vtap mtu 1440 type vxlan vni 1 dev eth0
    
    The argument "mtu" has no effect, because it is not set to conf->mtu. The
    default value is used in vxlan_dev_configure function.
    
    This problem was introduced by commit 0dfbdf4102b9 (vxlan: Factor out device
    configuration).
    
    Fixes: 0dfbdf4102b9 (vxlan: Factor out device configuration)
    Signed-off-by:  Chen Haiquan <oc@yunify.com>
    Acked-by: Cong Wang <xiyou.wangcong@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0a626fb88972dfe5ebbf80412faae8fe723fb6c4
Author: Marek Vasut <marex@denx.de>
Date:   Thu May 26 00:40:23 2016 +0200

    net: stmmac: Fix incorrect memcpy source memory
    
    [ Upstream commit 643d60bf575daaba93c1ac0d0e1c4b1d4ded1f75 ]
    
    The memcpy() currently copies mdio_bus_data into new_bus->irq, which
    makes no sense, since the mdio_bus_data structure contains more than
    just irqs. The code was likely supposed to copy mdio_bus_data->irqs
    into the new_bus->irq instead, so fix this.
    
    Fixes: e7f4dc3536a4 ("mdio: Move allocation of interrupts into core")
    Signed-off-by: Marek Vasut <marex@denx.de>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Giuseppe Cavallaro <peppe.cavallaro@st.com>
    Cc: Alexandre Torgue <alexandre.torgue@st.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5f47c0caf670843d8edefd17c4381c439a5ff890
Author: Feng Tang <feng.tang@intel.com>
Date:   Wed May 25 14:49:54 2016 +0800

    net: alx: use custom skb allocator
    
    [ Upstream commit 26c5f03b2ae8018418ceb25b2e6a48560e8c2f5b ]
    
    This patch follows Eric Dumazet's commit 7b70176421 for Atheros
    atl1c driver to fix one exactly same bug in alx driver, that the
    network link will be lost in 1-5 minutes after the device is up.
    
    My laptop Lenovo Y580 with Atheros AR8161 ethernet device hit the
    same problem with kernel 4.4, and it will be cured by Jarod Wilson's
    commit c406700c for alx driver which get merged in 4.5. But there
    are still some alx devices can't function well even with Jarod's
    patch, while this patch could make them work fine. More details on
            https://bugzilla.kernel.org/show_bug.cgi?id=70761
    
    The debug shows the issue is very likely to be related with the RX
    DMA address, specifically 0x...f80, if RX buffer get 0x...f80 several
    times, their will be RX overflow error and device will stop working.
    
    For kernel 4.5.0 with Jarod's patch which works fine with my
    AR8161/Lennov Y580, if I made some change to the
            __netdev_alloc_skb
                    --> __alloc_page_frag()
    to make the allocated buffer can get an address with 0x...f80,
    then the same error happens. If I make it to 0x...f40 or 0x....fc0,
    everything will be still fine. So I tend to believe that the
    0x..f80 address cause the silicon to behave abnormally.
    
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=70761
    Cc: Eric Dumazet <edumazet@google.com>
    Cc: Johannes Berg <johannes@sipsolutions.net>
    Cc: Jarod Wilson <jarod@redhat.com>
    Signed-off-by: Feng Tang <feng.tang@intel.com>
    Tested-by: Ole Lukoie <olelukoie@mail.ru>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 928cb370d372796dacd6324414b67929ead3251f
Author: Ivan Vecera <ivecera@redhat.com>
Date:   Wed May 25 21:21:52 2016 +0200

    team: don't call netdev_change_features under team->lock
    
    [ Upstream commit f6988cb63a4e698d8a62a1d085d263d1fcc351ea ]
    
    The team_device_event() notifier calls team_compute_features() to fix
    vlan_features under team->lock to protect team->port_list. The problem is
    that subsequent __team_compute_features() calls netdev_change_features()
    to propagate vlan_features to upper vlan devices while team->lock is still
    taken. This can lead to deadlock when NETIF_F_LRO is modified on lower
    devices or team device itself.
    
    Example:
    The team0 as active backup with eth0 and eth1 NICs. Both eth0 & eth1 are
    LRO capable and LRO is enabled. Thus LRO is also enabled on team0.
    
    The command 'ethtool -K team0 lro off' now hangs due to this deadlock:
    
    dev_ethtool()
    -> ethtool_set_features()
     -> __netdev_update_features(team)
      -> netdev_sync_lower_features()
       -> netdev_update_features(lower_1)
        -> __netdev_update_features(lower_1)
        -> netdev_features_change(lower_1)
         -> call_netdevice_notifiers(...)
          -> team_device_event(lower_1)
           -> team_compute_features(team) [TAKES team->lock]
            -> netdev_change_features(team)
             -> __netdev_update_features(team)
              -> netdev_sync_lower_features()
               -> netdev_update_features(lower_2)
                -> __netdev_update_features(lower_2)
                -> netdev_features_change(lower_2)
                 -> call_netdevice_notifiers(...)
                  -> team_device_event(lower_2)
                   -> team_compute_features(team) [DEADLOCK]
    
    The bug is present in team from the beginning but it appeared after the commit
    fd867d5 (net/core: generic support for disabling netdev features down stack)
    that adds synchronization of features with lower devices.
    
    Fixes: fd867d5 (net/core: generic support for disabling netdev features down stack)
    Cc: Jiri Pirko <jiri@resnulli.us>
    Signed-off-by: Ivan Vecera <ivecera@redhat.com>
    Signed-off-by: Jiri Pirko <jiri@mellanox.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f9f1165bf449960fe20e0995423e769221e80673
Author: Edward Cree <ecree@solarflare.com>
Date:   Tue May 24 18:53:36 2016 +0100

    sfc: on MC reset, clear PIO buffer linkage in TXQs
    
    [ Upstream commit c0795bf64cba4d1b796fdc5b74b33772841ed1bb ]
    
    Otherwise, if we fail to allocate new PIO buffers, our TXQs will try to
    use the old ones, which aren't there any more.
    
    Fixes: 183233bec810 "sfc: Allocate and link PIO buffers; map them with write-combining"
    Signed-off-by: Edward Cree <ecree@solarflare.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cba1de5b6cdc416a7ea589523f5a737168a34580
Author: Gregory CLEMENT <gregory.clement@free-electrons.com>
Date:   Tue May 24 18:03:26 2016 +0200

    net: hwbm: Fix unbalanced spinlock in error case
    
    [ Upstream commit b388fc7405e901c7d6f7817d05193c054e761815 ]
    
    When hwbm_pool_add exited in error the spinlock was not released. This
    patch fixes this issue.
    
    Fixes: 8cb2d8bf57e6 ("net: add a hardware buffer management helper API")
    Reported-by: Jean-Jacques Hiblot <jjhiblot@traphandler.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4360cde0fc41c5e2a5132e34b9c67c91b0b32348
Author: Gregory CLEMENT <gregory.clement@free-electrons.com>
Date:   Tue May 24 18:03:25 2016 +0200

    net: mvneta: Fix lacking spinlock initialization
    
    [ Upstream commit 91c45e38b9478ff507e05f10151d64cd0d1aad7b ]
    
    The spinlock used by the hwbm functions must be initialized by the
    network driver. This commit fixes this lack and the following erros when
    lockdep is enabled:
    
    INFO: trying to register non-static key.
    the code is fine but needs lockdep annotation.
    turning off the locking correctness validator.
    [<c010ff80>] (unwind_backtrace) from [<c010bd08>] (show_stack+0x10/0x14)
    [<c010bd08>] (show_stack) from [<c032913c>] (dump_stack+0xb4/0xe0)
    [<c032913c>] (dump_stack) from [<c01670e4>] (__lock_acquire+0x1f58/0x2060)
    [<c01670e4>] (__lock_acquire) from [<c0167dec>] (lock_acquire+0xa4/0xd0)
    [<c0167dec>] (lock_acquire) from [<c06f6650>] (_raw_spin_lock_irqsave+0x54/0x68)
    [<c06f6650>] (_raw_spin_lock_irqsave) from [<c058e830>] (hwbm_pool_add+0x1c/0xdc)
    [<c058e830>] (hwbm_pool_add) from [<c043f4e8>] (mvneta_bm_pool_use+0x338/0x490)
    [<c043f4e8>] (mvneta_bm_pool_use) from [<c0443198>] (mvneta_probe+0x654/0x1284)
    [<c0443198>] (mvneta_probe) from [<c03b894c>] (platform_drv_probe+0x4c/0xb0)
    [<c03b894c>] (platform_drv_probe) from [<c03b7158>] (driver_probe_device+0x214/0x2c0)
    [<c03b7158>] (driver_probe_device) from [<c03b72c4>] (__driver_attach+0xc0/0xc4)
    [<c03b72c4>] (__driver_attach) from [<c03b5440>] (bus_for_each_dev+0x68/0x9c)
    [<c03b5440>] (bus_for_each_dev) from [<c03b65b8>] (bus_add_driver+0x1a0/0x218)
    [<c03b65b8>] (bus_add_driver) from [<c03b79cc>] (driver_register+0x78/0xf8)
    [<c03b79cc>] (driver_register) from [<c01018f4>] (do_one_initcall+0x90/0x1dc)
    [<c01018f4>] (do_one_initcall) from [<c0900de4>] (kernel_init_freeable+0x15c/0x1fc)
    [<c0900de4>] (kernel_init_freeable) from [<c06eed90>] (kernel_init+0x8/0x114)
    [<c06eed90>] (kernel_init) from [<c0107910>] (ret_from_fork+0x14/0x24)
    
    Fixes: baa11ebc0c76 ("net: mvneta: Use the new hwbm framework")
    Reported-by: Russell King <rmk+kernel@armlinux.org.uk>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5614cb19e2d0a5b1fc3882c0c6e9781ff344e464
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Sun May 22 23:16:18 2016 +0200

    bpf, inode: disallow userns mounts
    
    [ Upstream commit 612bacad78ba6d0a91166fc4487af114bac172a8 ]
    
    Follow-up to commit e27f4a942a0e ("bpf: Use mount_nodev not mount_ns
    to mount the bpf filesystem"), which removes the FS_USERNS_MOUNT flag.
    
    The original idea was to have a per mountns instance instead of a
    single global fs instance, but that didn't work out and we had to
    switch to mount_nodev() model. The intent of that middle ground was
    that we avoid users who don't play nice to create endless instances
    of bpf fs which are difficult to control and discover from an admin
    point of view, but at the same time it would have allowed us to be
    more flexible with regard to namespaces.
    
    Therefore, since we now did the switch to mount_nodev() as a fix
    where individual instances are created, we also need to remove userns
    mount flag along with it to avoid running into mentioned situation.
    I don't expect any breakage at this early point in time with removing
    the flag and we can revisit this later should the requirement for
    this come up with future users. This and commit e27f4a942a0e have
    been split to facilitate tracking should any of them run into the
    unlikely case of causing a regression.
    
    Fixes: b2197755b263 ("bpf: add support for persistent maps/progs")
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
    Acked-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 02aa6d24512d5e29fa9a97a6a90489c8bddfdd9a
Author: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
Date:   Fri May 20 13:21:10 2016 -0300

    ipv4: Fix non-initialized TTL when CONFIG_SYSCTL=n
    
    [ Upstream commit 049bbf589ec651685205bd8ce73221fdd62345cf ]
    
    Commit fa50d974d104 ("ipv4: Namespaceify ip_default_ttl sysctl knob")
    moves the default TTL assignment, and as side-effect IPv4 TTL now
    has a default value only if sysctl support is enabled (CONFIG_SYSCTL=y).
    
    The sysctl_ip_default_ttl is fundamental for IP to work properly,
    as it provides the TTL to be used as default. The defautl TTL may be
    used in ip_selected_ttl, through the following flow:
    
      ip_select_ttl
        ip4_dst_hoplimit
          net->ipv4.sysctl_ip_default_ttl
    
    This commit fixes the issue by assigning net->ipv4.sysctl_ip_default_ttl
    in net_init_net, called during ipv4's initialization.
    
    Without this commit, a kernel built without sysctl support will send
    all IP packets with zero TTL (unless a TTL is explicitly set, e.g.
    with setsockopt).
    
    Given a similar issue might appear on the other knobs that were
    namespaceify, this commit also moves them.
    
    Fixes: fa50d974d104 ("ipv4: Namespaceify ip_default_ttl sysctl knob")
    Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d03c60f4dbcf29efb96dc5a56b2628fe2a49384d
Author: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Date:   Thu May 19 17:26:29 2016 +0200

    uapi glibc compat: fix compilation when !__USE_MISC in glibc
    
    [ Upstream commit f0a3fdca794d1e68ae284ef4caefe681f7c18e89 ]
    
    These structures are defined only if __USE_MISC is set in glibc net/if.h
    headers, ie when _BSD_SOURCE or _SVID_SOURCE are defined.
    
    CC: Jan Engelhardt <jengelh@inai.de>
    CC: Josh Boyer <jwboyer@fedoraproject.org>
    CC: Stephen Hemminger <shemming@brocade.com>
    CC: Waldemar Brodkorb <mail@waldemar-brodkorb.de>
    CC: Gabriel Laskar <gabriel@lse.epita.fr>
    CC: Mikko Rapeli <mikko.rapeli@iki.fi>
    Fixes: 4a91cb61bb99 ("uapi glibc compat: fix compile errors when glibc net/if.h included before linux/if.h")
    Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e6b6748835be410676ccc727b9b7290228305e61
Author: Hannes Frederic Sowa <hannes@stressinduktion.org>
Date:   Thu May 19 15:58:33 2016 +0200

    udp: prevent skbs lingering in tunnel socket queues
    
    [ Upstream commit e5aed006be918af163eb397e45aa5ea6cefd5e01 ]
    
    In case we find a socket with encapsulation enabled we should call
    the encap_recv function even if just a udp header without payload is
    available. The callbacks are responsible for correctly verifying and
    dropping the packets.
    
    Also, in case the header validation fails for geneve and vxlan we
    shouldn't put the skb back into the socket queue, no one will pick
    them up there.  Instead we can simply discard them in the respective
    encap_recv functions.
    
    Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6584810ac5701d0e4adeaca890902d9476e26a41
Author: Eric W. Biederman <ebiederm@xmission.com>
Date:   Fri May 20 17:22:48 2016 -0500

    bpf: Use mount_nodev not mount_ns to mount the bpf filesystem
    
    [ Upstream commit e27f4a942a0ee4b84567a3c6cfa84f273e55cbb7 ]
    
    While reviewing the filesystems that set FS_USERNS_MOUNT I spotted the
    bpf filesystem.  Looking at the code I saw a broken usage of mount_ns
    with current->nsproxy->mnt_ns. As the code does not acquire a
    reference to the mount namespace it can not possibly be correct to
    store the mount namespace on the superblock as it does.
    
    Replace mount_ns with mount_nodev so that each mount of the bpf
    filesystem returns a distinct instance, and the code is not buggy.
    
    In discussion with Hannes Frederic Sowa it was reported that the use
    of mount_ns was an attempt to have one bpf instance per mount
    namespace, in an attempt to keep resources that pin resources from
    hiding.  That intent simply does not work, the vfs is not built to
    allow that kind of behavior.  Which means that the bpf filesystem
    really is buggy both semantically and in it's implemenation as it does
    not nor can it implement the original intent.
    
    This change is userspace visible, but my experience with similar
    filesystems leads me to believe nothing will break with a model of each
    mount of the bpf filesystem is distinct from all others.
    
    Fixes: b2197755b263 ("bpf: add support for persistent maps/progs")
    Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
    Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b8dddea3cdac95db0fd2057281db7acfa5efe562
Author: Jason Wang <jasowang@redhat.com>
Date:   Thu May 19 13:36:51 2016 +0800

    tuntap: correctly wake up process during uninit
    
    [ Upstream commit addf8fc4acb1cf79492ac64966f07178793cb3d7 ]
    
    We used to check dev->reg_state against NETREG_REGISTERED after each
    time we are woke up. But after commit 9e641bdcfa4e ("net-tun:
    restructure tun_do_read for better sleep/wakeup efficiency"), it uses
    skb_recv_datagram() which does not check dev->reg_state. This will
    result if we delete a tun/tap device after a process is blocked in the
    reading. The device will wait for the reference count which was held
    by that process for ever.
    
    Fixes this by using RCV_SHUTDOWN which will be checked during
    sk_recv_datagram() before trying to wake up the process during uninit.
    
    Fixes: 9e641bdcfa4e ("net-tun: restructure tun_do_read for better
    sleep/wakeup efficiency")
    Cc: Eric Dumazet <edumazet@google.com>
    Cc: Xi Wang <xii@google.com>
    Cc: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Jason Wang <jasowang@redhat.com>
    Acked-by: Eric Dumazet <edumazet@google.com>
    Acked-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a70e1edf4c78b4f957ca800cea67b559a5e70a1d
Author: Sabrina Dubroca <sd@queasysnail.net>
Date:   Wed May 18 13:34:40 2016 +0200

    macsec: fix netlink attribute for key id
    
    [ Upstream commit 1968a0b8b6ca088bc029bd99ee696f1aca4090d0 ]
    
    In my last commit I replaced MACSEC_SA_ATTR_KEYID by
    MACSEC_SA_ATTR_KEY.
    
    Fixes: 8acca6acebd0 ("macsec: key identifier is 128 bits, not 64")
    Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2e1d00bfc3718256f9a97057c7b0dd72036e5c34
Author: Jiri Pirko <jiri@mellanox.com>
Date:   Tue May 17 18:58:08 2016 +0200

    switchdev: pass pointer to fib_info instead of copy
    
    [ Upstream commit da4ed55165d41b1073f9a476f1c18493e9bf8c8e ]
    
    The problem is that fib_info->nh is [0] so the struct fib_info
    allocation size depends on number of nexthops. If we just copy fib_info,
    we do not copy the nexthops info and driver accesses memory which is not
    ours.
    
    Given the fact that fib4 does not defer operations and therefore it does
    not need copy, just pass the pointer down to drivers as it was done
    before.
    
    Fixes: 850d0cbc91 ("switchdev: remove pointers from switchdev objects")
    Signed-off-by: Jiri Pirko <jiri@mellanox.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 988ae90abb5cb61c286c6f63a1d3b8a6955e4fd8
Author: Richard Alpe <richard.alpe@ericsson.com>
Date:   Tue May 17 16:57:37 2016 +0200

    tipc: fix nametable publication field in nl compat
    
    [ Upstream commit 03aaaa9b941e136757b55c4cf775aab6068dfd94 ]
    
    The publication field of the old netlink API should contain the
    publication key and not the publication reference.
    
    Fixes: 44a8ae94fd55 (tipc: convert legacy nl name table dump to nl compat)
    Signed-off-by: Richard Alpe <richard.alpe@ericsson.com>
    Acked-by: Jon Maloy <jon.maloy@ericsson.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c55a7faa585fc5ee9b50a05f34bfe3b3d38d90ab
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Mon May 16 17:28:16 2016 +0800

    netlink: Fix dump skb leak/double free
    
    [ Upstream commit 92964c79b357efd980812c4de5c1fd2ec8bb5520 ]
    
    When we free cb->skb after a dump, we do it after releasing the
    lock.  This means that a new dump could have started in the time
    being and we'll end up freeing their skb instead of ours.
    
    This patch saves the skb and module before we unlock so we free
    the right memory.
    
    Fixes: 16b304f3404f ("netlink: Eliminate kmalloc in netlink dump operation.")
    Reported-by: Baozeng Ding <sploving1@gmail.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Acked-by: Cong Wang <xiyou.wangcong@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ba7963c750122e13b9ba254afa95438126d7f460
Author: Richard Alpe <richard.alpe@ericsson.com>
Date:   Mon May 16 11:14:54 2016 +0200

    tipc: check nl sock before parsing nested attributes
    
    [ Upstream commit 45e093ae2830cd1264677d47ff9a95a71f5d9f9c ]
    
    Make sure the socket for which the user is listing publication exists
    before parsing the socket netlink attributes.
    
    Prior to this patch a call without any socket caused a NULL pointer
    dereference in tipc_nl_publ_dump().
    
    Tested-and-reported-by: Baozeng Ding <sploving1@gmail.com>
    Signed-off-by: Richard Alpe <richard.alpe@ericsson.com>
    Acked-by: Jon Maloy <jon.maloy@ericsson.cm>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7c1f0a9c9424259df081000bd75b55a9c3ef682f
Author: Ewan D. Milne <emilne@redhat.com>
Date:   Tue May 31 09:42:29 2016 -0400

    scsi: Add QEMU CD-ROM to VPD Inquiry Blacklist
    
    commit fbd83006e3e536fcb103228d2422ea63129ccb03 upstream.
    
    Linux fails to boot as a guest with a QEMU CD-ROM:
    
    [    4.439488] ata2.00: ATAPI: QEMU CD-ROM, 0.8.2, max UDMA/100
    [    4.443649] ata2.00: configured for MWDMA2
    [    4.450267] scsi 1:0:0:0: CD-ROM            QEMU     QEMU CD-ROM      0.8. PQ: 0 ANSI: 5
    [    4.464317] ata2.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
    [    4.464319] ata2.00: BMDMA stat 0x5
    [    4.464339] ata2.00: cmd a0/01:00:00:00:01/00:00:00:00:00/a0 tag 0 dma 16640 in
    [    4.464339]          Inquiry 12 01 00 00 ff 00res 48/20:02:00:24:00/00:00:00:00:00/a0 Emask 0x2 (HSM violation)
    [    4.464341] ata2.00: status: { DRDY DRQ }
    [    4.465864] ata2: soft resetting link
    [    4.625971] ata2.00: configured for MWDMA2
    [    4.628290] ata2: EH complete
    [    4.646670] ata2.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
    [    4.646671] ata2.00: BMDMA stat 0x5
    [    4.646683] ata2.00: cmd a0/01:00:00:00:01/00:00:00:00:00/a0 tag 0 dma 16640 in
    [    4.646683]          Inquiry 12 01 00 00 ff 00res 48/20:02:00:24:00/00:00:00:00:00/a0 Emask 0x2 (HSM violation)
    [    4.646685] ata2.00: status: { DRDY DRQ }
    [    4.648193] ata2: soft resetting link
    
    ...
    
    Fix this by suppressing VPD inquiry for this device.
    
    Signed-off-by: Ewan D. Milne <emilne@redhat.com>
    Reported-by: Jan Stancek <jstancek@redhat.com>
    Tested-by: Jan Stancek <jstancek@redhat.com>
    Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2bb72cecc354795ddf423de908743536d22396d8
Author: James Bottomley <James.Bottomley@HansenPartnership.com>
Date:   Fri May 13 12:04:06 2016 -0700

    scsi_lib: correctly retry failed zero length REQ_TYPE_FS commands
    
    commit a621bac3044ed6f7ec5fa0326491b2d4838bfa93 upstream.
    
    When SCSI was written, all commands coming from the filesystem
    (REQ_TYPE_FS commands) had data.  This meant that our signal for needing
    to complete the command was the number of bytes completed being equal to
    the number of bytes in the request.  Unfortunately, with the advent of
    flush barriers, we can now get zero length REQ_TYPE_FS commands, which
    confuse this logic because they satisfy the condition every time.  This
    means they never get retried even for retryable conditions, like UNIT
    ATTENTION because we complete them early assuming they're done.  Fix
    this by special casing the early completion condition to recognise zero
    length commands with errors and let them drop through to the retry code.
    
    Reported-by: Sebastian Parschauer <s.parschauer@gmx.de>
    Signed-off-by: James E.J. Bottomley <jejb@linux.vnet.ibm.com>
    Tested-by: Jack Wang <jinpu.wang@profitbricks.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>