Magellan Linux

Contents of /trunk/kernel-alx/patches-3.10/0174-3.10.75-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2662 - (show annotations) (download)
Tue Jul 21 16:20:23 2015 UTC (8 years, 9 months ago) by niro
File size: 25722 byte(s)
-linux-3.10.75
1 diff --git a/Makefile b/Makefile
2 index d2a3930159ea..87909d8302ad 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 3
7 PATCHLEVEL = 10
8 -SUBLEVEL = 74
9 +SUBLEVEL = 75
10 EXTRAVERSION =
11 NAME = TOSSUG Baby Fish
12
13 diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
14 index a88894190e41..c991fe680e58 100644
15 --- a/drivers/acpi/processor_idle.c
16 +++ b/drivers/acpi/processor_idle.c
17 @@ -978,7 +978,7 @@ static int acpi_processor_setup_cpuidle_states(struct acpi_processor *pr)
18 return -EINVAL;
19
20 drv->safe_state_index = -1;
21 - for (i = 0; i < CPUIDLE_STATE_MAX; i++) {
22 + for (i = CPUIDLE_DRIVER_STATE_START; i < CPUIDLE_STATE_MAX; i++) {
23 drv->states[i].name[0] = '\0';
24 drv->states[i].desc[0] = '\0';
25 }
26 diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
27 index cf1576d54363..a5c987ae665d 100644
28 --- a/drivers/block/nbd.c
29 +++ b/drivers/block/nbd.c
30 @@ -815,10 +815,6 @@ static int __init nbd_init(void)
31 return -EINVAL;
32 }
33
34 - nbd_dev = kcalloc(nbds_max, sizeof(*nbd_dev), GFP_KERNEL);
35 - if (!nbd_dev)
36 - return -ENOMEM;
37 -
38 part_shift = 0;
39 if (max_part > 0) {
40 part_shift = fls(max_part);
41 @@ -840,6 +836,10 @@ static int __init nbd_init(void)
42 if (nbds_max > 1UL << (MINORBITS - part_shift))
43 return -EINVAL;
44
45 + nbd_dev = kcalloc(nbds_max, sizeof(*nbd_dev), GFP_KERNEL);
46 + if (!nbd_dev)
47 + return -ENOMEM;
48 +
49 for (i = 0; i < nbds_max; i++) {
50 struct gendisk *disk = alloc_disk(1 << part_shift);
51 if (!disk)
52 diff --git a/drivers/dma/omap-dma.c b/drivers/dma/omap-dma.c
53 index ec3fc4fd9160..b94a37630e36 100644
54 --- a/drivers/dma/omap-dma.c
55 +++ b/drivers/dma/omap-dma.c
56 @@ -487,6 +487,7 @@ static int omap_dma_terminate_all(struct omap_chan *c)
57 * c->desc is NULL and exit.)
58 */
59 if (c->desc) {
60 + omap_dma_desc_free(&c->desc->vd);
61 c->desc = NULL;
62 /* Avoid stopping the dma twice */
63 if (!c->paused)
64 diff --git a/drivers/gpu/drm/radeon/radeon_bios.c b/drivers/gpu/drm/radeon/radeon_bios.c
65 index b131520521e4..72b02483ff03 100644
66 --- a/drivers/gpu/drm/radeon/radeon_bios.c
67 +++ b/drivers/gpu/drm/radeon/radeon_bios.c
68 @@ -76,7 +76,7 @@ static bool igp_read_bios_from_vram(struct radeon_device *rdev)
69
70 static bool radeon_read_bios(struct radeon_device *rdev)
71 {
72 - uint8_t __iomem *bios;
73 + uint8_t __iomem *bios, val1, val2;
74 size_t size;
75
76 rdev->bios = NULL;
77 @@ -86,15 +86,19 @@ static bool radeon_read_bios(struct radeon_device *rdev)
78 return false;
79 }
80
81 - if (size == 0 || bios[0] != 0x55 || bios[1] != 0xaa) {
82 + val1 = readb(&bios[0]);
83 + val2 = readb(&bios[1]);
84 +
85 + if (size == 0 || val1 != 0x55 || val2 != 0xaa) {
86 pci_unmap_rom(rdev->pdev, bios);
87 return false;
88 }
89 - rdev->bios = kmemdup(bios, size, GFP_KERNEL);
90 + rdev->bios = kzalloc(size, GFP_KERNEL);
91 if (rdev->bios == NULL) {
92 pci_unmap_rom(rdev->pdev, bios);
93 return false;
94 }
95 + memcpy_fromio(rdev->bios, bios, size);
96 pci_unmap_rom(rdev->pdev, bios);
97 return true;
98 }
99 diff --git a/drivers/iio/imu/adis_trigger.c b/drivers/iio/imu/adis_trigger.c
100 index e0017c22bb9c..f53e9a803a0e 100644
101 --- a/drivers/iio/imu/adis_trigger.c
102 +++ b/drivers/iio/imu/adis_trigger.c
103 @@ -60,7 +60,7 @@ int adis_probe_trigger(struct adis *adis, struct iio_dev *indio_dev)
104 iio_trigger_set_drvdata(adis->trig, adis);
105 ret = iio_trigger_register(adis->trig);
106
107 - indio_dev->trig = adis->trig;
108 + indio_dev->trig = iio_trigger_get(adis->trig);
109 if (ret)
110 goto error_free_irq;
111
112 diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
113 index 7da0832f187b..01d661e0fa6c 100644
114 --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
115 +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
116 @@ -25,6 +25,16 @@
117 #include <linux/poll.h>
118 #include "inv_mpu_iio.h"
119
120 +static void inv_clear_kfifo(struct inv_mpu6050_state *st)
121 +{
122 + unsigned long flags;
123 +
124 + /* take the spin lock sem to avoid interrupt kick in */
125 + spin_lock_irqsave(&st->time_stamp_lock, flags);
126 + kfifo_reset(&st->timestamps);
127 + spin_unlock_irqrestore(&st->time_stamp_lock, flags);
128 +}
129 +
130 int inv_reset_fifo(struct iio_dev *indio_dev)
131 {
132 int result;
133 @@ -51,6 +61,10 @@ int inv_reset_fifo(struct iio_dev *indio_dev)
134 INV_MPU6050_BIT_FIFO_RST);
135 if (result)
136 goto reset_fifo_fail;
137 +
138 + /* clear timestamps fifo */
139 + inv_clear_kfifo(st);
140 +
141 /* enable interrupt */
142 if (st->chip_config.accl_fifo_enable ||
143 st->chip_config.gyro_fifo_enable) {
144 @@ -84,16 +98,6 @@ reset_fifo_fail:
145 return result;
146 }
147
148 -static void inv_clear_kfifo(struct inv_mpu6050_state *st)
149 -{
150 - unsigned long flags;
151 -
152 - /* take the spin lock sem to avoid interrupt kick in */
153 - spin_lock_irqsave(&st->time_stamp_lock, flags);
154 - kfifo_reset(&st->timestamps);
155 - spin_unlock_irqrestore(&st->time_stamp_lock, flags);
156 -}
157 -
158 /**
159 * inv_mpu6050_irq_handler() - Cache a timestamp at each data ready interrupt.
160 */
161 @@ -187,7 +191,6 @@ end_session:
162 flush_fifo:
163 /* Flush HW and SW FIFOs. */
164 inv_reset_fifo(indio_dev);
165 - inv_clear_kfifo(st);
166 mutex_unlock(&indio_dev->mlock);
167 iio_trigger_notify_done(indio_dev->trig);
168
169 diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c
170 index a84112322071..055ebebc07dd 100644
171 --- a/drivers/infiniband/core/umem.c
172 +++ b/drivers/infiniband/core/umem.c
173 @@ -94,6 +94,14 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
174 if (dmasync)
175 dma_set_attr(DMA_ATTR_WRITE_BARRIER, &attrs);
176
177 + /*
178 + * If the combination of the addr and size requested for this memory
179 + * region causes an integer overflow, return error.
180 + */
181 + if ((PAGE_ALIGN(addr + size) <= size) ||
182 + (PAGE_ALIGN(addr + size) <= addr))
183 + return ERR_PTR(-EINVAL);
184 +
185 if (!can_do_mlock())
186 return ERR_PTR(-EPERM);
187
188 diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c
189 index 2c6f0f2ecd9d..949b38633496 100644
190 --- a/drivers/infiniband/core/uverbs_main.c
191 +++ b/drivers/infiniband/core/uverbs_main.c
192 @@ -460,6 +460,7 @@ static void ib_uverbs_async_handler(struct ib_uverbs_file *file,
193
194 entry->desc.async.element = element;
195 entry->desc.async.event_type = event;
196 + entry->desc.async.reserved = 0;
197 entry->counter = counter;
198
199 list_add_tail(&entry->list, &file->async_file->event_list);
200 diff --git a/drivers/infiniband/hw/mlx4/mad.c b/drivers/infiniband/hw/mlx4/mad.c
201 index 4d599cedbb0b..6ee534874535 100644
202 --- a/drivers/infiniband/hw/mlx4/mad.c
203 +++ b/drivers/infiniband/hw/mlx4/mad.c
204 @@ -64,6 +64,14 @@ enum {
205 #define GUID_TBL_BLK_NUM_ENTRIES 8
206 #define GUID_TBL_BLK_SIZE (GUID_TBL_ENTRY_SIZE * GUID_TBL_BLK_NUM_ENTRIES)
207
208 +/* Counters should be saturate once they reach their maximum value */
209 +#define ASSIGN_32BIT_COUNTER(counter, value) do {\
210 + if ((value) > U32_MAX) \
211 + counter = cpu_to_be32(U32_MAX); \
212 + else \
213 + counter = cpu_to_be32(value); \
214 +} while (0)
215 +
216 struct mlx4_mad_rcv_buf {
217 struct ib_grh grh;
218 u8 payload[256];
219 @@ -730,10 +738,14 @@ static int ib_process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num,
220 static void edit_counter(struct mlx4_counter *cnt,
221 struct ib_pma_portcounters *pma_cnt)
222 {
223 - pma_cnt->port_xmit_data = cpu_to_be32((be64_to_cpu(cnt->tx_bytes)>>2));
224 - pma_cnt->port_rcv_data = cpu_to_be32((be64_to_cpu(cnt->rx_bytes)>>2));
225 - pma_cnt->port_xmit_packets = cpu_to_be32(be64_to_cpu(cnt->tx_frames));
226 - pma_cnt->port_rcv_packets = cpu_to_be32(be64_to_cpu(cnt->rx_frames));
227 + ASSIGN_32BIT_COUNTER(pma_cnt->port_xmit_data,
228 + (be64_to_cpu(cnt->tx_bytes) >> 2));
229 + ASSIGN_32BIT_COUNTER(pma_cnt->port_rcv_data,
230 + (be64_to_cpu(cnt->rx_bytes) >> 2));
231 + ASSIGN_32BIT_COUNTER(pma_cnt->port_xmit_packets,
232 + be64_to_cpu(cnt->tx_frames));
233 + ASSIGN_32BIT_COUNTER(pma_cnt->port_rcv_packets,
234 + be64_to_cpu(cnt->rx_frames));
235 }
236
237 static int iboe_process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num,
238 diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_common.h b/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
239 index f804c1faa7ff..d3b54f7b849f 100644
240 --- a/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
241 +++ b/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
242 @@ -29,7 +29,7 @@
243
244 /* Offset base used to differentiate between CAPTURE and OUTPUT
245 * while mmaping */
246 -#define DST_QUEUE_OFF_BASE (TASK_SIZE / 2)
247 +#define DST_QUEUE_OFF_BASE (1 << 30)
248
249 #define MFC_BANK1_ALLOC_CTX 0
250 #define MFC_BANK2_ALLOC_CTX 1
251 diff --git a/drivers/net/wireless/iwlwifi/dvm/dev.h b/drivers/net/wireless/iwlwifi/dvm/dev.h
252 index 71ea77576d22..e783ea0e3837 100644
253 --- a/drivers/net/wireless/iwlwifi/dvm/dev.h
254 +++ b/drivers/net/wireless/iwlwifi/dvm/dev.h
255 @@ -670,7 +670,6 @@ struct iwl_priv {
256 unsigned long reload_jiffies;
257 int reload_count;
258 bool ucode_loaded;
259 - bool init_ucode_run; /* Don't run init uCode again */
260
261 u8 plcp_delta_threshold;
262
263 diff --git a/drivers/net/wireless/iwlwifi/dvm/ucode.c b/drivers/net/wireless/iwlwifi/dvm/ucode.c
264 index 0a1cdc5e856b..5ad94a8080b8 100644
265 --- a/drivers/net/wireless/iwlwifi/dvm/ucode.c
266 +++ b/drivers/net/wireless/iwlwifi/dvm/ucode.c
267 @@ -425,9 +425,6 @@ int iwl_run_init_ucode(struct iwl_priv *priv)
268 if (!priv->fw->img[IWL_UCODE_INIT].sec[0].len)
269 return 0;
270
271 - if (priv->init_ucode_run)
272 - return 0;
273 -
274 iwl_init_notification_wait(&priv->notif_wait, &calib_wait,
275 calib_complete, ARRAY_SIZE(calib_complete),
276 iwlagn_wait_calib, priv);
277 @@ -447,8 +444,6 @@ int iwl_run_init_ucode(struct iwl_priv *priv)
278 */
279 ret = iwl_wait_notification(&priv->notif_wait, &calib_wait,
280 UCODE_CALIB_TIMEOUT);
281 - if (!ret)
282 - priv->init_ucode_run = true;
283
284 goto out;
285
286 diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
287 index 1ad39c799c74..bfe812fcce34 100644
288 --- a/drivers/scsi/be2iscsi/be_main.c
289 +++ b/drivers/scsi/be2iscsi/be_main.c
290 @@ -5080,9 +5080,9 @@ free_port:
291 hba_free:
292 if (phba->msix_enabled)
293 pci_disable_msix(phba->pcidev);
294 - iscsi_host_remove(phba->shost);
295 pci_dev_put(phba->pcidev);
296 iscsi_host_free(phba->shost);
297 + pci_set_drvdata(pcidev, NULL);
298 disable_pci:
299 pci_disable_device(pcidev);
300 return ret;
301 diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
302 index e5953c8018c5..9f3168e8e5a8 100644
303 --- a/drivers/scsi/scsi_lib.c
304 +++ b/drivers/scsi/scsi_lib.c
305 @@ -1242,9 +1242,11 @@ int scsi_prep_state_check(struct scsi_device *sdev, struct request *req)
306 "rejecting I/O to dead device\n");
307 ret = BLKPREP_KILL;
308 break;
309 - case SDEV_QUIESCE:
310 case SDEV_BLOCK:
311 case SDEV_CREATED_BLOCK:
312 + ret = BLKPREP_DEFER;
313 + break;
314 + case SDEV_QUIESCE:
315 /*
316 * If the devices is blocked we defer normal commands.
317 */
318 diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
319 index 9559ea749d83..5a3ea20e9cb5 100644
320 --- a/drivers/target/iscsi/iscsi_target.c
321 +++ b/drivers/target/iscsi/iscsi_target.c
322 @@ -1179,7 +1179,7 @@ iscsit_handle_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
323 * traditional iSCSI block I/O.
324 */
325 if (iscsit_allocate_iovecs(cmd) < 0) {
326 - return iscsit_add_reject_cmd(cmd,
327 + return iscsit_reject_cmd(cmd,
328 ISCSI_REASON_BOOKMARK_NO_RESOURCES, buf);
329 }
330 immed_data = cmd->immediate_data;
331 diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
332 index 0e57bcb8e3f7..2320e20d5be7 100644
333 --- a/drivers/usb/host/xhci-pci.c
334 +++ b/drivers/usb/host/xhci-pci.c
335 @@ -94,6 +94,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
336 if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
337 xhci->quirks |= XHCI_LPM_SUPPORT;
338 xhci->quirks |= XHCI_INTEL_HOST;
339 + xhci->quirks |= XHCI_AVOID_BEI;
340 }
341 if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
342 pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) {
343 @@ -109,7 +110,6 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
344 * PPT chipsets.
345 */
346 xhci->quirks |= XHCI_SPURIOUS_REBOOT;
347 - xhci->quirks |= XHCI_AVOID_BEI;
348 }
349 if (pdev->vendor == PCI_VENDOR_ID_ETRON &&
350 pdev->device == PCI_DEVICE_ID_ASROCK_P67) {
351 diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
352 index cf127a080644..4d918d5f945a 100644
353 --- a/drivers/usb/serial/ftdi_sio.c
354 +++ b/drivers/usb/serial/ftdi_sio.c
355 @@ -620,6 +620,7 @@ static struct usb_device_id id_table_combined [] = {
356 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
357 { USB_DEVICE(FTDI_VID, FTDI_NT_ORIONLXM_PID),
358 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
359 + { USB_DEVICE(FTDI_VID, FTDI_SYNAPSE_SS200_PID) },
360 /*
361 * ELV devices:
362 */
363 @@ -1899,8 +1900,12 @@ static int ftdi_8u2232c_probe(struct usb_serial *serial)
364 {
365 struct usb_device *udev = serial->dev;
366
367 - if ((udev->manufacturer && !strcmp(udev->manufacturer, "CALAO Systems")) ||
368 - (udev->product && !strcmp(udev->product, "BeagleBone/XDS100V2")))
369 + if (udev->manufacturer && !strcmp(udev->manufacturer, "CALAO Systems"))
370 + return ftdi_jtag_probe(serial);
371 +
372 + if (udev->product &&
373 + (!strcmp(udev->product, "BeagleBone/XDS100V2") ||
374 + !strcmp(udev->product, "SNAP Connect E10")))
375 return ftdi_jtag_probe(serial);
376
377 return 0;
378 diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
379 index e8d352615297..e906b6aa2424 100644
380 --- a/drivers/usb/serial/ftdi_sio_ids.h
381 +++ b/drivers/usb/serial/ftdi_sio_ids.h
382 @@ -561,6 +561,12 @@
383 */
384 #define FTDI_NT_ORIONLXM_PID 0x7c90 /* OrionLXm Substation Automation Platform */
385
386 +/*
387 + * Synapse Wireless product ids (FTDI_VID)
388 + * http://www.synapse-wireless.com
389 + */
390 +#define FTDI_SYNAPSE_SS200_PID 0x9090 /* SS200 - SNAP Stick 200 */
391 +
392
393 /********************************/
394 /** third-party VID/PID combos **/
395 diff --git a/fs/cifs/file.c b/fs/cifs/file.c
396 index 5fcc10fa62bd..f4a8577c3e91 100644
397 --- a/fs/cifs/file.c
398 +++ b/fs/cifs/file.c
399 @@ -1789,6 +1789,7 @@ refind_writable:
400 cifsFileInfo_put(inv_file);
401 spin_lock(&cifs_file_list_lock);
402 ++refind;
403 + inv_file = NULL;
404 goto refind_writable;
405 }
406 }
407 diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
408 index 46387e49aa46..8cd6474e248f 100644
409 --- a/fs/ocfs2/file.c
410 +++ b/fs/ocfs2/file.c
411 @@ -2372,10 +2372,14 @@ out_dio:
412 /* buffered aio wouldn't have proper lock coverage today */
413 BUG_ON(ret == -EIOCBQUEUED && !(file->f_flags & O_DIRECT));
414
415 + if (unlikely(written <= 0))
416 + goto no_sync;
417 +
418 if (((file->f_flags & O_DSYNC) && !direct_io) || IS_SYNC(inode) ||
419 ((file->f_flags & O_DIRECT) && !direct_io)) {
420 - ret = filemap_fdatawrite_range(file->f_mapping, *ppos,
421 - *ppos + count - 1);
422 + ret = filemap_fdatawrite_range(file->f_mapping,
423 + iocb->ki_pos - written,
424 + iocb->ki_pos - 1);
425 if (ret < 0)
426 written = ret;
427
428 @@ -2388,10 +2392,12 @@ out_dio:
429 }
430
431 if (!ret)
432 - ret = filemap_fdatawait_range(file->f_mapping, *ppos,
433 - *ppos + count - 1);
434 + ret = filemap_fdatawait_range(file->f_mapping,
435 + iocb->ki_pos - written,
436 + iocb->ki_pos - 1);
437 }
438
439 +no_sync:
440 /*
441 * deep in g_f_a_w_n()->ocfs2_direct_IO we pass in a ocfs2_dio_end_io
442 * function pointer which is called when o_direct io completes so that
443 diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
444 index 65fc60a07c47..9f285fb9bab3 100644
445 --- a/fs/proc/task_mmu.c
446 +++ b/fs/proc/task_mmu.c
447 @@ -1110,9 +1110,19 @@ out:
448 return ret;
449 }
450
451 +static int pagemap_open(struct inode *inode, struct file *file)
452 +{
453 + /* do not disclose physical addresses to unprivileged
454 + userspace (closes a rowhammer attack vector) */
455 + if (!capable(CAP_SYS_ADMIN))
456 + return -EPERM;
457 + return 0;
458 +}
459 +
460 const struct file_operations proc_pagemap_operations = {
461 .llseek = mem_lseek, /* borrow this */
462 .read = pagemap_read,
463 + .open = pagemap_open,
464 };
465 #endif /* CONFIG_PROC_PAGE_MONITOR */
466
467 diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
468 index fa1abeb45b76..49c48dda162d 100644
469 --- a/include/linux/blk_types.h
470 +++ b/include/linux/blk_types.h
471 @@ -170,7 +170,9 @@ enum rq_flag_bits {
472 __REQ_ELVPRIV, /* elevator private data attached */
473 __REQ_FAILED, /* set if the request failed */
474 __REQ_QUIET, /* don't worry about errors */
475 - __REQ_PREEMPT, /* set for "ide_preempt" requests */
476 + __REQ_PREEMPT, /* set for "ide_preempt" requests and also
477 + for requests for which the SCSI "quiesce"
478 + state must be ignored. */
479 __REQ_ALLOCED, /* request came from our alloc pool */
480 __REQ_COPY_USER, /* contains copies of user pages */
481 __REQ_FLUSH_SEQ, /* request for flush sequence */
482 diff --git a/include/linux/kernel.h b/include/linux/kernel.h
483 index e9ef6d6b51d5..341551c7b4c8 100644
484 --- a/include/linux/kernel.h
485 +++ b/include/linux/kernel.h
486 @@ -29,6 +29,19 @@
487 #define ULLONG_MAX (~0ULL)
488 #define SIZE_MAX (~(size_t)0)
489
490 +#define U8_MAX ((u8)~0U)
491 +#define S8_MAX ((s8)(U8_MAX>>1))
492 +#define S8_MIN ((s8)(-S8_MAX - 1))
493 +#define U16_MAX ((u16)~0U)
494 +#define S16_MAX ((s16)(U16_MAX>>1))
495 +#define S16_MIN ((s16)(-S16_MAX - 1))
496 +#define U32_MAX ((u32)~0U)
497 +#define S32_MAX ((s32)(U32_MAX>>1))
498 +#define S32_MIN ((s32)(-S32_MAX - 1))
499 +#define U64_MAX ((u64)~0ULL)
500 +#define S64_MAX ((s64)(U64_MAX>>1))
501 +#define S64_MIN ((s64)(-S64_MAX - 1))
502 +
503 #define STACK_MAGIC 0xdeadbeef
504
505 #define REPEAT_BYTE(x) ((~0ul / 0xff) * (x))
506 diff --git a/ipc/compat.c b/ipc/compat.c
507 index 892f6585dd60..d3b376025e9b 100644
508 --- a/ipc/compat.c
509 +++ b/ipc/compat.c
510 @@ -381,7 +381,7 @@ COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second,
511 uptr = compat_ptr(ipck.msgp);
512 fifth = ipck.msgtyp;
513 }
514 - return do_msgrcv(first, uptr, second, fifth, third,
515 + return do_msgrcv(first, uptr, second, (s32)fifth, third,
516 compat_do_msg_fill);
517 }
518 case MSGGET:
519 diff --git a/kernel/printk.c b/kernel/printk.c
520 index f7aff4bd5454..fd0154a57d6e 100644
521 --- a/kernel/printk.c
522 +++ b/kernel/printk.c
523 @@ -107,7 +107,7 @@ static struct console *exclusive_console;
524 */
525 struct console_cmdline
526 {
527 - char name[8]; /* Name of the driver */
528 + char name[16]; /* Name of the driver */
529 int index; /* Minor dev. to use */
530 char *options; /* Options for the driver */
531 #ifdef CONFIG_A11Y_BRAILLE_CONSOLE
532 @@ -2290,6 +2290,8 @@ void register_console(struct console *newcon)
533 */
534 for (i = 0; i < MAX_CMDLINECONSOLES && console_cmdline[i].name[0];
535 i++) {
536 + BUILD_BUG_ON(sizeof(console_cmdline[i].name) !=
537 + sizeof(newcon->name));
538 if (strcmp(console_cmdline[i].name, newcon->name) != 0)
539 continue;
540 if (newcon->index >= 0 &&
541 diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
542 index 1ad92b46753e..2298237db142 100644
543 --- a/mm/memory_hotplug.c
544 +++ b/mm/memory_hotplug.c
545 @@ -1039,6 +1039,10 @@ static pg_data_t __ref *hotadd_new_pgdat(int nid, u64 start)
546 return NULL;
547
548 arch_refresh_nodedata(nid, pgdat);
549 + } else {
550 + /* Reset the nr_zones and classzone_idx to 0 before reuse */
551 + pgdat->nr_zones = 0;
552 + pgdat->classzone_idx = 0;
553 }
554
555 /* we can use NODE_DATA(nid) from here */
556 @@ -1802,15 +1806,6 @@ void try_offline_node(int nid)
557 if (is_vmalloc_addr(zone->wait_table))
558 vfree(zone->wait_table);
559 }
560 -
561 - /*
562 - * Since there is no way to guarentee the address of pgdat/zone is not
563 - * on stack of any kernel threads or used by other kernel objects
564 - * without reference counting or other symchronizing method, do not
565 - * reset node_data and free pgdat here. Just reset it to 0 and reuse
566 - * the memory when the node is online again.
567 - */
568 - memset(pgdat, 0, sizeof(*pgdat));
569 }
570 EXPORT_SYMBOL(try_offline_node);
571
572 diff --git a/mm/page-writeback.c b/mm/page-writeback.c
573 index 73cbc5dc150b..b034f79deb0e 100644
574 --- a/mm/page-writeback.c
575 +++ b/mm/page-writeback.c
576 @@ -793,8 +793,11 @@ static void bdi_update_write_bandwidth(struct backing_dev_info *bdi,
577 * bw * elapsed + write_bandwidth * (period - elapsed)
578 * write_bandwidth = ---------------------------------------------------
579 * period
580 + *
581 + * @written may have decreased due to account_page_redirty().
582 + * Avoid underflowing @bw calculation.
583 */
584 - bw = written - bdi->written_stamp;
585 + bw = written - min(written, bdi->written_stamp);
586 bw *= HZ;
587 if (unlikely(elapsed > period)) {
588 do_div(bw, elapsed);
589 @@ -858,7 +861,7 @@ static void global_update_bandwidth(unsigned long thresh,
590 unsigned long now)
591 {
592 static DEFINE_SPINLOCK(dirty_lock);
593 - static unsigned long update_time;
594 + static unsigned long update_time = INITIAL_JIFFIES;
595
596 /*
597 * check locklessly first to optimize away locking for the most time
598 diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
599 index 913dc4f49b10..92b5e1f7d3b0 100644
600 --- a/net/ipv4/tcp_output.c
601 +++ b/net/ipv4/tcp_output.c
602 @@ -2909,6 +2909,7 @@ static int tcp_send_syn_data(struct sock *sk, struct sk_buff *syn)
603 goto fallback;
604 syn_data->ip_summed = CHECKSUM_PARTIAL;
605 memcpy(syn_data->cb, syn->cb, sizeof(syn->cb));
606 + skb_shinfo(syn_data)->gso_segs = 1;
607 if (unlikely(memcpy_fromiovecend(skb_put(syn_data, space),
608 fo->data->msg_iov, 0, space))) {
609 kfree_skb(syn_data);
610 diff --git a/net/llc/sysctl_net_llc.c b/net/llc/sysctl_net_llc.c
611 index 612a5ddaf93b..799bafc2af39 100644
612 --- a/net/llc/sysctl_net_llc.c
613 +++ b/net/llc/sysctl_net_llc.c
614 @@ -18,28 +18,28 @@ static struct ctl_table llc2_timeout_table[] = {
615 {
616 .procname = "ack",
617 .data = &sysctl_llc2_ack_timeout,
618 - .maxlen = sizeof(long),
619 + .maxlen = sizeof(sysctl_llc2_ack_timeout),
620 .mode = 0644,
621 .proc_handler = proc_dointvec_jiffies,
622 },
623 {
624 .procname = "busy",
625 .data = &sysctl_llc2_busy_timeout,
626 - .maxlen = sizeof(long),
627 + .maxlen = sizeof(sysctl_llc2_busy_timeout),
628 .mode = 0644,
629 .proc_handler = proc_dointvec_jiffies,
630 },
631 {
632 .procname = "p",
633 .data = &sysctl_llc2_p_timeout,
634 - .maxlen = sizeof(long),
635 + .maxlen = sizeof(sysctl_llc2_p_timeout),
636 .mode = 0644,
637 .proc_handler = proc_dointvec_jiffies,
638 },
639 {
640 .procname = "rej",
641 .data = &sysctl_llc2_rej_timeout,
642 - .maxlen = sizeof(long),
643 + .maxlen = sizeof(sysctl_llc2_rej_timeout),
644 .mode = 0644,
645 .proc_handler = proc_dointvec_jiffies,
646 },
647 diff --git a/net/netfilter/nfnetlink_queue_core.c b/net/netfilter/nfnetlink_queue_core.c
648 index 2b8199f68785..5497f50af2f0 100644
649 --- a/net/netfilter/nfnetlink_queue_core.c
650 +++ b/net/netfilter/nfnetlink_queue_core.c
651 @@ -228,7 +228,7 @@ nfqnl_flush(struct nfqnl_instance *queue, nfqnl_cmpfn cmpfn, unsigned long data)
652 }
653
654 static int
655 -nfqnl_zcopy(struct sk_buff *to, const struct sk_buff *from, int len, int hlen)
656 +nfqnl_zcopy(struct sk_buff *to, struct sk_buff *from, int len, int hlen)
657 {
658 int i, j = 0;
659 int plen = 0; /* length of skb->head fragment */
660 diff --git a/net/rds/sysctl.c b/net/rds/sysctl.c
661 index 907214b4c4d0..fc6cbe827856 100644
662 --- a/net/rds/sysctl.c
663 +++ b/net/rds/sysctl.c
664 @@ -71,14 +71,14 @@ static ctl_table rds_sysctl_rds_table[] = {
665 {
666 .procname = "max_unacked_packets",
667 .data = &rds_sysctl_max_unacked_packets,
668 - .maxlen = sizeof(unsigned long),
669 + .maxlen = sizeof(int),
670 .mode = 0644,
671 .proc_handler = proc_dointvec,
672 },
673 {
674 .procname = "max_unacked_bytes",
675 .data = &rds_sysctl_max_unacked_bytes,
676 - .maxlen = sizeof(unsigned long),
677 + .maxlen = sizeof(int),
678 .mode = 0644,
679 .proc_handler = proc_dointvec,
680 },
681 diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c
682 index ff427733c290..464be51025f6 100644
683 --- a/security/selinux/selinuxfs.c
684 +++ b/security/selinux/selinuxfs.c
685 @@ -150,7 +150,7 @@ static ssize_t sel_write_enforce(struct file *file, const char __user *buf,
686 goto out;
687
688 /* No partial writes. */
689 - length = EINVAL;
690 + length = -EINVAL;
691 if (*ppos != 0)
692 goto out;
693
694 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
695 index 4008034b6ebe..a8eb7fe2766e 100644
696 --- a/sound/pci/hda/patch_realtek.c
697 +++ b/sound/pci/hda/patch_realtek.c
698 @@ -266,7 +266,7 @@ static void alc_auto_setup_eapd(struct hda_codec *codec, bool on)
699 {
700 /* We currently only handle front, HP */
701 static hda_nid_t pins[] = {
702 - 0x0f, 0x10, 0x14, 0x15, 0
703 + 0x0f, 0x10, 0x14, 0x15, 0x17, 0
704 };
705 hda_nid_t *p;
706 for (p = pins; *p; p++)
707 @@ -3363,6 +3363,7 @@ enum {
708 ALC269_FIXUP_QUANTA_MUTE,
709 ALC269_FIXUP_LIFEBOOK,
710 ALC269_FIXUP_LIFEBOOK_EXTMIC,
711 + ALC269_FIXUP_LIFEBOOK_HP_PIN,
712 ALC269_FIXUP_AMIC,
713 ALC269_FIXUP_DMIC,
714 ALC269VB_FIXUP_AMIC,
715 @@ -3477,6 +3478,13 @@ static const struct hda_fixup alc269_fixups[] = {
716 { }
717 },
718 },
719 + [ALC269_FIXUP_LIFEBOOK_HP_PIN] = {
720 + .type = HDA_FIXUP_PINS,
721 + .v.pins = (const struct hda_pintbl[]) {
722 + { 0x21, 0x0221102f }, /* HP out */
723 + { }
724 + },
725 + },
726 [ALC269_FIXUP_AMIC] = {
727 .type = HDA_FIXUP_PINS,
728 .v.pins = (const struct hda_pintbl[]) {
729 @@ -3727,6 +3735,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
730 SND_PCI_QUIRK(0x1025, 0x0742, "Acer AO756", ALC271_FIXUP_HP_GATE_MIC_JACK),
731 SND_PCI_QUIRK_VENDOR(0x1025, "Acer Aspire", ALC271_FIXUP_DMIC),
732 SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook", ALC269_FIXUP_LIFEBOOK),
733 + SND_PCI_QUIRK(0x10cf, 0x15dc, "Lifebook T731", ALC269_FIXUP_LIFEBOOK_HP_PIN),
734 SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC),
735 SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE),
736 SND_PCI_QUIRK(0x17aa, 0x215e, "Thinkpad L512", ALC269_FIXUP_SKU_IGNORE),
737 diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
738 index c89a5bf5c00e..c311681bd390 100644
739 --- a/sound/usb/mixer_quirks.c
740 +++ b/sound/usb/mixer_quirks.c
741 @@ -175,6 +175,7 @@ static const struct rc_config {
742 { USB_ID(0x041e, 0x3040), 2, 2, 6, 6, 2, 0x6e91 }, /* Live! 24-bit */
743 { USB_ID(0x041e, 0x3042), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 */
744 { USB_ID(0x041e, 0x30df), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */
745 + { USB_ID(0x041e, 0x3237), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */
746 { USB_ID(0x041e, 0x3048), 2, 2, 6, 6, 2, 0x6e91 }, /* Toshiba SB0500 */
747 };
748