commit:     cd9c0faa372db55968bfed02c31984e474b928f7
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Mon Apr 20 09:42:43 2015 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Mon Apr 20 09:42:43 2015 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=cd9c0faa

Linux patch 3.14.38

 0000_README              |    4 +
 1038_linux-3.14.39.patch | 1100 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 1104 insertions(+)

diff --git a/0000_README b/0000_README
index 6a3ff27..e03878f 100644
--- a/0000_README
+++ b/0000_README
@@ -194,6 +194,10 @@ Patch:  1037_linux-3.14.38.patch
 From:   http://www.kernel.org
 Desc:   Linux 3.14.38
 
+Patch:  1038_linux-3.14.39.patch
+From:   http://www.kernel.org
+Desc:   Linux 3.14.39
+
 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/1038_linux-3.14.39.patch b/1038_linux-3.14.39.patch
new file mode 100644
index 0000000..ea2030b
--- /dev/null
+++ b/1038_linux-3.14.39.patch
@@ -0,0 +1,1100 @@
+diff --git a/Makefile b/Makefile
+index f09e19d2cc4f..b40845e11b84 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 3
+ PATCHLEVEL = 14
+-SUBLEVEL = 38
++SUBLEVEL = 39
+ EXTRAVERSION =
+ NAME = Remembering Coco
+ 
+diff --git a/arch/arc/kernel/signal.c b/arch/arc/kernel/signal.c
+index 7e95e1a86510..d68b410595c8 100644
+--- a/arch/arc/kernel/signal.c
++++ b/arch/arc/kernel/signal.c
+@@ -67,7 +67,7 @@ stash_usr_regs(struct rt_sigframe __user *sf, struct pt_regs 
*regs,
+              sigset_t *set)
+ {
+       int err;
+-      err = __copy_to_user(&(sf->uc.uc_mcontext.regs), regs,
++      err = __copy_to_user(&(sf->uc.uc_mcontext.regs.scratch), regs,
+                            sizeof(sf->uc.uc_mcontext.regs.scratch));
+       err |= __copy_to_user(&sf->uc.uc_sigmask, set, sizeof(sigset_t));
+ 
+@@ -83,7 +83,7 @@ static int restore_usr_regs(struct pt_regs *regs, struct 
rt_sigframe __user *sf)
+       if (!err)
+               set_current_blocked(&set);
+ 
+-      err |= __copy_from_user(regs, &(sf->uc.uc_mcontext.regs),
++      err |= __copy_from_user(regs, &(sf->uc.uc_mcontext.regs.scratch),
+                               sizeof(sf->uc.uc_mcontext.regs.scratch));
+ 
+       return err;
+diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
+index c752cb43e52f..a6aa91f77654 100644
+--- a/arch/x86/kernel/reboot.c
++++ b/arch/x86/kernel/reboot.c
+@@ -181,6 +181,16 @@ static struct dmi_system_id __initdata reboot_dmi_table[] 
= {
+               },
+       },
+ 
++      /* ASRock */
++      {       /* Handle problems with rebooting on ASRock Q1900DC-ITX */
++              .callback = set_pci_reboot,
++              .ident = "ASRock Q1900DC-ITX",
++              .matches = {
++                      DMI_MATCH(DMI_BOARD_VENDOR, "ASRock"),
++                      DMI_MATCH(DMI_BOARD_NAME, "Q1900DC-ITX"),
++              },
++      },
++
+       /* ASUS */
+       {       /* Handle problems with rebooting on ASUS P4S800 */
+               .callback = set_bios_reboot,
+diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
+index 17f9ec501972..fd8496a92b45 100644
+--- a/drivers/acpi/processor_idle.c
++++ b/drivers/acpi/processor_idle.c
+@@ -962,7 +962,7 @@ static int acpi_processor_setup_cpuidle_states(struct 
acpi_processor *pr)
+               return -EINVAL;
+ 
+       drv->safe_state_index = -1;
+-      for (i = 0; i < CPUIDLE_STATE_MAX; i++) {
++      for (i = CPUIDLE_DRIVER_STATE_START; i < CPUIDLE_STATE_MAX; i++) {
+               drv->states[i].name[0] = '\0';
+               drv->states[i].desc[0] = '\0';
+       }
+diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
+index 55298db36b2d..d18093681af2 100644
+--- a/drivers/block/nbd.c
++++ b/drivers/block/nbd.c
+@@ -814,10 +814,6 @@ static int __init nbd_init(void)
+               return -EINVAL;
+       }
+ 
+-      nbd_dev = kcalloc(nbds_max, sizeof(*nbd_dev), GFP_KERNEL);
+-      if (!nbd_dev)
+-              return -ENOMEM;
+-
+       part_shift = 0;
+       if (max_part > 0) {
+               part_shift = fls(max_part);
+@@ -839,6 +835,10 @@ static int __init nbd_init(void)
+       if (nbds_max > 1UL << (MINORBITS - part_shift))
+               return -EINVAL;
+ 
++      nbd_dev = kcalloc(nbds_max, sizeof(*nbd_dev), GFP_KERNEL);
++      if (!nbd_dev)
++              return -ENOMEM;
++
+       for (i = 0; i < nbds_max; i++) {
+               struct gendisk *disk = alloc_disk(1 << part_shift);
+               if (!disk)
+diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
+index a55e68f2cfc8..e3d2052e7552 100644
+--- a/drivers/cpuidle/cpuidle.c
++++ b/drivers/cpuidle/cpuidle.c
+@@ -252,9 +252,6 @@ int cpuidle_enable_device(struct cpuidle_device *dev)
+       if (!dev->registered)
+               return -EINVAL;
+ 
+-      if (!dev->state_count)
+-              dev->state_count = drv->state_count;
+-
+       ret = cpuidle_add_device_sysfs(dev);
+       if (ret)
+               return ret;
+diff --git a/drivers/cpuidle/sysfs.c b/drivers/cpuidle/sysfs.c
+index e918b6d0caf7..dcaae4c8bc08 100644
+--- a/drivers/cpuidle/sysfs.c
++++ b/drivers/cpuidle/sysfs.c
+@@ -398,7 +398,7 @@ static int cpuidle_add_state_sysfs(struct cpuidle_device 
*device)
+       struct cpuidle_driver *drv = cpuidle_get_cpu_driver(device);
+ 
+       /* state statistics */
+-      for (i = 0; i < device->state_count; i++) {
++      for (i = 0; i < drv->state_count; i++) {
+               kobj = kzalloc(sizeof(struct cpuidle_state_kobj), GFP_KERNEL);
+               if (!kobj)
+                       goto error_state;
+@@ -430,9 +430,10 @@ error_state:
+  */
+ static void cpuidle_remove_state_sysfs(struct cpuidle_device *device)
+ {
++      struct cpuidle_driver *drv = cpuidle_get_cpu_driver(device);
+       int i;
+ 
+-      for (i = 0; i < device->state_count; i++)
++      for (i = 0; i < drv->state_count; i++)
+               cpuidle_free_state_kobj(device, i);
+ }
+ 
+diff --git a/drivers/dma/omap-dma.c b/drivers/dma/omap-dma.c
+index 362e7c49f2e1..12f82942e347 100644
+--- a/drivers/dma/omap-dma.c
++++ b/drivers/dma/omap-dma.c
+@@ -487,6 +487,7 @@ static int omap_dma_terminate_all(struct omap_chan *c)
+        * c->desc is NULL and exit.)
+        */
+       if (c->desc) {
++              omap_dma_desc_free(&c->desc->vd);
+               c->desc = NULL;
+               /* Avoid stopping the dma twice */
+               if (!c->paused)
+diff --git a/drivers/gpu/drm/radeon/radeon_bios.c 
b/drivers/gpu/drm/radeon/radeon_bios.c
+index 9ab30976287d..c43335ce8778 100644
+--- a/drivers/gpu/drm/radeon/radeon_bios.c
++++ b/drivers/gpu/drm/radeon/radeon_bios.c
+@@ -76,7 +76,7 @@ static bool igp_read_bios_from_vram(struct radeon_device 
*rdev)
+ 
+ static bool radeon_read_bios(struct radeon_device *rdev)
+ {
+-      uint8_t __iomem *bios;
++      uint8_t __iomem *bios, val1, val2;
+       size_t size;
+ 
+       rdev->bios = NULL;
+@@ -86,15 +86,19 @@ static bool radeon_read_bios(struct radeon_device *rdev)
+               return false;
+       }
+ 
+-      if (size == 0 || bios[0] != 0x55 || bios[1] != 0xaa) {
++      val1 = readb(&bios[0]);
++      val2 = readb(&bios[1]);
++
++      if (size == 0 || val1 != 0x55 || val2 != 0xaa) {
+               pci_unmap_rom(rdev->pdev, bios);
+               return false;
+       }
+-      rdev->bios = kmemdup(bios, size, GFP_KERNEL);
++      rdev->bios = kzalloc(size, GFP_KERNEL);
+       if (rdev->bios == NULL) {
+               pci_unmap_rom(rdev->pdev, bios);
+               return false;
+       }
++      memcpy_fromio(rdev->bios, bios, size);
+       pci_unmap_rom(rdev->pdev, bios);
+       return true;
+ }
+diff --git a/drivers/iio/imu/adis_trigger.c b/drivers/iio/imu/adis_trigger.c
+index e0017c22bb9c..f53e9a803a0e 100644
+--- a/drivers/iio/imu/adis_trigger.c
++++ b/drivers/iio/imu/adis_trigger.c
+@@ -60,7 +60,7 @@ int adis_probe_trigger(struct adis *adis, struct iio_dev 
*indio_dev)
+       iio_trigger_set_drvdata(adis->trig, adis);
+       ret = iio_trigger_register(adis->trig);
+ 
+-      indio_dev->trig = adis->trig;
++      indio_dev->trig = iio_trigger_get(adis->trig);
+       if (ret)
+               goto error_free_irq;
+ 
+diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c 
b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
+index 429517117eff..30fce6723e61 100644
+--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
++++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
+@@ -25,6 +25,16 @@
+ #include <linux/poll.h>
+ #include "inv_mpu_iio.h"
+ 
++static void inv_clear_kfifo(struct inv_mpu6050_state *st)
++{
++      unsigned long flags;
++
++      /* take the spin lock sem to avoid interrupt kick in */
++      spin_lock_irqsave(&st->time_stamp_lock, flags);
++      kfifo_reset(&st->timestamps);
++      spin_unlock_irqrestore(&st->time_stamp_lock, flags);
++}
++
+ int inv_reset_fifo(struct iio_dev *indio_dev)
+ {
+       int result;
+@@ -51,6 +61,10 @@ int inv_reset_fifo(struct iio_dev *indio_dev)
+                                       INV_MPU6050_BIT_FIFO_RST);
+       if (result)
+               goto reset_fifo_fail;
++
++      /* clear timestamps fifo */
++      inv_clear_kfifo(st);
++
+       /* enable interrupt */
+       if (st->chip_config.accl_fifo_enable ||
+           st->chip_config.gyro_fifo_enable) {
+@@ -84,16 +98,6 @@ reset_fifo_fail:
+       return result;
+ }
+ 
+-static void inv_clear_kfifo(struct inv_mpu6050_state *st)
+-{
+-      unsigned long flags;
+-
+-      /* take the spin lock sem to avoid interrupt kick in */
+-      spin_lock_irqsave(&st->time_stamp_lock, flags);
+-      kfifo_reset(&st->timestamps);
+-      spin_unlock_irqrestore(&st->time_stamp_lock, flags);
+-}
+-
+ /**
+  * inv_mpu6050_irq_handler() - Cache a timestamp at each data ready interrupt.
+  */
+@@ -185,7 +189,6 @@ end_session:
+ flush_fifo:
+       /* Flush HW and SW FIFOs. */
+       inv_reset_fifo(indio_dev);
+-      inv_clear_kfifo(st);
+       mutex_unlock(&indio_dev->mlock);
+       iio_trigger_notify_done(indio_dev->trig);
+ 
+diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c
+index a84112322071..055ebebc07dd 100644
+--- a/drivers/infiniband/core/umem.c
++++ b/drivers/infiniband/core/umem.c
+@@ -94,6 +94,14 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, 
unsigned long addr,
+       if (dmasync)
+               dma_set_attr(DMA_ATTR_WRITE_BARRIER, &attrs);
+ 
++      /*
++       * If the combination of the addr and size requested for this memory
++       * region causes an integer overflow, return error.
++       */
++      if ((PAGE_ALIGN(addr + size) <= size) ||
++          (PAGE_ALIGN(addr + size) <= addr))
++              return ERR_PTR(-EINVAL);
++
+       if (!can_do_mlock())
+               return ERR_PTR(-EPERM);
+ 
+diff --git a/drivers/infiniband/core/uverbs_main.c 
b/drivers/infiniband/core/uverbs_main.c
+index 08219fb3338b..7a515c867674 100644
+--- a/drivers/infiniband/core/uverbs_main.c
++++ b/drivers/infiniband/core/uverbs_main.c
+@@ -476,6 +476,7 @@ static void ib_uverbs_async_handler(struct ib_uverbs_file 
*file,
+ 
+       entry->desc.async.element    = element;
+       entry->desc.async.event_type = event;
++      entry->desc.async.reserved   = 0;
+       entry->counter               = counter;
+ 
+       list_add_tail(&entry->list, &file->async_file->event_list);
+diff --git a/drivers/infiniband/hw/mlx4/mad.c 
b/drivers/infiniband/hw/mlx4/mad.c
+index f2a3f48107e7..2592ab5f21b1 100644
+--- a/drivers/infiniband/hw/mlx4/mad.c
++++ b/drivers/infiniband/hw/mlx4/mad.c
+@@ -64,6 +64,14 @@ enum {
+ #define GUID_TBL_BLK_NUM_ENTRIES 8
+ #define GUID_TBL_BLK_SIZE (GUID_TBL_ENTRY_SIZE * GUID_TBL_BLK_NUM_ENTRIES)
+ 
++/* Counters should be saturate once they reach their maximum value */
++#define ASSIGN_32BIT_COUNTER(counter, value) do {\
++      if ((value) > U32_MAX)                   \
++              counter = cpu_to_be32(U32_MAX); \
++      else                                     \
++              counter = cpu_to_be32(value);    \
++} while (0)
++
+ struct mlx4_mad_rcv_buf {
+       struct ib_grh grh;
+       u8 payload[256];
+@@ -730,10 +738,14 @@ static int ib_process_mad(struct ib_device *ibdev, int 
mad_flags, u8 port_num,
+ static void edit_counter(struct mlx4_counter *cnt,
+                                       struct ib_pma_portcounters *pma_cnt)
+ {
+-      pma_cnt->port_xmit_data = cpu_to_be32((be64_to_cpu(cnt->tx_bytes)>>2));
+-      pma_cnt->port_rcv_data  = cpu_to_be32((be64_to_cpu(cnt->rx_bytes)>>2));
+-      pma_cnt->port_xmit_packets = cpu_to_be32(be64_to_cpu(cnt->tx_frames));
+-      pma_cnt->port_rcv_packets  = cpu_to_be32(be64_to_cpu(cnt->rx_frames));
++      ASSIGN_32BIT_COUNTER(pma_cnt->port_xmit_data,
++                           (be64_to_cpu(cnt->tx_bytes) >> 2));
++      ASSIGN_32BIT_COUNTER(pma_cnt->port_rcv_data,
++                           (be64_to_cpu(cnt->rx_bytes) >> 2));
++      ASSIGN_32BIT_COUNTER(pma_cnt->port_xmit_packets,
++                           be64_to_cpu(cnt->tx_frames));
++      ASSIGN_32BIT_COUNTER(pma_cnt->port_rcv_packets,
++                           be64_to_cpu(cnt->rx_frames));
+ }
+ 
+ static int iboe_process_mad(struct ib_device *ibdev, int mad_flags, u8 
port_num,
+diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_common.h 
b/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
+index f723f1f2f578..ab851278d9d0 100644
+--- a/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
++++ b/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
+@@ -30,7 +30,7 @@
+ 
+ /* Offset base used to differentiate between CAPTURE and OUTPUT
+ *  while mmaping */
+-#define DST_QUEUE_OFF_BASE      (TASK_SIZE / 2)
++#define DST_QUEUE_OFF_BASE    (1 << 30)
+ 
+ #define MFC_BANK1_ALLOC_CTX   0
+ #define MFC_BANK2_ALLOC_CTX   1
+diff --git a/drivers/media/platform/sh_veu.c b/drivers/media/platform/sh_veu.c
+index 744e43b480bc..f698e322a1cd 100644
+--- a/drivers/media/platform/sh_veu.c
++++ b/drivers/media/platform/sh_veu.c
+@@ -1183,6 +1183,7 @@ static int sh_veu_probe(struct platform_device *pdev)
+       }
+ 
+       *vdev = sh_veu_videodev;
++      vdev->v4l2_dev = &veu->v4l2_dev;
+       spin_lock_init(&veu->lock);
+       mutex_init(&veu->fop_lock);
+       vdev->lock = &veu->fop_lock;
+diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
+index 61376abdab39..dbd8d21a8f10 100644
+--- a/drivers/net/can/flexcan.c
++++ b/drivers/net/can/flexcan.c
+@@ -1095,12 +1095,19 @@ static int flexcan_probe(struct platform_device *pdev)
+       const struct flexcan_devtype_data *devtype_data;
+       struct net_device *dev;
+       struct flexcan_priv *priv;
++      struct regulator *reg_xceiver;
+       struct resource *mem;
+       struct clk *clk_ipg = NULL, *clk_per = NULL;
+       void __iomem *base;
+       int err, irq;
+       u32 clock_freq = 0;
+ 
++      reg_xceiver = devm_regulator_get(&pdev->dev, "xceiver");
++      if (PTR_ERR(reg_xceiver) == -EPROBE_DEFER)
++              return -EPROBE_DEFER;
++      else if (IS_ERR(reg_xceiver))
++              reg_xceiver = NULL;
++
+       if (pdev->dev.of_node)
+               of_property_read_u32(pdev->dev.of_node,
+                                               "clock-frequency", &clock_freq);
+@@ -1162,9 +1169,7 @@ static int flexcan_probe(struct platform_device *pdev)
+       priv->pdata = dev_get_platdata(&pdev->dev);
+       priv->devtype_data = devtype_data;
+ 
+-      priv->reg_xceiver = devm_regulator_get(&pdev->dev, "xceiver");
+-      if (IS_ERR(priv->reg_xceiver))
+-              priv->reg_xceiver = NULL;
++      priv->reg_xceiver = reg_xceiver;
+ 
+       netif_napi_add(dev, &priv->napi, flexcan_poll, FLEXCAN_NAPI_WEIGHT);
+ 
+diff --git a/drivers/net/wireless/iwlwifi/dvm/dev.h 
b/drivers/net/wireless/iwlwifi/dvm/dev.h
+index 3441f70d0ff9..6e8cdb8a0cc5 100644
+--- a/drivers/net/wireless/iwlwifi/dvm/dev.h
++++ b/drivers/net/wireless/iwlwifi/dvm/dev.h
+@@ -708,7 +708,6 @@ struct iwl_priv {
+       unsigned long reload_jiffies;
+       int reload_count;
+       bool ucode_loaded;
+-      bool init_ucode_run;            /* Don't run init uCode again */
+ 
+       u8 plcp_delta_threshold;
+ 
+diff --git a/drivers/net/wireless/iwlwifi/dvm/ucode.c 
b/drivers/net/wireless/iwlwifi/dvm/ucode.c
+index cf03ef5619d9..8b2dedc30159 100644
+--- a/drivers/net/wireless/iwlwifi/dvm/ucode.c
++++ b/drivers/net/wireless/iwlwifi/dvm/ucode.c
+@@ -418,9 +418,6 @@ int iwl_run_init_ucode(struct iwl_priv *priv)
+       if (!priv->fw->img[IWL_UCODE_INIT].sec[0].len)
+               return 0;
+ 
+-      if (priv->init_ucode_run)
+-              return 0;
+-
+       iwl_init_notification_wait(&priv->notif_wait, &calib_wait,
+                                  calib_complete, ARRAY_SIZE(calib_complete),
+                                  iwlagn_wait_calib, priv);
+@@ -440,8 +437,6 @@ int iwl_run_init_ucode(struct iwl_priv *priv)
+        */
+       ret = iwl_wait_notification(&priv->notif_wait, &calib_wait,
+                                       UCODE_CALIB_TIMEOUT);
+-      if (!ret)
+-              priv->init_ucode_run = true;
+ 
+       goto out;
+ 
+diff --git a/drivers/pci/pcie/aer/aerdrv_errprint.c 
b/drivers/pci/pcie/aer/aerdrv_errprint.c
+index 34ff7026440c..5d3b45640181 100644
+--- a/drivers/pci/pcie/aer/aerdrv_errprint.c
++++ b/drivers/pci/pcie/aer/aerdrv_errprint.c
+@@ -127,16 +127,8 @@ static const char *aer_agent_string[] = {
+ static void __print_tlp_header(struct pci_dev *dev,
+                              struct aer_header_log_regs *t)
+ {
+-      unsigned char *tlp = (unsigned char *)&t;
+-
+-      dev_err(&dev->dev, "  TLP Header:"
+-              " %02x%02x%02x%02x %02x%02x%02x%02x"
+-              " %02x%02x%02x%02x %02x%02x%02x%02x\n",
+-              *(tlp + 3), *(tlp + 2), *(tlp + 1), *tlp,
+-              *(tlp + 7), *(tlp + 6), *(tlp + 5), *(tlp + 4),
+-              *(tlp + 11), *(tlp + 10), *(tlp + 9),
+-              *(tlp + 8), *(tlp + 15), *(tlp + 14),
+-              *(tlp + 13), *(tlp + 12));
++      dev_err(&dev->dev, "  TLP Header: %08x %08x %08x %08x\n",
++              t->dw0, t->dw1, t->dw2, t->dw3);
+ }
+ 
+ static void __aer_print_error(struct pci_dev *dev,
+diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
+index 953bd0bfdf0d..19ddd43a00cf 100644
+--- a/drivers/scsi/be2iscsi/be_main.c
++++ b/drivers/scsi/be2iscsi/be_main.c
+@@ -5684,9 +5684,9 @@ free_port:
+ hba_free:
+       if (phba->msix_enabled)
+               pci_disable_msix(phba->pcidev);
+-      iscsi_host_remove(phba->shost);
+       pci_dev_put(phba->pcidev);
+       iscsi_host_free(phba->shost);
++      pci_set_drvdata(pcidev, NULL);
+ disable_pci:
+       pci_disable_device(pcidev);
+       return ret;
+diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
+index 64e487a8bf59..719bd8257520 100644
+--- a/drivers/scsi/scsi_lib.c
++++ b/drivers/scsi/scsi_lib.c
+@@ -1258,9 +1258,11 @@ int scsi_prep_state_check(struct scsi_device *sdev, 
struct request *req)
+                                   "rejecting I/O to dead device\n");
+                       ret = BLKPREP_KILL;
+                       break;
+-              case SDEV_QUIESCE:
+               case SDEV_BLOCK:
+               case SDEV_CREATED_BLOCK:
++                      ret = BLKPREP_DEFER;
++                      break;
++              case SDEV_QUIESCE:
+                       /*
+                        * If the devices is blocked we defer normal commands.
+                        */
+diff --git a/drivers/target/iscsi/iscsi_target.c 
b/drivers/target/iscsi/iscsi_target.c
+index e168a63e77ea..b61c555a5a8f 100644
+--- a/drivers/target/iscsi/iscsi_target.c
++++ b/drivers/target/iscsi/iscsi_target.c
+@@ -1165,7 +1165,7 @@ iscsit_handle_scsi_cmd(struct iscsi_conn *conn, struct 
iscsi_cmd *cmd,
+        * traditional iSCSI block I/O.
+        */
+       if (iscsit_allocate_iovecs(cmd) < 0) {
+-              return iscsit_add_reject_cmd(cmd,
++              return iscsit_reject_cmd(cmd,
+                               ISCSI_REASON_BOOKMARK_NO_RESOURCES, buf);
+       }
+       immed_data = cmd->immediate_data;
+diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
+index 850e232d086e..8ab46ad40f28 100644
+--- a/drivers/tty/n_tty.c
++++ b/drivers/tty/n_tty.c
+@@ -247,8 +247,6 @@ static void n_tty_write_wakeup(struct tty_struct *tty)
+ 
+ static void n_tty_check_throttle(struct tty_struct *tty)
+ {
+-      if (tty->driver->type == TTY_DRIVER_TYPE_PTY)
+-              return;
+       /*
+        * Check the remaining room for the input canonicalization
+        * mode.  We don't want to throttle the driver if we're in
+@@ -1512,23 +1510,6 @@ n_tty_receive_char_lnext(struct tty_struct *tty, 
unsigned char c, char flag)
+               n_tty_receive_char_flagged(tty, c, flag);
+ }
+ 
+-/**
+- *    n_tty_receive_buf       -       data receive
+- *    @tty: terminal device
+- *    @cp: buffer
+- *    @fp: flag buffer
+- *    @count: characters
+- *
+- *    Called by the terminal driver when a block of characters has
+- *    been received. This function must be called from soft contexts
+- *    not from interrupt context. The driver is responsible for making
+- *    calls one at a time and in order (or using flush_to_ldisc)
+- *
+- *    n_tty_receive_buf()/producer path:
+- *            claims non-exclusive termios_rwsem
+- *            publishes read_head and canon_head
+- */
+-
+ static void
+ n_tty_receive_buf_real_raw(struct tty_struct *tty, const unsigned char *cp,
+                          char *fp, int count)
+@@ -1684,24 +1665,85 @@ static void __receive_buf(struct tty_struct *tty, 
const unsigned char *cp,
+       }
+ }
+ 
++/**
++ *    n_tty_receive_buf_common        -       process input
++ *    @tty: device to receive input
++ *    @cp: input chars
++ *    @fp: flags for each char (if NULL, all chars are TTY_NORMAL)
++ *    @count: number of input chars in @cp
++ *
++ *    Called by the terminal driver when a block of characters has
++ *    been received. This function must be called from soft contexts
++ *    not from interrupt context. The driver is responsible for making
++ *    calls one at a time and in order (or using flush_to_ldisc)
++ *
++ *    Returns the # of input chars from @cp which were processed.
++ *
++ *    In canonical mode, the maximum line length is 4096 chars (including
++ *    the line termination char); lines longer than 4096 chars are
++ *    truncated. After 4095 chars, input data is still processed but
++ *    not stored. Overflow processing ensures the tty can always
++ *    receive more input until at least one line can be read.
++ *
++ *    In non-canonical mode, the read buffer will only accept 4095 chars;
++ *    this provides the necessary space for a newline char if the input
++ *    mode is switched to canonical.
++ *
++ *    Note it is possible for the read buffer to _contain_ 4096 chars
++ *    in non-canonical mode: the read buffer could already contain the
++ *    maximum canon line of 4096 chars when the mode is switched to
++ *    non-canonical.
++ *
++ *    n_tty_receive_buf()/producer path:
++ *            claims non-exclusive termios_rwsem
++ *            publishes commit_head or canon_head
++ */
+ static int
+ n_tty_receive_buf_common(struct tty_struct *tty, const unsigned char *cp,
+                        char *fp, int count, int flow)
+ {
+       struct n_tty_data *ldata = tty->disc_data;
+-      int room, n, rcvd = 0;
++      int room, n, rcvd = 0, overflow;
+ 
+       down_read(&tty->termios_rwsem);
+ 
+       while (1) {
+-              room = receive_room(tty);
++              /*
++               * When PARMRK is set, each input char may take up to 3 chars
++               * in the read buf; reduce the buffer space avail by 3x
++               *
++               * If we are doing input canonicalization, and there are no
++               * pending newlines, let characters through without limit, so
++               * that erase characters will be handled.  Other excess
++               * characters will be beeped.
++               *
++               * paired with store in *_copy_from_read_buf() -- guarantees
++               * the consumer has loaded the data in read_buf up to the new
++               * read_tail (so this producer will not overwrite unread data)
++               */
++              size_t tail = ldata->read_tail;
++
++              room = N_TTY_BUF_SIZE - (ldata->read_head - tail);
++              if (I_PARMRK(tty))
++                      room = (room + 2) / 3;
++              room--;
++              if (room <= 0) {
++                      overflow = ldata->icanon && ldata->canon_head == tail;
++                      if (overflow && room < 0)
++                              ldata->read_head--;
++                      room = overflow;
++                      ldata->no_room = flow && !room;
++              } else
++                      overflow = 0;
++
+               n = min(count, room);
+-              if (!n) {
+-                      if (flow && !room)
+-                              ldata->no_room = 1;
++              if (!n)
+                       break;
+-              }
+-              __receive_buf(tty, cp, fp, n);
++
++              /* ignore parity errors if handling overflow */
++              if (!overflow || !fp || *fp != TTY_PARITY)
++                      __receive_buf(tty, cp, fp, n);
++
+               cp += n;
+               if (fp)
+                       fp += n;
+@@ -1710,7 +1752,17 @@ n_tty_receive_buf_common(struct tty_struct *tty, const 
unsigned char *cp,
+       }
+ 
+       tty->receive_room = room;
+-      n_tty_check_throttle(tty);
++
++      /* Unthrottle if handling overflow on pty */
++      if (tty->driver->type == TTY_DRIVER_TYPE_PTY) {
++              if (overflow) {
++                      tty_set_flow_change(tty, TTY_UNTHROTTLE_SAFE);
++                      tty_unthrottle_safe(tty);
++                      __tty_set_flow_change(tty, 0);
++              }
++      } else
++              n_tty_check_throttle(tty);
++
+       up_read(&tty->termios_rwsem);
+ 
+       return rcvd;
+diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c
+index 175f123f4f09..501c465feb59 100644
+--- a/drivers/tty/serial/fsl_lpuart.c
++++ b/drivers/tty/serial/fsl_lpuart.c
+@@ -362,6 +362,9 @@ static void lpuart_setup_watermark(struct lpuart_port 
*sport)
+       writeb(val | UARTPFIFO_TXFE | UARTPFIFO_RXFE,
+                       sport->port.membase + UARTPFIFO);
+ 
++      /* explicitly clear RDRF */
++      readb(sport->port.membase + UARTSR1);
++
+       /* flush Tx and Rx FIFO */
+       writeb(UARTCFIFO_TXFLUSH | UARTCFIFO_RXFLUSH,
+                       sport->port.membase + UARTCFIFO);
+diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
+index 93fe089cd51a..b9e16abb0fab 100644
+--- a/drivers/usb/host/xhci-hub.c
++++ b/drivers/usb/host/xhci-hub.c
+@@ -383,6 +383,10 @@ static void xhci_clear_port_change_bit(struct xhci_hcd 
*xhci, u16 wValue,
+               status = PORT_PLC;
+               port_change_bit = "link state";
+               break;
++      case USB_PORT_FEAT_C_PORT_CONFIG_ERROR:
++              status = PORT_CEC;
++              port_change_bit = "config error";
++              break;
+       default:
+               /* Should never happen */
+               return;
+@@ -584,6 +588,8 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd,
+                       status |= USB_PORT_STAT_C_LINK_STATE << 16;
+               if ((raw_port_status & PORT_WRC))
+                       status |= USB_PORT_STAT_C_BH_RESET << 16;
++              if ((raw_port_status & PORT_CEC))
++                      status |= USB_PORT_STAT_C_CONFIG_ERROR << 16;
+       }
+ 
+       if (hcd->speed != HCD_USB3) {
+@@ -999,6 +1005,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, 
u16 wValue,
+               case USB_PORT_FEAT_C_OVER_CURRENT:
+               case USB_PORT_FEAT_C_ENABLE:
+               case USB_PORT_FEAT_C_PORT_LINK_STATE:
++              case USB_PORT_FEAT_C_PORT_CONFIG_ERROR:
+                       xhci_clear_port_change_bit(xhci, wValue, wIndex,
+                                       port_array[wIndex], temp);
+                       break;
+@@ -1063,7 +1070,7 @@ int xhci_hub_status_data(struct usb_hcd *hcd, char *buf)
+        */
+       status = bus_state->resuming_ports;
+ 
+-      mask = PORT_CSC | PORT_PEC | PORT_OCC | PORT_PLC | PORT_WRC;
++      mask = PORT_CSC | PORT_PEC | PORT_OCC | PORT_PLC | PORT_WRC | PORT_CEC;
+ 
+       spin_lock_irqsave(&xhci->lock, flags);
+       /* For each port, did anything change?  If so, set that bit in buf. */
+diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
+index 73c43e5e231b..eb3399f4c1ed 100644
+--- a/drivers/usb/host/xhci-pci.c
++++ b/drivers/usb/host/xhci-pci.c
+@@ -108,6 +108,7 @@ static void xhci_pci_quirks(struct device *dev, struct 
xhci_hcd *xhci)
+       if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
+               xhci->quirks |= XHCI_LPM_SUPPORT;
+               xhci->quirks |= XHCI_INTEL_HOST;
++              xhci->quirks |= XHCI_AVOID_BEI;
+       }
+       if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
+                       pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) {
+@@ -123,7 +124,6 @@ static void xhci_pci_quirks(struct device *dev, struct 
xhci_hcd *xhci)
+                * PPT chipsets.
+                */
+               xhci->quirks |= XHCI_SPURIOUS_REBOOT;
+-              xhci->quirks |= XHCI_AVOID_BEI;
+       }
+       if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
+           (pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_XHCI ||
+diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
+index 923500595357..2d858f81ab33 100644
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -617,6 +617,7 @@ static const struct usb_device_id id_table_combined[] = {
+               .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
+       { USB_DEVICE(FTDI_VID, FTDI_NT_ORIONLXM_PID),
+               .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
++      { USB_DEVICE(FTDI_VID, FTDI_SYNAPSE_SS200_PID) },
+       /*
+        * ELV devices:
+        */
+@@ -1901,8 +1902,12 @@ static int ftdi_8u2232c_probe(struct usb_serial *serial)
+ {
+       struct usb_device *udev = serial->dev;
+ 
+-      if ((udev->manufacturer && !strcmp(udev->manufacturer, "CALAO 
Systems")) ||
+-          (udev->product && !strcmp(udev->product, "BeagleBone/XDS100V2")))
++      if (udev->manufacturer && !strcmp(udev->manufacturer, "CALAO Systems"))
++              return ftdi_jtag_probe(serial);
++
++      if (udev->product &&
++              (!strcmp(udev->product, "BeagleBone/XDS100V2") ||
++               !strcmp(udev->product, "SNAP Connect E10")))
+               return ftdi_jtag_probe(serial);
+ 
+       return 0;
+diff --git a/drivers/usb/serial/ftdi_sio_ids.h 
b/drivers/usb/serial/ftdi_sio_ids.h
+index 56b1b55c4751..4e4f46f3c89c 100644
+--- a/drivers/usb/serial/ftdi_sio_ids.h
++++ b/drivers/usb/serial/ftdi_sio_ids.h
+@@ -561,6 +561,12 @@
+  */
+ #define FTDI_NT_ORIONLXM_PID  0x7c90  /* OrionLXm Substation Automation 
Platform */
+ 
++/*
++ * Synapse Wireless product ids (FTDI_VID)
++ * http://www.synapse-wireless.com
++ */
++#define FTDI_SYNAPSE_SS200_PID 0x9090 /* SS200 - SNAP Stick 200 */
++
+ 
+ /********************************/
+ /** third-party VID/PID combos **/
+diff --git a/fs/aio.c b/fs/aio.c
+index 2f7e8c2e3e76..3241659491b1 100644
+--- a/fs/aio.c
++++ b/fs/aio.c
+@@ -719,6 +719,9 @@ static struct kioctx *ioctx_alloc(unsigned nr_events)
+ err_cleanup:
+       aio_nr_sub(ctx->max_reqs);
+ err_ctx:
++      atomic_set(&ctx->dead, 1);
++      if (ctx->mmap_size)
++              vm_munmap(ctx->mmap_base, ctx->mmap_size);
+       aio_free_ring(ctx);
+ err:
+       mutex_unlock(&ctx->ring_lock);
+diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
+index a7f32bfdd5e7..ec8b6542c8bd 100644
+--- a/fs/btrfs/tree-log.c
++++ b/fs/btrfs/tree-log.c
+@@ -1235,21 +1235,13 @@ out:
+ }
+ 
+ static int insert_orphan_item(struct btrfs_trans_handle *trans,
+-                            struct btrfs_root *root, u64 offset)
++                            struct btrfs_root *root, u64 ino)
+ {
+       int ret;
+-      struct btrfs_path *path;
+-
+-      path = btrfs_alloc_path();
+-      if (!path)
+-              return -ENOMEM;
+ 
+-      ret = btrfs_find_item(root, path, BTRFS_ORPHAN_OBJECTID,
+-                      offset, BTRFS_ORPHAN_ITEM_KEY, NULL);
+-      if (ret > 0)
+-              ret = btrfs_insert_orphan_item(trans, root, offset);
+-
+-      btrfs_free_path(path);
++      ret = btrfs_insert_orphan_item(trans, root, ino);
++      if (ret == -EEXIST)
++              ret = 0;
+ 
+       return ret;
+ }
+diff --git a/fs/cifs/file.c b/fs/cifs/file.c
+index 0218a9b23b38..40ddb6e93912 100644
+--- a/fs/cifs/file.c
++++ b/fs/cifs/file.c
+@@ -1821,6 +1821,7 @@ refind_writable:
+                       cifsFileInfo_put(inv_file);
+                       spin_lock(&cifs_file_list_lock);
+                       ++refind;
++                      inv_file = NULL;
+                       goto refind_writable;
+               }
+       }
+diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
+index 34a17d425be6..30f3eb5bc022 100644
+--- a/fs/cifs/smb2ops.c
++++ b/fs/cifs/smb2ops.c
+@@ -630,7 +630,8 @@ smb2_clone_range(const unsigned int xid,
+ 
+                       /* No need to change MaxChunks since already set to 1 */
+                       chunk_sizes_updated = true;
+-              }
++              } else
++                      goto cchunk_out;
+       }
+ 
+ cchunk_out:
+diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
+index 51632c40e896..7fe30f655aa5 100644
+--- a/fs/ocfs2/file.c
++++ b/fs/ocfs2/file.c
+@@ -2391,10 +2391,14 @@ out_dio:
+       /* buffered aio wouldn't have proper lock coverage today */
+       BUG_ON(ret == -EIOCBQUEUED && !(file->f_flags & O_DIRECT));
+ 
++      if (unlikely(written <= 0))
++              goto no_sync;
++
+       if (((file->f_flags & O_DSYNC) && !direct_io) || IS_SYNC(inode) ||
+           ((file->f_flags & O_DIRECT) && !direct_io)) {
+-              ret = filemap_fdatawrite_range(file->f_mapping, *ppos,
+-                                             *ppos + count - 1);
++              ret = filemap_fdatawrite_range(file->f_mapping,
++                                             iocb->ki_pos - written,
++                                             iocb->ki_pos - 1);
+               if (ret < 0)
+                       written = ret;
+ 
+@@ -2407,10 +2411,12 @@ out_dio:
+               }
+ 
+               if (!ret)
+-                      ret = filemap_fdatawait_range(file->f_mapping, *ppos,
+-                                                    *ppos + count - 1);
++                      ret = filemap_fdatawait_range(file->f_mapping,
++                                                    iocb->ki_pos - written,
++                                                    iocb->ki_pos - 1);
+       }
+ 
++no_sync:
+       /*
+        * deep in g_f_a_w_n()->ocfs2_direct_IO we pass in a ocfs2_dio_end_io
+        * function pointer which is called when o_direct io completes so that
+diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
+index bbc3a6c88fce..33fd7ff53a77 100644
+--- a/include/linux/blk_types.h
++++ b/include/linux/blk_types.h
+@@ -180,7 +180,9 @@ enum rq_flag_bits {
+       __REQ_ELVPRIV,          /* elevator private data attached */
+       __REQ_FAILED,           /* set if the request failed */
+       __REQ_QUIET,            /* don't worry about errors */
+-      __REQ_PREEMPT,          /* set for "ide_preempt" requests */
++      __REQ_PREEMPT,          /* set for "ide_preempt" requests and also
++                                 for requests for which the SCSI "quiesce"
++                                 state must be ignored. */
+       __REQ_ALLOCED,          /* request came from our alloc pool */
+       __REQ_COPY_USER,        /* contains copies of user pages */
+       __REQ_FLUSH_SEQ,        /* request for flush sequence */
+diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h
+index 50fcbb0ac4e7..d1338170b6b9 100644
+--- a/include/linux/cpuidle.h
++++ b/include/linux/cpuidle.h
+@@ -69,7 +69,6 @@ struct cpuidle_device {
+       unsigned int            cpu;
+ 
+       int                     last_residency;
+-      int                     state_count;
+       struct cpuidle_state_usage      states_usage[CPUIDLE_STATE_MAX];
+       struct cpuidle_state_kobj *kobjs[CPUIDLE_STATE_MAX];
+       struct cpuidle_driver_kobj *kobj_driver;
+diff --git a/kernel/sched/core.c b/kernel/sched/core.c
+index 9a3f3c4e1f5a..5e973efc036e 100644
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -2980,6 +2980,8 @@ void rt_mutex_setprio(struct task_struct *p, int prio)
+       } else {
+               if (dl_prio(oldprio))
+                       p->dl.dl_boosted = 0;
++              if (rt_prio(oldprio))
++                      p->rt.timeout = 0;
+               p->sched_class = &fair_sched_class;
+       }
+ 
+diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
+index f6f23833de44..c8e450132813 100644
+--- a/mm/memory_hotplug.c
++++ b/mm/memory_hotplug.c
+@@ -1016,6 +1016,10 @@ static pg_data_t __ref *hotadd_new_pgdat(int nid, u64 
start)
+                       return NULL;
+ 
+               arch_refresh_nodedata(nid, pgdat);
++      } else {
++              /* Reset the nr_zones and classzone_idx to 0 before reuse */
++              pgdat->nr_zones = 0;
++              pgdat->classzone_idx = 0;
+       }
+ 
+       /* we can use NODE_DATA(nid) from here */
+@@ -1863,15 +1867,6 @@ void try_offline_node(int nid)
+               if (is_vmalloc_addr(zone->wait_table))
+                       vfree(zone->wait_table);
+       }
+-
+-      /*
+-       * Since there is no way to guarentee the address of pgdat/zone is not
+-       * on stack of any kernel threads or used by other kernel objects
+-       * without reference counting or other symchronizing method, do not
+-       * reset node_data and free pgdat here. Just reset it to 0 and reuse
+-       * the memory when the node is online again.
+-       */
+-      memset(pgdat, 0, sizeof(*pgdat));
+ }
+ EXPORT_SYMBOL(try_offline_node);
+ 
+diff --git a/mm/page-writeback.c b/mm/page-writeback.c
+index 9f45f87a5859..51d8d15f48d7 100644
+--- a/mm/page-writeback.c
++++ b/mm/page-writeback.c
+@@ -878,8 +878,11 @@ static void bdi_update_write_bandwidth(struct 
backing_dev_info *bdi,
+        *                   bw * elapsed + write_bandwidth * (period - elapsed)
+        * write_bandwidth = ---------------------------------------------------
+        *                                          period
++       *
++       * @written may have decreased due to account_page_redirty().
++       * Avoid underflowing @bw calculation.
+        */
+-      bw = written - bdi->written_stamp;
++      bw = written - min(written, bdi->written_stamp);
+       bw *= HZ;
+       if (unlikely(elapsed > period)) {
+               do_div(bw, elapsed);
+@@ -943,7 +946,7 @@ static void global_update_bandwidth(unsigned long thresh,
+                                   unsigned long now)
+ {
+       static DEFINE_SPINLOCK(dirty_lock);
+-      static unsigned long update_time;
++      static unsigned long update_time = INITIAL_JIFFIES;
+ 
+       /*
+        * check locklessly first to optimize away locking for the most time
+diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
+index d0c310801479..96f64e59d70c 100644
+--- a/net/ipv4/tcp_output.c
++++ b/net/ipv4/tcp_output.c
+@@ -2933,6 +2933,7 @@ static int tcp_send_syn_data(struct sock *sk, struct 
sk_buff *syn)
+               goto fallback;
+       syn_data->ip_summed = CHECKSUM_PARTIAL;
+       memcpy(syn_data->cb, syn->cb, sizeof(syn->cb));
++      skb_shinfo(syn_data)->gso_segs = 1;
+       if (unlikely(memcpy_fromiovecend(skb_put(syn_data, space),
+                                        fo->data->msg_iov, 0, space))) {
+               kfree_skb(syn_data);
+diff --git a/net/llc/sysctl_net_llc.c b/net/llc/sysctl_net_llc.c
+index 612a5ddaf93b..799bafc2af39 100644
+--- a/net/llc/sysctl_net_llc.c
++++ b/net/llc/sysctl_net_llc.c
+@@ -18,28 +18,28 @@ static struct ctl_table llc2_timeout_table[] = {
+       {
+               .procname       = "ack",
+               .data           = &sysctl_llc2_ack_timeout,
+-              .maxlen         = sizeof(long),
++              .maxlen         = sizeof(sysctl_llc2_ack_timeout),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec_jiffies,
+       },
+       {
+               .procname       = "busy",
+               .data           = &sysctl_llc2_busy_timeout,
+-              .maxlen         = sizeof(long),
++              .maxlen         = sizeof(sysctl_llc2_busy_timeout),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec_jiffies,
+       },
+       {
+               .procname       = "p",
+               .data           = &sysctl_llc2_p_timeout,
+-              .maxlen         = sizeof(long),
++              .maxlen         = sizeof(sysctl_llc2_p_timeout),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec_jiffies,
+       },
+       {
+               .procname       = "rej",
+               .data           = &sysctl_llc2_rej_timeout,
+-              .maxlen         = sizeof(long),
++              .maxlen         = sizeof(sysctl_llc2_rej_timeout),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec_jiffies,
+       },
+diff --git a/net/rds/sysctl.c b/net/rds/sysctl.c
+index b5cb2aa08f33..35773ad6d23d 100644
+--- a/net/rds/sysctl.c
++++ b/net/rds/sysctl.c
+@@ -71,14 +71,14 @@ static struct ctl_table rds_sysctl_rds_table[] = {
+       {
+               .procname       = "max_unacked_packets",
+               .data           = &rds_sysctl_max_unacked_packets,
+-              .maxlen         = sizeof(unsigned long),
++              .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec,
+       },
+       {
+               .procname       = "max_unacked_bytes",
+               .data           = &rds_sysctl_max_unacked_bytes,
+-              .maxlen         = sizeof(unsigned long),
++              .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec,
+       },
+diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c
+index d60c0ee66387..6c4cbd97a673 100644
+--- a/security/selinux/selinuxfs.c
++++ b/security/selinux/selinuxfs.c
+@@ -152,7 +152,7 @@ static ssize_t sel_write_enforce(struct file *file, const 
char __user *buf,
+               goto out;
+ 
+       /* No partial writes. */
+-      length = EINVAL;
++      length = -EINVAL;
+       if (*ppos != 0)
+               goto out;
+ 
+diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
+index 910f2dbe1b24..ca26373ebe70 100644
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -271,7 +271,7 @@ static void alc_auto_setup_eapd(struct hda_codec *codec, 
bool on)
+ {
+       /* We currently only handle front, HP */
+       static hda_nid_t pins[] = {
+-              0x0f, 0x10, 0x14, 0x15, 0
++              0x0f, 0x10, 0x14, 0x15, 0x17, 0
+       };
+       hda_nid_t *p;
+       for (p = pins; *p; p++)
+@@ -2885,6 +2885,8 @@ static void alc283_init(struct hda_codec *codec)
+ 
+       if (!hp_pin)
+               return;
++
++      msleep(30);
+       hp_pin_sense = snd_hda_jack_detect(codec, hp_pin);
+ 
+       /* Index 0x43 Direct Drive HP AMP LPM Control 1 */
+@@ -3951,6 +3953,7 @@ enum {
+       ALC269_FIXUP_QUANTA_MUTE,
+       ALC269_FIXUP_LIFEBOOK,
+       ALC269_FIXUP_LIFEBOOK_EXTMIC,
++      ALC269_FIXUP_LIFEBOOK_HP_PIN,
+       ALC269_FIXUP_AMIC,
+       ALC269_FIXUP_DMIC,
+       ALC269VB_FIXUP_AMIC,
+@@ -4085,6 +4088,13 @@ static const struct hda_fixup alc269_fixups[] = {
+                       { }
+               },
+       },
++      [ALC269_FIXUP_LIFEBOOK_HP_PIN] = {
++              .type = HDA_FIXUP_PINS,
++              .v.pins = (const struct hda_pintbl[]) {
++                      { 0x21, 0x0221102f }, /* HP out */
++                      { }
++              },
++      },
+       [ALC269_FIXUP_AMIC] = {
+               .type = HDA_FIXUP_PINS,
+               .v.pins = (const struct hda_pintbl[]) {
+@@ -4538,6 +4548,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
+       SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
+       SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO),
+       SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook", ALC269_FIXUP_LIFEBOOK),
++      SND_PCI_QUIRK(0x10cf, 0x15dc, "Lifebook T731", 
ALC269_FIXUP_LIFEBOOK_HP_PIN),
+       SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", 
ALC269_FIXUP_LIFEBOOK_EXTMIC),
+       SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", 
ALC269_FIXUP_SKU_IGNORE),
+       SND_PCI_QUIRK(0x17aa, 0x215e, "Thinkpad L512", ALC269_FIXUP_SKU_IGNORE),
+diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
+index 5a723df670b4..a82ec53b8fb3 100644
+--- a/sound/usb/mixer_quirks.c
++++ b/sound/usb/mixer_quirks.c
+@@ -178,6 +178,7 @@ static const struct rc_config {
+       { USB_ID(0x041e, 0x3040), 2, 2, 6, 6,  2,  0x6e91 }, /* Live! 24-bit */
+       { USB_ID(0x041e, 0x3042), 0, 1, 1, 1,  1,  0x000d }, /* Usb X-Fi S51 */
+       { USB_ID(0x041e, 0x30df), 0, 1, 1, 1,  1,  0x000d }, /* Usb X-Fi S51 
Pro */
++      { USB_ID(0x041e, 0x3237), 0, 1, 1, 1,  1,  0x000d }, /* Usb X-Fi S51 
Pro */
+       { USB_ID(0x041e, 0x3048), 2, 2, 6, 6,  2,  0x6e91 }, /* Toshiba SB0500 
*/
+ };
+ 

Reply via email to