1. 10 Nov, 2018 40 commits
    • Prarit Bhargava's avatar
      x86/PCI: Mark Broadwell-EP Home Agent 1 as having non-compliant BARs · 7746e511
      Prarit Bhargava authored
      [ Upstream commit da77b671 ]
      
      Commit b8941571 ("x86/PCI: Mark Broadwell-EP Home Agent & PCU as having
      non-compliant BARs") marked Home Agent 0 & PCU has having non-compliant
      BARs.  Home Agent 1 also has non-compliant BARs.
      
      Mark Home Agent 1 as having non-compliant BARs so the PCI core doesn't
      touch them.
      
      The problem with these devices is documented in the Xeon v4 specification
      update:
      
        BDF2          PCI BARs in the Home Agent Will Return Non-Zero Values
                      During Enumeration
      
        Problem:      During system initialization the Operating System may access
                      the standard PCI BARs (Base Address Registers).  Due to
                      this erratum, accesses to the Home Agent BAR registers (Bus
                      1; Device 18; Function 0,4; Offsets (0x14-0x24) will return
                      non-zero values.
      
        Implication:  The operating system may issue a warning.  Intel has not
                      observed any functional failures due to this erratum.
      
      Link: http://www.intel.com/content/www/us/en/processors/xeon/xeon-e5-v4-spec-update.html
      Fixes: b8941571
      
       ("x86/PCI: Mark Broadwell-EP Home Agent & PCU as having non-compliant BARs")
      Signed-off-by: default avatarPrarit Bhargava <prarit@redhat.com>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      CC: Thomas Gleixner <tglx@linutronix.de>
      CC: Ingo Molnar <mingo@redhat.com>
      CC: "H. Peter Anvin" <hpa@zytor.com>
      CC: Andi Kleen <ak@linux.intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7746e511
    • Hannes Frederic Sowa's avatar
      net: fix warnings in 'make htmldocs' by moving macro definition out of field declaration · a5bb227c
      Hannes Frederic Sowa authored
      [ Upstream commit 7bbadd2d ]
      
      Docbook does not like the definition of macros inside a field declaration
      and adds a warning. Move the definition out.
      
      Fixes: 79462ad0
      
       ("net: add validation for the socket syscall protocol argument")
      Reported-by: default avatarkbuild test robot <lkp@intel.com>
      Signed-off-by: default avatarHannes Frederic Sowa <hannes@stressinduktion.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a5bb227c
    • Alan Stern's avatar
      USB: hub: fix up early-exit pathway in hub_activate · e57bb991
      Alan Stern authored
      [ Upstream commit ca5cbc8b ]
      
      The early-exit pathway in hub_activate, added by commit e50293ef
      
      
      ("USB: fix invalid memory access in hub_activate()") needs
      improvement.  It duplicates code that is already present at the end of
      the subroutine, and it neglects to undo the effect of a
      usb_autopm_get_interface_no_resume() call.
      
      This patch fixes both problems by making the early-exit pathway jump
      directly to the end of the subroutine.  It simplifies the code at the
      end by merging two conditionals that actually test the same condition
      although they appear different: If type < HUB_INIT3 then type must be
      either HUB_INIT2 or HUB_INIT, and it can't be HUB_INIT because in that
      case the subroutine would have exited earlier.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      CC: <stable@vger.kernel.org> #4.4+
      Reviewed-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e57bb991
    • Eric Biggers's avatar
      KEYS: put keyring if install_session_keyring_to_cred() fails · 7938ba3f
      Eric Biggers authored
      [ Upstream commit d636bd9f ]
      
      In join_session_keyring(), if install_session_keyring_to_cred() were to
      fail, we would leak the keyring reference, just like in the bug fixed by
      commit 23567fd0
      
       ("KEYS: Fix keyring ref leak in
      join_session_keyring()").  Fortunately this cannot happen currently, but
      we really should be more careful.  Do this by adding and using a new
      error label at which the keyring reference is dropped.
      Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Signed-off-by: default avatarJames Morris <james.l.morris@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7938ba3f
    • Jan Beulich's avatar
      igb: fix NULL derefs due to skipped SR-IOV enabling · 7b8052e1
      Jan Beulich authored
      [ Upstream commit be06998f ]
      
      The combined effect of commits 6423fc34 ("igb: do not re-init SR-IOV
      during probe") and ceee3450
      
       ("igb: make sure SR-IOV init uses the
      right number of queues") causes VFs no longer getting set up, leading
      to NULL pointer dereferences due to the adapter's ->vf_data being NULL
      while ->vfs_allocated_count is non-zero. The first commit not only
      neglected the side effect of igb_sriov_reinit() that the second commit
      tried to account for, but also that of setting IGB_FLAG_HAS_MSIX,
      without which igb_enable_sriov() is effectively a no-op. Calling
      igb_{,re}set_interrupt_capability() as done here seems to address this,
      but I'm not sure whether this is better than sinply reverting the other
      two commits.
      Signed-off-by: default avatarJan Beulich <jbeulich@suse.com>
      Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7b8052e1
    • Miklos Szeredi's avatar
      ovl: fix open in stacked overlay · d255d18a
      Miklos Szeredi authored
      [ Upstream commit 1c8a47df
      
       ]
      
      If two overlayfs filesystems are stacked on top of each other, then we need
      recursion in ovl_d_select_inode().
      
      I guess d_backing_inode() is supposed to do that.  But currently it doesn't
      and that functionality is open coded in vfs_open().  This is now copied
      into ovl_d_select_inode() to fix this regression.
      Reported-by: default avatarAlban Crequy <alban.crequy@gmail.com>
      Signed-off-by: default avatarMiklos Szeredi <miklos@szeredi.hu>
      Fixes: 4bacc9c9
      
       ("overlayfs: Make f_path always point to the overlay...")
      Cc: David Howells <dhowells@redhat.com>
      Cc: <stable@vger.kernel.org> # v4.2+
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d255d18a
    • Arik Nemtsov's avatar
      iwlwifi: pcie: correctly define 7265-D cfg · 61fde28f
      Arik Nemtsov authored
      [ Upstream commit 2b0e2b0f ]
      
      The trans cfg was not replaced for 7265-D cards. This led to a check of
      the min-NVM version against a 7265-C card, causing very-old 7265-D cards
      to operate incorrectly with the driver.
      
      Fixes: 3fd0d3c1
      
       ("iwlwifi: pcie: support 7265-D devices")
      Signed-off-by: default avatarArik Nemtsov <arikx.nemtsov@intel.com>
      Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      61fde28f
    • Xin Long's avatar
      sctp: translate network order to host order when users get a hmacid · beb685c8
      Xin Long authored
      [ Upstream commit 7a84bd46 ]
      
      Commit ed5a377d ("sctp: translate host order to network order when
      setting a hmacid") corrected the hmacid byte-order when setting a hmacid.
      but the same issue also exists on getting a hmacid.
      
      We fix it by changing hmacids to host order when users get them with
      getsockopt.
      
      Fixes: Commit ed5a377d
      
       ("sctp: translate host order to network order when setting a hmacid")
      Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
      Acked-by: default avatarMarcelo Ricardo Leitner <marcelo.leitner@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      beb685c8
    • Jan Kara's avatar
      vfs: Make sendfile(2) killable even better · ce2c2e07
      Jan Kara authored
      [ Upstream commit c725bfce ]
      
      Commit 296291cd
      
       (mm: make sendfile(2) killable) fixed an issue where
      sendfile(2) was doing a lot of tiny writes into a filesystem and thus
      was unkillable for a long time. However sendfile(2) can be (mis)used to
      issue lots of writes into arbitrary file descriptor such as evenfd or
      similar special file descriptors which never hit the standard filesystem
      write path and thus are still unkillable. E.g. the following example
      from Dmitry burns CPU for ~16s on my test system without possibility to
      be killed:
      
              int r1 = eventfd(0, 0);
              int r2 = memfd_create("", 0);
              unsigned long n = 1<<30;
              fallocate(r2, 0, 0, n);
              sendfile(r1, r2, 0, n);
      
      There are actually quite a few tests for pending signals in sendfile
      code however we data to write is always available none of them seems to
      trigger. So fix the problem by adding a test for pending signal into
      splice_from_pipe_next() also before the loop waiting for pipe buffers to
      be available. This should fix all the lockup issues with sendfile of the
      do-ton-of-tiny-writes nature.
      
      CC: stable@vger.kernel.org
      Reported-by: default avatarDmitry Vyukov <dvyukov@google.com>
      Signed-off-by: default avatarJan Kara <jack@suse.cz>
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ce2c2e07
    • Alex Williamson's avatar
      PCI: Fix devfn for VPD access through function 0 · ffad2775
      Alex Williamson authored
      [ Upstream commit 9d924075 ]
      
      Commit 932c435c ("PCI: Add dev_flags bit to access VPD through function
      0") passes PCI_SLOT(devfn) for the devfn parameter of pci_get_slot().
      Generally this works because we're fairly well guaranteed that a PCIe
      device is at slot address 0, but for the general case, including
      conventional PCI, it's incorrect.  We need to get the slot and then convert
      it back into a devfn.
      
      Fixes: 932c435c
      
       ("PCI: Add dev_flags bit to access VPD through function 0")
      Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
      Signed-off-by: default avatarBjorn Helgaas <helgaas@kernel.org>
      Acked-by: default avatarMyron Stowe <myron.stowe@redhat.com>
      Acked-by: default avatarMark Rustad <mark.d.rustad@intel.com>
      CC: stable@vger.kernel.org
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ffad2775
    • Jan Beulich's avatar
      x86/ldt: Fix small LDT allocation for Xen · c7f6eab8
      Jan Beulich authored
      [ Upstream commit f454b478 ]
      
      While the following commit:
      
        37868fe1
      
       ("x86/ldt: Make modify_ldt synchronous")
      
      added a nice comment explaining that Xen needs page-aligned
      whole page chunks for guest descriptor tables, it then
      nevertheless used kzalloc() on the small size path.
      
      As I'm unaware of guarantees for kmalloc(PAGE_SIZE, ) to return
      page-aligned memory blocks, I believe this needs to be switched
      back to __get_free_page() (or better get_zeroed_page()).
      Signed-off-by: default avatarJan Beulich <jbeulich@suse.com>
      Cc: Andy Lutomirski <luto@amacapital.net>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Brian Gerst <brgerst@gmail.com>
      Cc: David Vrabel <david.vrabel@citrix.com>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: http://lkml.kernel.org/r/55E735D6020000780009F1E6@prv-mh.provo.novell.com
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c7f6eab8
    • Ken Xue's avatar
      Revert "SCSI: Fix NULL pointer dereference in runtime PM" · 1c857dc0
      Ken Xue authored
      [ Upstream commit 1c69d3b6 ]
      
      This reverts commit 49718f0f ("SCSI: Fix NULL pointer dereference in
      runtime PM")
      
      The old commit may lead to a issue that blk_{pre|post}_runtime_suspend and
      blk_{pre|post}_runtime_resume may not be called in pairs.
      
      Take sr device as example, when sr device goes to runtime suspend,
      blk_{pre|post}_runtime_suspend will be called since sr device defined
      pm->runtime_suspend. But blk_{pre|post}_runtime_resume will not be called
      since sr device doesn't have pm->runtime_resume. so, sr device can not
      resume correctly anymore.
      
      More discussion can be found from below link.
      http://marc.info/?l=linux-scsi&m=144163730531875&w=2
      
      Signed-off-by: default avatarKen Xue <Ken.Xue@amd.com>
      Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Cc: Xiangliang Yu <Xiangliang.Yu@amd.com>
      Cc: James E.J. Bottomley <JBottomley@odin.com>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Michael Terry <Michael.terry@canonical.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1c857dc0
    • Naoya Horiguchi's avatar
      mm: migrate: hugetlb: putback destination hugepage to active list · f46c09f2
      Naoya Horiguchi authored
      [ Upstream commit 3aaa76e1 ]
      
      Since commit bcc54222 ("mm: hugetlb: introduce page_huge_active")
      each hugetlb page maintains its active flag to avoid a race condition
      betwe= en multiple calls of isolate_huge_page(), but current kernel
      doesn't set the f= lag on a hugepage allocated by migration because the
      proper putback routine isn= 't called.  This means that users could
      still encounter the race referred to by bcc54222 in this special
      case, so this patch fixes it.
      
      Fixes: bcc54222
      
       ("mm: hugetlb: introduce page_huge_active")
      Signed-off-by: default avatarNaoya Horiguchi <n-horiguchi@ah.jp.nec.com>
      Cc: Michal Hocko <mhocko@suse.cz>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: Hugh Dickins <hughd@google.com>
      Cc: <stable@vger.kernel.org>  [4.1.x]
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      f46c09f2
    • Peter Zijlstra's avatar
      perf: Fix PERF_EVENT_IOC_PERIOD deadlock · 73c72ba6
      Peter Zijlstra authored
      [ Upstream commit 642c2d67
      
       ]
      
      Dmitry reported a fairly silly recursive lock deadlock for
      PERF_EVENT_IOC_PERIOD, fix this by explicitly doing the inactive part of
      __perf_event_period() instead of calling that function.
      Reported-by: default avatarDmitry Vyukov <dvyukov@google.com>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Cc: <stable@vger.kernel.org>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Eric Dumazet <edumazet@google.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Kostya Serebryany <kcc@google.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Sasha Levin <sasha.levin@oracle.com>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Vince Weaver <vincent.weaver@maine.edu>
      Fixes: c7999c6f ("perf: Fix PERF_EVENT_IOC_PERIOD migration race")
      Link: http://lkml.kernel.org/r/20151130115615.GJ17308@twins.programming.kicks-ass.net
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      73c72ba6
    • Sudip Mukherjee's avatar
      libata: blacklist Micron 500IT SSD with MU01 firmware · 4ac4abf7
      Sudip Mukherjee authored
      [ Upstream commit 136d769e ]
      
      While whitelisting Micron M500DC drives, the tweaked blacklist entry
      enabled queued TRIM from M500IT variants also. But these do not support
      queued TRIM. And while using those SSDs with the latest kernel we have
      seen errors and even the partition table getting corrupted.
      
      Some part from the dmesg:
      [    6.727384] ata1.00: ATA-9: Micron_M500IT_MTFDDAK060MBD, MU01, max UDMA/133
      [    6.727390] ata1.00: 117231408 sectors, multi 16: LBA48 NCQ (depth 31/32), AA
      [    6.741026] ata1.00: supports DRM functions and may not be fully accessible
      [    6.759887] ata1.00: configured for UDMA/133
      [    6.762256] scsi 0:0:0:0: Direct-Access     ATA      Micron_M500IT_MT MU01 PQ: 0 ANSI: 5
      
      and then for the error:
      [  120.860334] ata1.00: exception Emask 0x1 SAct 0x7ffc0007 SErr 0x0 action 0x6 frozen
      [  120.860338] ata1.00: irq_stat 0x40000008
      [  120.860342] ata1.00: failed command: SEND FPDMA QUEUED
      [  120.860351] ata1.00: cmd 64/01:00:00:00:00/00:00:00:00:00/a0 tag 0 ncq dma 512 out
               res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x5 (timeout)
      [  120.860353] ata1.00: status: { DRDY }
      [  120.860543] ata1: hard resetting link
      [  121.166128] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
      [  121.166376] ata1.00: supports DRM functions and may not be fully accessible
      [  121.186238] ata1.00: supports DRM functions and may not be fully accessible
      [  121.204445] ata1.00: configured for UDMA/133
      [  121.204454] ata1.00: device reported invalid CHS sector 0
      [  121.204541] sd 0:0:0:0: [sda] tag#18 UNKNOWN(0x2003) Result: hostbyte=0x00 driverbyte=0x08
      [  121.204546] sd 0:0:0:0: [sda] tag#18 Sense Key : 0x5 [current]
      [  121.204550] sd 0:0:0:0: [sda] tag#18 ASC=0x21 ASCQ=0x4
      [  121.204555] sd 0:0:0:0: [sda] tag#18 CDB: opcode=0x93 93 08 00 00 00 00 00 04 28 80 00 00 00 30 00 00
      [  121.204559] print_req_error: I/O error, dev sda, sector 272512
      
      After few reboots with these errors, and the SSD is corrupted.
      After blacklisting it, the errors are not seen and the SSD does not get
      corrupted any more.
      
      Fixes: 243918be
      
       ("libata: Do not blacklist Micron M500DC")
      Cc: Martin K. Petersen <martin.petersen@oracle.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarSudip Mukherjee <sudipm.mukherjee@gmail.com>
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      4ac4abf7
    • Shota Suzuki's avatar
      igb: Unpair the queues when changing the number of queues · 3bf6a2fa
      Shota Suzuki authored
      [ Upstream commit 37a5d163 ]
      
      By the commit 72ddef05
      
       ("igb: Fix oops caused by missing queue
      pairing"), the IGB_FLAG_QUEUE_PAIRS flag can now be set when changing the
      number of queues by "ethtool -L", but it is never cleared unless the igb
      driver is reloaded.
      This patch clears it if queue pairing becomes unnecessary as a result of
      "ethtool -L".
      Signed-off-by: default avatarShota Suzuki <suzuki_shota_t3@lab.ntt.co.jp>
      Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3bf6a2fa
    • Filipe Manana's avatar
      Btrfs: do not ignore errors from btrfs_lookup_xattr in do_setxattr · b48138a2
      Filipe Manana authored
      [ Upstream commit 5cdf83ed ]
      
      The return value from btrfs_lookup_xattr() can be a pointer encoding an
      error, therefore deal with it. This fixes commit 5f5bc6b1
      
      
      ("Btrfs: make xattr replace operations atomic").
      Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
      Signed-off-by: default avatarChris Mason <clm@fb.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b48138a2
    • Peter Hurley's avatar
      tty: audit: Fix audit source · 52a25e71
      Peter Hurley authored
      [ Upstream commit 6b2a3d62 ]
      
      The data to audit/record is in the 'from' buffer (ie., the input
      read buffer).
      
      Fixes: 72586c60
      
       ("n_tty: Fix auditing support for cannonical mode")
      Cc: stable <stable@vger.kernel.org> # 4.1+
      Cc: Miloslav Trmač <mitr@redhat.com>
      Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
      Acked-by: default avatarLaura Abbott <labbott@fedoraproject.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      52a25e71
    • Anssi Hannula's avatar
      ALSA: usb-audio: Add a more accurate volume quirk for AudioQuest DragonFly · 21bfce66
      Anssi Hannula authored
      [ Upstream commit 42e3121d ]
      
      AudioQuest DragonFly DAC reports a volume control range of 0..50
      (0x0000..0x0032) which in USB Audio means a range of 0 .. 0.2dB, which
      is obviously incorrect and would cause software using the dB information
      in e.g. volume sliders to have a massive volume difference in 100..102%
      range.
      
      Commit 2d1cb7f6
      
       ("ALSA: usb-audio: add dB range mapping for some
      devices") added a dB range mapping for it with range 0..50 dB.
      
      However, the actual volume mapping seems to be neither linear volume nor
      linear dB scale, but instead quite close to the cubic mapping e.g.
      alsamixer uses, with a range of approx. -53...0 dB.
      
      Replace the previous quirk with a custom dB mapping based on some basic
      output measurements, using a 10-item range TLV (which will still fit in
      alsa-lib MAX_TLV_RANGE_SIZE).
      
      Tested on AudioQuest DragonFly HW v1.2. The quirk is only applied if the
      range is 0..50, so if this gets fixed/changed in later HW revisions it
      will no longer be applied.
      
      v2: incorporated Takashi Iwai's suggestion for the quirk application
      method
      Signed-off-by: default avatarAnssi Hannula <anssi.hannula@iki.fi>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      21bfce66
    • Mateusz Sylwestrzak's avatar
      ALSA: hda - Add headset mic support for Acer Aspire V5-573G · 7e746c55
      Mateusz Sylwestrzak authored
      [ Upstream commit 0420694d ]
      
      Acer Aspire V5 with the ALC282 codec is given the wrong value for the
      0x19 PIN by the laptop's BIOS. Overriding it with the correct value
      adds support for the headset microphone which would not otherwise be
      visible in the system.
      
      The fix is based on commit 7819717b with a similar quirk for Acer
      Aspire with the ALC269 codec.
      
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=96201
      
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarMateusz Sylwestrzak <matisec7@gmail.com>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7e746c55
    • Larry Finger's avatar
      rtlwifi: rtl8821ae: Fix lockups on boot · 3d9578e6
      Larry Finger authored
      [ Upstream commit eeec5d0e ]
      
      In commit 54328e64 ("rtlwifi: rtl8821ae: Fix system lockups on boot"),
      an attempt was made to fix a regression introduced in commit 1277fa2a
      ("rtlwifi: Remove the clear interrupt routine from all drivers").
      Unfortunately, there were logic errors in that patch that prevented
      affected boxes from booting even after that patch was applied.
      
      The actual cause of the original problem is unknown as none of the
      developers have systems that are affected.
      
      Fixes: 54328e64
      
       ("rtlwifi: rtl8821ae: Fix system lockups on boot")
      Signed-off-by: default avatarLarry Finger <Larry.Finger@lwfinger.net>
      Cc: Stable <stable@vger.kernel.org> [V4.1+]
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3d9578e6
    • Larry Finger's avatar
      rtlwifi: rtl8821ae: Fix system lockups on boot · 90e2ce56
      Larry Finger authored
      [ Upstream commit 54328e64 ]
      
      In commit 1277fa2a ("rtlwifi: Remove the clear interrupt routine from all
      drivers"), the code that cleared all interrupt enable bits before setting them
      was removed for all PCI drivers. This fixed an issue that caused TX to be
      blocked for 3-5 seconds. On some RTL8821AE units, this change causes soft
      lockups to occur on boot. For that reason, the portion of the earlier commit
      that applied to rtl8821ae is reverted. Kernels 4.1 and newer are affected.
      
      See http://marc.info/?l=linux-wireless&m=144373370103285&w=2 and
      https://bugzilla.opensuse.org/show_bug.cgi?id=944978 for two cases where
      this regression affected user systems. Note that this bug does not appear on
      any of the developer's setups. For those users whose systems are affected
      by the TX blockage, but do not lock up on boot, a module parameter is added
      to disable the interrupt clear
      
      Fixes: 1277fa2a
      
       ("rtlwifi: Remove the clear interrupt routine from all drivers")
      Signed-off-by: default avatarLarry Finger <Larry.Finger@lwfinger.net>
      Cc: Stable <stable@vger.kernel.org> [V4.1+]
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      90e2ce56
    • Chris Mi's avatar
      selftests: Introduce a new script to generate tc batch file · 98a1c516
      Chris Mi authored
      [ Upstream commit 7f071998
      
       ]
      
        # ./tdc_batch.py -h
        usage: tdc_batch.py [-h] [-n NUMBER] [-o] [-s] [-p] device file
      
        TC batch file generator
      
        positional arguments:
          device                device name
          file                  batch file name
      
        optional arguments:
          -h, --help            show this help message and exit
          -n NUMBER, --number NUMBER
                                how many lines in batch file
          -o, --skip_sw         skip_sw (offload), by default skip_hw
          -s, --share_action    all filters share the same action
          -p, --prio            all filters have different prio
      Acked-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
      Acked-by: default avatarLucas Bates <lucasb@mojatatu.com>
      Signed-off-by: default avatarChris Mi <chrism@mellanox.com>
      Signed-off-by: default avatarCong Wang <xiyou.wangcong@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      98a1c516
    • Brian Norris's avatar
      mtd: blkdevs: fix potential deadlock + lockdep warnings · d6412f34
      Brian Norris authored
      [ Upstream commit f3c63795 ]
      
      Commit 073db4a5 ("mtd: fix: avoid race condition when accessing
      mtd->usecount") fixed a race condition but due to poor ordering of the
      mutex acquisition, introduced a potential deadlock.
      
      The deadlock can occur, for example, when rmmod'ing the m25p80 module, which
      will delete one or more MTDs, along with any corresponding mtdblock
      devices. This could potentially race with an acquisition of the block
      device as follows.
      
       -> blktrans_open()
          ->  mutex_lock(&dev->lock);
          ->  mutex_lock(&mtd_table_mutex);
      
       -> del_mtd_device()
          ->  mutex_lock(&mtd_table_mutex);
          ->  blktrans_notify_remove() -> del_mtd_blktrans_dev()
             ->  mutex_lock(&dev->lock);
      
      This is a classic (potential) ABBA deadlock, which can be fixed by
      making the A->B ordering consistent everywhere. There was no real
      purpose to the ordering in the original patch, AFAIR, so this shouldn't
      be a problem. This ordering was actually already present in
      del_mtd_blktrans_dev(), for one, where the function tried to ensure that
      its caller already held mtd_table_mutex before it acquired &dev->lock:
      
              if (mutex_trylock(&mtd_table_mutex)) {
                      mutex_unlock(&mtd_table_mutex);
                      BUG();
              }
      
      So, reverse the ordering of acquisition of &dev->lock and &mtd_table_mutex so
      we always acquire mtd_table_mutex first.
      
      Snippets of the lockdep output follow:
      
        # modprobe -r m25p80
        [   53.419251]
        [   53.420838] ======================================================
        [   53.427300] [ INFO: possible circular locking dependency detected ]
        [   53.433865] 4.3.0-rc6 #96 Not tainted
        [   53.437686] -------------------------------------------------------
        [   53.444220] modprobe/372 is trying to acquire lock:
        [   53.449320]  (&new->lock){+.+...}, at: [<c043fe4c>] del_mtd_blktrans_dev+0x80/0xdc
        [   53.457271]
        [   53.457271] but task is already holding lock:
        [   53.463372]  (mtd_table_mutex){+.+.+.}, at: [<c0439994>] del_mtd_device+0x18/0x100
        [   53.471321]
        [   53.471321] which lock already depends on the new lock.
        [   53.471321]
        [   53.479856]
        [   53.479856] the existing dependency chain (in reverse order) is:
        [   53.487660]
        -> #1 (mtd_table_mutex){+.+.+.}:
        [   53.492331]        [<c043fc5c>] blktrans_open+0x34/0x1a4
        [   53.497879]        [<c01afce0>] __blkdev_get+0xc4/0x3b0
        [   53.503364]        [<c01b0bb8>] blkdev_get+0x108/0x320
        [   53.508743]        [<c01713c0>] do_dentry_open+0x218/0x314
        [   53.514496]        [<c0180454>] path_openat+0x4c0/0xf9c
        [   53.519959]        [<c0182044>] do_filp_open+0x5c/0xc0
        [   53.525336]        [<c0172758>] do_sys_open+0xfc/0x1cc
        [   53.530716]        [<c000f740>] ret_fast_syscall+0x0/0x1c
        [   53.536375]
        -> #0 (&new->lock){+.+...}:
        [   53.540587]        [<c063f124>] mutex_lock_nested+0x38/0x3cc
        [   53.546504]        [<c043fe4c>] del_mtd_blktrans_dev+0x80/0xdc
        [   53.552606]        [<c043f164>] blktrans_notify_remove+0x7c/0x84
        [   53.558891]        [<c04399f0>] del_mtd_device+0x74/0x100
        [   53.564544]        [<c043c670>] del_mtd_partitions+0x80/0xc8
        [   53.570451]        [<c0439aa0>] mtd_device_unregister+0x24/0x48
        [   53.576637]        [<c046ce6c>] spi_drv_remove+0x1c/0x34
        [   53.582207]        [<c03de0f0>] __device_release_driver+0x88/0x114
        [   53.588663]        [<c03de19c>] device_release_driver+0x20/0x2c
        [   53.594843]        [<c03dd9e8>] bus_remove_device+0xd8/0x108
        [   53.600748]        [<c03dacc0>] device_del+0x10c/0x210
        [   53.606127]        [<c03dadd0>] device_unregister+0xc/0x20
        [   53.611849]        [<c046d878>] __unregister+0x10/0x20
        [   53.617211]        [<c03da868>] device_for_each_child+0x50/0x7c
        [   53.623387]        [<c046eae8>] spi_unregister_master+0x58/0x8c
        [   53.629578]        [<c03e12f0>] release_nodes+0x15c/0x1c8
        [   53.635223]        [<c03de0f8>] __device_release_driver+0x90/0x114
        [   53.641689]        [<c03de900>] driver_detach+0xb4/0xb8
        [   53.647147]        [<c03ddc78>] bus_remove_driver+0x4c/0xa0
        [   53.652970]        [<c00cab50>] SyS_delete_module+0x11c/0x1e4
        [   53.658976]        [<c000f740>] ret_fast_syscall+0x0/0x1c
        [   53.664621]
        [   53.664621] other info that might help us debug this:
        [   53.664621]
        [   53.672979]  Possible unsafe locking scenario:
        [   53.672979]
        [   53.679169]        CPU0                    CPU1
        [   53.683900]        ----                    ----
        [   53.688633]   lock(mtd_table_mutex);
        [   53.692383]                                lock(&new->lock);
        [   53.698306]                                lock(mtd_table_mutex);
        [   53.704658]   lock(&new->lock);
        [   53.707946]
        [   53.707946]  *** DEADLOCK ***
      
      Fixes: 073db4a5
      
       ("mtd: fix: avoid race condition when accessing mtd->usecount")
      Reported-by: default avatarFelipe Balbi <balbi@ti.com>
      Tested-by: default avatarFelipe Balbi <balbi@ti.com>
      Signed-off-by: default avatarBrian Norris <computersforpeace@gmail.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d6412f34
    • Lars-Peter Clausen's avatar
      ASoC: dapm: Don't add prefix to widget stream name · ae7009ef
      Lars-Peter Clausen authored
      [ Upstream commit a798c24a ]
      
      Commit fdb6eb0a ("ASoC: dapm: Modify widget stream name according to
      prefix") fixed the case where a DAPM route between a DAI widget and a
      DAC/ADC/AIF widget with a matching stream name was not created when the
      DAPM context was using a prefix.
      
      Unfortunately the patch introduced a few issues on its own like leaking the
      dynamically allocated stream name memory and also not checking whether the
      allocation succeeded in the first place.
      
      It is also incomplete in that it still does not handle the case where
      stream name of the widget is a substring of the stream name of the DAI,
      which is explicitly allowed and works fine if no DAPM prefix is used.
      
      Revert the commit and take a slightly different approach to solving the
      issue. Instead of comparing the widget's stream name to the name of the DAI
      widget compare it to the stream name of the DAI widget. The stream name of
      the DAI widget is identical to the name of the DAI widget except that it
      wont have the DAPM prefix added. So this approach behaves identical
      regardless to whether the DAPM context uses a prefix or not.
      
      We don't have to worry about potentially matching with a widget with the
      same stream name, but from a different DAPM context with a different
      prefix, since the code already makes sure that both the DAI widget and the
      matched widget are from the same DAPM context.
      
      Fixes: fdb6eb0a
      
       ("ASoC: dapm: Modify widget stream name according to prefix")
      Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ae7009ef
    • Daniel Borkmann's avatar
      lib: make memzero_explicit more robust against dead store elimination · 9e452e6f
      Daniel Borkmann authored
      [ Upstream commit 7829fb09 ]
      
      In commit 0b053c95 ("lib: memzero_explicit: use barrier instead
      of OPTIMIZER_HIDE_VAR"), we made memzero_explicit() more robust in
      case LTO would decide to inline memzero_explicit() and eventually
      find out it could be elimiated as dead store.
      
      While using barrier() works well for the case of gcc, recent efforts
      from LLVMLinux people suggest to use llvm as an alternative to gcc,
      and there, Stephan found in a simple stand-alone user space example
      that llvm could nevertheless optimize and thus elimitate the memset().
      A similar issue has been observed in the referenced llvm bug report,
      which is regarded as not-a-bug.
      
      Based on some experiments, icc is a bit special on its own, while it
      doesn't seem to eliminate the memset(), it could do so with an own
      implementation, and then result in similar findings as with llvm.
      
      The fix in this patch now works for all three compilers (also tested
      with more aggressive optimization levels). Arguably, in the current
      kernel tree it's more of a theoretical issue, but imho, it's better
      to be pedantic about it.
      
      It's clearly visible with gcc/llvm though, with the below code: if we
      would have used barrier() only here, llvm would have omitted clearing,
      not so with barrier_data() variant:
      
        static inline void memzero_explicit(void *s, size_t count)
        {
          memset(s, 0, count);
          barrier_data(s);
        }
      
        int main(void)
        {
          char buff[20];
          memzero_explicit(buff, sizeof(buff));
          return 0;
        }
      
        $ gcc -O2 test.c
        $ gdb a.out
        (gdb) disassemble main
        Dump of assembler code for function main:
         0x0000000000400400  <+0>: lea   -0x28(%rsp),%rax
         0x0000000000400405  <+5>: movq  $0x0,-0x28(%rsp)
         0x000000000040040e <+14>: movq  $0x0,-0x20(%rsp)
         0x0000000000400417 <+23>: movl  $0x0,-0x18(%rsp)
         0x000000000040041f <+31>: xor   %eax,%eax
         0x0000000000400421 <+33>: retq
        End of assembler dump.
      
        $ clang -O2 test.c
        $ gdb a.out
        (gdb) disassemble main
        Dump of assembler code for function main:
         0x00000000004004f0  <+0>: xorps  %xmm0,%xmm0
         0x00000000004004f3  <+3>: movaps %xmm0,-0x18(%rsp)
         0x00000000004004f8  <+8>: movl   $0x0,-0x8(%rsp)
         0x0000000000400500 <+16>: lea    -0x18(%rsp),%rax
         0x0000000000400505 <+21>: xor    %eax,%eax
         0x0000000000400507 <+23>: retq
        End of assembler dump.
      
      As gcc, clang, but also icc defines __GNUC__, it's sufficient to define
      this in compiler-gcc.h only to be picked up. For a fallback or otherwise
      unsupported compiler, we define it as a barrier. Similarly, for ecc which
      does not support gcc inline asm.
      
      Reference: https://llvm.org/bugs/show_bug.cgi?id=15495
      
      Reported-by: default avatarStephan Mueller <smueller@chronox.de>
      Tested-by: default avatarStephan Mueller <smueller@chronox.de>
      Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      Cc: Theodore Ts'o <tytso@mit.edu>
      Cc: Stephan Mueller <smueller@chronox.de>
      Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
      Cc: mancha security <mancha1@zoho.com>
      Cc: Mark Charlebois <charlebm@gmail.com>
      Cc: Behan Webster <behanw@converseincode.com>
      Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9e452e6f
    • Sylwester Nawrocki's avatar
      dm9000: Fix irq trigger type setup on non-dt platforms · a8497fac
      Sylwester Nawrocki authored
      [ Upstream commit a96d3b75 ]
      
      Commit b5a099c6 "net: ethernet: davicom: fix devicetree irq
      resource" causes an interrupt storm after the ethernet interface
      is activated on S3C24XX platform (ARM non-dt), due to the interrupt
      trigger type not being set properly.
      
      It seems, after adding parsing of IRQ flags in commit 7085a740
      "drivers: platform: parse IRQ flags from resources", there is no path
      for non-dt platforms where irq_set_type callback could be invoked when
      we don't pass the trigger type flags to the request_irq() call.
      
      In case of a board where the regression is seen the interrupt trigger
      type flags are passed through a platform device's resource and it is
      not currently handled properly without passing the irq trigger type
      flags to the request_irq() call.  In case of OF an of_irq_get() call
      within platform_get_irq() function seems to be ensuring required irq_chip
      setup, but there is no equivalent code for non OF/ACPI platforms.
      
      This patch mostly restores irq trigger type setting code which has been
      removed in commit ("net: ethernet: davicom: fix devicetree irq resource").
      
      Fixes: b5a099c6
      
       ("net: ethernet: davicom: fix devicetree irq resource")
      Signed-off-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
      Acked-by: default avatarRobert Jarzmik <robert.jarzmik@free.fr>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a8497fac
    • Ezequiel Garcia's avatar
      MIPS: Fix up obsolete cpu_set usage · a13209d9
      Ezequiel Garcia authored
      [ Upstream commit 7363cb7d ]
      
      cpu_set was removed (along with a bunch of cpumask helpers) by
      commit 2f0f267e ("cpumask: remove deprecated functions.").
      
      Fix this by replacing cpu_set with cpumask_set_cpu. Without this
      fix the following error is triggered when CONFIG_MIPS_MT_FPAFF=y.
      
        arch/mips/kernel/smp-cps.c: In function 'cps_smp_setup':
        arch/mips/kernel/smp-cps.c:95:3: error: implicit declaration of function 'cpu_set' [-Werror=implicit-function-declaration]
      
      Fixes: 90db024f
      
       ("MIPS: smp-cps: cpu_set FPU mask if FPU present")
      Signed-off-by: default avatarEzequiel Garcia <ezequiel.garcia@imgtec.com>
      Acked-by: default avatarNiklas Cassel <niklass@axis.com>
      Cc: linux-mips@linux-mips.org
      Patchwork: https://patchwork.linux-mips.org/patch/9912/
      
      Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a13209d9
    • Srikar Dronamraju's avatar
      perf bench numa: Fix to show proper convergence stats · 7c852f4a
      Srikar Dronamraju authored
      [ Upstream commit 2b42b09b ]
      
      With commit: e1e455f4 (perf tools: Work around lack of sched_getcpu
      in glibc < 2.6), perf_bench numa mem with -c or -m option is not able to
      correctly calculate convergence.
      
      With the above commit, sched_getcpu always seems to return -1. The
      intention of commit e1e455f4
      
       was to add a sched_getcpu in glibc < 2.6.
      Hence keep the sched_getcpu definition under an ifdef.
      
      This regression happened occurred between v4.0 and v4.1
      Signed-off-by: default avatarSrikar Dronamraju <srikar@linux.vnet.ibm.com>
      Acked-by: default avatarIngo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Vinson Lee <vlee@twitter.com>
      Fixes:  e1e455f4 ("perf tools: Work around lack of sched_getcpu in glibc < 2.6")
      Link: http://lkml.kernel.org/r/20150624111004.GA5220@linux.vnet.ibm.com
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7c852f4a
    • Robert Jarzmik's avatar
      net: ethernet: davicom: fix devicetree irq resource · a5b943b4
      Robert Jarzmik authored
      [ Upstream commit b5a099c6 ]
      
      The dm9000 driver doesn't work in at least one device-tree
      configuration, spitting an error message on irq resource :
      [    1.062495] dm9000 8000000.ethernet: insufficient resources
      [    1.068439] dm9000 8000000.ethernet: not found (-2).
      [    1.073451] dm9000: probe of 8000000.ethernet failed with error -2
      
      The reason behind is that the interrupt might be provided by a gpio
      controller, not probed when dm9000 is probed, and needing the probe
      deferral mechanism to apply.
      
      Currently, the interrupt is directly taken from resources. This patch
      changes this to use the more generic platform_get_irq(), which handles
      the deferral.
      
      Moreover, since commit Fixes: 7085a740
      
       ("drivers: platform: parse
      IRQ flags from resources"), the interrupt trigger flags are honored in
      platform_get_irq(), so remove the needless code in dm9000.
      Signed-off-by: default avatarRobert Jarzmik <robert.jarzmik@free.fr>
      Acked-by: default avatarMarcel Ziswiler <marcel@ziswiler.com>
      Cc: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
      Tested-by: default avatarSergei Ianovich <ynvich@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a5b943b4
    • Theodore Ts'o's avatar
      ext4: fix an ext3 collapse range regression in xfstests · e55a9657
      Theodore Ts'o authored
      [ Upstream commit b9576fc3 ]
      
      The xfstests test suite assumes that an attempt to collapse range on
      the range (0, 1) will return EOPNOTSUPP if the file system does not
      support collapse range.  Commit 280227a7
      
      : "ext4: move check under
      lock scope to close a race" broke this, and this caused xfstests to
      fail when run when testing file systems that did not have the extents
      feature enabled.
      Reported-by: default avatarEric Whitney <enwlinux@gmail.com>
      Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e55a9657
    • Jisheng Zhang's avatar
      x86/idle: Restore trace_cpu_idle to mwait_idle() calls · b66c199a
      Jisheng Zhang authored
      [ Upstream commit e43d0189 ]
      
      Commit b253149b ("sched/idle/x86: Restore mwait_idle() to fix boot
      hangs, to improve power savings and to improve performance") restores
      mwait_idle(), but the trace_cpu_idle related calls are missing. This
      causes powertop on my old desktop powered by Intel Core2 E6550 to
      report zero wakeups and zero events.
      
      Add them back to restore the proper behaviour.
      
      Fixes: b253149b
      
       ("sched/idle/x86: Restore mwait_idle() to ...")
      Signed-off-by: default avatarJisheng Zhang <jszhang@marvell.com>
      Cc: <len.brown@intel.com>
      Cc: stable@vger.kernel.org # 4.1
      Link: http://lkml.kernel.org/r/1440046479-4262-1-git-send-email-jszhang@marvell.com
      
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b66c199a
    • Stefan Agner's avatar
      tty: serial: fsl_lpuart: fix clearing of receive flag · aa4b7331
      Stefan Agner authored
      [ Upstream commit d68827c6 ]
      
      Commit 8e4934c6
      
       ("tty: serial: fsl_lpuart: clear receive flag on FIFO
      flush") implemented clearing of the receive flag by reading the status register
      only. It turned out that even though we flush the FIFO afterwards, a explicit
      read of the data register is still required.
      
      This leads to a FIFO underrun. To avoid this, follow the advice in the overrun
      "Operation section": Unconditionally clear RXUF after using RXFLUSH.
      Signed-off-by: default avatarStefan Agner <stefan@agner.ch>
      Signed-off-by: default avatarBhuvanchandra DV <bhuvanchandra.dv@toradex.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      aa4b7331
    • Alex Williamson's avatar
      iommu/vt-d: Fix VM domain ID leak · 5bfeb44f
      Alex Williamson authored
      [ Upstream commit 46ebb7af ]
      
      This continues the attempt to fix commit fb170fb4 ("iommu/vt-d:
      Introduce helper functions to make code symmetric for readability").
      The previous attempt in commit 71684406 ("iommu/vt-d: Detach
      domain *only* from attached iommus") overlooked the fact that
      dmar_domain.iommu_bmp gets cleared for VM domains when devices are
      detached:
      
      intel_iommu_detach_device
        domain_remove_one_dev_info
          domain_detach_iommu
      
      The domain is detached from the iommu, but the iommu is still attached
      to the domain, for whatever reason.  Thus when we get to domain_exit(),
      we can't rely on iommu_bmp for VM domains to find the active iommus,
      we must check them all.  Without that, the corresponding bit in
      intel_iommu.domain_ids doesn't get cleared and repeated VM domain
      creation and destruction will run out of domain IDs.  Meanwhile we
      still can't call iommu_detach_domain() on arbitrary non-VM domains or
      we risk clearing in-use domain IDs, as 71684406 attempted to
      address.
      
      It's tempting to modify iommu_detach_domain() to test the domain
      iommu_bmp, but the call ordering from domain_remove_one_dev_info()
      prevents it being able to work as fb170fb4 seems to have intended.
      Caching of unused VM domains on the iommu object seems to be the root
      of the problem, but this code is far too fragile for that kind of
      rework to be proposed for stable, so we simply revert this chunk to
      its state prior to fb170fb4.
      
      Fixes: fb170fb4 ("iommu/vt-d: Introduce helper functions to make
                            code symmetric for readability")
      Fixes: 71684406
      
       ("iommu/vt-d: Detach domain *only* from attached
                            iommus")
      Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
      Cc: Jiang Liu <jiang.liu@linux.intel.com>
      Cc: stable@vger.kernel.org # v3.17+
      Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5bfeb44f
    • Eugenia Emantayev's avatar
      net/mlx4_en: Remove dependency between timestamping capability and service_task · 315ef93a
      Eugenia Emantayev authored
      [ Upstream commit fc9f5ea9 ]
      
      Service task is responsible for other tasks in addition to timestamping
      overflow check. Launch it even if timestamping is not supported by device.
      
      Fixes: 07841f9d
      
       ('net/mlx4_en: Schedule napi when RX buffers allocation fails')
      Signed-off-by: default avatarEugenia Emantayev <eugenia@mellanox.com>
      Signed-off-by: default avatarEran Ben Elisha <eranbe@mellanox.com>
      Signed-off-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      315ef93a
    • Marc Zyngier's avatar
      arm/arm64: KVM: Take mmap_sem in stage2_unmap_vm · 8b2969d1
      Marc Zyngier authored
      [ Upstream commit 90f6e150 ]
      
      We don't hold the mmap_sem while searching for the VMAs when
      we try to unmap each memslot for a VM. Fix this properly to
      avoid unexpected results.
      
      Fixes: commit 957db105
      
       ("arm/arm64: KVM: Introduce stage2_unmap_vm")
      Cc: stable@vger.kernel.org # v3.19+
      Reviewed-by: default avatarChristoffer Dall <cdall@linaro.org>
      Signed-off-by: default avatarSuzuki K Poulose <suzuki.poulose@arm.com>
      Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8b2969d1
    • Junichi Nomura's avatar
      dm: fix AB-BA deadlock in __dm_destroy() · e1db66a5
      Junichi Nomura authored
      [ Upstream commit 2a708cff
      
       ]
      
      __dm_destroy() takes io_barrier SRCU lock (dm_get_live_table) and
      suspend_lock in reverse order.  Doing so can cause AB-BA deadlock:
      
        __dm_destroy                    dm_swap_table
        ---------------------------------------------------
                                        mutex_lock(suspend_lock)
        dm_get_live_table()
          srcu_read_lock(io_barrier)
                                        dm_sync_table()
                                          synchronize_srcu(io_barrier)
                                            .. waiting for dm_put_live_table()
        mutex_lock(suspend_lock)
          .. waiting for suspend_lock
      
      Fix this by taking the locks in proper order.
      Signed-off-by: default avatarJun'ichi Nomura <j-nomura@ce.jp.nec.com>
      Fixes: ab7c7bb6
      
       ("dm: hold suspend_lock while suspending device during device deletion")
      Acked-by: default avatarMikulas Patocka <mpatocka@redhat.com>
      Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e1db66a5
    • Uwe Kleine-König's avatar
      pinctrl: imx25: ensure that a pin with id i is at position i in the info array · 086753c4
      Uwe Kleine-König authored
      [ Upstream commit 9911a2d5 ]
      
      The code in pinctrl-imx.c only works correctly if in the
      imx_pinctrl_soc_info passed to imx_pinctrl_probe we have:
      
      	info->pins[i].number = i
      	conf_reg(info->pins[i]) = 4 * i
      
      (which conf_reg(pin) being the offset of the pin's configuration
      register).
      
      When the imx25 specific part was introduced in b4a87c9b ("pinctrl:
      pinctrl-imx: add imx25 pinctrl driver") we had:
      
      	info->pins[i].number = i + 1
      	conf_reg(info->pins[i]) = 4 * i
      
      . Commit 34027ca2 ("pinctrl: imx25: fix numbering for pins") tried
      to fix that but made the situation:
      
      	info->pins[i-1].number = i
      	conf_reg(info->pins[i-1]) = 4 * i
      
      which is hardly better but fixed the error seen back then.
      
      So insert another reserved entry in the array to finally yield:
      
      	info->pins[i].number = i
      	conf_reg(info->pins[i]) = 4 * i
      
      Fixes: 34027ca2
      
       ("pinctrl: imx25: fix numbering for pins")
      Signed-off-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      086753c4
    • Filipe Manana's avatar
      Btrfs: avoid syncing log in the fast fsync path when not necessary · 6a7f6b47
      Filipe Manana authored
      [ Upstream commit b659ef02 ]
      
      Commit 3a8b36f3 ("Btrfs: fix data loss in the fast fsync path") added
      a performance regression for that causes an unnecessary sync of the log
      trees (fs/subvol and root log trees) when 2 consecutive fsyncs are done
      against a file, without no writes or any metadata updates to the inode in
      between them and if a transaction is committed before the second fsync is
      called.
      
      Huang Ying reported this to lkml (https://lkml.org/lkml/2015/3/18/99)
      after a test sysbench test that measured a -62% decrease of file io
      requests per second for that tests' workload.
      
      The test is:
      
        echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
        echo performance > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
        echo performance > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
        echo performance > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
        mkfs -t btrfs /dev/sda2
        mount -t btrfs /dev/sda2 /fs/sda2
        cd /fs/sda2
        for ((i = 0; i < 1024; i++)); do fallocate -l 67108864 testfile.$i; done
        sysbench --test=fileio --max-requests=0 --num-threads=4 --max-time=600 \
          --file-test-mode=rndwr --file-total-size=68719476736 --file-io-mode=sync \
          --file-num=1024 run
      
      A test on kvm guest, running a debug kernel gave me the following results:
      
      Without 3a8b36f3:             16.01 reqs/sec
      With 3a8b36f3:                 3.39 reqs/sec
      With 3a8b36f3
      
       and this patch: 16.04 reqs/sec
      Reported-by: default avatarHuang Ying <ying.huang@intel.com>
      Tested-by: default avatarHuang, Ying <ying.huang@intel.com>
      Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
      Signed-off-by: default avatarChris Mason <clm@fb.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6a7f6b47
    • Lorenzo Pieralisi's avatar
      of/pci: Remove duplicate kfree in of_pci_get_host_bridge_resources() · 7df4d34d
      Lorenzo Pieralisi authored
      [ Upstream commit feb28979 ]
      
      Commit d2be00c0 ("of/pci: Free resources on failure in
      of_pci_get_host_bridge_resources()") fixed the error path so it frees
      everything on the "resources" list.  That list includes the bus_range, so
      we should not free it again.
      
      Remove the superfluous free of bus_range.
      
      [bhelgaas: changelog]
      Fixes: d2be00c0
      
       ("of/pci: Free resources on failure in of_pci_get_host_bridge_resources()")
      Reported-by: default avatarJiang Liu <jiang.liu@linux.intel.com>
      Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      CC: Rafael J. Wysocki <rjw@rjwysocki.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7df4d34d