mirror of
https://github.com/Fishwaldo/build.git
synced 2025-03-29 10:11:23 +00:00
748 lines
25 KiB
Diff
748 lines
25 KiB
Diff
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 */
|
|
};
|
|
|