commit:     3254e809b0bacc10071a00edc184e5da0e45b6e7
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Tue Aug  4 00:04:03 2015 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Tue Aug  4 00:04:03 2015 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=3254e809

Linux patch 3.10.85

 0000_README              |    4 +
 1084_linux-3.10.85.patch | 2941 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 2945 insertions(+)

diff --git a/0000_README b/0000_README
index 3025db2..c441446 100644
--- a/0000_README
+++ b/0000_README
@@ -378,6 +378,10 @@ Patch:  1083_linux-3.10.84.patch
 From:   http://www.kernel.org
 Desc:   Linux 3.10.84
 
+Patch:  1084_linux-3.10.85.patch
+From:   http://www.kernel.org
+Desc:   Linux 3.10.85
+
 Patch:  1500_XATTR_USER_PREFIX.patch
 From:   https://bugs.gentoo.org/show_bug.cgi?id=470644
 Desc:   Support for namespace user.pax.* on tmpfs.

diff --git a/1084_linux-3.10.85.patch b/1084_linux-3.10.85.patch
new file mode 100644
index 0000000..fcc7952
--- /dev/null
+++ b/1084_linux-3.10.85.patch
@@ -0,0 +1,2941 @@
+diff --git 
a/Documentation/devicetree/bindings/pinctrl/marvell,armada-370-pinctrl.txt 
b/Documentation/devicetree/bindings/pinctrl/marvell,armada-370-pinctrl.txt
+index 01ef408e205f..8faff12e7014 100644
+--- a/Documentation/devicetree/bindings/pinctrl/marvell,armada-370-pinctrl.txt
++++ b/Documentation/devicetree/bindings/pinctrl/marvell,armada-370-pinctrl.txt
+@@ -91,5 +91,5 @@ mpp61         61       gpo, dev(wen1), uart1(txd), 
audio(rclk)
+ mpp62         62       gpio, dev(a2), uart1(cts), tdm(drx), pcie(clkreq0),
+                        audio(mclk), uart0(cts)
+ mpp63         63       gpo, spi0(sck), tclk
+-mpp64         64       gpio, spi0(miso), spi0-1(cs1)
+-mpp65         65       gpio, spi0(mosi), spi0-1(cs2)
++mpp64         64       gpio, spi0(miso), spi0(cs1)
++mpp65         65       gpio, spi0(mosi), spi0(cs2)
+diff --git 
a/Documentation/devicetree/bindings/pinctrl/marvell,armada-xp-pinctrl.txt 
b/Documentation/devicetree/bindings/pinctrl/marvell,armada-xp-pinctrl.txt
+index bfa0a2e5e0cb..86dec67e5450 100644
+--- a/Documentation/devicetree/bindings/pinctrl/marvell,armada-xp-pinctrl.txt
++++ b/Documentation/devicetree/bindings/pinctrl/marvell,armada-xp-pinctrl.txt
+@@ -41,15 +41,15 @@ mpp20         20       gpio, ge0(rxd4), ge1(rxd2), 
lcd(d20), ptp(clk)
+ mpp21         21       gpio, ge0(rxd5), ge1(rxd3), lcd(d21), mem(bat)
+ mpp22         22       gpio, ge0(rxd6), ge1(rxctl), lcd(d22), sata0(prsnt)
+ mpp23         23       gpio, ge0(rxd7), ge1(rxclk), lcd(d23), sata1(prsnt)
+-mpp24         24       gpio, lcd(hsync), sata1(prsnt), nf(bootcs-re), tdm(rst)
+-mpp25         25       gpio, lcd(vsync), sata0(prsnt), nf(bootcs-we), 
tdm(pclk)
+-mpp26         26       gpio, lcd(clk), tdm(fsync), vdd(cpu1-pd)
++mpp24         24       gpio, lcd(hsync), sata1(prsnt), tdm(rst)
++mpp25         25       gpio, lcd(vsync), sata0(prsnt), tdm(pclk)
++mpp26         26       gpio, lcd(clk), tdm(fsync)
+ mpp27         27       gpio, lcd(e), tdm(dtx), ptp(trig)
+ mpp28         28       gpio, lcd(pwm), tdm(drx), ptp(evreq)
+-mpp29         29       gpio, lcd(ref-clk), tdm(int0), ptp(clk), vdd(cpu0-pd)
++mpp29         29       gpio, lcd(ref-clk), tdm(int0), ptp(clk)
+ mpp30         30       gpio, tdm(int1), sd0(clk)
+-mpp31         31       gpio, tdm(int2), sd0(cmd), vdd(cpu0-pd)
+-mpp32         32       gpio, tdm(int3), sd0(d0), vdd(cpu1-pd)
++mpp31         31       gpio, tdm(int2), sd0(cmd)
++mpp32         32       gpio, tdm(int3), sd0(d0)
+ mpp33         33       gpio, tdm(int4), sd0(d1), mem(bat)
+ mpp34         34       gpio, tdm(int5), sd0(d2), sata0(prsnt)
+ mpp35         35       gpio, tdm(int6), sd0(d3), sata1(prsnt)
+@@ -57,21 +57,18 @@ mpp36         36       gpio, spi(mosi)
+ mpp37         37       gpio, spi(miso)
+ mpp38         38       gpio, spi(sck)
+ mpp39         39       gpio, spi(cs0)
+-mpp40         40       gpio, spi(cs1), uart2(cts), lcd(vga-hsync), 
vdd(cpu1-pd),
+-                       pcie(clkreq0)
++mpp40         40       gpio, spi(cs1), uart2(cts), lcd(vga-hsync), 
pcie(clkreq0)
+ mpp41         41       gpio, spi(cs2), uart2(rts), lcd(vga-vsync), 
sata1(prsnt),
+                        pcie(clkreq1)
+-mpp42         42       gpio, uart2(rxd), uart0(cts), tdm(int7), tdm-1(timer),
+-                       vdd(cpu0-pd)
+-mpp43         43       gpio, uart2(txd), uart0(rts), spi(cs3), pcie(rstout),
+-                       vdd(cpu2-3-pd){1}
++mpp42         42       gpio, uart2(rxd), uart0(cts), tdm(int7), tdm-1(timer)
++mpp43         43       gpio, uart2(txd), uart0(rts), spi(cs3), pcie(rstout)
+ mpp44         44       gpio, uart2(cts), uart3(rxd), spi(cs4), pcie(clkreq2),
+                        mem(bat)
+ mpp45         45       gpio, uart2(rts), uart3(txd), spi(cs5), sata1(prsnt)
+ mpp46         46       gpio, uart3(rts), uart1(rts), spi(cs6), sata0(prsnt)
+ mpp47         47       gpio, uart3(cts), uart1(cts), spi(cs7), pcie(clkreq3),
+                        ref(clkout)
+-mpp48         48       gpio, tclk, dev(burst/last)
++mpp48         48       gpio, dev(clkout), dev(burst/last)
+ 
+ * Marvell Armada XP (mv78260 and mv78460 only)
+ 
+@@ -83,9 +80,9 @@ mpp51         51       gpio, dev(ad16)
+ mpp52         52       gpio, dev(ad17)
+ mpp53         53       gpio, dev(ad18)
+ mpp54         54       gpio, dev(ad19)
+-mpp55         55       gpio, dev(ad20), vdd(cpu0-pd)
+-mpp56         56       gpio, dev(ad21), vdd(cpu1-pd)
+-mpp57         57       gpio, dev(ad22), vdd(cpu2-3-pd){1}
++mpp55         55       gpio, dev(ad20)
++mpp56         56       gpio, dev(ad21)
++mpp57         57       gpio, dev(ad22)
+ mpp58         58       gpio, dev(ad23)
+ mpp59         59       gpio, dev(ad24)
+ mpp60         60       gpio, dev(ad25)
+@@ -95,6 +92,3 @@ mpp63         63       gpio, dev(ad28)
+ mpp64         64       gpio, dev(ad29)
+ mpp65         65       gpio, dev(ad30)
+ mpp66         66       gpio, dev(ad31)
+-
+-Notes:
+-* {1} vdd(cpu2-3-pd) only available on mv78460.
+diff --git a/Documentation/devicetree/bindings/spi/spi_pl022.txt 
b/Documentation/devicetree/bindings/spi/spi_pl022.txt
+index 22ed6797216d..4d1673ca8cf8 100644
+--- a/Documentation/devicetree/bindings/spi/spi_pl022.txt
++++ b/Documentation/devicetree/bindings/spi/spi_pl022.txt
+@@ -4,9 +4,9 @@ Required properties:
+ - compatible : "arm,pl022", "arm,primecell"
+ - reg : Offset and length of the register set for the device
+ - interrupts : Should contain SPI controller interrupt
++- num-cs : total number of chipselects
+ 
+ Optional properties:
+-- num-cs : total number of chipselects
+ - cs-gpios : should specify GPIOs used for chipselects.
+   The gpios will be referred to as reg = <index> in the SPI child nodes.
+   If unspecified, a single SPI device without a chip select can be used.
+diff --git a/Makefile b/Makefile
+index f7b10bb56737..11a7e7bc31f2 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 3
+ PATCHLEVEL = 10
+-SUBLEVEL = 84
++SUBLEVEL = 85
+ EXTRAVERSION =
+ NAME = TOSSUG Baby Fish
+ 
+diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h
+index 03cd6894855d..90de5c528da2 100644
+--- a/arch/arc/include/asm/cmpxchg.h
++++ b/arch/arc/include/asm/cmpxchg.h
+@@ -25,10 +25,11 @@ __cmpxchg(volatile void *ptr, unsigned long expected, 
unsigned long new)
+       "       scond   %3, [%1]        \n"
+       "       bnz     1b              \n"
+       "2:                             \n"
+-      : "=&r"(prev)
+-      : "r"(ptr), "ir"(expected),
+-        "r"(new) /* can't be "ir". scond can't take limm for "b" */
+-      : "cc");
++      : "=&r"(prev)   /* Early clobber, to prevent reg reuse */
++      : "r"(ptr),     /* Not "m": llock only supports reg direct addr mode */
++        "ir"(expected),
++        "r"(new)      /* can't be "ir". scond can't take LIMM for "b" */
++      : "cc", "memory"); /* so that gcc knows memory is being written here */
+ 
+       return prev;
+ }
+diff --git a/arch/arm64/kernel/vdso/Makefile b/arch/arm64/kernel/vdso/Makefile
+index 6d20b7d162d8..fdda6dd71ac6 100644
+--- a/arch/arm64/kernel/vdso/Makefile
++++ b/arch/arm64/kernel/vdso/Makefile
+@@ -15,6 +15,10 @@ ccflags-y := -shared -fno-common -fno-builtin
+ ccflags-y += -nostdlib -Wl,-soname=linux-vdso.so.1 \
+               $(call cc-ldoption, -Wl$(comma)--hash-style=sysv)
+ 
++# Workaround for bare-metal (ELF) toolchains that neglect to pass -shared
++# down to collect2, resulting in silent corruption of the vDSO image.
++ccflags-y += -Wl,-shared
++
+ obj-y += vdso.o
+ extra-y += vdso.lds vdso-offsets.h
+ CPPFLAGS_vdso.lds += -P -C -U$(ARCH)
+diff --git a/arch/arm64/mm/context.c b/arch/arm64/mm/context.c
+index baa758d37021..76c1e6cd36fc 100644
+--- a/arch/arm64/mm/context.c
++++ b/arch/arm64/mm/context.c
+@@ -92,6 +92,14 @@ static void reset_context(void *info)
+       unsigned int cpu = smp_processor_id();
+       struct mm_struct *mm = current->active_mm;
+ 
++      /*
++       * current->active_mm could be init_mm for the idle thread immediately
++       * after secondary CPU boot or hotplug. TTBR0_EL1 is already set to
++       * the reserved value, so no need to reset any context.
++       */
++      if (mm == &init_mm)
++              return;
++
+       smp_rmb();
+       asid = cpu_last_asid + cpu;
+ 
+diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
+index f497ca77925a..5c5516611b5e 100644
+--- a/arch/arm64/mm/init.c
++++ b/arch/arm64/mm/init.c
+@@ -262,7 +262,7 @@ static void __init free_unused_memmap(void)
+                * memmap entries are valid from the bank end aligned to
+                * MAX_ORDER_NR_PAGES.
+                */
+-              prev_end = ALIGN(start + __phys_to_pfn(reg->size),
++              prev_end = ALIGN(__phys_to_pfn(reg->base + reg->size),
+                                MAX_ORDER_NR_PAGES);
+       }
+ 
+diff --git a/arch/mips/kvm/kvm_mips_emul.c b/arch/mips/kvm/kvm_mips_emul.c
+index e75ef8219caf..c76f297b7149 100644
+--- a/arch/mips/kvm/kvm_mips_emul.c
++++ b/arch/mips/kvm/kvm_mips_emul.c
+@@ -1626,7 +1626,7 @@ kvm_mips_complete_mmio_load(struct kvm_vcpu *vcpu, 
struct kvm_run *run)
+               if (vcpu->mmio_needed == 2)
+                       *gpr = *(int16_t *) run->mmio.data;
+               else
+-                      *gpr = *(int16_t *) run->mmio.data;
++                      *gpr = *(uint16_t *)run->mmio.data;
+ 
+               break;
+       case 1:
+diff --git a/drivers/acpi/acpica/utxfinit.c b/drivers/acpi/acpica/utxfinit.c
+index 41ebaaf8bb1a..ee58a62443bd 100644
+--- a/drivers/acpi/acpica/utxfinit.c
++++ b/drivers/acpi/acpica/utxfinit.c
+@@ -165,10 +165,12 @@ acpi_status acpi_enable_subsystem(u32 flags)
+        * Obtain a permanent mapping for the FACS. This is required for the
+        * Global Lock and the Firmware Waking Vector
+        */
+-      status = acpi_tb_initialize_facs();
+-      if (ACPI_FAILURE(status)) {
+-              ACPI_WARNING((AE_INFO, "Could not map the FACS table"));
+-              return_ACPI_STATUS(status);
++      if (!(flags & ACPI_NO_FACS_INIT)) {
++              status = acpi_tb_initialize_facs();
++              if (ACPI_FAILURE(status)) {
++                      ACPI_WARNING((AE_INFO, "Could not map the FACS table"));
++                      return_ACPI_STATUS(status);
++              }
+       }
+ #endif                                /* !ACPI_REDUCED_HARDWARE */
+ 
+diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
+index 5d47a040129a..53d35b6fd8bb 100644
+--- a/drivers/ata/libata-core.c
++++ b/drivers/ata/libata-core.c
+@@ -4150,9 +4150,10 @@ static const struct ata_blacklist_entry 
ata_device_blacklist [] = {
+       { "ST3320[68]13AS",     "SD1[5-9]",     ATA_HORKAGE_NONCQ |
+                                               ATA_HORKAGE_FIRMWARE_WARN },
+ 
+-      /* Seagate Momentus SpinPoint M8 seem to have FPMDA_AA issues */
++      /* drives which fail FPDMA_AA activation (some may freeze afterwards) */
+       { "ST1000LM024 HN-M101MBB", "2AR10001", ATA_HORKAGE_BROKEN_FPDMA_AA },
+       { "ST1000LM024 HN-M101MBB", "2BA30001", ATA_HORKAGE_BROKEN_FPDMA_AA },
++      { "VB0250EAVER",        "HPG7",         ATA_HORKAGE_BROKEN_FPDMA_AA },
+ 
+       /* Blacklist entries taken from Silicon Image 3124/3132
+          Windows driver .inf file - also several Linux problem reports */
+@@ -4200,6 +4201,9 @@ static const struct ata_blacklist_entry 
ata_device_blacklist [] = {
+       { "PIONEER DVD-RW  DVR-212D",   NULL,   ATA_HORKAGE_NOSETXFER },
+       { "PIONEER DVD-RW  DVR-216D",   NULL,   ATA_HORKAGE_NOSETXFER },
+ 
++      /* devices that don't properly handle TRIM commands */
++      { "SuperSSpeed S238*",          NULL,   ATA_HORKAGE_NOTRIM, },
++
+       /*
+        * Some WD SATA-I drives spin up and down erratically when the link
+        * is put into the slumber mode.  We don't have full list of the
+@@ -4504,7 +4508,8 @@ static unsigned int ata_dev_set_xfermode(struct 
ata_device *dev)
+       else /* In the ancient relic department - skip all of this */
+               return 0;
+ 
+-      err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
++      /* On some disks, this command causes spin-up, so we need longer 
timeout */
++      err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 15000);
+ 
+       DPRINTK("EXIT, err_mask=%x\n", err_mask);
+       return err_mask;
+diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
+index 9933b4db7caf..04e7db668362 100644
+--- a/drivers/ata/libata-scsi.c
++++ b/drivers/ata/libata-scsi.c
+@@ -2512,7 +2512,8 @@ static unsigned int ata_scsiop_read_cap(struct 
ata_scsi_args *args, u8 *rbuf)
+               rbuf[14] = (lowest_aligned >> 8) & 0x3f;
+               rbuf[15] = lowest_aligned;
+ 
+-              if (ata_id_has_trim(args->id)) {
++              if (ata_id_has_trim(args->id) &&
++                  !(dev->horkage & ATA_HORKAGE_NOTRIM)) {
+                       rbuf[14] |= 0x80; /* TPE */
+ 
+                       if (ata_id_has_zero_after_trim(args->id))
+diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
+index 00a565676583..8e08fab0ed2e 100644
+--- a/drivers/base/firmware_class.c
++++ b/drivers/base/firmware_class.c
+@@ -513,10 +513,8 @@ static void fw_dev_release(struct device *dev)
+       module_put(THIS_MODULE);
+ }
+ 
+-static int firmware_uevent(struct device *dev, struct kobj_uevent_env *env)
++static int do_firmware_uevent(struct firmware_priv *fw_priv, struct 
kobj_uevent_env *env)
+ {
+-      struct firmware_priv *fw_priv = to_firmware_priv(dev);
+-
+       if (add_uevent_var(env, "FIRMWARE=%s", fw_priv->buf->fw_id))
+               return -ENOMEM;
+       if (add_uevent_var(env, "TIMEOUT=%i", loading_timeout))
+@@ -527,6 +525,18 @@ static int firmware_uevent(struct device *dev, struct 
kobj_uevent_env *env)
+       return 0;
+ }
+ 
++static int firmware_uevent(struct device *dev, struct kobj_uevent_env *env)
++{
++      struct firmware_priv *fw_priv = to_firmware_priv(dev);
++      int err = 0;
++
++      mutex_lock(&fw_lock);
++      if (fw_priv->buf)
++              err = do_firmware_uevent(fw_priv, env);
++      mutex_unlock(&fw_lock);
++      return err;
++}
++
+ static struct class firmware_class = {
+       .name           = "firmware",
+       .class_attrs    = firmware_class_attrs,
+diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
+index 6a66f0b7d3d4..4f3d70a9d721 100644
+--- a/drivers/base/regmap/regmap.c
++++ b/drivers/base/regmap/regmap.c
+@@ -1586,7 +1586,7 @@ int regmap_bulk_read(struct regmap *map, unsigned int 
reg, void *val,
+                                         &ival);
+                       if (ret != 0)
+                               return ret;
+-                      memcpy(val + (i * val_bytes), &ival, val_bytes);
++                      map->format.format_val(val + (i * val_bytes), ival, 0);
+               }
+       }
+ 
+diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
+index dd297099c99d..f78cbbb88bd4 100644
+--- a/drivers/block/rbd.c
++++ b/drivers/block/rbd.c
+@@ -1851,11 +1851,11 @@ static struct rbd_obj_request 
*rbd_obj_request_create(const char *object_name,
+       rbd_assert(obj_request_type_valid(type));
+ 
+       size = strlen(object_name) + 1;
+-      name = kmalloc(size, GFP_KERNEL);
++      name = kmalloc(size, GFP_NOIO);
+       if (!name)
+               return NULL;
+ 
+-      obj_request = kmem_cache_zalloc(rbd_obj_request_cache, GFP_KERNEL);
++      obj_request = kmem_cache_zalloc(rbd_obj_request_cache, GFP_NOIO);
+       if (!obj_request) {
+               kfree(name);
+               return NULL;
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index 92b985317770..537ad6897784 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -1234,6 +1234,8 @@ static int btusb_setup_intel(struct hci_dev *hdev)
+       }
+       fw_ptr = fw->data;
+ 
++      kfree_skb(skb);
++
+       /* This Intel specific command enables the manufacturer mode of the
+        * controller.
+        *
+diff --git a/drivers/char/agp/intel-gtt.c b/drivers/char/agp/intel-gtt.c
+index b8e2014cb9cb..051aadb75e2c 100644
+--- a/drivers/char/agp/intel-gtt.c
++++ b/drivers/char/agp/intel-gtt.c
+@@ -583,7 +583,7 @@ static inline int needs_ilk_vtd_wa(void)
+       /* Query intel_iommu to see if we need the workaround. Presumably that
+        * was loaded first.
+        */
+-      if ((gpu_devid == PCI_DEVICE_ID_INTEL_IRONLAKE_M_HB ||
++      if ((gpu_devid == PCI_DEVICE_ID_INTEL_IRONLAKE_D_IG ||
+            gpu_devid == PCI_DEVICE_ID_INTEL_IRONLAKE_M_IG) &&
+            intel_iommu_gfx_mapped)
+               return 1;
+diff --git a/drivers/char/tpm/tpm_ibmvtpm.c b/drivers/char/tpm/tpm_ibmvtpm.c
+index 09df26f9621d..a6524c3efdf7 100644
+--- a/drivers/char/tpm/tpm_ibmvtpm.c
++++ b/drivers/char/tpm/tpm_ibmvtpm.c
+@@ -618,6 +618,9 @@ static int tpm_ibmvtpm_probe(struct vio_dev *vio_dev,
+               goto cleanup;
+       }
+ 
++      ibmvtpm->dev = dev;
++      ibmvtpm->vdev = vio_dev;
++
+       crq_q = &ibmvtpm->crq_queue;
+       crq_q->crq_addr = (struct ibmvtpm_crq *)get_zeroed_page(GFP_KERNEL);
+       if (!crq_q->crq_addr) {
+@@ -662,8 +665,6 @@ static int tpm_ibmvtpm_probe(struct vio_dev *vio_dev,
+ 
+       crq_q->index = 0;
+ 
+-      ibmvtpm->dev = dev;
+-      ibmvtpm->vdev = vio_dev;
+       TPM_VPRIV(chip) = (void *)ibmvtpm;
+ 
+       spin_lock_init(&ibmvtpm->rtce_lock);
+diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
+index c3a93fece819..5b11022d7745 100644
+--- a/drivers/cpuidle/cpuidle.c
++++ b/drivers/cpuidle/cpuidle.c
+@@ -135,6 +135,9 @@ int cpuidle_idle_call(void)
+ 
+       /* ask the governor for the next state */
+       next_state = cpuidle_curr_governor->select(drv, dev);
++      if (next_state < 0)
++              return -EBUSY;
++
+       if (need_resched()) {
+               dev->last_residency = 0;
+               /* give the governor an opportunity to reflect on the outcome */
+diff --git a/drivers/cpuidle/governors/menu.c 
b/drivers/cpuidle/governors/menu.c
+index bc580b67a652..67fd901f6fc9 100644
+--- a/drivers/cpuidle/governors/menu.c
++++ b/drivers/cpuidle/governors/menu.c
+@@ -269,7 +269,7 @@ static int menu_select(struct cpuidle_driver *drv, struct 
cpuidle_device *dev)
+               data->needs_update = 0;
+       }
+ 
+-      data->last_state_idx = 0;
++      data->last_state_idx = CPUIDLE_DRIVER_STATE_START - 1;
+       data->exit_us = 0;
+ 
+       /* Special case when user has set very strict latency requirement */
+diff --git a/drivers/dma/mv_xor.c b/drivers/dma/mv_xor.c
+index d64ae14f2706..43092c317897 100644
+--- a/drivers/dma/mv_xor.c
++++ b/drivers/dma/mv_xor.c
+@@ -393,7 +393,8 @@ static void __mv_xor_slot_cleanup(struct mv_xor_chan 
*mv_chan)
+       dma_cookie_t cookie = 0;
+       int busy = mv_chan_is_busy(mv_chan);
+       u32 current_desc = mv_chan_get_current_desc(mv_chan);
+-      int seen_current = 0;
++      int current_cleaned = 0;
++      struct mv_xor_desc *hw_desc;
+ 
+       dev_dbg(mv_chan_to_devp(mv_chan), "%s %d\n", __func__, __LINE__);
+       dev_dbg(mv_chan_to_devp(mv_chan), "current_desc %x\n", current_desc);
+@@ -405,38 +406,57 @@ static void __mv_xor_slot_cleanup(struct mv_xor_chan 
*mv_chan)
+ 
+       list_for_each_entry_safe(iter, _iter, &mv_chan->chain,
+                                       chain_node) {
+-              prefetch(_iter);
+-              prefetch(&_iter->async_tx);
+ 
+-              /* do not advance past the current descriptor loaded into the
+-               * hardware channel, subsequent descriptors are either in
+-               * process or have not been submitted
+-               */
+-              if (seen_current)
+-                      break;
++              /* clean finished descriptors */
++              hw_desc = iter->hw_desc;
++              if (hw_desc->status & XOR_DESC_SUCCESS) {
++                      cookie = mv_xor_run_tx_complete_actions(iter, mv_chan,
++                                                              cookie);
+ 
+-              /* stop the search if we reach the current descriptor and the
+-               * channel is busy
+-               */
+-              if (iter->async_tx.phys == current_desc) {
+-                      seen_current = 1;
+-                      if (busy)
++                      /* done processing desc, clean slot */
++                      mv_xor_clean_slot(iter, mv_chan);
++
++                      /* break if we did cleaned the current */
++                      if (iter->async_tx.phys == current_desc) {
++                              current_cleaned = 1;
++                              break;
++                      }
++              } else {
++                      if (iter->async_tx.phys == current_desc) {
++                              current_cleaned = 0;
+                               break;
++                      }
+               }
+-
+-              cookie = mv_xor_run_tx_complete_actions(iter, mv_chan, cookie);
+-
+-              if (mv_xor_clean_slot(iter, mv_chan))
+-                      break;
+       }
+ 
+       if ((busy == 0) && !list_empty(&mv_chan->chain)) {
+-              struct mv_xor_desc_slot *chain_head;
+-              chain_head = list_entry(mv_chan->chain.next,
+-                                      struct mv_xor_desc_slot,
+-                                      chain_node);
+-
+-              mv_xor_start_new_chain(mv_chan, chain_head);
++              if (current_cleaned) {
++                      /*
++                       * current descriptor cleaned and removed, run
++                       * from list head
++                       */
++                      iter = list_entry(mv_chan->chain.next,
++                                        struct mv_xor_desc_slot,
++                                        chain_node);
++                      mv_xor_start_new_chain(mv_chan, iter);
++              } else {
++                      if (!list_is_last(&iter->chain_node, &mv_chan->chain)) {
++                              /*
++                               * descriptors are still waiting after
++                               * current, trigger them
++                               */
++                              iter = list_entry(iter->chain_node.next,
++                                                struct mv_xor_desc_slot,
++                                                chain_node);
++                              mv_xor_start_new_chain(mv_chan, iter);
++                      } else {
++                              /*
++                               * some descriptors are still waiting
++                               * to be cleaned
++                               */
++                              tasklet_schedule(&mv_chan->irq_tasklet);
++                      }
++              }
+       }
+ 
+       if (cookie > 0)
+diff --git a/drivers/dma/mv_xor.h b/drivers/dma/mv_xor.h
+index c632a4761fcf..e003851cd4e5 100644
+--- a/drivers/dma/mv_xor.h
++++ b/drivers/dma/mv_xor.h
+@@ -32,6 +32,7 @@
+ #define XOR_OPERATION_MODE_XOR                0
+ #define XOR_OPERATION_MODE_MEMCPY     2
+ #define XOR_OPERATION_MODE_MEMSET     4
++#define XOR_DESC_SUCCESS              0x40000000
+ 
+ #define XOR_CURR_DESC(chan)   (chan->mmr_base + 0x210 + (chan->idx * 4))
+ #define XOR_NEXT_DESC(chan)   (chan->mmr_base + 0x200 + (chan->idx * 4))
+diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
+index 8759d699bd8e..c24c35606836 100644
+--- a/drivers/gpu/drm/drm_crtc.c
++++ b/drivers/gpu/drm/drm_crtc.c
+@@ -1955,8 +1955,11 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
+       if (!drm_core_check_feature(dev, DRIVER_MODESET))
+               return -EINVAL;
+ 
+-      /* For some reason crtc x/y offsets are signed internally. */
+-      if (crtc_req->x > INT_MAX || crtc_req->y > INT_MAX)
++      /*
++       * Universal plane src offsets are only 16.16, prevent havoc for
++       * drivers using universal plane code internally.
++       */
++      if (crtc_req->x & 0xffff0000 || crtc_req->y & 0xffff0000)
+               return -ERANGE;
+ 
+       drm_modeset_lock_all(dev);
+diff --git a/drivers/gpu/drm/qxl/qxl_cmd.c b/drivers/gpu/drm/qxl/qxl_cmd.c
+index f86771481317..5a48d7419baf 100644
+--- a/drivers/gpu/drm/qxl/qxl_cmd.c
++++ b/drivers/gpu/drm/qxl/qxl_cmd.c
+@@ -500,6 +500,7 @@ int qxl_hw_surface_alloc(struct qxl_device *qdev,
+ 
+       cmd = (struct qxl_surface_cmd *)qxl_release_map(qdev, release);
+       cmd->type = QXL_SURFACE_CMD_CREATE;
++      cmd->flags = QXL_SURF_FLAG_KEEP_DATA;
+       cmd->u.surface_create.format = surf->surf.format;
+       cmd->u.surface_create.width = surf->surf.width;
+       cmd->u.surface_create.height = surf->surf.height;
+diff --git a/drivers/gpu/drm/radeon/radeon_gart.c 
b/drivers/gpu/drm/radeon/radeon_gart.c
+index 2915a1c56934..c4bb0bc2a1d9 100644
+--- a/drivers/gpu/drm/radeon/radeon_gart.c
++++ b/drivers/gpu/drm/radeon/radeon_gart.c
+@@ -251,8 +251,10 @@ void radeon_gart_unbind(struct radeon_device *rdev, 
unsigned offset,
+                       }
+               }
+       }
+-      mb();
+-      radeon_gart_tlb_flush(rdev);
++      if (rdev->gart.ptr) {
++              mb();
++              radeon_gart_tlb_flush(rdev);
++      }
+ }
+ 
+ /**
+@@ -294,8 +296,10 @@ int radeon_gart_bind(struct radeon_device *rdev, unsigned 
offset,
+                       }
+               }
+       }
+-      mb();
+-      radeon_gart_tlb_flush(rdev);
++      if (rdev->gart.ptr) {
++              mb();
++              radeon_gart_tlb_flush(rdev);
++      }
+       return 0;
+ }
+ 
+diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c 
b/drivers/gpu/drm/radeon/radeon_irq_kms.c
+index 1fe12ab5c5ea..db83d075606e 100644
+--- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
++++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
+@@ -73,10 +73,12 @@ static void radeon_hotplug_work_func(struct work_struct 
*work)
+       struct drm_mode_config *mode_config = &dev->mode_config;
+       struct drm_connector *connector;
+ 
++      mutex_lock(&mode_config->mutex);
+       if (mode_config->num_connector) {
+               list_for_each_entry(connector, &mode_config->connector_list, 
head)
+                       radeon_connector_hotplug(connector);
+       }
++      mutex_unlock(&mode_config->mutex);
+       /* Just fire off a uevent and let userspace tell us what to do */
+       drm_helper_hpd_irq_event(dev);
+ }
+diff --git a/drivers/hwmon/mcp3021.c b/drivers/hwmon/mcp3021.c
+index eedb32292d6d..f712cc785ef2 100644
+--- a/drivers/hwmon/mcp3021.c
++++ b/drivers/hwmon/mcp3021.c
+@@ -31,14 +31,11 @@
+ /* output format */
+ #define MCP3021_SAR_SHIFT     2
+ #define MCP3021_SAR_MASK      0x3ff
+-
+ #define MCP3021_OUTPUT_RES    10      /* 10-bit resolution */
+-#define MCP3021_OUTPUT_SCALE  4
+ 
+ #define MCP3221_SAR_SHIFT     0
+ #define MCP3221_SAR_MASK      0xfff
+ #define MCP3221_OUTPUT_RES    12      /* 12-bit resolution */
+-#define MCP3221_OUTPUT_SCALE  1
+ 
+ enum chips {
+       mcp3021,
+@@ -54,7 +51,6 @@ struct mcp3021_data {
+       u16 sar_shift;
+       u16 sar_mask;
+       u8 output_res;
+-      u8 output_scale;
+ };
+ 
+ static int mcp3021_read16(struct i2c_client *client)
+@@ -84,13 +80,7 @@ static int mcp3021_read16(struct i2c_client *client)
+ 
+ static inline u16 volts_from_reg(struct mcp3021_data *data, u16 val)
+ {
+-      if (val == 0)
+-              return 0;
+-
+-      val = val * data->output_scale - data->output_scale / 2;
+-
+-      return val * DIV_ROUND_CLOSEST(data->vdd,
+-                      (1 << data->output_res) * data->output_scale);
++      return DIV_ROUND_CLOSEST(data->vdd * val, 1 << data->output_res);
+ }
+ 
+ static ssize_t show_in_input(struct device *dev, struct device_attribute 
*attr,
+@@ -132,14 +122,12 @@ static int mcp3021_probe(struct i2c_client *client,
+               data->sar_shift = MCP3021_SAR_SHIFT;
+               data->sar_mask = MCP3021_SAR_MASK;
+               data->output_res = MCP3021_OUTPUT_RES;
+-              data->output_scale = MCP3021_OUTPUT_SCALE;
+               break;
+ 
+       case mcp3221:
+               data->sar_shift = MCP3221_SAR_SHIFT;
+               data->sar_mask = MCP3221_SAR_MASK;
+               data->output_res = MCP3221_OUTPUT_RES;
+-              data->output_scale = MCP3221_OUTPUT_SCALE;
+               break;
+       }
+ 
+diff --git a/drivers/i2c/busses/i2c-at91.c b/drivers/i2c/busses/i2c-at91.c
+index 09324d0178d5..ceabcfeb587c 100644
+--- a/drivers/i2c/busses/i2c-at91.c
++++ b/drivers/i2c/busses/i2c-at91.c
+@@ -63,6 +63,9 @@
+ #define       AT91_TWI_UNRE           0x0080  /* Underrun Error */
+ #define       AT91_TWI_NACK           0x0100  /* Not Acknowledged */
+ 
++#define       AT91_TWI_INT_MASK \
++      (AT91_TWI_TXCOMP | AT91_TWI_RXRDY | AT91_TWI_TXRDY | AT91_TWI_NACK)
++
+ #define       AT91_TWI_IER            0x0024  /* Interrupt Enable Register */
+ #define       AT91_TWI_IDR            0x0028  /* Interrupt Disable Register */
+ #define       AT91_TWI_IMR            0x002c  /* Interrupt Mask Register */
+@@ -118,13 +121,12 @@ static void at91_twi_write(struct at91_twi_dev *dev, 
unsigned reg, unsigned val)
+ 
+ static void at91_disable_twi_interrupts(struct at91_twi_dev *dev)
+ {
+-      at91_twi_write(dev, AT91_TWI_IDR,
+-                     AT91_TWI_TXCOMP | AT91_TWI_RXRDY | AT91_TWI_TXRDY);
++      at91_twi_write(dev, AT91_TWI_IDR, AT91_TWI_INT_MASK);
+ }
+ 
+ static void at91_twi_irq_save(struct at91_twi_dev *dev)
+ {
+-      dev->imr = at91_twi_read(dev, AT91_TWI_IMR) & 0x7;
++      dev->imr = at91_twi_read(dev, AT91_TWI_IMR) & AT91_TWI_INT_MASK;
+       at91_disable_twi_interrupts(dev);
+ }
+ 
+@@ -214,6 +216,14 @@ static void at91_twi_write_data_dma_callback(void *data)
+       dma_unmap_single(dev->dev, sg_dma_address(&dev->dma.sg),
+                        dev->buf_len, DMA_TO_DEVICE);
+ 
++      /*
++       * When this callback is called, THR/TX FIFO is likely not to be empty
++       * yet. So we have to wait for TXCOMP or NACK bits to be set into the
++       * Status Register to be sure that the STOP bit has been sent and the
++       * transfer is completed. The NACK interrupt has already been enabled,
++       * we just have to enable TXCOMP one.
++       */
++      at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_TXCOMP);
+       at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_STOP);
+ }
+ 
+@@ -308,7 +318,7 @@ static void at91_twi_read_data_dma_callback(void *data)
+       /* The last two bytes have to be read without using dma */
+       dev->buf += dev->buf_len - 2;
+       dev->buf_len = 2;
+-      at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_RXRDY);
++      at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_RXRDY | AT91_TWI_TXCOMP);
+ }
+ 
+ static void at91_twi_read_data_dma(struct at91_twi_dev *dev)
+@@ -369,7 +379,7 @@ static irqreturn_t atmel_twi_interrupt(int irq, void 
*dev_id)
+       /* catch error flags */
+       dev->transfer_status |= status;
+ 
+-      if (irqstatus & AT91_TWI_TXCOMP) {
++      if (irqstatus & (AT91_TWI_TXCOMP | AT91_TWI_NACK)) {
+               at91_disable_twi_interrupts(dev);
+               complete(&dev->cmd_complete);
+       }
+@@ -382,6 +392,34 @@ static int at91_do_twi_transfer(struct at91_twi_dev *dev)
+       int ret;
+       bool has_unre_flag = dev->pdata->has_unre_flag;
+ 
++      /*
++       * WARNING: the TXCOMP bit in the Status Register is NOT a clear on
++       * read flag but shows the state of the transmission at the time the
++       * Status Register is read. According to the programmer datasheet,
++       * TXCOMP is set when both holding register and internal shifter are
++       * empty and STOP condition has been sent.
++       * Consequently, we should enable NACK interrupt rather than TXCOMP to
++       * detect transmission failure.
++       *
++       * Besides, the TXCOMP bit is already set before the i2c transaction
++       * has been started. For read transactions, this bit is cleared when
++       * writing the START bit into the Control Register. So the
++       * corresponding interrupt can safely be enabled just after.
++       * However for write transactions managed by the CPU, we first write
++       * into THR, so TXCOMP is cleared. Then we can safely enable TXCOMP
++       * interrupt. If TXCOMP interrupt were enabled before writing into THR,
++       * the interrupt handler would be called immediately and the i2c command
++       * would be reported as completed.
++       * Also when a write transaction is managed by the DMA controller,
++       * enabling the TXCOMP interrupt in this function may lead to a race
++       * condition since we don't know whether the TXCOMP interrupt is enabled
++       * before or after the DMA has started to write into THR. So the TXCOMP
++       * interrupt is enabled later by at91_twi_write_data_dma_callback().
++       * Immediately after in that DMA callback, we still need to send the
++       * STOP condition manually writing the corresponding bit into the
++       * Control Register.
++       */
++
+       dev_dbg(dev->dev, "transfer: %s %d bytes.\n",
+               (dev->msg->flags & I2C_M_RD) ? "read" : "write", dev->buf_len);
+ 
+@@ -412,26 +450,24 @@ static int at91_do_twi_transfer(struct at91_twi_dev *dev)
+                * seems to be the best solution.
+                */
+               if (dev->use_dma && (dev->buf_len > AT91_I2C_DMA_THRESHOLD)) {
++                      at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_NACK);
+                       at91_twi_read_data_dma(dev);
+-                      /*
+-                       * It is important to enable TXCOMP irq here because
+-                       * doing it only when transferring the last two bytes
+-                       * will mask NACK errors since TXCOMP is set when a
+-                       * NACK occurs.
+-                       */
+-                      at91_twi_write(dev, AT91_TWI_IER,
+-                             AT91_TWI_TXCOMP);
+-              } else
++              } else {
+                       at91_twi_write(dev, AT91_TWI_IER,
+-                             AT91_TWI_TXCOMP | AT91_TWI_RXRDY);
++                                     AT91_TWI_TXCOMP |
++                                     AT91_TWI_NACK |
++                                     AT91_TWI_RXRDY);
++              }
+       } else {
+               if (dev->use_dma && (dev->buf_len > AT91_I2C_DMA_THRESHOLD)) {
++                      at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_NACK);
+                       at91_twi_write_data_dma(dev);
+-                      at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_TXCOMP);
+               } else {
+                       at91_twi_write_next_byte(dev);
+                       at91_twi_write(dev, AT91_TWI_IER,
+-                              AT91_TWI_TXCOMP | AT91_TWI_TXRDY);
++                                     AT91_TWI_TXCOMP |
++                                     AT91_TWI_NACK |
++                                     AT91_TWI_TXRDY);
+               }
+       }
+ 
+diff --git a/drivers/iio/dac/ad5624r_spi.c b/drivers/iio/dac/ad5624r_spi.c
+index bb298aaff321..6deac5af1cfd 100644
+--- a/drivers/iio/dac/ad5624r_spi.c
++++ b/drivers/iio/dac/ad5624r_spi.c
+@@ -22,7 +22,7 @@
+ #include "ad5624r.h"
+ 
+ static int ad5624r_spi_write(struct spi_device *spi,
+-                           u8 cmd, u8 addr, u16 val, u8 len)
++                           u8 cmd, u8 addr, u16 val, u8 shift)
+ {
+       u32 data;
+       u8 msg[3];
+@@ -35,7 +35,7 @@ static int ad5624r_spi_write(struct spi_device *spi,
+        * 14-, 12-bit input code followed by 0, 2, or 4 don't care bits,
+        * for the AD5664R, AD5644R, and AD5624R, respectively.
+        */
+-      data = (0 << 22) | (cmd << 19) | (addr << 16) | (val << (16 - len));
++      data = (0 << 22) | (cmd << 19) | (addr << 16) | (val << shift);
+       msg[0] = data >> 16;
+       msg[1] = data >> 8;
+       msg[2] = data;
+diff --git a/drivers/infiniband/ulp/isert/ib_isert.c 
b/drivers/infiniband/ulp/isert/ib_isert.c
+index 8019e642d2f5..43aa807d78bd 100644
+--- a/drivers/infiniband/ulp/isert/ib_isert.c
++++ b/drivers/infiniband/ulp/isert/ib_isert.c
+@@ -49,6 +49,8 @@ static int
+ isert_rdma_accept(struct isert_conn *isert_conn);
+ struct rdma_cm_id *isert_setup_id(struct isert_np *isert_np);
+ 
++static void isert_release_work(struct work_struct *work);
++
+ static void
+ isert_qp_event_callback(struct ib_event *e, void *context)
+ {
+@@ -202,7 +204,7 @@ fail:
+ static void
+ isert_free_rx_descriptors(struct isert_conn *isert_conn)
+ {
+-      struct ib_device *ib_dev = isert_conn->conn_cm_id->device;
++      struct ib_device *ib_dev = isert_conn->conn_device->ib_device;
+       struct iser_rx_desc *rx_desc;
+       int i;
+ 
+@@ -432,6 +434,7 @@ isert_connect_request(struct rdma_cm_id *cma_id, struct 
rdma_cm_event *event)
+       init_completion(&isert_conn->conn_wait_comp_err);
+       kref_init(&isert_conn->conn_kref);
+       mutex_init(&isert_conn->conn_mutex);
++      INIT_WORK(&isert_conn->release_work, isert_release_work);
+ 
+       isert_conn->conn_cm_id = cma_id;
+       isert_conn->responder_resources = event->param.conn.responder_resources;
+@@ -527,14 +530,15 @@ out:
+ static void
+ isert_connect_release(struct isert_conn *isert_conn)
+ {
+-      struct ib_device *ib_dev = isert_conn->conn_cm_id->device;
+       struct isert_device *device = isert_conn->conn_device;
+       int cq_index;
++      struct ib_device *ib_dev = device->ib_device;
+ 
+       pr_debug("Entering isert_connect_release(): 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
+ 
+       isert_free_rx_descriptors(isert_conn);
+-      rdma_destroy_id(isert_conn->conn_cm_id);
++      if (isert_conn->conn_cm_id)
++              rdma_destroy_id(isert_conn->conn_cm_id);
+ 
+       if (isert_conn->conn_qp) {
+               cq_index = ((struct isert_cq_desc *)
+@@ -673,6 +677,7 @@ isert_disconnected_handler(struct rdma_cm_id *cma_id,
+ {
+       struct isert_np *isert_np = cma_id->context;
+       struct isert_conn *isert_conn;
++      bool terminating = false;
+ 
+       if (isert_np->np_cm_id == cma_id)
+               return isert_np_cma_handler(cma_id->context, event);
+@@ -680,21 +685,37 @@ isert_disconnected_handler(struct rdma_cm_id *cma_id,
+       isert_conn = cma_id->qp->qp_context;
+ 
+       mutex_lock(&isert_conn->conn_mutex);
++      terminating = (isert_conn->state == ISER_CONN_TERMINATING);
+       isert_conn_terminate(isert_conn);
+       mutex_unlock(&isert_conn->conn_mutex);
+ 
+       pr_info("conn %p completing conn_wait\n", isert_conn);
+       complete(&isert_conn->conn_wait);
+ 
++      if (terminating)
++              goto out;
++
++      mutex_lock(&isert_np->np_accept_mutex);
++      if (!list_empty(&isert_conn->conn_accept_node)) {
++              list_del_init(&isert_conn->conn_accept_node);
++              isert_put_conn(isert_conn);
++              queue_work(isert_release_wq, &isert_conn->release_work);
++      }
++      mutex_unlock(&isert_np->np_accept_mutex);
++
++out:
+       return 0;
+ }
+ 
+-static void
++static int
+ isert_connect_error(struct rdma_cm_id *cma_id)
+ {
+       struct isert_conn *isert_conn = cma_id->qp->qp_context;
+ 
++      isert_conn->conn_cm_id = NULL;
+       isert_put_conn(isert_conn);
++
++      return -1;
+ }
+ 
+ static int
+@@ -724,7 +745,7 @@ isert_cma_handler(struct rdma_cm_id *cma_id, struct 
rdma_cm_event *event)
+       case RDMA_CM_EVENT_REJECTED:       /* FALLTHRU */
+       case RDMA_CM_EVENT_UNREACHABLE:    /* FALLTHRU */
+       case RDMA_CM_EVENT_CONNECT_ERROR:
+-              isert_connect_error(cma_id);
++              ret = isert_connect_error(cma_id);
+               break;
+       default:
+               pr_err("Unhandled RDMA CMA event: %d\n", event->event);
+@@ -2418,7 +2439,6 @@ static void isert_wait_conn(struct iscsi_conn *conn)
+ 
+       wait_for_completion(&isert_conn->conn_wait_comp_err);
+ 
+-      INIT_WORK(&isert_conn->release_work, isert_release_work);
+       queue_work(isert_release_wq, &isert_conn->release_work);
+ }
+ 
+diff --git a/drivers/md/md.c b/drivers/md/md.c
+index aaf77b07bb72..631fe3e9c6e5 100644
+--- a/drivers/md/md.c
++++ b/drivers/md/md.c
+@@ -6221,7 +6221,7 @@ static int update_array_info(struct mddev *mddev, 
mdu_array_info_t *info)
+           mddev->ctime         != info->ctime         ||
+           mddev->level         != info->level         ||
+ /*        mddev->layout        != info->layout        || */
+-          !mddev->persistent   != info->not_persistent||
++          mddev->persistent    != !info->not_persistent ||
+           mddev->chunk_sectors != info->chunk_size >> 9 ||
+           /* ignore bottom 8 bits of state, and allow SB_BITMAP_PRESENT to 
change */
+           ((state^info->state) & 0xfffffe00)
+diff --git a/drivers/md/persistent-data/dm-btree-remove.c 
b/drivers/md/persistent-data/dm-btree-remove.c
+index b88757cd0d1d..a03178e91a79 100644
+--- a/drivers/md/persistent-data/dm-btree-remove.c
++++ b/drivers/md/persistent-data/dm-btree-remove.c
+@@ -309,8 +309,8 @@ static void redistribute3(struct dm_btree_info *info, 
struct btree_node *parent,
+ 
+               if (s < 0 && nr_center < -s) {
+                       /* not enough in central node */
+-                      shift(left, center, nr_center);
+-                      s = nr_center - target;
++                      shift(left, center, -nr_center);
++                      s += nr_center;
+                       shift(left, right, s);
+                       nr_right += s;
+               } else
+@@ -323,7 +323,7 @@ static void redistribute3(struct dm_btree_info *info, 
struct btree_node *parent,
+               if (s > 0 && nr_center < s) {
+                       /* not enough in central node */
+                       shift(center, right, nr_center);
+-                      s = target - nr_center;
++                      s -= nr_center;
+                       shift(left, right, s);
+                       nr_left -= s;
+               } else
+diff --git a/drivers/md/persistent-data/dm-btree.c 
b/drivers/md/persistent-data/dm-btree.c
+index 0a7592e88811..e3ecb0b824b5 100644
+--- a/drivers/md/persistent-data/dm-btree.c
++++ b/drivers/md/persistent-data/dm-btree.c
+@@ -240,7 +240,7 @@ int dm_btree_del(struct dm_btree_info *info, dm_block_t 
root)
+       int r;
+       struct del_stack *s;
+ 
+-      s = kmalloc(sizeof(*s), GFP_KERNEL);
++      s = kmalloc(sizeof(*s), GFP_NOIO);
+       if (!s)
+               return -ENOMEM;
+       s->tm = info->tm;
+diff --git a/drivers/media/dvb-frontends/af9013.c 
b/drivers/media/dvb-frontends/af9013.c
+index fb504f1e9125..5930aee6b5d0 100644
+--- a/drivers/media/dvb-frontends/af9013.c
++++ b/drivers/media/dvb-frontends/af9013.c
+@@ -606,6 +606,10 @@ static int af9013_set_frontend(struct dvb_frontend *fe)
+                       }
+               }
+ 
++              /* Return an error if can't find bandwidth or the right clock */
++              if (i == ARRAY_SIZE(coeff_lut))
++                      return -EINVAL;
++
+               ret = af9013_wr_regs(state, 0xae00, coeff_lut[i].val,
+                       sizeof(coeff_lut[i].val));
+       }
+diff --git a/drivers/media/dvb-frontends/cx24116.c 
b/drivers/media/dvb-frontends/cx24116.c
+index 2916d7c74a1d..7bc68b355c0b 100644
+--- a/drivers/media/dvb-frontends/cx24116.c
++++ b/drivers/media/dvb-frontends/cx24116.c
+@@ -963,6 +963,10 @@ static int cx24116_send_diseqc_msg(struct dvb_frontend 
*fe,
+       struct cx24116_state *state = fe->demodulator_priv;
+       int i, ret;
+ 
++      /* Validate length */
++      if (d->msg_len > sizeof(d->msg))
++                return -EINVAL;
++
+       /* Dump DiSEqC message */
+       if (debug) {
+               printk(KERN_INFO "cx24116: %s(", __func__);
+@@ -974,10 +978,6 @@ static int cx24116_send_diseqc_msg(struct dvb_frontend 
*fe,
+               printk(") toneburst=%d\n", toneburst);
+       }
+ 
+-      /* Validate length */
+-      if (d->msg_len > (CX24116_ARGLEN - CX24116_DISEQC_MSGOFS))
+-              return -EINVAL;
+-
+       /* DiSEqC message */
+       for (i = 0; i < d->msg_len; i++)
+               state->dsec_cmd.args[CX24116_DISEQC_MSGOFS + i] = d->msg[i];
+diff --git a/drivers/media/dvb-frontends/s5h1420.c 
b/drivers/media/dvb-frontends/s5h1420.c
+index 93eeaf7118fd..0b4f8fe6bf99 100644
+--- a/drivers/media/dvb-frontends/s5h1420.c
++++ b/drivers/media/dvb-frontends/s5h1420.c
+@@ -180,7 +180,7 @@ static int s5h1420_send_master_cmd (struct dvb_frontend* 
fe,
+       int result = 0;
+ 
+       dprintk("enter %s\n", __func__);
+-      if (cmd->msg_len > 8)
++      if (cmd->msg_len > sizeof(cmd->msg))
+               return -EINVAL;
+ 
+       /* setup for DISEQC */
+diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
+index 56998eca1a8d..885ba4a19a6c 100644
+--- a/drivers/mmc/card/block.c
++++ b/drivers/mmc/card/block.c
+@@ -202,6 +202,8 @@ static ssize_t power_ro_lock_show(struct device *dev,
+ 
+       ret = snprintf(buf, PAGE_SIZE, "%d\n", locked);
+ 
++      mmc_blk_put(md);
++
+       return ret;
+ }
+ 
+@@ -1833,9 +1835,11 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, 
struct request *rqc)
+                       break;
+               case MMC_BLK_CMD_ERR:
+                       ret = mmc_blk_cmd_err(md, card, brq, req, ret);
+-                      if (!mmc_blk_reset(md, card->host, type))
+-                              break;
+-                      goto cmd_abort;
++                      if (mmc_blk_reset(md, card->host, type))
++                              goto cmd_abort;
++                      if (!ret)
++                              goto start_new_req;
++                      break;
+               case MMC_BLK_RETRY:
+                       if (retry++ < 5)
+                               break;
+diff --git a/drivers/mtd/maps/dc21285.c b/drivers/mtd/maps/dc21285.c
+index f8a7dd14cee0..70a3db3ab856 100644
+--- a/drivers/mtd/maps/dc21285.c
++++ b/drivers/mtd/maps/dc21285.c
+@@ -38,9 +38,9 @@ static void nw_en_write(void)
+        * we want to write a bit pattern XXX1 to Xilinx to enable
+        * the write gate, which will be open for about the next 2ms.
+        */
+-      spin_lock_irqsave(&nw_gpio_lock, flags);
++      raw_spin_lock_irqsave(&nw_gpio_lock, flags);
+       nw_cpld_modify(CPLD_FLASH_WR_ENABLE, CPLD_FLASH_WR_ENABLE);
+-      spin_unlock_irqrestore(&nw_gpio_lock, flags);
++      raw_spin_unlock_irqrestore(&nw_gpio_lock, flags);
+ 
+       /*
+        * let the ISA bus to catch on...
+diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c
+index 5073cbc796d8..32d5e40c6863 100644
+--- a/drivers/mtd/mtd_blkdevs.c
++++ b/drivers/mtd/mtd_blkdevs.c
+@@ -199,6 +199,7 @@ static int blktrans_open(struct block_device *bdev, 
fmode_t mode)
+               return -ERESTARTSYS; /* FIXME: busy loop! -arnd*/
+ 
+       mutex_lock(&dev->lock);
++      mutex_lock(&mtd_table_mutex);
+ 
+       if (dev->open)
+               goto unlock;
+@@ -222,6 +223,7 @@ static int blktrans_open(struct block_device *bdev, 
fmode_t mode)
+ 
+ unlock:
+       dev->open++;
++      mutex_unlock(&mtd_table_mutex);
+       mutex_unlock(&dev->lock);
+       blktrans_dev_put(dev);
+       return ret;
+@@ -232,6 +234,7 @@ error_release:
+ error_put:
+       module_put(dev->tr->owner);
+       kref_put(&dev->ref, blktrans_dev_release);
++      mutex_unlock(&mtd_table_mutex);
+       mutex_unlock(&dev->lock);
+       blktrans_dev_put(dev);
+       return ret;
+@@ -245,6 +248,7 @@ static void blktrans_release(struct gendisk *disk, fmode_t 
mode)
+               return;
+ 
+       mutex_lock(&dev->lock);
++      mutex_lock(&mtd_table_mutex);
+ 
+       if (--dev->open)
+               goto unlock;
+@@ -258,6 +262,7 @@ static void blktrans_release(struct gendisk *disk, fmode_t 
mode)
+               __put_mtd_device(dev->mtd);
+       }
+ unlock:
++      mutex_unlock(&mtd_table_mutex);
+       mutex_unlock(&dev->lock);
+       blktrans_dev_put(dev);
+ }
+diff --git a/drivers/net/wireless/ath/ath9k/main.c 
b/drivers/net/wireless/ath/ath9k/main.c
+index 82a1b5b16b62..c7f23d271058 100644
+--- a/drivers/net/wireless/ath/ath9k/main.c
++++ b/drivers/net/wireless/ath/ath9k/main.c
+@@ -195,11 +195,13 @@ static bool ath_prepare_reset(struct ath_softc *sc)
+       ath9k_debug_samp_bb_mac(sc);
+       ath9k_hw_disable_interrupts(ah);
+ 
+-      if (!ath_drain_all_txq(sc))
+-              ret = false;
+-
+-      if (!ath_stoprecv(sc))
+-              ret = false;
++      if (AR_SREV_9300_20_OR_LATER(ah)) {
++              ret &= ath_stoprecv(sc);
++              ret &= ath_drain_all_txq(sc);
++      } else {
++              ret &= ath_drain_all_txq(sc);
++              ret &= ath_stoprecv(sc);
++      }
+ 
+       return ret;
+ }
+diff --git a/drivers/pcmcia/topic.h b/drivers/pcmcia/topic.h
+index 615a45a8fe86..582688fe7505 100644
+--- a/drivers/pcmcia/topic.h
++++ b/drivers/pcmcia/topic.h
+@@ -104,6 +104,9 @@
+ #define TOPIC_EXCA_IF_CONTROL         0x3e    /* 8 bit */
+ #define TOPIC_EXCA_IFC_33V_ENA                0x01
+ 
++#define TOPIC_PCI_CFG_PPBCN           0x3e    /* 16-bit */
++#define TOPIC_PCI_CFG_PPBCN_WBEN      0x0400
++
+ static void topic97_zoom_video(struct pcmcia_socket *sock, int onoff)
+ {
+       struct yenta_socket *socket = container_of(sock, struct yenta_socket, 
socket);
+@@ -138,6 +141,7 @@ static int topic97_override(struct yenta_socket *socket)
+ static int topic95_override(struct yenta_socket *socket)
+ {
+       u8 fctrl;
++      u16 ppbcn;
+ 
+       /* enable 3.3V support for 16bit cards */
+       fctrl = exca_readb(socket, TOPIC_EXCA_IF_CONTROL);
+@@ -146,6 +150,18 @@ static int topic95_override(struct yenta_socket *socket)
+       /* tell yenta to use exca registers to power 16bit cards */
+       socket->flags |= YENTA_16BIT_POWER_EXCA | YENTA_16BIT_POWER_DF;
+ 
++      /* Disable write buffers to prevent lockups under load with numerous
++         Cardbus cards, observed on Tecra 500CDT and reported elsewhere on the
++         net.  This is not a power-on default according to the datasheet
++         but some BIOSes seem to set it. */
++      if (pci_read_config_word(socket->dev, TOPIC_PCI_CFG_PPBCN, &ppbcn) == 0
++          && socket->dev->revision <= 7
++          && (ppbcn & TOPIC_PCI_CFG_PPBCN_WBEN)) {
++              ppbcn &= ~TOPIC_PCI_CFG_PPBCN_WBEN;
++              pci_write_config_word(socket->dev, TOPIC_PCI_CFG_PPBCN, ppbcn);
++              dev_info(&socket->dev->dev, "Disabled ToPIC95 Cardbus write 
buffers.\n");
++      }
++
+       return 0;
+ }
+ 
+diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-370.c 
b/drivers/pinctrl/mvebu/pinctrl-armada-370.c
+index 48e21a229483..c99e64ac8e08 100644
+--- a/drivers/pinctrl/mvebu/pinctrl-armada-370.c
++++ b/drivers/pinctrl/mvebu/pinctrl-armada-370.c
+@@ -358,11 +358,11 @@ static struct mvebu_mpp_mode mv88f6710_mpp_modes[] = {
+       MPP_MODE(64,
+          MPP_FUNCTION(0x0, "gpio", NULL),
+          MPP_FUNCTION(0x1, "spi0", "miso"),
+-         MPP_FUNCTION(0x2, "spi0-1", "cs1")),
++         MPP_FUNCTION(0x2, "spi0", "cs1")),
+       MPP_MODE(65,
+          MPP_FUNCTION(0x0, "gpio", NULL),
+          MPP_FUNCTION(0x1, "spi0", "mosi"),
+-         MPP_FUNCTION(0x2, "spi0-1", "cs2")),
++         MPP_FUNCTION(0x2, "spi0", "cs2")),
+ };
+ 
+ static struct mvebu_pinctrl_soc_info armada_370_pinctrl_info;
+diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-xp.c 
b/drivers/pinctrl/mvebu/pinctrl-armada-xp.c
+index ab5dc04b3e8a..5923a9ef70cc 100644
+--- a/drivers/pinctrl/mvebu/pinctrl-armada-xp.c
++++ b/drivers/pinctrl/mvebu/pinctrl-armada-xp.c
+@@ -14,10 +14,7 @@
+  * available: mv78230, mv78260 and mv78460. From a pin muxing
+  * perspective, the mv78230 has 49 MPP pins. The mv78260 and mv78460
+  * both have 67 MPP pins (more GPIOs and address lines for the memory
+- * bus mainly). The only difference between the mv78260 and the
+- * mv78460 in terms of pin muxing is the addition of two functions on
+- * pins 43 and 56 to access the VDD of the CPU2 and 3 (mv78260 has two
+- * cores, mv78460 has four cores).
++ * bus mainly).
+  */
+ 
+ #include <linux/err.h>
+@@ -159,20 +156,17 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
+       MPP_MODE(24,
+                MPP_VAR_FUNCTION(0x0, "gpio", NULL,        V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x1, "sata1", "prsnt",    V_MV78230_PLUS),
+-               MPP_VAR_FUNCTION(0x2, "nf", "bootcs-re",   V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x3, "tdm", "rst",        V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x4, "lcd", "hsync",      V_MV78230_PLUS)),
+       MPP_MODE(25,
+                MPP_VAR_FUNCTION(0x0, "gpio", NULL,        V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x1, "sata0", "prsnt",    V_MV78230_PLUS),
+-               MPP_VAR_FUNCTION(0x2, "nf", "bootcs-we",   V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x3, "tdm", "pclk",       V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x4, "lcd", "vsync",      V_MV78230_PLUS)),
+       MPP_MODE(26,
+                MPP_VAR_FUNCTION(0x0, "gpio", NULL,        V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x3, "tdm", "fsync",      V_MV78230_PLUS),
+-               MPP_VAR_FUNCTION(0x4, "lcd", "clk",        V_MV78230_PLUS),
+-               MPP_VAR_FUNCTION(0x5, "vdd", "cpu1-pd",    V_MV78230_PLUS)),
++               MPP_VAR_FUNCTION(0x4, "lcd", "clk",        V_MV78230_PLUS)),
+       MPP_MODE(27,
+                MPP_VAR_FUNCTION(0x0, "gpio", NULL,        V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x1, "ptp", "trig",       V_MV78230_PLUS),
+@@ -187,8 +181,7 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
+                MPP_VAR_FUNCTION(0x0, "gpio", NULL,        V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x1, "ptp", "clk",        V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x3, "tdm", "int0",       V_MV78230_PLUS),
+-               MPP_VAR_FUNCTION(0x4, "lcd", "ref-clk",    V_MV78230_PLUS),
+-               MPP_VAR_FUNCTION(0x5, "vdd", "cpu0-pd",    V_MV78230_PLUS)),
++               MPP_VAR_FUNCTION(0x4, "lcd", "ref-clk",    V_MV78230_PLUS)),
+       MPP_MODE(30,
+                MPP_VAR_FUNCTION(0x0, "gpio", NULL,        V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x1, "sd0", "clk",        V_MV78230_PLUS),
+@@ -196,13 +189,11 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
+       MPP_MODE(31,
+                MPP_VAR_FUNCTION(0x0, "gpio", NULL,        V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x1, "sd0", "cmd",        V_MV78230_PLUS),
+-               MPP_VAR_FUNCTION(0x3, "tdm", "int2",       V_MV78230_PLUS),
+-               MPP_VAR_FUNCTION(0x5, "vdd", "cpu0-pd",    V_MV78230_PLUS)),
++               MPP_VAR_FUNCTION(0x3, "tdm", "int2",       V_MV78230_PLUS)),
+       MPP_MODE(32,
+                MPP_VAR_FUNCTION(0x0, "gpio", NULL,        V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x1, "sd0", "d0",         V_MV78230_PLUS),
+-               MPP_VAR_FUNCTION(0x3, "tdm", "int3",       V_MV78230_PLUS),
+-               MPP_VAR_FUNCTION(0x5, "vdd", "cpu1-pd",    V_MV78230_PLUS)),
++               MPP_VAR_FUNCTION(0x3, "tdm", "int3",       V_MV78230_PLUS)),
+       MPP_MODE(33,
+                MPP_VAR_FUNCTION(0x0, "gpio", NULL,        V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x1, "sd0", "d1",         V_MV78230_PLUS),
+@@ -234,7 +225,6 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
+                MPP_VAR_FUNCTION(0x0, "gpio", NULL,        V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x1, "spi", "cs1",        V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x2, "uart2", "cts",      V_MV78230_PLUS),
+-               MPP_VAR_FUNCTION(0x3, "vdd", "cpu1-pd",    V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x4, "lcd", "vga-hsync",  V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x5, "pcie", "clkreq0",   V_MV78230_PLUS)),
+       MPP_MODE(41,
+@@ -249,15 +239,13 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
+                MPP_VAR_FUNCTION(0x1, "uart2", "rxd",      V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x2, "uart0", "cts",      V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x3, "tdm", "int7",       V_MV78230_PLUS),
+-               MPP_VAR_FUNCTION(0x4, "tdm-1", "timer",    V_MV78230_PLUS),
+-               MPP_VAR_FUNCTION(0x5, "vdd", "cpu0-pd",    V_MV78230_PLUS)),
++               MPP_VAR_FUNCTION(0x4, "tdm-1", "timer",    V_MV78230_PLUS)),
+       MPP_MODE(43,
+                MPP_VAR_FUNCTION(0x0, "gpio", NULL,        V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x1, "uart2", "txd",      V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x2, "uart0", "rts",      V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x3, "spi", "cs3",        V_MV78230_PLUS),
+-               MPP_VAR_FUNCTION(0x4, "pcie", "rstout",    V_MV78230_PLUS),
+-               MPP_VAR_FUNCTION(0x5, "vdd", "cpu2-3-pd",  V_MV78460)),
++               MPP_VAR_FUNCTION(0x4, "pcie", "rstout",    V_MV78230_PLUS)),
+       MPP_MODE(44,
+                MPP_VAR_FUNCTION(0x0, "gpio", NULL,        V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x1, "uart2", "cts",      V_MV78230_PLUS),
+@@ -286,7 +274,7 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
+                MPP_VAR_FUNCTION(0x5, "pcie", "clkreq3",   V_MV78230_PLUS)),
+       MPP_MODE(48,
+                MPP_VAR_FUNCTION(0x0, "gpio", NULL,        V_MV78230_PLUS),
+-               MPP_VAR_FUNCTION(0x1, "tclk", NULL,        V_MV78230_PLUS),
++               MPP_VAR_FUNCTION(0x1, "dev", "clkout",     V_MV78230_PLUS),
+                MPP_VAR_FUNCTION(0x2, "dev", "burst/last", V_MV78230_PLUS)),
+       MPP_MODE(49,
+                MPP_VAR_FUNCTION(0x0, "gpio", NULL,        V_MV78260_PLUS),
+@@ -308,16 +296,13 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
+                MPP_VAR_FUNCTION(0x1, "dev", "ad19",       V_MV78260_PLUS)),
+       MPP_MODE(55,
+                MPP_VAR_FUNCTION(0x0, "gpio", NULL,        V_MV78260_PLUS),
+-               MPP_VAR_FUNCTION(0x1, "dev", "ad20",       V_MV78260_PLUS),
+-               MPP_VAR_FUNCTION(0x2, "vdd", "cpu0-pd",    V_MV78260_PLUS)),
++               MPP_VAR_FUNCTION(0x1, "dev", "ad20",       V_MV78260_PLUS)),
+       MPP_MODE(56,
+                MPP_VAR_FUNCTION(0x0, "gpio", NULL,        V_MV78260_PLUS),
+-               MPP_VAR_FUNCTION(0x1, "dev", "ad21",       V_MV78260_PLUS),
+-               MPP_VAR_FUNCTION(0x2, "vdd", "cpu1-pd",    V_MV78260_PLUS)),
++               MPP_VAR_FUNCTION(0x1, "dev", "ad21",       V_MV78260_PLUS)),
+       MPP_MODE(57,
+                MPP_VAR_FUNCTION(0x0, "gpio", NULL,        V_MV78260_PLUS),
+-               MPP_VAR_FUNCTION(0x1, "dev", "ad22",       V_MV78260_PLUS),
+-               MPP_VAR_FUNCTION(0x2, "vdd", "cpu2-3-pd",  V_MV78460)),
++               MPP_VAR_FUNCTION(0x1, "dev", "ad22",       V_MV78260_PLUS)),
+       MPP_MODE(58,
+                MPP_VAR_FUNCTION(0x0, "gpio", NULL,        V_MV78260_PLUS),
+                MPP_VAR_FUNCTION(0x1, "dev", "ad23",       V_MV78260_PLUS)),
+diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
+index 283212aa103c..70ccc2010054 100644
+--- a/drivers/regulator/core.c
++++ b/drivers/regulator/core.c
+@@ -769,7 +769,7 @@ static int suspend_prepare(struct regulator_dev *rdev, 
suspend_state_t state)
+ static void print_constraints(struct regulator_dev *rdev)
+ {
+       struct regulation_constraints *constraints = rdev->constraints;
+-      char buf[80] = "";
++      char buf[160] = "";
+       int count = 0;
+       int ret;
+ 
+diff --git a/drivers/scsi/ipr.h b/drivers/scsi/ipr.h
+index 535f57328a72..c19911554036 100644
+--- a/drivers/scsi/ipr.h
++++ b/drivers/scsi/ipr.h
+@@ -257,7 +257,7 @@
+ #define IPR_RUNTIME_RESET                             0x40000000
+ 
+ #define IPR_IPL_INIT_MIN_STAGE_TIME                   5
+-#define IPR_IPL_INIT_DEFAULT_STAGE_TIME                 15
++#define IPR_IPL_INIT_DEFAULT_STAGE_TIME                 30
+ #define IPR_IPL_INIT_STAGE_UNKNOWN                    0x0
+ #define IPR_IPL_INIT_STAGE_TRANSOP                    0xB0000000
+ #define IPR_IPL_INIT_STAGE_MASK                               0xff000000
+diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
+index d2a4c75e5b8f..813e9d8ba351 100644
+--- a/drivers/scsi/qla2xxx/qla_isr.c
++++ b/drivers/scsi/qla2xxx/qla_isr.c
+@@ -523,8 +523,9 @@ qla2x00_async_event(scsi_qla_host_t *vha, struct rsp_que 
*rsp, uint16_t *mb)
+       struct device_reg_2xxx __iomem *reg = &ha->iobase->isp;
+       struct device_reg_24xx __iomem *reg24 = &ha->iobase->isp24;
+       struct device_reg_82xx __iomem *reg82 = &ha->iobase->isp82;
+-      uint32_t        rscn_entry, host_pid;
++      uint32_t        rscn_entry, host_pid, tmp_pid;
+       unsigned long   flags;
++      fc_port_t       *fcport = NULL;
+ 
+       /* Setup to process RIO completion. */
+       handle_cnt = 0;
+@@ -918,6 +919,20 @@ skip_rio:
+               if (qla2x00_is_a_vp_did(vha, rscn_entry))
+                       break;
+ 
++              /*
++               * Search for the rport related to this RSCN entry and mark it
++               * as lost.
++               */
++              list_for_each_entry(fcport, &vha->vp_fcports, list) {
++                      if (atomic_read(&fcport->state) != FCS_ONLINE)
++                              continue;
++                      tmp_pid = fcport->d_id.b24;
++                      if (fcport->d_id.b24 == rscn_entry) {
++                              qla2x00_mark_device_lost(vha, fcport, 0, 0);
++                              break;
++                      }
++              }
++
+               atomic_set(&vha->loop_down_timer, 0);
+               vha->flags.management_server_logged_in = 0;
+ 
+diff --git a/drivers/staging/rtl8712/rtl8712_recv.c 
b/drivers/staging/rtl8712/rtl8712_recv.c
+index d59a74aa3048..4b25f3afb8dc 100644
+--- a/drivers/staging/rtl8712/rtl8712_recv.c
++++ b/drivers/staging/rtl8712/rtl8712_recv.c
+@@ -1075,7 +1075,8 @@ static int recvbuf2recvframe(struct _adapter *padapter, 
struct sk_buff *pskb)
+               /* for first fragment packet, driver need allocate 1536 +
+                * drvinfo_sz + RXDESC_SIZE to defrag packet. */
+               if ((mf == 1) && (frag == 0))
+-                      alloc_sz = 1658;/*1658+6=1664, 1664 is 128 alignment.*/
++                      /*1658+6=1664, 1664 is 128 alignment.*/
++                      alloc_sz = max_t(u16, tmp_len, 1658);
+               else
+                       alloc_sz = tmp_len;
+               /* 2 is for IP header 4 bytes alignment in QoS packet case.
+diff --git a/drivers/target/iscsi/iscsi_target.c 
b/drivers/target/iscsi/iscsi_target.c
+index 5a3ea20e9cb5..3c293ad6ae70 100644
+--- a/drivers/target/iscsi/iscsi_target.c
++++ b/drivers/target/iscsi/iscsi_target.c
+@@ -518,7 +518,7 @@ static struct iscsit_transport iscsi_target_transport = {
+ 
+ static int __init iscsi_target_init_module(void)
+ {
+-      int ret = 0;
++      int ret = 0, size;
+ 
+       pr_debug("iSCSI-Target "ISCSIT_VERSION"\n");
+ 
+@@ -527,6 +527,7 @@ static int __init iscsi_target_init_module(void)
+               pr_err("Unable to allocate memory for iscsit_global\n");
+               return -1;
+       }
++      spin_lock_init(&iscsit_global->ts_bitmap_lock);
+       mutex_init(&auth_id_lock);
+       spin_lock_init(&sess_idr_lock);
+       idr_init(&tiqn_idr);
+@@ -536,15 +537,11 @@ static int __init iscsi_target_init_module(void)
+       if (ret < 0)
+               goto out;
+ 
+-      ret = iscsi_thread_set_init();
+-      if (ret < 0)
++      size = BITS_TO_LONGS(ISCSIT_BITMAP_BITS) * sizeof(long);
++      iscsit_global->ts_bitmap = vzalloc(size);
++      if (!iscsit_global->ts_bitmap) {
++              pr_err("Unable to allocate iscsit_global->ts_bitmap\n");
+               goto configfs_out;
+-
+-      if (iscsi_allocate_thread_sets(TARGET_THREAD_SET_COUNT) !=
+-                      TARGET_THREAD_SET_COUNT) {
+-              pr_err("iscsi_allocate_thread_sets() returned"
+-                      " unexpected value!\n");
+-              goto ts_out1;
+       }
+ 
+       lio_cmd_cache = kmem_cache_create("lio_cmd_cache",
+@@ -553,7 +550,7 @@ static int __init iscsi_target_init_module(void)
+       if (!lio_cmd_cache) {
+               pr_err("Unable to kmem_cache_create() for"
+                               " lio_cmd_cache\n");
+-              goto ts_out2;
++              goto bitmap_out;
+       }
+ 
+       lio_qr_cache = kmem_cache_create("lio_qr_cache",
+@@ -608,10 +605,8 @@ qr_out:
+       kmem_cache_destroy(lio_qr_cache);
+ cmd_out:
+       kmem_cache_destroy(lio_cmd_cache);
+-ts_out2:
+-      iscsi_deallocate_thread_sets();
+-ts_out1:
+-      iscsi_thread_set_free();
++bitmap_out:
++      vfree(iscsit_global->ts_bitmap);
+ configfs_out:
+       iscsi_target_deregister_configfs();
+ out:
+@@ -621,8 +616,6 @@ out:
+ 
+ static void __exit iscsi_target_cleanup_module(void)
+ {
+-      iscsi_deallocate_thread_sets();
+-      iscsi_thread_set_free();
+       iscsit_release_discovery_tpg();
+       iscsit_unregister_transport(&iscsi_target_transport);
+       kmem_cache_destroy(lio_cmd_cache);
+@@ -633,6 +626,7 @@ static void __exit iscsi_target_cleanup_module(void)
+ 
+       iscsi_target_deregister_configfs();
+ 
++      vfree(iscsit_global->ts_bitmap);
+       kfree(iscsit_global);
+ }
+ 
+@@ -3590,17 +3584,16 @@ static int iscsit_send_reject(
+ 
+ void iscsit_thread_get_cpumask(struct iscsi_conn *conn)
+ {
+-      struct iscsi_thread_set *ts = conn->thread_set;
+       int ord, cpu;
+       /*
+-       * thread_id is assigned from iscsit_global->ts_bitmap from
+-       * within iscsi_thread_set.c:iscsi_allocate_thread_sets()
++       * bitmap_id is assigned from iscsit_global->ts_bitmap from
++       * within iscsit_start_kthreads()
+        *
+-       * Here we use thread_id to determine which CPU that this
+-       * iSCSI connection's iscsi_thread_set will be scheduled to
++       * Here we use bitmap_id to determine which CPU that this
++       * iSCSI connection's RX/TX threads will be scheduled to
+        * execute upon.
+        */
+-      ord = ts->thread_id % cpumask_weight(cpu_online_mask);
++      ord = conn->bitmap_id % cpumask_weight(cpu_online_mask);
+       for_each_online_cpu(cpu) {
+               if (ord-- == 0) {
+                       cpumask_set_cpu(cpu, conn->conn_cpumask);
+@@ -3792,7 +3785,7 @@ check_rsp_state:
+       switch (state) {
+       case ISTATE_SEND_LOGOUTRSP:
+               if (!iscsit_logout_post_handler(cmd, conn))
+-                      goto restart;
++                      return -ECONNRESET;
+               /* fall through */
+       case ISTATE_SEND_STATUS:
+       case ISTATE_SEND_ASYNCMSG:
+@@ -3820,8 +3813,6 @@ check_rsp_state:
+ 
+ err:
+       return -1;
+-restart:
+-      return -EAGAIN;
+ }
+ 
+ static int iscsit_handle_response_queue(struct iscsi_conn *conn)
+@@ -3848,21 +3839,13 @@ static int iscsit_handle_response_queue(struct 
iscsi_conn *conn)
+ int iscsi_target_tx_thread(void *arg)
+ {
+       int ret = 0;
+-      struct iscsi_conn *conn;
+-      struct iscsi_thread_set *ts = arg;
++      struct iscsi_conn *conn = arg;
+       /*
+        * Allow ourselves to be interrupted by SIGINT so that a
+        * connection recovery / failure event can be triggered externally.
+        */
+       allow_signal(SIGINT);
+ 
+-restart:
+-      conn = iscsi_tx_thread_pre_handler(ts);
+-      if (!conn)
+-              goto out;
+-
+-      ret = 0;
+-
+       while (!kthread_should_stop()) {
+               /*
+                * Ensure that both TX and RX per connection kthreads
+@@ -3871,11 +3854,9 @@ restart:
+               iscsit_thread_check_cpumask(conn, current, 1);
+ 
+               wait_event_interruptible(conn->queues_wq,
+-                                       !iscsit_conn_all_queues_empty(conn) ||
+-                                       ts->status == ISCSI_THREAD_SET_RESET);
++                                       !iscsit_conn_all_queues_empty(conn));
+ 
+-              if ((ts->status == ISCSI_THREAD_SET_RESET) ||
+-                   signal_pending(current))
++              if (signal_pending(current))
+                       goto transport_err;
+ 
+ get_immediate:
+@@ -3886,15 +3867,14 @@ get_immediate:
+               ret = iscsit_handle_response_queue(conn);
+               if (ret == 1)
+                       goto get_immediate;
+-              else if (ret == -EAGAIN)
+-                      goto restart;
++              else if (ret == -ECONNRESET)
++                      goto out;
+               else if (ret < 0)
+                       goto transport_err;
+       }
+ 
+ transport_err:
+       iscsit_take_action_for_connection_exit(conn);
+-      goto restart;
+ out:
+       return 0;
+ }
+@@ -3979,8 +3959,7 @@ int iscsi_target_rx_thread(void *arg)
+       int ret;
+       u8 buffer[ISCSI_HDR_LEN], opcode;
+       u32 checksum = 0, digest = 0;
+-      struct iscsi_conn *conn = NULL;
+-      struct iscsi_thread_set *ts = arg;
++      struct iscsi_conn *conn = arg;
+       struct kvec iov;
+       /*
+        * Allow ourselves to be interrupted by SIGINT so that a
+@@ -3988,11 +3967,6 @@ int iscsi_target_rx_thread(void *arg)
+        */
+       allow_signal(SIGINT);
+ 
+-restart:
+-      conn = iscsi_rx_thread_pre_handler(ts);
+-      if (!conn)
+-              goto out;
+-
+       if (conn->conn_transport->transport_type == ISCSI_INFINIBAND) {
+               struct completion comp;
+               int rc;
+@@ -4002,7 +3976,7 @@ restart:
+               if (rc < 0)
+                       goto transport_err;
+ 
+-              goto out;
++              goto transport_err;
+       }
+ 
+       while (!kthread_should_stop()) {
+@@ -4085,8 +4059,6 @@ transport_err:
+       if (!signal_pending(current))
+               atomic_set(&conn->transport_failed, 1);
+       iscsit_take_action_for_connection_exit(conn);
+-      goto restart;
+-out:
+       return 0;
+ }
+ 
+@@ -4148,7 +4120,24 @@ int iscsit_close_connection(
+       if (conn->conn_transport->transport_type == ISCSI_TCP)
+               complete(&conn->conn_logout_comp);
+ 
+-      iscsi_release_thread_set(conn);
++      if (!strcmp(current->comm, ISCSI_RX_THREAD_NAME)) {
++              if (conn->tx_thread &&
++                  cmpxchg(&conn->tx_thread_active, true, false)) {
++                      send_sig(SIGINT, conn->tx_thread, 1);
++                      kthread_stop(conn->tx_thread);
++              }
++      } else if (!strcmp(current->comm, ISCSI_TX_THREAD_NAME)) {
++              if (conn->rx_thread &&
++                  cmpxchg(&conn->rx_thread_active, true, false)) {
++                      send_sig(SIGINT, conn->rx_thread, 1);
++                      kthread_stop(conn->rx_thread);
++              }
++      }
++
++      spin_lock(&iscsit_global->ts_bitmap_lock);
++      bitmap_release_region(iscsit_global->ts_bitmap, conn->bitmap_id,
++                            get_order(1));
++      spin_unlock(&iscsit_global->ts_bitmap_lock);
+ 
+       iscsit_stop_timers_for_cmds(conn);
+       iscsit_stop_nopin_response_timer(conn);
+@@ -4427,15 +4416,13 @@ static void iscsit_logout_post_handler_closesession(
+       struct iscsi_conn *conn)
+ {
+       struct iscsi_session *sess = conn->sess;
+-
+-      iscsi_set_thread_clear(conn, ISCSI_CLEAR_TX_THREAD);
+-      iscsi_set_thread_set_signal(conn, ISCSI_SIGNAL_TX_THREAD);
++      int sleep = cmpxchg(&conn->tx_thread_active, true, false);
+ 
+       atomic_set(&conn->conn_logout_remove, 0);
+       complete(&conn->conn_logout_comp);
+ 
+       iscsit_dec_conn_usage_count(conn);
+-      iscsit_stop_session(sess, 1, 1);
++      iscsit_stop_session(sess, sleep, sleep);
+       iscsit_dec_session_usage_count(sess);
+       target_put_session(sess->se_sess);
+ }
+@@ -4443,13 +4430,12 @@ static void iscsit_logout_post_handler_closesession(
+ static void iscsit_logout_post_handler_samecid(
+       struct iscsi_conn *conn)
+ {
+-      iscsi_set_thread_clear(conn, ISCSI_CLEAR_TX_THREAD);
+-      iscsi_set_thread_set_signal(conn, ISCSI_SIGNAL_TX_THREAD);
++      int sleep = cmpxchg(&conn->tx_thread_active, true, false);
+ 
+       atomic_set(&conn->conn_logout_remove, 0);
+       complete(&conn->conn_logout_comp);
+ 
+-      iscsit_cause_connection_reinstatement(conn, 1);
++      iscsit_cause_connection_reinstatement(conn, sleep);
+       iscsit_dec_conn_usage_count(conn);
+ }
+ 
+diff --git a/drivers/target/iscsi/iscsi_target_core.h 
b/drivers/target/iscsi/iscsi_target_core.h
+index e117870eb445..815bf5b1a4ae 100644
+--- a/drivers/target/iscsi/iscsi_target_core.h
++++ b/drivers/target/iscsi/iscsi_target_core.h
+@@ -586,6 +586,11 @@ struct iscsi_conn {
+       struct iscsi_session    *sess;
+       /* Pointer to thread_set in use for this conn's threads */
+       struct iscsi_thread_set *thread_set;
++      int                     bitmap_id;
++      int                     rx_thread_active;
++      struct task_struct      *rx_thread;
++      int                     tx_thread_active;
++      struct task_struct      *tx_thread;
+       /* list_head for session connection list */
+       struct list_head        conn_list;
+ } ____cacheline_aligned;
+@@ -862,10 +867,12 @@ struct iscsit_global {
+       /* Unique identifier used for the authentication daemon */
+       u32                     auth_id;
+       u32                     inactive_ts;
++#define ISCSIT_BITMAP_BITS    262144
+       /* Thread Set bitmap count */
+       int                     ts_bitmap_count;
+       /* Thread Set bitmap pointer */
+       unsigned long           *ts_bitmap;
++      spinlock_t              ts_bitmap_lock;
+       /* Used for iSCSI discovery session authentication */
+       struct iscsi_node_acl   discovery_acl;
+       struct iscsi_portal_group       *discovery_tpg;
+diff --git a/drivers/target/iscsi/iscsi_target_erl0.c 
b/drivers/target/iscsi/iscsi_target_erl0.c
+index 08bd87833321..fab67eea54c0 100644
+--- a/drivers/target/iscsi/iscsi_target_erl0.c
++++ b/drivers/target/iscsi/iscsi_target_erl0.c
+@@ -866,7 +866,10 @@ void iscsit_connection_reinstatement_rcfr(struct 
iscsi_conn *conn)
+       }
+       spin_unlock_bh(&conn->state_lock);
+ 
+-      iscsi_thread_set_force_reinstatement(conn);
++      if (conn->tx_thread && conn->tx_thread_active)
++              send_sig(SIGINT, conn->tx_thread, 1);
++      if (conn->rx_thread && conn->rx_thread_active)
++              send_sig(SIGINT, conn->rx_thread, 1);
+ 
+ sleep:
+       wait_for_completion(&conn->conn_wait_rcfr_comp);
+@@ -891,10 +894,10 @@ void iscsit_cause_connection_reinstatement(struct 
iscsi_conn *conn, int sleep)
+               return;
+       }
+ 
+-      if (iscsi_thread_set_force_reinstatement(conn) < 0) {
+-              spin_unlock_bh(&conn->state_lock);
+-              return;
+-      }
++      if (conn->tx_thread && conn->tx_thread_active)
++              send_sig(SIGINT, conn->tx_thread, 1);
++      if (conn->rx_thread && conn->rx_thread_active)
++              send_sig(SIGINT, conn->rx_thread, 1);
+ 
+       atomic_set(&conn->connection_reinstatement, 1);
+       if (!sleep) {
+diff --git a/drivers/target/iscsi/iscsi_target_login.c 
b/drivers/target/iscsi/iscsi_target_login.c
+index 0493e8b1ba8f..797b2e2acc35 100644
+--- a/drivers/target/iscsi/iscsi_target_login.c
++++ b/drivers/target/iscsi/iscsi_target_login.c
+@@ -683,7 +683,52 @@ static void iscsi_post_login_start_timers(struct 
iscsi_conn *conn)
+               iscsit_start_nopin_timer(conn);
+ }
+ 
+-static int iscsi_post_login_handler(
++int iscsit_start_kthreads(struct iscsi_conn *conn)
++{
++      int ret = 0;
++
++      spin_lock(&iscsit_global->ts_bitmap_lock);
++      conn->bitmap_id = bitmap_find_free_region(iscsit_global->ts_bitmap,
++                                      ISCSIT_BITMAP_BITS, get_order(1));
++      spin_unlock(&iscsit_global->ts_bitmap_lock);
++
++      if (conn->bitmap_id < 0) {
++              pr_err("bitmap_find_free_region() failed for"
++                     " iscsit_start_kthreads()\n");
++              return -ENOMEM;
++      }
++
++      conn->tx_thread = kthread_run(iscsi_target_tx_thread, conn,
++                                    "%s", ISCSI_TX_THREAD_NAME);
++      if (IS_ERR(conn->tx_thread)) {
++              pr_err("Unable to start iscsi_target_tx_thread\n");
++              ret = PTR_ERR(conn->tx_thread);
++              goto out_bitmap;
++      }
++      conn->tx_thread_active = true;
++
++      conn->rx_thread = kthread_run(iscsi_target_rx_thread, conn,
++                                    "%s", ISCSI_RX_THREAD_NAME);
++      if (IS_ERR(conn->rx_thread)) {
++              pr_err("Unable to start iscsi_target_rx_thread\n");
++              ret = PTR_ERR(conn->rx_thread);
++              goto out_tx;
++      }
++      conn->rx_thread_active = true;
++
++      return 0;
++out_tx:
++      kthread_stop(conn->tx_thread);
++      conn->tx_thread_active = false;
++out_bitmap:
++      spin_lock(&iscsit_global->ts_bitmap_lock);
++      bitmap_release_region(iscsit_global->ts_bitmap, conn->bitmap_id,
++                            get_order(1));
++      spin_unlock(&iscsit_global->ts_bitmap_lock);
++      return ret;
++}
++
++int iscsi_post_login_handler(
+       struct iscsi_np *np,
+       struct iscsi_conn *conn,
+       u8 zero_tsih)
+@@ -693,7 +738,7 @@ static int iscsi_post_login_handler(
+       struct se_session *se_sess = sess->se_sess;
+       struct iscsi_portal_group *tpg = ISCSI_TPG_S(sess);
+       struct se_portal_group *se_tpg = &tpg->tpg_se_tpg;
+-      struct iscsi_thread_set *ts;
++      int rc;
+ 
+       iscsit_inc_conn_usage_count(conn);
+ 
+@@ -708,7 +753,6 @@ static int iscsi_post_login_handler(
+       /*
+        * SCSI Initiator -> SCSI Target Port Mapping
+        */
+-      ts = iscsi_get_thread_set();
+       if (!zero_tsih) {
+               iscsi_set_session_parameters(sess->sess_ops,
+                               conn->param_list, 0);
+@@ -735,9 +779,11 @@ static int iscsi_post_login_handler(
+                       sess->sess_ops->InitiatorName);
+               spin_unlock_bh(&sess->conn_lock);
+ 
+-              iscsi_post_login_start_timers(conn);
++              rc = iscsit_start_kthreads(conn);
++              if (rc)
++                      return rc;
+ 
+-              iscsi_activate_thread_set(conn, ts);
++              iscsi_post_login_start_timers(conn);
+               /*
+                * Determine CPU mask to ensure connection's RX and TX kthreads
+                * are scheduled on the same CPU.
+@@ -794,8 +840,11 @@ static int iscsi_post_login_handler(
+               " iSCSI Target Portal Group: %hu\n", tpg->nsessions, tpg->tpgt);
+       spin_unlock_bh(&se_tpg->session_lock);
+ 
++      rc = iscsit_start_kthreads(conn);
++      if (rc)
++              return rc;
++
+       iscsi_post_login_start_timers(conn);
+-      iscsi_activate_thread_set(conn, ts);
+       /*
+        * Determine CPU mask to ensure connection's RX and TX kthreads
+        * are scheduled on the same CPU.
+diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
+index 78ddfb43750a..62e532fb82ad 100644
+--- a/drivers/usb/core/devio.c
++++ b/drivers/usb/core/devio.c
+@@ -513,7 +513,7 @@ static void async_completed(struct urb *urb)
+       snoop(&urb->dev->dev, "urb complete\n");
+       snoop_urb(urb->dev, as->userurb, urb->pipe, urb->actual_length,
+                       as->status, COMPLETE, NULL, 0);
+-      if ((urb->transfer_flags & URB_DIR_MASK) == USB_DIR_IN)
++      if ((urb->transfer_flags & URB_DIR_MASK) == URB_DIR_IN)
+               snoop_urb_data(urb, urb->actual_length);
+ 
+       if (as->status < 0 && as->bulk_addr && as->status != -ECONNRESET &&
+@@ -1593,7 +1593,7 @@ static struct async *reap_as(struct dev_state *ps)
+       for (;;) {
+               __set_current_state(TASK_INTERRUPTIBLE);
+               as = async_getcompleted(ps);
+-              if (as)
++              if (as || !connected(ps))
+                       break;
+               if (signal_pending(current))
+                       break;
+@@ -1616,7 +1616,7 @@ static int proc_reapurb(struct dev_state *ps, void 
__user *arg)
+       }
+       if (signal_pending(current))
+               return -EINTR;
+-      return -EIO;
++      return -ENODEV;
+ }
+ 
+ static int proc_reapurbnonblock(struct dev_state *ps, void __user *arg)
+@@ -1625,10 +1625,11 @@ static int proc_reapurbnonblock(struct dev_state *ps, 
void __user *arg)
+       struct async *as;
+ 
+       as = async_getcompleted(ps);
+-      retval = -EAGAIN;
+       if (as) {
+               retval = processcompl(as, (void __user * __user *)arg);
+               free_async(as);
++      } else {
++              retval = (connected(ps) ? -EAGAIN : -ENODEV);
+       }
+       return retval;
+ }
+@@ -1758,7 +1759,7 @@ static int proc_reapurb_compat(struct dev_state *ps, 
void __user *arg)
+       }
+       if (signal_pending(current))
+               return -EINTR;
+-      return -EIO;
++      return -ENODEV;
+ }
+ 
+ static int proc_reapurbnonblock_compat(struct dev_state *ps, void __user *arg)
+@@ -1766,11 +1767,12 @@ static int proc_reapurbnonblock_compat(struct 
dev_state *ps, void __user *arg)
+       int retval;
+       struct async *as;
+ 
+-      retval = -EAGAIN;
+       as = async_getcompleted(ps);
+       if (as) {
+               retval = processcompl_compat(as, (void __user * __user *)arg);
+               free_async(as);
++      } else {
++              retval = (connected(ps) ? -EAGAIN : -ENODEV);
+       }
+       return retval;
+ }
+@@ -1941,7 +1943,8 @@ static int proc_get_capabilities(struct dev_state *ps, 
void __user *arg)
+ {
+       __u32 caps;
+ 
+-      caps = USBDEVFS_CAP_ZERO_PACKET | USBDEVFS_CAP_NO_PACKET_SIZE_LIM;
++      caps = USBDEVFS_CAP_ZERO_PACKET | USBDEVFS_CAP_NO_PACKET_SIZE_LIM |
++                      USBDEVFS_CAP_REAP_AFTER_DISCONNECT;
+       if (!ps->dev->bus->no_stop_on_short)
+               caps |= USBDEVFS_CAP_BULK_CONTINUATION;
+       if (ps->dev->bus->sg_tablesize)
+@@ -2002,6 +2005,32 @@ static long usbdev_do_ioctl(struct file *file, unsigned 
int cmd,
+               return -EPERM;
+ 
+       usb_lock_device(dev);
++
++      /* Reap operations are allowed even after disconnection */
++      switch (cmd) {
++      case USBDEVFS_REAPURB:
++              snoop(&dev->dev, "%s: REAPURB\n", __func__);
++              ret = proc_reapurb(ps, p);
++              goto done;
++
++      case USBDEVFS_REAPURBNDELAY:
++              snoop(&dev->dev, "%s: REAPURBNDELAY\n", __func__);
++              ret = proc_reapurbnonblock(ps, p);
++              goto done;
++
++#ifdef CONFIG_COMPAT
++      case USBDEVFS_REAPURB32:
++              snoop(&dev->dev, "%s: REAPURB32\n", __func__);
++              ret = proc_reapurb_compat(ps, p);
++              goto done;
++
++      case USBDEVFS_REAPURBNDELAY32:
++              snoop(&dev->dev, "%s: REAPURBNDELAY32\n", __func__);
++              ret = proc_reapurbnonblock_compat(ps, p);
++              goto done;
++#endif
++      }
++
+       if (!connected(ps)) {
+               usb_unlock_device(dev);
+               return -ENODEV;
+@@ -2095,16 +2124,6 @@ static long usbdev_do_ioctl(struct file *file, unsigned 
int cmd,
+                       inode->i_mtime = CURRENT_TIME;
+               break;
+ 
+-      case USBDEVFS_REAPURB32:
+-              snoop(&dev->dev, "%s: REAPURB32\n", __func__);
+-              ret = proc_reapurb_compat(ps, p);
+-              break;
+-
+-      case USBDEVFS_REAPURBNDELAY32:
+-              snoop(&dev->dev, "%s: REAPURBNDELAY32\n", __func__);
+-              ret = proc_reapurbnonblock_compat(ps, p);
+-              break;
+-
+       case USBDEVFS_IOCTL32:
+               snoop(&dev->dev, "%s: IOCTL32\n", __func__);
+               ret = proc_ioctl_compat(ps, ptr_to_compat(p));
+@@ -2116,16 +2135,6 @@ static long usbdev_do_ioctl(struct file *file, unsigned 
int cmd,
+               ret = proc_unlinkurb(ps, p);
+               break;
+ 
+-      case USBDEVFS_REAPURB:
+-              snoop(&dev->dev, "%s: REAPURB\n", __func__);
+-              ret = proc_reapurb(ps, p);
+-              break;
+-
+-      case USBDEVFS_REAPURBNDELAY:
+-              snoop(&dev->dev, "%s: REAPURBNDELAY\n", __func__);
+-              ret = proc_reapurbnonblock(ps, p);
+-              break;
+-
+       case USBDEVFS_DISCSIGNAL:
+               snoop(&dev->dev, "%s: DISCSIGNAL\n", __func__);
+               ret = proc_disconnectsignal(ps, p);
+@@ -2162,6 +2171,8 @@ static long usbdev_do_ioctl(struct file *file, unsigned 
int cmd,
+               ret = proc_disconnect_claim(ps, p);
+               break;
+       }
++
++ done:
+       usb_unlock_device(dev);
+       if (ret >= 0)
+               inode->i_atime = CURRENT_TIME;
+diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
+index 6cd418f6ac07..57d7ec6c8090 100644
+--- a/drivers/usb/dwc3/ep0.c
++++ b/drivers/usb/dwc3/ep0.c
+@@ -718,6 +718,10 @@ static int dwc3_ep0_std_request(struct dwc3 *dwc, struct 
usb_ctrlrequest *ctrl)
+               dev_vdbg(dwc->dev, "USB_REQ_SET_ISOCH_DELAY\n");
+               ret = dwc3_ep0_set_isoch_delay(dwc, ctrl);
+               break;
++      case USB_REQ_SET_INTERFACE:
++              dev_vdbg(dwc->dev, "USB_REQ_SET_INTERFACE\n");
++              dwc->start_config_issued = false;
++              /* Fall through */
+       default:
+               dev_vdbg(dwc->dev, "Forwarding to gadget driver\n");
+               ret = dwc3_ep0_delegate_req(dwc, ctrl);
+diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
+index 87f8fc63b3e1..6e70c88b25fb 100644
+--- a/drivers/usb/dwc3/gadget.c
++++ b/drivers/usb/dwc3/gadget.c
+@@ -319,6 +319,8 @@ int dwc3_send_gadget_generic_command(struct dwc3 *dwc, int 
cmd, u32 param)
+               if (!(reg & DWC3_DGCMD_CMDACT)) {
+                       dev_vdbg(dwc->dev, "Command Complete --> %d\n",
+                                       DWC3_DGCMD_STATUS(reg));
++                      if (DWC3_DGCMD_STATUS(reg))
++                              return -EINVAL;
+                       return 0;
+               }
+ 
+@@ -355,6 +357,8 @@ int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep,
+               if (!(reg & DWC3_DEPCMD_CMDACT)) {
+                       dev_vdbg(dwc->dev, "Command Complete --> %d\n",
+                                       DWC3_DEPCMD_STATUS(reg));
++                      if (DWC3_DEPCMD_STATUS(reg))
++                              return -EINVAL;
+                       return 0;
+               }
+ 
+diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
+index 677f032482f7..31bed5f7d0eb 100644
+--- a/drivers/usb/host/xhci-mem.c
++++ b/drivers/usb/host/xhci-mem.c
+@@ -1400,10 +1400,10 @@ int xhci_endpoint_init(struct xhci_hcd *xhci,
+               /* Attempt to use the ring cache */
+               if (virt_dev->num_rings_cached == 0)
+                       return -ENOMEM;
++              virt_dev->num_rings_cached--;
+               virt_dev->eps[ep_index].new_ring =
+                       virt_dev->ring_cache[virt_dev->num_rings_cached];
+               virt_dev->ring_cache[virt_dev->num_rings_cached] = NULL;
+-              virt_dev->num_rings_cached--;
+               xhci_reinit_cached_ring(xhci, virt_dev->eps[ep_index].new_ring,
+                                       1, type);
+       }
+diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
+index ab1c5e8ac27f..dd84416a23cd 100644
+--- a/drivers/usb/serial/cp210x.c
++++ b/drivers/usb/serial/cp210x.c
+@@ -187,6 +187,7 @@ static const struct usb_device_id id_table[] = {
+       { USB_DEVICE(0x1FB9, 0x0602) }, /* Lake Shore Model 648 Magnet Power 
Supply */
+       { USB_DEVICE(0x1FB9, 0x0700) }, /* Lake Shore Model 737 VSM Controller 
*/
+       { USB_DEVICE(0x1FB9, 0x0701) }, /* Lake Shore Model 776 Hall Matrix */
++      { USB_DEVICE(0x2626, 0xEA60) }, /* Aruba Networks 7xxx USB Serial 
Console */
+       { USB_DEVICE(0x3195, 0xF190) }, /* Link Instruments MSO-19 */
+       { USB_DEVICE(0x3195, 0xF280) }, /* Link Instruments MSO-28 */
+       { USB_DEVICE(0x3195, 0xF281) }, /* Link Instruments MSO-28 */
+diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
+index 8b3484134ab0..096438e4fb0c 100644
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -1755,6 +1755,7 @@ static const struct usb_device_id option_ids[] = {
+       { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x00, 0x00) },
+       { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* 
D-Link DWM-152/C1 */
+       { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* 
D-Link DWM-156/C1 */
++      { USB_DEVICE_INTERFACE_CLASS(0x2020, 0x4000, 0xff) },                /* 
OLICARD300 - MT6225 */
+       { USB_DEVICE(INOVIA_VENDOR_ID, INOVIA_SEW858) },
+       { USB_DEVICE(VIATELECOM_VENDOR_ID, VIATELECOM_PRODUCT_CDS7) },
+       { } /* Terminating entry */
+diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c
+index af88ffd1068f..2b7e073f5e36 100644
+--- a/drivers/watchdog/omap_wdt.c
++++ b/drivers/watchdog/omap_wdt.c
+@@ -134,6 +134,13 @@ static int omap_wdt_start(struct watchdog_device *wdog)
+ 
+       pm_runtime_get_sync(wdev->dev);
+ 
++      /*
++       * Make sure the watchdog is disabled. This is unfortunately required
++       * because writing to various registers with the watchdog running has no
++       * effect.
++       */
++      omap_wdt_disable(wdev);
++
+       /* initialize prescaler */
+       while (__raw_readl(base + OMAP_WATCHDOG_WPS) & 0x01)
+               cpu_relax();
+diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
+index d86edc8d3fd0..4c7d309e4aa6 100644
+--- a/fs/9p/vfs_inode.c
++++ b/fs/9p/vfs_inode.c
+@@ -537,8 +537,7 @@ static struct inode *v9fs_qid_iget(struct super_block *sb,
+       unlock_new_inode(inode);
+       return inode;
+ error:
+-      unlock_new_inode(inode);
+-      iput(inode);
++      iget_failed(inode);
+       return ERR_PTR(retval);
+ 
+ }
+diff --git a/fs/9p/vfs_inode_dotl.c b/fs/9p/vfs_inode_dotl.c
+index 53687bbf2296..65b21a24841e 100644
+--- a/fs/9p/vfs_inode_dotl.c
++++ b/fs/9p/vfs_inode_dotl.c
+@@ -151,8 +151,7 @@ static struct inode *v9fs_qid_iget_dotl(struct super_block 
*sb,
+       unlock_new_inode(inode);
+       return inode;
+ error:
+-      unlock_new_inode(inode);
+-      iput(inode);
++      iget_failed(inode);
+       return ERR_PTR(retval);
+ 
+ }
+diff --git a/fs/btrfs/inode-map.c b/fs/btrfs/inode-map.c
+index 2c66ddbbe670..0389e90eec33 100644
+--- a/fs/btrfs/inode-map.c
++++ b/fs/btrfs/inode-map.c
+@@ -283,7 +283,7 @@ void btrfs_unpin_free_ino(struct btrfs_root *root)
+               __btrfs_add_free_space(ctl, info->offset, count);
+ free:
+               rb_erase(&info->offset_index, rbroot);
+-              kfree(info);
++              kmem_cache_free(btrfs_free_space_cachep, info);
+       }
+ }
+ 
+diff --git a/fs/ext4/indirect.c b/fs/ext4/indirect.c
+index 589061469687..b07a221c3138 100644
+--- a/fs/ext4/indirect.c
++++ b/fs/ext4/indirect.c
+@@ -577,7 +577,7 @@ int ext4_ind_map_blocks(handle_t *handle, struct inode 
*inode,
+                                      EXT4_FEATURE_RO_COMPAT_BIGALLOC)) {
+               EXT4_ERROR_INODE(inode, "Can't allocate blocks for "
+                                "non-extent mapped inodes with bigalloc");
+-              return -ENOSPC;
++              return -EUCLEAN;
+       }
+ 
+       goal = ext4_find_goal(inode, map->m_lblk, partial);
+diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
+index 8a277505a3be..10b71e4029a0 100644
+--- a/fs/ext4/inode.c
++++ b/fs/ext4/inode.c
+@@ -1412,7 +1412,7 @@ static void ext4_da_release_space(struct inode *inode, 
int to_free)
+ static void ext4_da_page_release_reservation(struct page *page,
+                                            unsigned long offset)
+ {
+-      int to_release = 0;
++      int to_release = 0, contiguous_blks = 0;
+       struct buffer_head *head, *bh;
+       unsigned int curr_off = 0;
+       struct inode *inode = page->mapping->host;
+@@ -1427,14 +1427,23 @@ static void ext4_da_page_release_reservation(struct 
page *page,
+ 
+               if ((offset <= curr_off) && (buffer_delay(bh))) {
+                       to_release++;
++                      contiguous_blks++;
+                       clear_buffer_delay(bh);
++              } else if (contiguous_blks) {
++                      lblk = page->index <<
++                             (PAGE_CACHE_SHIFT - inode->i_blkbits);
++                      lblk += (curr_off >> inode->i_blkbits) -
++                              contiguous_blks;
++                      ext4_es_remove_extent(inode, lblk, contiguous_blks);
++                      contiguous_blks = 0;
+               }
+               curr_off = next_off;
+       } while ((bh = bh->b_this_page) != head);
+ 
+-      if (to_release) {
++      if (contiguous_blks) {
+               lblk = page->index << (PAGE_CACHE_SHIFT - inode->i_blkbits);
+-              ext4_es_remove_extent(inode, lblk, to_release);
++              lblk += (curr_off >> inode->i_blkbits) - contiguous_blks;
++              ext4_es_remove_extent(inode, lblk, contiguous_blks);
+       }
+ 
+       /* If we have released all the blocks belonging to a cluster, then we
+@@ -2099,19 +2108,32 @@ static int __ext4_journalled_writepage(struct page 
*page,
+               ext4_walk_page_buffers(handle, page_bufs, 0, len,
+                                      NULL, bget_one);
+       }
+-      /* As soon as we unlock the page, it can go away, but we have
+-       * references to buffers so we are safe */
++      /*
++       * We need to release the page lock before we start the
++       * journal, so grab a reference so the page won't disappear
++       * out from under us.
++       */
++      get_page(page);
+       unlock_page(page);
+ 
+       handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE,
+                                   ext4_writepage_trans_blocks(inode));
+       if (IS_ERR(handle)) {
+               ret = PTR_ERR(handle);
+-              goto out;
++              put_page(page);
++              goto out_no_pagelock;
+       }
+-
+       BUG_ON(!ext4_handle_valid(handle));
+ 
++      lock_page(page);
++      put_page(page);
++      if (page->mapping != mapping) {
++              /* The page got truncated from under us */
++              ext4_journal_stop(handle);
++              ret = 0;
++              goto out;
++      }
++
+       if (inline_data) {
+               ret = ext4_journal_get_write_access(handle, inode_bh);
+ 
+@@ -2136,6 +2158,8 @@ static int __ext4_journalled_writepage(struct page *page,
+                                      NULL, bput_one);
+       ext4_set_inode_state(inode, EXT4_STATE_JDATA);
+ out:
++      unlock_page(page);
++out_no_pagelock:
+       brelse(inode_bh);
+       return ret;
+ }
+diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
+index df5050f9080b..61ee01603940 100644
+--- a/fs/ext4/mballoc.c
++++ b/fs/ext4/mballoc.c
+@@ -4764,18 +4764,12 @@ do_more:
+               /*
+                * blocks being freed are metadata. these blocks shouldn't
+                * be used until this transaction is committed
++               *
++               * We use __GFP_NOFAIL because ext4_free_blocks() is not allowed
++               * to fail.
+                */
+-      retry:
+-              new_entry = kmem_cache_alloc(ext4_free_data_cachep, GFP_NOFS);
+-              if (!new_entry) {
+-                      /*
+-                       * We use a retry loop because
+-                       * ext4_free_blocks() is not allowed to fail.
+-                       */
+-                      cond_resched();
+-                      congestion_wait(BLK_RW_ASYNC, HZ/50);
+-                      goto retry;
+-              }
++              new_entry = kmem_cache_alloc(ext4_free_data_cachep,
++                              GFP_NOFS|__GFP_NOFAIL);
+               new_entry->efd_start_cluster = bit;
+               new_entry->efd_group = block_group;
+               new_entry->efd_count = count_clusters;
+diff --git a/fs/ext4/migrate.c b/fs/ext4/migrate.c
+index 49e8bdff9163..d19efab66cb6 100644
+--- a/fs/ext4/migrate.c
++++ b/fs/ext4/migrate.c
+@@ -616,6 +616,7 @@ int ext4_ind_migrate(struct inode *inode)
+       struct ext4_inode_info          *ei = EXT4_I(inode);
+       struct ext4_extent              *ex;
+       unsigned int                    i, len;
++      ext4_lblk_t                     start, end;
+       ext4_fsblk_t                    blk;
+       handle_t                        *handle;
+       int                             ret;
+@@ -629,6 +630,14 @@ int ext4_ind_migrate(struct inode *inode)
+                                      EXT4_FEATURE_RO_COMPAT_BIGALLOC))
+               return -EOPNOTSUPP;
+ 
++      /*
++       * In order to get correct extent info, force all delayed allocation
++       * blocks to be allocated, otherwise delayed allocation blocks may not
++       * be reflected and bypass the checks on extent header.
++       */
++      if (test_opt(inode->i_sb, DELALLOC))
++              ext4_alloc_da_blocks(inode);
++
+       handle = ext4_journal_start(inode, EXT4_HT_MIGRATE, 1);
+       if (IS_ERR(handle))
+               return PTR_ERR(handle);
+@@ -646,11 +655,13 @@ int ext4_ind_migrate(struct inode *inode)
+               goto errout;
+       }
+       if (eh->eh_entries == 0)
+-              blk = len = 0;
++              blk = len = start = end = 0;
+       else {
+               len = le16_to_cpu(ex->ee_len);
+               blk = ext4_ext_pblock(ex);
+-              if (len > EXT4_NDIR_BLOCKS) {
++              start = le32_to_cpu(ex->ee_block);
++              end = start + len - 1;
++              if (end >= EXT4_NDIR_BLOCKS) {
+                       ret = -EOPNOTSUPP;
+                       goto errout;
+               }
+@@ -658,7 +669,7 @@ int ext4_ind_migrate(struct inode *inode)
+ 
+       ext4_clear_inode_flag(inode, EXT4_INODE_EXTENTS);
+       memset(ei->i_data, 0, sizeof(ei->i_data));
+-      for (i=0; i < len; i++)
++      for (i = start; i <= end; i++)
+               ei->i_data[i] = cpu_to_le32(blk++);
+       ext4_mark_inode_dirty(handle, inode);
+ errout:
+diff --git a/fs/ext4/super.c b/fs/ext4/super.c
+index 21a0b43a7d31..af1eaed96a91 100644
+--- a/fs/ext4/super.c
++++ b/fs/ext4/super.c
+@@ -803,6 +803,7 @@ static void ext4_put_super(struct super_block *sb)
+               dump_orphan_list(sb, sbi);
+       J_ASSERT(list_empty(&sbi->s_orphan));
+ 
++      sync_blockdev(sb->s_bdev);
+       invalidate_bdev(sb->s_bdev);
+       if (sbi->journal_bdev && sbi->journal_bdev != sb->s_bdev) {
+               /*
+diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
+index 39a986e1da9e..4d371f3b9a45 100644
+--- a/fs/fuse/inode.c
++++ b/fs/fuse/inode.c
+@@ -1028,6 +1028,7 @@ static int fuse_fill_super(struct super_block *sb, void 
*data, int silent)
+               goto err_fput;
+ 
+       fuse_conn_init(fc);
++      fc->release = fuse_free_conn;
+ 
+       fc->dev = sb->s_dev;
+       fc->sb = sb;
+@@ -1042,7 +1043,6 @@ static int fuse_fill_super(struct super_block *sb, void 
*data, int silent)
+               fc->dont_mask = 1;
+       sb->s_flags |= MS_POSIXACL;
+ 
+-      fc->release = fuse_free_conn;
+       fc->flags = d.flags;
+       fc->user_id = d.user_id;
+       fc->group_id = d.group_id;
+diff --git a/fs/hpfs/super.c b/fs/hpfs/super.c
+index 962e90c37aec..2c1ce192af8b 100644
+--- a/fs/hpfs/super.c
++++ b/fs/hpfs/super.c
+@@ -52,17 +52,20 @@ static void unmark_dirty(struct super_block *s)
+ }
+ 
+ /* Filesystem error... */
+-static char err_buf[1024];
+-
+ void hpfs_error(struct super_block *s, const char *fmt, ...)
+ {
++      struct va_format vaf;
+       va_list args;
+ 
+       va_start(args, fmt);
+-      vsnprintf(err_buf, sizeof(err_buf), fmt, args);
++
++      vaf.fmt = fmt;
++      vaf.va = &args;
++
++      pr_err("filesystem error: %pV", &vaf);
++
+       va_end(args);
+ 
+-      printk("HPFS: filesystem error: %s", err_buf);
+       if (!hpfs_sb(s)->sb_was_error) {
+               if (hpfs_sb(s)->sb_err == 2) {
+                       printk("; crashing the system because you wanted it\n");
+diff --git a/fs/jbd2/checkpoint.c b/fs/jbd2/checkpoint.c
+index c78841ee81cf..6bb52859cb86 100644
+--- a/fs/jbd2/checkpoint.c
++++ b/fs/jbd2/checkpoint.c
+@@ -440,7 +440,7 @@ int jbd2_cleanup_journal_tail(journal_t *journal)
+       unsigned long   blocknr;
+ 
+       if (is_journal_aborted(journal))
+-              return 1;
++              return -EIO;
+ 
+       if (!jbd2_journal_get_log_tail(journal, &first_tid, &blocknr))
+               return 1;
+@@ -455,10 +455,9 @@ int jbd2_cleanup_journal_tail(journal_t *journal)
+        * jbd2_cleanup_journal_tail() doesn't get called all that often.
+        */
+       if (journal->j_flags & JBD2_BARRIER)
+-              blkdev_issue_flush(journal->j_fs_dev, GFP_KERNEL, NULL);
++              blkdev_issue_flush(journal->j_fs_dev, GFP_NOFS, NULL);
+ 
+-      __jbd2_update_log_tail(journal, first_tid, blocknr);
+-      return 0;
++      return __jbd2_update_log_tail(journal, first_tid, blocknr);
+ }
+ 
+ 
+diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
+index aaa1a3f33b0e..3e7ef8874ffb 100644
+--- a/fs/jbd2/journal.c
++++ b/fs/jbd2/journal.c
+@@ -869,9 +869,10 @@ int jbd2_journal_get_log_tail(journal_t *journal, tid_t 
*tid,
+  *
+  * Requires j_checkpoint_mutex
+  */
+-void __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long 
block)
++int __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block)
+ {
+       unsigned long freed;
++      int ret;
+ 
+       BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex));
+ 
+@@ -881,7 +882,10 @@ void __jbd2_update_log_tail(journal_t *journal, tid_t 
tid, unsigned long block)
+        * space and if we lose sb update during power failure we'd replay
+        * old transaction with possibly newly overwritten data.
+        */
+-      jbd2_journal_update_sb_log_tail(journal, tid, block, WRITE_FUA);
++      ret = jbd2_journal_update_sb_log_tail(journal, tid, block, WRITE_FUA);
++      if (ret)
++              goto out;
++
+       write_lock(&journal->j_state_lock);
+       freed = block - journal->j_tail;
+       if (block < journal->j_tail)
+@@ -897,6 +901,9 @@ void __jbd2_update_log_tail(journal_t *journal, tid_t tid, 
unsigned long block)
+       journal->j_tail_sequence = tid;
+       journal->j_tail = block;
+       write_unlock(&journal->j_state_lock);
++
++out:
++      return ret;
+ }
+ 
+ /*
+@@ -1315,7 +1322,7 @@ static int journal_reset(journal_t *journal)
+       return jbd2_journal_start_thread(journal);
+ }
+ 
+-static void jbd2_write_superblock(journal_t *journal, int write_op)
++static int jbd2_write_superblock(journal_t *journal, int write_op)
+ {
+       struct buffer_head *bh = journal->j_sb_buffer;
+       journal_superblock_t *sb = journal->j_superblock;
+@@ -1354,7 +1361,10 @@ static void jbd2_write_superblock(journal_t *journal, 
int write_op)
+               printk(KERN_ERR "JBD2: Error %d detected when updating "
+                      "journal superblock for %s.\n", ret,
+                      journal->j_devname);
++              jbd2_journal_abort(journal, ret);
+       }
++
++      return ret;
+ }
+ 
+ /**
+@@ -1367,10 +1377,11 @@ static void jbd2_write_superblock(journal_t *journal, 
int write_op)
+  * Update a journal's superblock information about log tail and write it to
+  * disk, waiting for the IO to complete.
+  */
+-void jbd2_journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid,
++int jbd2_journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid,
+                                    unsigned long tail_block, int write_op)
+ {
+       journal_superblock_t *sb = journal->j_superblock;
++      int ret;
+ 
+       BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex));
+       jbd_debug(1, "JBD2: updating superblock (start %lu, seq %u)\n",
+@@ -1379,13 +1390,18 @@ void jbd2_journal_update_sb_log_tail(journal_t 
*journal, tid_t tail_tid,
+       sb->s_sequence = cpu_to_be32(tail_tid);
+       sb->s_start    = cpu_to_be32(tail_block);
+ 
+-      jbd2_write_superblock(journal, write_op);
++      ret = jbd2_write_superblock(journal, write_op);
++      if (ret)
++              goto out;
+ 
+       /* Log is no longer empty */
+       write_lock(&journal->j_state_lock);
+       WARN_ON(!sb->s_sequence);
+       journal->j_flags &= ~JBD2_FLUSHED;
+       write_unlock(&journal->j_state_lock);
++
++out:
++      return ret;
+ }
+ 
+ /**
+@@ -1922,7 +1938,14 @@ int jbd2_journal_flush(journal_t *journal)
+               return -EIO;
+ 
+       mutex_lock(&journal->j_checkpoint_mutex);
+-      jbd2_cleanup_journal_tail(journal);
++      if (!err) {
++              err = jbd2_cleanup_journal_tail(journal);
++              if (err < 0) {
++                      mutex_unlock(&journal->j_checkpoint_mutex);
++                      goto out;
++              }
++              err = 0;
++      }
+ 
+       /* Finally, mark the journal as really needing no recovery.
+        * This sets s_start==0 in the underlying superblock, which is
+@@ -1938,7 +1961,8 @@ int jbd2_journal_flush(journal_t *journal)
+       J_ASSERT(journal->j_head == journal->j_tail);
+       J_ASSERT(journal->j_tail_sequence == journal->j_transaction_sequence);
+       write_unlock(&journal->j_state_lock);
+-      return 0;
++out:
++      return err;
+ }
+ 
+ /**
+diff --git a/fs/nfs/nfs3xdr.c b/fs/nfs/nfs3xdr.c
+index fa6d72131c19..4495cad189c3 100644
+--- a/fs/nfs/nfs3xdr.c
++++ b/fs/nfs/nfs3xdr.c
+@@ -1342,7 +1342,7 @@ static void nfs3_xdr_enc_setacl3args(struct rpc_rqst 
*req,
+       if (args->npages != 0)
+               xdr_write_pages(xdr, args->pages, 0, args->len);
+       else
+-              xdr_reserve_space(xdr, NFS_ACL_INLINE_BUFSIZE);
++              xdr_reserve_space(xdr, args->len);
+ 
+       error = nfsacl_encode(xdr->buf, base, args->inode,
+                           (args->mask & NFS_ACL) ?
+diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
+index d482b86d0e0b..cfa9163b3bb7 100644
+--- a/fs/nfs/nfs4state.c
++++ b/fs/nfs/nfs4state.c
+@@ -1452,6 +1452,8 @@ restart:
+                               }
+                               spin_unlock(&state->state_lock);
+                               nfs4_put_open_state(state);
++                              clear_bit(NFS4CLNT_RECLAIM_NOGRACE,
++                                      &state->flags);
+                               spin_lock(&sp->so_lock);
+                               goto restart;
+                       }
+diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c
+index 195a403e1522..61dbe1958a30 100644
+--- a/fs/xfs/xfs_symlink.c
++++ b/fs/xfs/xfs_symlink.c
+@@ -272,7 +272,7 @@ xfs_readlink_bmap(
+                       cur_chunk += sizeof(struct xfs_dsymlink_hdr);
+               }
+ 
+-              memcpy(link + offset, bp->b_addr, byte_cnt);
++              memcpy(link + offset, cur_chunk, byte_cnt);
+ 
+               pathlen -= byte_cnt;
+               offset += byte_cnt;
+diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h
+index f819e813c8ac..4407354c7d6a 100644
+--- a/include/acpi/actypes.h
++++ b/include/acpi/actypes.h
+@@ -511,6 +511,7 @@ typedef u64 acpi_integer;
+ #define ACPI_NO_ACPI_ENABLE             0x10
+ #define ACPI_NO_DEVICE_INIT             0x20
+ #define ACPI_NO_OBJECT_INIT             0x40
++#define ACPI_NO_FACS_INIT               0x80
+ 
+ /*
+  * Initialization state
+diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h
+index 6e051f472edb..0c67c1f2a890 100644
+--- a/include/linux/jbd2.h
++++ b/include/linux/jbd2.h
+@@ -997,7 +997,7 @@ extern struct journal_head * 
jbd2_journal_get_descriptor_buffer(journal_t *);
+ int jbd2_journal_next_log_block(journal_t *, unsigned long long *);
+ int jbd2_journal_get_log_tail(journal_t *journal, tid_t *tid,
+                             unsigned long *block);
+-void __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long 
block);
++int __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long 
block);
+ void jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block);
+ 
+ /* Commit management */
+@@ -1116,7 +1116,7 @@ extern int          jbd2_journal_recover    (journal_t 
*journal);
+ extern int       jbd2_journal_wipe       (journal_t *, int);
+ extern int       jbd2_journal_skip_recovery   (journal_t *);
+ extern void      jbd2_journal_update_sb_errno(journal_t *);
+-extern void      jbd2_journal_update_sb_log_tail      (journal_t *, tid_t,
++extern int       jbd2_journal_update_sb_log_tail      (journal_t *, tid_t,
+                               unsigned long, int);
+ extern void      __jbd2_journal_abort_hard    (journal_t *);
+ extern void      jbd2_journal_abort      (journal_t *, int);
+diff --git a/include/linux/libata.h b/include/linux/libata.h
+index 8e5d45fa83cf..8ad0771b88ab 100644
+--- a/include/linux/libata.h
++++ b/include/linux/libata.h
+@@ -409,6 +409,7 @@ enum {
+       ATA_HORKAGE_ATAPI_DMADIR = (1 << 18),   /* device requires dmadir */
+       ATA_HORKAGE_NOLPM       = (1 << 20),    /* don't use LPM */
+       ATA_HORKAGE_WD_BROKEN_LPM = (1 << 21),  /* some WDs have broken LPM */
++      ATA_HORKAGE_NOTRIM = (1 << 24),         /* don't use TRIM */
+ 
+        /* DMA mask for user DMA control: User visible values; DO NOT
+           renumber */
+diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
+index 54e351aa4d2e..a9e5134c2936 100644
+--- a/include/linux/nfs_xdr.h
++++ b/include/linux/nfs_xdr.h
+@@ -1094,7 +1094,7 @@ struct pnfs_ds_commit_info {
+       struct pnfs_commit_bucket *buckets;
+ };
+ 
+-#define NFS4_EXCHANGE_ID_LEN  (48)
++#define NFS4_EXCHANGE_ID_LEN  (127)
+ struct nfs41_exchange_id_args {
+       struct nfs_client               *client;
+       nfs4_verifier                   *verifier;
+diff --git a/include/uapi/linux/usbdevice_fs.h 
b/include/uapi/linux/usbdevice_fs.h
+index 0c65e4b12617..ef29266ef77a 100644
+--- a/include/uapi/linux/usbdevice_fs.h
++++ b/include/uapi/linux/usbdevice_fs.h
+@@ -125,11 +125,12 @@ struct usbdevfs_hub_portinfo {
+       char port [127];        /* e.g. port 3 connects to device 27 */
+ };
+ 
+-/* Device capability flags */
++/* System and bus capability flags */
+ #define USBDEVFS_CAP_ZERO_PACKET              0x01
+ #define USBDEVFS_CAP_BULK_CONTINUATION                0x02
+ #define USBDEVFS_CAP_NO_PACKET_SIZE_LIM               0x04
+ #define USBDEVFS_CAP_BULK_SCATTER_GATHER      0x08
++#define USBDEVFS_CAP_REAP_AFTER_DISCONNECT    0x10
+ 
+ /* USBDEVFS_DISCONNECT_CLAIM flags & struct */
+ 
+diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
+index aa0e736b72ac..fe576073580a 100644
+--- a/kernel/trace/trace.h
++++ b/kernel/trace/trace.h
+@@ -428,6 +428,7 @@ enum {
+ 
+       TRACE_CONTROL_BIT,
+ 
++      TRACE_BRANCH_BIT,
+ /*
+  * Abuse of the trace_recursion.
+  * As we need a way to maintain state if we are tracing the function
+diff --git a/kernel/trace/trace_branch.c b/kernel/trace/trace_branch.c
+index d594da0dc03c..cb89197adf5c 100644
+--- a/kernel/trace/trace_branch.c
++++ b/kernel/trace/trace_branch.c
+@@ -37,9 +37,12 @@ probe_likely_condition(struct ftrace_branch_data *f, int 
val, int expect)
+       struct trace_branch *entry;
+       struct ring_buffer *buffer;
+       unsigned long flags;
+-      int cpu, pc;
++      int pc;
+       const char *p;
+ 
++      if (current->trace_recursion & TRACE_BRANCH_BIT)
++              return;
++
+       /*
+        * I would love to save just the ftrace_likely_data pointer, but
+        * this code can also be used by modules. Ugly things can happen
+@@ -50,10 +53,10 @@ probe_likely_condition(struct ftrace_branch_data *f, int 
val, int expect)
+       if (unlikely(!tr))
+               return;
+ 
+-      local_irq_save(flags);
+-      cpu = raw_smp_processor_id();
+-      data = per_cpu_ptr(tr->trace_buffer.data, cpu);
+-      if (atomic_inc_return(&data->disabled) != 1)
++      raw_local_irq_save(flags);
++      current->trace_recursion |= TRACE_BRANCH_BIT;
++      data = this_cpu_ptr(tr->trace_buffer.data);
++      if (atomic_read(&data->disabled))
+               goto out;
+ 
+       pc = preempt_count();
+@@ -82,8 +85,8 @@ probe_likely_condition(struct ftrace_branch_data *f, int 
val, int expect)
+               __buffer_unlock_commit(buffer, event);
+ 
+  out:
+-      atomic_dec(&data->disabled);
+-      local_irq_restore(flags);
++      current->trace_recursion &= ~TRACE_BRANCH_BIT;
++      raw_local_irq_restore(flags);
+ }
+ 
+ static inline
+diff --git a/kernel/trace/trace_events_filter.c 
b/kernel/trace/trace_events_filter.c
+index fe3e086d38e9..67654bb5bc2f 100644
+--- a/kernel/trace/trace_events_filter.c
++++ b/kernel/trace/trace_events_filter.c
+@@ -1015,6 +1015,9 @@ static void parse_init(struct filter_parse_state *ps,
+ 
+ static char infix_next(struct filter_parse_state *ps)
+ {
++      if (!ps->infix.cnt)
++              return 0;
++
+       ps->infix.cnt--;
+ 
+       return ps->infix.string[ps->infix.tail++];
+@@ -1030,6 +1033,9 @@ static char infix_peek(struct filter_parse_state *ps)
+ 
+ static void infix_advance(struct filter_parse_state *ps)
+ {
++      if (!ps->infix.cnt)
++              return;
++
+       ps->infix.cnt--;
+       ps->infix.tail++;
+ }
+@@ -1342,7 +1348,9 @@ static int check_preds(struct filter_parse_state *ps)
+                       continue;
+               }
+               n_normal_preds++;
+-              WARN_ON_ONCE(cnt < 0);
++              /* all ops should have operands */
++              if (cnt < 0)
++                      break;
+       }
+ 
+       if (cnt != 1 || !n_normal_preds || n_logical_preds >= n_normal_preds) {
+diff --git a/lib/bitmap.c b/lib/bitmap.c
+index e5c4ebe586ba..c0634aa923a6 100644
+--- a/lib/bitmap.c
++++ b/lib/bitmap.c
+@@ -603,12 +603,12 @@ static int __bitmap_parselist(const char *buf, unsigned 
int buflen,
+       unsigned a, b;
+       int c, old_c, totaldigits;
+       const char __user __force *ubuf = (const char __user __force *)buf;
+-      int exp_digit, in_range;
++      int at_start, in_range;
+ 
+       totaldigits = c = 0;
+       bitmap_zero(maskp, nmaskbits);
+       do {
+-              exp_digit = 1;
++              at_start = 1;
+               in_range = 0;
+               a = b = 0;
+ 
+@@ -637,11 +637,10 @@ static int __bitmap_parselist(const char *buf, unsigned 
int buflen,
+                               break;
+ 
+                       if (c == '-') {
+-                              if (exp_digit || in_range)
++                              if (at_start || in_range)
+                                       return -EINVAL;
+                               b = 0;
+                               in_range = 1;
+-                              exp_digit = 1;
+                               continue;
+                       }
+ 
+@@ -651,16 +650,18 @@ static int __bitmap_parselist(const char *buf, unsigned 
int buflen,
+                       b = b * 10 + (c - '0');
+                       if (!in_range)
+                               a = b;
+-                      exp_digit = 0;
++                      at_start = 0;
+                       totaldigits++;
+               }
+               if (!(a <= b))
+                       return -EINVAL;
+               if (b >= nmaskbits)
+                       return -ERANGE;
+-              while (a <= b) {
+-                      set_bit(a, maskp);
+-                      a++;
++              if (!at_start) {
++                      while (a <= b) {
++                              set_bit(a, maskp);
++                              a++;
++                      }
+               }
+       } while (buflen && c == ',');
+       return 0;
+diff --git a/net/9p/client.c b/net/9p/client.c
+index addc116cecf0..853d62327a58 100644
+--- a/net/9p/client.c
++++ b/net/9p/client.c
+@@ -828,7 +828,8 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client 
*c, int8_t type,
+       if (err < 0) {
+               if (err == -EIO)
+                       c->status = Disconnected;
+-              goto reterr;
++              if (err != -ERESTARTSYS)
++                      goto reterr;
+       }
+       if (req->status == REQ_STATUS_ERROR) {
+               p9_debug(P9_DEBUG_ERROR, "req_status error %d\n", req->t_err);
+diff --git a/net/ceph/osdmap.c b/net/ceph/osdmap.c
+index dbd9a4792427..7ec4e0522215 100644
+--- a/net/ceph/osdmap.c
++++ b/net/ceph/osdmap.c
+@@ -89,7 +89,7 @@ static int crush_decode_tree_bucket(void **p, void *end,
+ {
+       int j;
+       dout("crush_decode_tree_bucket %p to %p\n", *p, end);
+-      ceph_decode_32_safe(p, end, b->num_nodes, bad);
++      ceph_decode_8_safe(p, end, b->num_nodes, bad);
+       b->node_weights = kcalloc(b->num_nodes, sizeof(u32), GFP_NOFS);
+       if (b->node_weights == NULL)
+               return -ENOMEM;
+diff --git a/net/mac80211/main.c b/net/mac80211/main.c
+index 6658c5809353..dd6ca36c34c1 100644
+--- a/net/mac80211/main.c
++++ b/net/mac80211/main.c
+@@ -257,6 +257,7 @@ static void ieee80211_restart_work(struct work_struct 
*work)
+ {
+       struct ieee80211_local *local =
+               container_of(work, struct ieee80211_local, restart_work);
++      struct ieee80211_sub_if_data *sdata;
+ 
+       /* wait for scan work complete */
+       flush_workqueue(local->workqueue);
+@@ -269,6 +270,8 @@ static void ieee80211_restart_work(struct work_struct 
*work)
+       mutex_unlock(&local->mtx);
+ 
+       rtnl_lock();
++      list_for_each_entry(sdata, &local->interfaces, list)
++              flush_delayed_work(&sdata->dec_tailroom_needed_wk);
+       ieee80211_scan_cancel(local);
+       ieee80211_reconfig(local);
+       rtnl_unlock();
+diff --git a/net/sunrpc/backchannel_rqst.c b/net/sunrpc/backchannel_rqst.c
+index 890a29912d5a..d29c119ecd9c 100644
+--- a/net/sunrpc/backchannel_rqst.c
++++ b/net/sunrpc/backchannel_rqst.c
+@@ -60,7 +60,7 @@ static void xprt_free_allocation(struct rpc_rqst *req)
+ 
+       dprintk("RPC:        free allocations for req= %p\n", req);
+       WARN_ON_ONCE(test_bit(RPC_BC_PA_IN_USE, &req->rq_bc_pa_state));
+-      xbufp = &req->rq_private_buf;
++      xbufp = &req->rq_rcv_buf;
+       free_page((unsigned long)xbufp->head[0].iov_base);
+       xbufp = &req->rq_snd_buf;
+       free_page((unsigned long)xbufp->head[0].iov_base);
+diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
+index ca2094c914a1..a82d6576fe0f 100644
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -3365,6 +3365,7 @@ enum {
+       ALC269_FIXUP_LIFEBOOK,
+       ALC269_FIXUP_LIFEBOOK_EXTMIC,
+       ALC269_FIXUP_LIFEBOOK_HP_PIN,
++      ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT,
+       ALC269_FIXUP_AMIC,
+       ALC269_FIXUP_DMIC,
+       ALC269VB_FIXUP_AMIC,
+@@ -3383,6 +3384,7 @@ enum {
+       ALC290_FIXUP_MONO_SPEAKERS,
+       ALC269_FIXUP_HEADSET_MODE,
+       ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC,
++      ALC269_FIXUP_ASPIRE_HEADSET_MIC,
+       ALC269_FIXUP_ASUS_X101_FUNC,
+       ALC269_FIXUP_ASUS_X101_VERB,
+       ALC269_FIXUP_ASUS_X101,
+@@ -3486,6 +3488,10 @@ static const struct hda_fixup alc269_fixups[] = {
+                       { }
+               },
+       },
++      [ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT] = {
++              .type = HDA_FIXUP_FUNC,
++              .v.func = alc269_fixup_pincfg_no_hp_to_lineout,
++      },
+       [ALC269_FIXUP_AMIC] = {
+               .type = HDA_FIXUP_PINS,
+               .v.pins = (const struct hda_pintbl[]) {
+@@ -3598,6 +3604,15 @@ static const struct hda_fixup alc269_fixups[] = {
+               .type = HDA_FIXUP_FUNC,
+               .v.func = alc_fixup_headset_mode_no_hp_mic,
+       },
++      [ALC269_FIXUP_ASPIRE_HEADSET_MIC] = {
++              .type = HDA_FIXUP_PINS,
++              .v.pins = (const struct hda_pintbl[]) {
++                      { 0x19, 0x01a1913c }, /* headset mic w/o jack detect */
++                      { }
++              },
++              .chained = true,
++              .chain_id = ALC269_FIXUP_HEADSET_MODE,
++      },
+       [ALC286_FIXUP_SONY_MIC_NO_PRESENCE] = {
+               .type = HDA_FIXUP_PINS,
+               .v.pins = (const struct hda_pintbl[]) {
+@@ -3732,10 +3747,13 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = 
{
+       SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO),
+       SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z),
+       SND_PCI_QUIRK(0x1025, 0x047c, "Acer AC700", ALC269_FIXUP_ACER_AC700),
++      SND_PCI_QUIRK(0x1025, 0x072d, "Acer Aspire V5-571G", 
ALC269_FIXUP_ASPIRE_HEADSET_MIC),
++      SND_PCI_QUIRK(0x1025, 0x080d, "Acer Aspire V5-122P", 
ALC269_FIXUP_ASPIRE_HEADSET_MIC),
+       SND_PCI_QUIRK(0x1025, 0x0740, "Acer AO725", 
ALC271_FIXUP_HP_GATE_MIC_JACK),
+       SND_PCI_QUIRK(0x1025, 0x0742, "Acer AO756", 
ALC271_FIXUP_HP_GATE_MIC_JACK),
+       SND_PCI_QUIRK_VENDOR(0x1025, "Acer Aspire", ALC271_FIXUP_DMIC),
+       SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook", ALC269_FIXUP_LIFEBOOK),
++      SND_PCI_QUIRK(0x10cf, 0x159f, "Lifebook E780", 
ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT),
+       SND_PCI_QUIRK(0x10cf, 0x15dc, "Lifebook T731", 
ALC269_FIXUP_LIFEBOOK_HP_PIN),
+       SND_PCI_QUIRK(0x10cf, 0x1757, "Lifebook E752", 
ALC269_FIXUP_LIFEBOOK_HP_PIN),
+       SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", 
ALC269_FIXUP_LIFEBOOK_EXTMIC),
+diff --git a/sound/soc/codecs/wm8737.c b/sound/soc/codecs/wm8737.c
+index 2f167a8ca01b..62bacb8536e6 100644
+--- a/sound/soc/codecs/wm8737.c
++++ b/sound/soc/codecs/wm8737.c
+@@ -494,7 +494,8 @@ static int wm8737_set_bias_level(struct snd_soc_codec 
*codec,
+ 
+                       /* Fast VMID ramp at 2*2.5k */
+                       snd_soc_update_bits(codec, WM8737_MISC_BIAS_CONTROL,
+-                                          WM8737_VMIDSEL_MASK, 0x4);
++                                          WM8737_VMIDSEL_MASK,
++                                          2 << WM8737_VMIDSEL_SHIFT);
+ 
+                       /* Bring VMID up */
+                       snd_soc_update_bits(codec, WM8737_POWER_MANAGEMENT,
+@@ -508,7 +509,8 @@ static int wm8737_set_bias_level(struct snd_soc_codec 
*codec,
+ 
+               /* VMID at 2*300k */
+               snd_soc_update_bits(codec, WM8737_MISC_BIAS_CONTROL,
+-                                  WM8737_VMIDSEL_MASK, 2);
++                                  WM8737_VMIDSEL_MASK,
++                                  1 << WM8737_VMIDSEL_SHIFT);
+ 
+               break;
+ 
+diff --git a/sound/soc/codecs/wm8903.h b/sound/soc/codecs/wm8903.h
+index db949311c0f2..0bb4a647755d 100644
+--- a/sound/soc/codecs/wm8903.h
++++ b/sound/soc/codecs/wm8903.h
+@@ -172,7 +172,7 @@ extern int wm8903_mic_detect(struct snd_soc_codec *codec,
+ #define WM8903_VMID_BUF_ENA_WIDTH                    1  /* VMID_BUF_ENA */
+ 
+ #define WM8903_VMID_RES_50K                          2
+-#define WM8903_VMID_RES_250K                         3
++#define WM8903_VMID_RES_250K                         4
+ #define WM8903_VMID_RES_5K                           6
+ 
+ /*
+diff --git a/sound/soc/codecs/wm8955.c b/sound/soc/codecs/wm8955.c
+index 1c1fc6119758..475fc24c8ff6 100644
+--- a/sound/soc/codecs/wm8955.c
++++ b/sound/soc/codecs/wm8955.c
+@@ -298,7 +298,7 @@ static int wm8955_configure_clocking(struct snd_soc_codec 
*codec)
+               snd_soc_update_bits(codec, WM8955_PLL_CONTROL_2,
+                                   WM8955_K_17_9_MASK,
+                                   (pll.k >> 9) & WM8955_K_17_9_MASK);
+-              snd_soc_update_bits(codec, WM8955_PLL_CONTROL_2,
++              snd_soc_update_bits(codec, WM8955_PLL_CONTROL_3,
+                                   WM8955_K_8_0_MASK,
+                                   pll.k & WM8955_K_8_0_MASK);
+               if (pll.k)
+diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
+index 39f65bc9de56..ae5bb95df862 100644
+--- a/sound/soc/codecs/wm8960.c
++++ b/sound/soc/codecs/wm8960.c
+@@ -242,7 +242,7 @@ SOC_SINGLE("PCM Playback -6dB Switch", WM8960_DACCTL1, 7, 
1, 0),
+ SOC_ENUM("ADC Polarity", wm8960_enum[0]),
+ SOC_SINGLE("ADC High Pass Filter Switch", WM8960_DACCTL1, 0, 1, 0),
+ 
+-SOC_ENUM("DAC Polarity", wm8960_enum[2]),
++SOC_ENUM("DAC Polarity", wm8960_enum[1]),
+ SOC_SINGLE_BOOL_EXT("DAC Deemphasis Switch", 0,
+                   wm8960_get_deemph, wm8960_put_deemph),
+ 

Reply via email to