commit:     1ed07cdf3b5a38329411bb4efeae4093c2160fae
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Mon Apr 20 09:26:56 2015 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Mon Apr 20 09:26:56 2015 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=1ed07cdf

Linux patch 3.10.75

 0000_README              |   4 +
 1074_linux-3.10.75.patch | 748 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 752 insertions(+)

diff --git a/0000_README b/0000_README
index 43a21aa..7ca2835 100644
--- a/0000_README
+++ b/0000_README
@@ -338,6 +338,10 @@ Patch:  1073_linux-3.10.74.patch
 From:   http://www.kernel.org
 Desc:   Linux 3.10.74
 
+Patch:  1074_linux-3.10.75.patch
+From:   http://www.kernel.org
+Desc:   Linux 3.10.75
+
 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/1074_linux-3.10.75.patch b/1074_linux-3.10.75.patch
new file mode 100644
index 0000000..01ac0ff
--- /dev/null
+++ b/1074_linux-3.10.75.patch
@@ -0,0 +1,748 @@
+diff --git a/Makefile b/Makefile
+index d2a3930159ea..87909d8302ad 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 3
+ PATCHLEVEL = 10
+-SUBLEVEL = 74
++SUBLEVEL = 75
+ EXTRAVERSION =
+ NAME = TOSSUG Baby Fish
+ 
+diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
+index a88894190e41..c991fe680e58 100644
+--- a/drivers/acpi/processor_idle.c
++++ b/drivers/acpi/processor_idle.c
+@@ -978,7 +978,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 cf1576d54363..a5c987ae665d 100644
+--- a/drivers/block/nbd.c
++++ b/drivers/block/nbd.c
+@@ -815,10 +815,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);
+@@ -840,6 +836,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/dma/omap-dma.c b/drivers/dma/omap-dma.c
+index ec3fc4fd9160..b94a37630e36 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 b131520521e4..72b02483ff03 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 7da0832f187b..01d661e0fa6c 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.
+  */
+@@ -187,7 +191,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 2c6f0f2ecd9d..949b38633496 100644
+--- a/drivers/infiniband/core/uverbs_main.c
++++ b/drivers/infiniband/core/uverbs_main.c
+@@ -460,6 +460,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 4d599cedbb0b..6ee534874535 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 f804c1faa7ff..d3b54f7b849f 100644
+--- a/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
++++ b/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
+@@ -29,7 +29,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/net/wireless/iwlwifi/dvm/dev.h 
b/drivers/net/wireless/iwlwifi/dvm/dev.h
+index 71ea77576d22..e783ea0e3837 100644
+--- a/drivers/net/wireless/iwlwifi/dvm/dev.h
++++ b/drivers/net/wireless/iwlwifi/dvm/dev.h
+@@ -670,7 +670,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 0a1cdc5e856b..5ad94a8080b8 100644
+--- a/drivers/net/wireless/iwlwifi/dvm/ucode.c
++++ b/drivers/net/wireless/iwlwifi/dvm/ucode.c
+@@ -425,9 +425,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);
+@@ -447,8 +444,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/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
+index 1ad39c799c74..bfe812fcce34 100644
+--- a/drivers/scsi/be2iscsi/be_main.c
++++ b/drivers/scsi/be2iscsi/be_main.c
+@@ -5080,9 +5080,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 e5953c8018c5..9f3168e8e5a8 100644
+--- a/drivers/scsi/scsi_lib.c
++++ b/drivers/scsi/scsi_lib.c
+@@ -1242,9 +1242,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 9559ea749d83..5a3ea20e9cb5 100644
+--- a/drivers/target/iscsi/iscsi_target.c
++++ b/drivers/target/iscsi/iscsi_target.c
+@@ -1179,7 +1179,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/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
+index 0e57bcb8e3f7..2320e20d5be7 100644
+--- a/drivers/usb/host/xhci-pci.c
++++ b/drivers/usb/host/xhci-pci.c
+@@ -94,6 +94,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) {
+@@ -109,7 +110,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_ETRON &&
+                       pdev->device == PCI_DEVICE_ID_ASROCK_P67) {
+diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
+index cf127a080644..4d918d5f945a 100644
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -620,6 +620,7 @@ static 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:
+        */
+@@ -1899,8 +1900,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 e8d352615297..e906b6aa2424 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/cifs/file.c b/fs/cifs/file.c
+index 5fcc10fa62bd..f4a8577c3e91 100644
+--- a/fs/cifs/file.c
++++ b/fs/cifs/file.c
+@@ -1789,6 +1789,7 @@ refind_writable:
+                       cifsFileInfo_put(inv_file);
+                       spin_lock(&cifs_file_list_lock);
+                       ++refind;
++                      inv_file = NULL;
+                       goto refind_writable;
+               }
+       }
+diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
+index 46387e49aa46..8cd6474e248f 100644
+--- a/fs/ocfs2/file.c
++++ b/fs/ocfs2/file.c
+@@ -2372,10 +2372,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;
+ 
+@@ -2388,10 +2392,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/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
+index 65fc60a07c47..9f285fb9bab3 100644
+--- a/fs/proc/task_mmu.c
++++ b/fs/proc/task_mmu.c
+@@ -1110,9 +1110,19 @@ out:
+       return ret;
+ }
+ 
++static int pagemap_open(struct inode *inode, struct file *file)
++{
++      /* do not disclose physical addresses to unprivileged
++         userspace (closes a rowhammer attack vector) */
++      if (!capable(CAP_SYS_ADMIN))
++              return -EPERM;
++      return 0;
++}
++
+ const struct file_operations proc_pagemap_operations = {
+       .llseek         = mem_lseek, /* borrow this */
+       .read           = pagemap_read,
++      .open           = pagemap_open,
+ };
+ #endif /* CONFIG_PROC_PAGE_MONITOR */
+ 
+diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
+index fa1abeb45b76..49c48dda162d 100644
+--- a/include/linux/blk_types.h
++++ b/include/linux/blk_types.h
+@@ -170,7 +170,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/kernel.h b/include/linux/kernel.h
+index e9ef6d6b51d5..341551c7b4c8 100644
+--- a/include/linux/kernel.h
++++ b/include/linux/kernel.h
+@@ -29,6 +29,19 @@
+ #define ULLONG_MAX    (~0ULL)
+ #define SIZE_MAX      (~(size_t)0)
+ 
++#define U8_MAX                ((u8)~0U)
++#define S8_MAX                ((s8)(U8_MAX>>1))
++#define S8_MIN                ((s8)(-S8_MAX - 1))
++#define U16_MAX               ((u16)~0U)
++#define S16_MAX               ((s16)(U16_MAX>>1))
++#define S16_MIN               ((s16)(-S16_MAX - 1))
++#define U32_MAX               ((u32)~0U)
++#define S32_MAX               ((s32)(U32_MAX>>1))
++#define S32_MIN               ((s32)(-S32_MAX - 1))
++#define U64_MAX               ((u64)~0ULL)
++#define S64_MAX               ((s64)(U64_MAX>>1))
++#define S64_MIN               ((s64)(-S64_MAX - 1))
++
+ #define STACK_MAGIC   0xdeadbeef
+ 
+ #define REPEAT_BYTE(x)        ((~0ul / 0xff) * (x))
+diff --git a/ipc/compat.c b/ipc/compat.c
+index 892f6585dd60..d3b376025e9b 100644
+--- a/ipc/compat.c
++++ b/ipc/compat.c
+@@ -381,7 +381,7 @@ COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, 
second,
+                       uptr = compat_ptr(ipck.msgp);
+                       fifth = ipck.msgtyp;
+               }
+-              return do_msgrcv(first, uptr, second, fifth, third,
++              return do_msgrcv(first, uptr, second, (s32)fifth, third,
+                                compat_do_msg_fill);
+       }
+       case MSGGET:
+diff --git a/kernel/printk.c b/kernel/printk.c
+index f7aff4bd5454..fd0154a57d6e 100644
+--- a/kernel/printk.c
++++ b/kernel/printk.c
+@@ -107,7 +107,7 @@ static struct console *exclusive_console;
+  */
+ struct console_cmdline
+ {
+-      char    name[8];                        /* Name of the driver       */
++      char    name[16];                       /* Name of the driver       */
+       int     index;                          /* Minor dev. to use        */
+       char    *options;                       /* Options for the driver   */
+ #ifdef CONFIG_A11Y_BRAILLE_CONSOLE
+@@ -2290,6 +2290,8 @@ void register_console(struct console *newcon)
+        */
+       for (i = 0; i < MAX_CMDLINECONSOLES && console_cmdline[i].name[0];
+                       i++) {
++              BUILD_BUG_ON(sizeof(console_cmdline[i].name) !=
++                           sizeof(newcon->name));
+               if (strcmp(console_cmdline[i].name, newcon->name) != 0)
+                       continue;
+               if (newcon->index >= 0 &&
+diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
+index 1ad92b46753e..2298237db142 100644
+--- a/mm/memory_hotplug.c
++++ b/mm/memory_hotplug.c
+@@ -1039,6 +1039,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 */
+@@ -1802,15 +1806,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 73cbc5dc150b..b034f79deb0e 100644
+--- a/mm/page-writeback.c
++++ b/mm/page-writeback.c
+@@ -793,8 +793,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);
+@@ -858,7 +861,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 913dc4f49b10..92b5e1f7d3b0 100644
+--- a/net/ipv4/tcp_output.c
++++ b/net/ipv4/tcp_output.c
+@@ -2909,6 +2909,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/netfilter/nfnetlink_queue_core.c 
b/net/netfilter/nfnetlink_queue_core.c
+index 2b8199f68785..5497f50af2f0 100644
+--- a/net/netfilter/nfnetlink_queue_core.c
++++ b/net/netfilter/nfnetlink_queue_core.c
+@@ -228,7 +228,7 @@ nfqnl_flush(struct nfqnl_instance *queue, nfqnl_cmpfn 
cmpfn, unsigned long data)
+ }
+ 
+ static int
+-nfqnl_zcopy(struct sk_buff *to, const struct sk_buff *from, int len, int hlen)
++nfqnl_zcopy(struct sk_buff *to, struct sk_buff *from, int len, int hlen)
+ {
+       int i, j = 0;
+       int plen = 0; /* length of skb->head fragment */
+diff --git a/net/rds/sysctl.c b/net/rds/sysctl.c
+index 907214b4c4d0..fc6cbe827856 100644
+--- a/net/rds/sysctl.c
++++ b/net/rds/sysctl.c
+@@ -71,14 +71,14 @@ static 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 ff427733c290..464be51025f6 100644
+--- a/security/selinux/selinuxfs.c
++++ b/security/selinux/selinuxfs.c
+@@ -150,7 +150,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 4008034b6ebe..a8eb7fe2766e 100644
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -266,7 +266,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++)
+@@ -3363,6 +3363,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,
+@@ -3477,6 +3478,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[]) {
+@@ -3727,6 +3735,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
+       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, 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 c89a5bf5c00e..c311681bd390 100644
+--- a/sound/usb/mixer_quirks.c
++++ b/sound/usb/mixer_quirks.c
+@@ -175,6 +175,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