Magellan Linux

Contents of /trunk/kernel-magellan/patches-3.17/0106-3.17.7-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2537 - (show annotations) (download)
Fri Jan 30 10:05:41 2015 UTC (9 years, 3 months ago) by niro
File size: 35154 byte(s)
-linux-3.17.7
1 diff --git a/Makefile b/Makefile
2 index bb43e9e6a79c..267f8936ff69 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 3
7 PATCHLEVEL = 17
8 -SUBLEVEL = 6
9 +SUBLEVEL = 7
10 EXTRAVERSION =
11 NAME = Shuffling Zombie Juror
12
13 diff --git a/arch/mips/net/bpf_jit.c b/arch/mips/net/bpf_jit.c
14 index 9f7ecbda250c..1588716e32be 100644
15 --- a/arch/mips/net/bpf_jit.c
16 +++ b/arch/mips/net/bpf_jit.c
17 @@ -430,7 +430,7 @@ static inline void emit_mod(unsigned int dst, unsigned int src,
18 u32 *p = &ctx->target[ctx->idx];
19 uasm_i_divu(&p, dst, src);
20 p = &ctx->target[ctx->idx + 1];
21 - uasm_i_mflo(&p, dst);
22 + uasm_i_mfhi(&p, dst);
23 }
24 ctx->idx += 2; /* 2 insts */
25 }
26 @@ -1006,7 +1006,7 @@ load_ind:
27 break;
28 case BPF_ALU | BPF_MOD | BPF_K:
29 /* A %= k */
30 - if (k == 1 || optimize_div(&k)) {
31 + if (k == 1) {
32 ctx->flags |= SEEN_A;
33 emit_jit_reg_move(r_A, r_zero, ctx);
34 } else {
35 diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
36 index 14fe7cba21d1..b5bb49866bcc 100644
37 --- a/arch/x86/boot/compressed/Makefile
38 +++ b/arch/x86/boot/compressed/Makefile
39 @@ -75,7 +75,7 @@ suffix-$(CONFIG_KERNEL_XZ) := xz
40 suffix-$(CONFIG_KERNEL_LZO) := lzo
41 suffix-$(CONFIG_KERNEL_LZ4) := lz4
42
43 -RUN_SIZE = $(shell objdump -h vmlinux | \
44 +RUN_SIZE = $(shell $(OBJDUMP) -h vmlinux | \
45 perl $(srctree)/arch/x86/tools/calc_run_size.pl)
46 quiet_cmd_mkpiggy = MKPIGGY $@
47 cmd_mkpiggy = $(obj)/mkpiggy $< $(RUN_SIZE) > $@ || ( rm -f $@ ; false )
48 diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
49 index cf79c4cdf955..c874859b4565 100644
50 --- a/drivers/acpi/ec.c
51 +++ b/drivers/acpi/ec.c
52 @@ -299,11 +299,11 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec,
53 /* following two actions should be kept atomic */
54 ec->curr = t;
55 start_transaction(ec);
56 - if (ec->curr->command == ACPI_EC_COMMAND_QUERY)
57 - clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
58 spin_unlock_irqrestore(&ec->lock, tmp);
59 ret = ec_poll(ec);
60 spin_lock_irqsave(&ec->lock, tmp);
61 + if (ec->curr->command == ACPI_EC_COMMAND_QUERY)
62 + clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
63 ec->curr = NULL;
64 spin_unlock_irqrestore(&ec->lock, tmp);
65 return ret;
66 diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
67 index 597b15e7f6e5..363a2576553a 100644
68 --- a/drivers/ata/ahci.c
69 +++ b/drivers/ata/ahci.c
70 @@ -321,6 +321,9 @@ static const struct pci_device_id ahci_pci_tbl[] = {
71 { PCI_VDEVICE(INTEL, 0x8c87), board_ahci }, /* 9 Series RAID */
72 { PCI_VDEVICE(INTEL, 0x8c8e), board_ahci }, /* 9 Series RAID */
73 { PCI_VDEVICE(INTEL, 0x8c8f), board_ahci }, /* 9 Series RAID */
74 + { PCI_VDEVICE(INTEL, 0x9d03), board_ahci }, /* Sunrise Point-LP AHCI */
75 + { PCI_VDEVICE(INTEL, 0x9d05), board_ahci }, /* Sunrise Point-LP RAID */
76 + { PCI_VDEVICE(INTEL, 0x9d07), board_ahci }, /* Sunrise Point-LP RAID */
77 { PCI_VDEVICE(INTEL, 0xa103), board_ahci }, /* Sunrise Point-H AHCI */
78 { PCI_VDEVICE(INTEL, 0xa103), board_ahci }, /* Sunrise Point-H RAID */
79 { PCI_VDEVICE(INTEL, 0xa105), board_ahci }, /* Sunrise Point-H RAID */
80 @@ -492,6 +495,7 @@ static const struct pci_device_id ahci_pci_tbl[] = {
81 * enabled. https://bugzilla.kernel.org/show_bug.cgi?id=60731
82 */
83 { PCI_VDEVICE(SAMSUNG, 0x1600), board_ahci_nomsi },
84 + { PCI_VDEVICE(SAMSUNG, 0xa800), board_ahci_nomsi },
85
86 /* Enmotus */
87 { PCI_DEVICE(0x1c44, 0x8000), board_ahci },
88 diff --git a/drivers/ata/sata_fsl.c b/drivers/ata/sata_fsl.c
89 index 07bc7e4dbd04..65071591b143 100644
90 --- a/drivers/ata/sata_fsl.c
91 +++ b/drivers/ata/sata_fsl.c
92 @@ -1488,7 +1488,7 @@ static int sata_fsl_probe(struct platform_device *ofdev)
93 host_priv->csr_base = csr_base;
94
95 irq = irq_of_parse_and_map(ofdev->dev.of_node, 0);
96 - if (irq < 0) {
97 + if (!irq) {
98 dev_err(&ofdev->dev, "invalid irq from platform\n");
99 goto error_exit_with_cleanup;
100 }
101 diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
102 index 7bd17b3ee95c..8663c21093d1 100644
103 --- a/drivers/gpu/drm/i915/intel_display.c
104 +++ b/drivers/gpu/drm/i915/intel_display.c
105 @@ -4209,7 +4209,6 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc)
106 ironlake_fdi_disable(crtc);
107
108 ironlake_disable_pch_transcoder(dev_priv, pipe);
109 - intel_set_pch_fifo_underrun_reporting(dev, pipe, true);
110
111 if (HAS_PCH_CPT(dev)) {
112 /* disable TRANS_DP_CTL */
113 @@ -4274,7 +4273,6 @@ static void haswell_crtc_disable(struct drm_crtc *crtc)
114
115 if (intel_crtc->config.has_pch_encoder) {
116 lpt_disable_pch_transcoder(dev_priv);
117 - intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_A, true);
118 intel_ddi_fdi_disable(crtc);
119 }
120
121 diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
122 index fdf40267249c..4cc77e74e1f6 100644
123 --- a/drivers/gpu/drm/i915/intel_lvds.c
124 +++ b/drivers/gpu/drm/i915/intel_lvds.c
125 @@ -900,6 +900,17 @@ void intel_lvds_init(struct drm_device *dev)
126 int pipe;
127 u8 pin;
128
129 + /*
130 + * Unlock registers and just leave them unlocked. Do this before
131 + * checking quirk lists to avoid bogus WARNINGs.
132 + */
133 + if (HAS_PCH_SPLIT(dev)) {
134 + I915_WRITE(PCH_PP_CONTROL,
135 + I915_READ(PCH_PP_CONTROL) | PANEL_UNLOCK_REGS);
136 + } else {
137 + I915_WRITE(PP_CONTROL,
138 + I915_READ(PP_CONTROL) | PANEL_UNLOCK_REGS);
139 + }
140 if (!intel_lvds_supported(dev))
141 return;
142
143 @@ -1098,17 +1109,6 @@ out:
144 lvds_encoder->a3_power = I915_READ(lvds_encoder->reg) &
145 LVDS_A3_POWER_MASK;
146
147 - /*
148 - * Unlock registers and just
149 - * leave them unlocked
150 - */
151 - if (HAS_PCH_SPLIT(dev)) {
152 - I915_WRITE(PCH_PP_CONTROL,
153 - I915_READ(PCH_PP_CONTROL) | PANEL_UNLOCK_REGS);
154 - } else {
155 - I915_WRITE(PP_CONTROL,
156 - I915_READ(PP_CONTROL) | PANEL_UNLOCK_REGS);
157 - }
158 lvds_connector->lid_notifier.notifier_call = intel_lid_notify;
159 if (acpi_lid_notifier_register(&lvds_connector->lid_notifier)) {
160 DRM_DEBUG_KMS("lid notifier registration failed\n");
161 diff --git a/drivers/gpu/drm/nouveau/core/engine/device/nvc0.c b/drivers/gpu/drm/nouveau/core/engine/device/nvc0.c
162 index da153a2cb6b5..f01d019edbfd 100644
163 --- a/drivers/gpu/drm/nouveau/core/engine/device/nvc0.c
164 +++ b/drivers/gpu/drm/nouveau/core/engine/device/nvc0.c
165 @@ -212,7 +212,6 @@ nvc0_identify(struct nouveau_device *device)
166 device->oclass[NVDEV_ENGINE_BSP ] = &nvc0_bsp_oclass;
167 device->oclass[NVDEV_ENGINE_PPP ] = &nvc0_ppp_oclass;
168 device->oclass[NVDEV_ENGINE_COPY0 ] = &nvc0_copy0_oclass;
169 - device->oclass[NVDEV_ENGINE_COPY1 ] = &nvc0_copy1_oclass;
170 device->oclass[NVDEV_ENGINE_DISP ] = nva3_disp_oclass;
171 device->oclass[NVDEV_ENGINE_PERFMON] = &nvc0_perfmon_oclass;
172 break;
173 diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
174 index 3ed32dd90303..ace7524e631c 100644
175 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
176 +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
177 @@ -626,7 +626,6 @@ int nouveau_pmops_suspend(struct device *dev)
178
179 pci_save_state(pdev);
180 pci_disable_device(pdev);
181 - pci_ignore_hotplug(pdev);
182 pci_set_power_state(pdev, PCI_D3hot);
183 return 0;
184 }
185 @@ -930,6 +929,7 @@ static int nouveau_pmops_runtime_suspend(struct device *dev)
186 ret = nouveau_do_suspend(drm_dev, true);
187 pci_save_state(pdev);
188 pci_disable_device(pdev);
189 + pci_ignore_hotplug(pdev);
190 pci_set_power_state(pdev, PCI_D3cold);
191 drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF;
192 return ret;
193 diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
194 index e244c2d72730..67f91571ae79 100644
195 --- a/drivers/gpu/drm/radeon/radeon_cs.c
196 +++ b/drivers/gpu/drm/radeon/radeon_cs.c
197 @@ -226,14 +226,11 @@ static int radeon_cs_get_ring(struct radeon_cs_parser *p, u32 ring, s32 priority
198
199 static void radeon_cs_sync_rings(struct radeon_cs_parser *p)
200 {
201 - int i;
202 -
203 - for (i = 0; i < p->nrelocs; i++) {
204 - if (!p->relocs[i].robj)
205 - continue;
206 + struct radeon_cs_reloc *reloc;
207
208 + list_for_each_entry(reloc, &p->validated, tv.head) {
209 radeon_semaphore_sync_to(p->ib.semaphore,
210 - p->relocs[i].robj->tbo.sync_obj);
211 + reloc->robj->tbo.sync_obj);
212 }
213 }
214
215 diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
216 index eb7164d07985..82941bd8ca46 100644
217 --- a/drivers/gpu/drm/radeon/radeon_kms.c
218 +++ b/drivers/gpu/drm/radeon/radeon_kms.c
219 @@ -795,6 +795,8 @@ int radeon_get_vblank_timestamp_kms(struct drm_device *dev, int crtc,
220
221 /* Get associated drm_crtc: */
222 drmcrtc = &rdev->mode_info.crtcs[crtc]->base;
223 + if (!drmcrtc)
224 + return -EINVAL;
225
226 /* Helper routine in DRM core does all the work: */
227 return drm_calc_vbltimestamp_from_scanoutpos(dev, crtc, max_error,
228 diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
229 index 480c87d8edc5..835f402a9faf 100644
230 --- a/drivers/gpu/drm/radeon/radeon_object.c
231 +++ b/drivers/gpu/drm/radeon/radeon_object.c
232 @@ -187,6 +187,13 @@ int radeon_bo_create(struct radeon_device *rdev,
233 if (!(rdev->flags & RADEON_IS_PCIE))
234 bo->flags &= ~(RADEON_GEM_GTT_WC | RADEON_GEM_GTT_UC);
235
236 +#ifdef CONFIG_X86_32
237 + /* XXX: Write-combined CPU mappings of GTT seem broken on 32-bit
238 + * See https://bugs.freedesktop.org/show_bug.cgi?id=84627
239 + */
240 + bo->flags &= ~RADEON_GEM_GTT_WC;
241 +#endif
242 +
243 radeon_ttm_placement_from_domain(bo, domain);
244 /* Kernel allocation are uninterruptible */
245 down_read(&rdev->pm.mclk_lock);
246 diff --git a/drivers/i2c/busses/i2c-cadence.c b/drivers/i2c/busses/i2c-cadence.c
247 index 63f3f03ecc9b..c604f4c3ac0d 100644
248 --- a/drivers/i2c/busses/i2c-cadence.c
249 +++ b/drivers/i2c/busses/i2c-cadence.c
250 @@ -111,6 +111,8 @@
251 #define CDNS_I2C_DIVA_MAX 4
252 #define CDNS_I2C_DIVB_MAX 64
253
254 +#define CDNS_I2C_TIMEOUT_MAX 0xFF
255 +
256 #define cdns_i2c_readreg(offset) readl_relaxed(id->membase + offset)
257 #define cdns_i2c_writereg(val, offset) writel_relaxed(val, id->membase + offset)
258
259 @@ -852,6 +854,15 @@ static int cdns_i2c_probe(struct platform_device *pdev)
260 goto err_clk_dis;
261 }
262
263 + /*
264 + * Cadence I2C controller has a bug wherein it generates
265 + * invalid read transaction after HW timeout in master receiver mode.
266 + * HW timeout is not used by this driver and the interrupt is disabled.
267 + * But the feature itself cannot be disabled. Hence maximum value
268 + * is written to this register to reduce the chances of error.
269 + */
270 + cdns_i2c_writereg(CDNS_I2C_TIMEOUT_MAX, CDNS_I2C_TIME_OUT_OFFSET);
271 +
272 dev_info(&pdev->dev, "%u kHz mmio %08lx irq %d\n",
273 id->i2c_clk / 1000, (unsigned long)r_mem->start, id->irq);
274
275 diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c
276 index 4d9614719128..82be5e2da7cf 100644
277 --- a/drivers/i2c/busses/i2c-davinci.c
278 +++ b/drivers/i2c/busses/i2c-davinci.c
279 @@ -411,11 +411,9 @@ i2c_davinci_xfer_msg(struct i2c_adapter *adap, struct i2c_msg *msg, int stop)
280 if (dev->cmd_err & DAVINCI_I2C_STR_NACK) {
281 if (msg->flags & I2C_M_IGNORE_NAK)
282 return msg->len;
283 - if (stop) {
284 - w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG);
285 - w |= DAVINCI_I2C_MDR_STP;
286 - davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w);
287 - }
288 + w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG);
289 + w |= DAVINCI_I2C_MDR_STP;
290 + davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w);
291 return -EREMOTEIO;
292 }
293 return -EIO;
294 diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
295 index 0dffb0e62c3b..493574ee87f5 100644
296 --- a/drivers/i2c/busses/i2c-omap.c
297 +++ b/drivers/i2c/busses/i2c-omap.c
298 @@ -926,14 +926,12 @@ omap_i2c_isr_thread(int this_irq, void *dev_id)
299 if (stat & OMAP_I2C_STAT_NACK) {
300 err |= OMAP_I2C_STAT_NACK;
301 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK);
302 - break;
303 }
304
305 if (stat & OMAP_I2C_STAT_AL) {
306 dev_err(dev->dev, "Arbitration lost\n");
307 err |= OMAP_I2C_STAT_AL;
308 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_AL);
309 - break;
310 }
311
312 /*
313 @@ -958,11 +956,13 @@ omap_i2c_isr_thread(int this_irq, void *dev_id)
314 if (dev->fifo_size)
315 num_bytes = dev->buf_len;
316
317 - omap_i2c_receive_data(dev, num_bytes, true);
318 -
319 - if (dev->errata & I2C_OMAP_ERRATA_I207)
320 + if (dev->errata & I2C_OMAP_ERRATA_I207) {
321 i2c_omap_errata_i207(dev, stat);
322 + num_bytes = (omap_i2c_read_reg(dev,
323 + OMAP_I2C_BUFSTAT_REG) >> 8) & 0x3F;
324 + }
325
326 + omap_i2c_receive_data(dev, num_bytes, true);
327 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RDR);
328 continue;
329 }
330 diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
331 index de055451d1af..b535322a36db 100644
332 --- a/drivers/input/evdev.c
333 +++ b/drivers/input/evdev.c
334 @@ -421,7 +421,7 @@ static int evdev_open(struct inode *inode, struct file *file)
335
336 err_free_client:
337 evdev_detach_client(evdev, client);
338 - kfree(client);
339 + kvfree(client);
340 return error;
341 }
342
343 diff --git a/drivers/media/i2c/smiapp/smiapp-core.c b/drivers/media/i2c/smiapp/smiapp-core.c
344 index 62acb10630f9..818b48d3ac28 100644
345 --- a/drivers/media/i2c/smiapp/smiapp-core.c
346 +++ b/drivers/media/i2c/smiapp/smiapp-core.c
347 @@ -2133,7 +2133,7 @@ static int smiapp_set_selection(struct v4l2_subdev *subdev,
348 ret = smiapp_set_compose(subdev, fh, sel);
349 break;
350 default:
351 - BUG();
352 + ret = -EINVAL;
353 }
354
355 mutex_unlock(&sensor->mutex);
356 diff --git a/drivers/media/rc/ir-rc6-decoder.c b/drivers/media/rc/ir-rc6-decoder.c
357 index f1f098e22f7e..d16bc67af732 100644
358 --- a/drivers/media/rc/ir-rc6-decoder.c
359 +++ b/drivers/media/rc/ir-rc6-decoder.c
360 @@ -259,8 +259,8 @@ again:
361 case 32:
362 if ((scancode & RC6_6A_LCC_MASK) == RC6_6A_MCE_CC) {
363 protocol = RC_TYPE_RC6_MCE;
364 - scancode &= ~RC6_6A_MCE_TOGGLE_MASK;
365 toggle = !!(scancode & RC6_6A_MCE_TOGGLE_MASK);
366 + scancode &= ~RC6_6A_MCE_TOGGLE_MASK;
367 } else {
368 protocol = RC_BIT_RC6_6A_32;
369 toggle = 0;
370 diff --git a/drivers/media/usb/s2255/s2255drv.c b/drivers/media/usb/s2255/s2255drv.c
371 index 2c901861034a..efcaa90529ba 100644
372 --- a/drivers/media/usb/s2255/s2255drv.c
373 +++ b/drivers/media/usb/s2255/s2255drv.c
374 @@ -632,7 +632,7 @@ static void s2255_fillbuff(struct s2255_vc *vc,
375 break;
376 case V4L2_PIX_FMT_JPEG:
377 case V4L2_PIX_FMT_MJPEG:
378 - buf->vb.v4l2_buf.length = jpgsize;
379 + vb2_set_plane_payload(&buf->vb, 0, jpgsize);
380 memcpy(vbuf, tmpbuf, jpgsize);
381 break;
382 case V4L2_PIX_FMT_YUV422P:
383 diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c
384 index d163e112f04c..fc061c3a6485 100644
385 --- a/drivers/net/bonding/bond_netlink.c
386 +++ b/drivers/net/bonding/bond_netlink.c
387 @@ -194,7 +194,12 @@ static int bond_changelink(struct net_device *bond_dev,
388
389 bond_option_arp_ip_targets_clear(bond);
390 nla_for_each_nested(attr, data[IFLA_BOND_ARP_IP_TARGET], rem) {
391 - __be32 target = nla_get_be32(attr);
392 + __be32 target;
393 +
394 + if (nla_len(attr) < sizeof(target))
395 + return -EINVAL;
396 +
397 + target = nla_get_be32(attr);
398
399 bond_opt_initval(&newval, (__force u64)target);
400 err = __bond_opt_set(bond, BOND_OPT_ARP_TARGETS,
401 diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
402 index ba499489969a..cbfa4ff9f3bd 100644
403 --- a/drivers/net/ethernet/broadcom/tg3.c
404 +++ b/drivers/net/ethernet/broadcom/tg3.c
405 @@ -8561,7 +8561,8 @@ static int tg3_init_rings(struct tg3 *tp)
406 if (tnapi->rx_rcb)
407 memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
408
409 - if (tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
410 + if (tnapi->prodring.rx_std &&
411 + tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
412 tg3_free_rings(tp);
413 return -ENOMEM;
414 }
415 diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
416 index ade067de1689..67a84cfaefa1 100644
417 --- a/drivers/net/ethernet/marvell/mvneta.c
418 +++ b/drivers/net/ethernet/marvell/mvneta.c
419 @@ -216,7 +216,7 @@
420 /* Various constants */
421
422 /* Coalescing */
423 -#define MVNETA_TXDONE_COAL_PKTS 16
424 +#define MVNETA_TXDONE_COAL_PKTS 1
425 #define MVNETA_RX_COAL_PKTS 32
426 #define MVNETA_RX_COAL_USEC 100
427
428 @@ -1721,6 +1721,7 @@ static int mvneta_tx(struct sk_buff *skb, struct net_device *dev)
429 u16 txq_id = skb_get_queue_mapping(skb);
430 struct mvneta_tx_queue *txq = &pp->txqs[txq_id];
431 struct mvneta_tx_desc *tx_desc;
432 + int len = skb->len;
433 int frags = 0;
434 u32 tx_cmd;
435
436 @@ -1788,7 +1789,7 @@ out:
437
438 u64_stats_update_begin(&stats->syncp);
439 stats->tx_packets++;
440 - stats->tx_bytes += skb->len;
441 + stats->tx_bytes += len;
442 u64_stats_update_end(&stats->syncp);
443 } else {
444 dev->stats.tx_dropped++;
445 diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
446 index 5d2498dcf536..cd5cf6d957c7 100644
447 --- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
448 +++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
449 @@ -1546,7 +1546,7 @@ static int qp_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd,
450
451 switch (op) {
452 case RES_OP_RESERVE:
453 - count = get_param_l(&in_param);
454 + count = get_param_l(&in_param) & 0xffffff;
455 align = get_param_h(&in_param);
456 err = mlx4_grant_resource(dev, slave, RES_QP, count, 0);
457 if (err)
458 diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
459 index 81a8a296a582..2aa3a8db5334 100644
460 --- a/drivers/net/vxlan.c
461 +++ b/drivers/net/vxlan.c
462 @@ -2050,9 +2050,8 @@ static int vxlan_init(struct net_device *dev)
463 spin_lock(&vn->sock_lock);
464 vs = vxlan_find_sock(vxlan->net, ipv6 ? AF_INET6 : AF_INET,
465 vxlan->dst_port);
466 - if (vs) {
467 + if (vs && atomic_add_unless(&vs->refcnt, 1, 0)) {
468 /* If we have a socket with same port already, reuse it */
469 - atomic_inc(&vs->refcnt);
470 vxlan_vs_add_dev(vs, vxlan);
471 } else {
472 /* otherwise make new socket outside of RTNL */
473 @@ -2362,9 +2361,9 @@ static struct socket *vxlan_create_sock(struct net *net, bool ipv6,
474 if (ipv6) {
475 udp_conf.family = AF_INET6;
476 udp_conf.use_udp6_tx_checksums =
477 - !!(flags & VXLAN_F_UDP_ZERO_CSUM6_TX);
478 + !(flags & VXLAN_F_UDP_ZERO_CSUM6_TX);
479 udp_conf.use_udp6_rx_checksums =
480 - !!(flags & VXLAN_F_UDP_ZERO_CSUM6_RX);
481 + !(flags & VXLAN_F_UDP_ZERO_CSUM6_RX);
482 } else {
483 udp_conf.family = AF_INET;
484 udp_conf.local_ip.s_addr = INADDR_ANY;
485 @@ -2459,12 +2458,9 @@ struct vxlan_sock *vxlan_sock_add(struct net *net, __be16 port,
486
487 spin_lock(&vn->sock_lock);
488 vs = vxlan_find_sock(net, ipv6 ? AF_INET6 : AF_INET, port);
489 - if (vs) {
490 - if (vs->rcv == rcv)
491 - atomic_inc(&vs->refcnt);
492 - else
493 + if (vs && ((vs->rcv != rcv) ||
494 + !atomic_add_unless(&vs->refcnt, 1, 0)))
495 vs = ERR_PTR(-EBUSY);
496 - }
497 spin_unlock(&vn->sock_lock);
498
499 if (!vs)
500 diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
501 index ca82f545ec2c..646e2dec699c 100644
502 --- a/drivers/net/xen-netfront.c
503 +++ b/drivers/net/xen-netfront.c
504 @@ -496,9 +496,6 @@ static void xennet_make_frags(struct sk_buff *skb, struct netfront_queue *queue,
505 len = skb_frag_size(frag);
506 offset = frag->page_offset;
507
508 - /* Data must not cross a page boundary. */
509 - BUG_ON(len + offset > PAGE_SIZE<<compound_order(page));
510 -
511 /* Skip unused frames from start of page */
512 page += offset >> PAGE_SHIFT;
513 offset &= ~PAGE_MASK;
514 @@ -506,8 +503,6 @@ static void xennet_make_frags(struct sk_buff *skb, struct netfront_queue *queue,
515 while (len > 0) {
516 unsigned long bytes;
517
518 - BUG_ON(offset >= PAGE_SIZE);
519 -
520 bytes = PAGE_SIZE - offset;
521 if (bytes > len)
522 bytes = len;
523 @@ -632,6 +627,9 @@ static int xennet_start_xmit(struct sk_buff *skb, struct net_device *dev)
524 slots, skb->len);
525 if (skb_linearize(skb))
526 goto drop;
527 + data = skb->data;
528 + offset = offset_in_page(data);
529 + len = skb_headlen(skb);
530 }
531
532 spin_lock_irqsave(&queue->tx_lock, flags);
533 diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
534 index 30e97bcc4f88..d134710de96d 100644
535 --- a/drivers/of/fdt.c
536 +++ b/drivers/of/fdt.c
537 @@ -964,8 +964,6 @@ void __init __weak early_init_dt_add_memory_arch(u64 base, u64 size)
538 int __init __weak early_init_dt_reserve_memory_arch(phys_addr_t base,
539 phys_addr_t size, bool nomap)
540 {
541 - if (memblock_is_region_reserved(base, size))
542 - return -EBUSY;
543 if (nomap)
544 return memblock_remove(base, size);
545 return memblock_reserve(base, size);
546 diff --git a/fs/fat/namei_vfat.c b/fs/fat/namei_vfat.c
547 index 6df8d3d885e5..b8b92c2f9683 100644
548 --- a/fs/fat/namei_vfat.c
549 +++ b/fs/fat/namei_vfat.c
550 @@ -736,7 +736,12 @@ static struct dentry *vfat_lookup(struct inode *dir, struct dentry *dentry,
551 }
552
553 alias = d_find_alias(inode);
554 - if (alias && !vfat_d_anon_disconn(alias)) {
555 + /*
556 + * Checking "alias->d_parent == dentry->d_parent" to make sure
557 + * FS is not corrupted (especially double linked dir).
558 + */
559 + if (alias && alias->d_parent == dentry->d_parent &&
560 + !vfat_d_anon_disconn(alias)) {
561 /*
562 * This inode has non anonymous-DCACHE_DISCONNECTED
563 * dentry. This means, the user did ->lookup() by an
564 @@ -755,12 +760,9 @@ static struct dentry *vfat_lookup(struct inode *dir, struct dentry *dentry,
565
566 out:
567 mutex_unlock(&MSDOS_SB(sb)->s_lock);
568 - dentry->d_time = dentry->d_parent->d_inode->i_version;
569 - dentry = d_splice_alias(inode, dentry);
570 - if (dentry)
571 - dentry->d_time = dentry->d_parent->d_inode->i_version;
572 - return dentry;
573 -
574 + if (!inode)
575 + dentry->d_time = dir->i_version;
576 + return d_splice_alias(inode, dentry);
577 error:
578 mutex_unlock(&MSDOS_SB(sb)->s_lock);
579 return ERR_PTR(err);
580 @@ -793,7 +795,6 @@ static int vfat_create(struct inode *dir, struct dentry *dentry, umode_t mode,
581 inode->i_mtime = inode->i_atime = inode->i_ctime = ts;
582 /* timestamp is already written, so mark_inode_dirty() is unneeded. */
583
584 - dentry->d_time = dentry->d_parent->d_inode->i_version;
585 d_instantiate(dentry, inode);
586 out:
587 mutex_unlock(&MSDOS_SB(sb)->s_lock);
588 @@ -824,6 +825,7 @@ static int vfat_rmdir(struct inode *dir, struct dentry *dentry)
589 clear_nlink(inode);
590 inode->i_mtime = inode->i_atime = CURRENT_TIME_SEC;
591 fat_detach(inode);
592 + dentry->d_time = dir->i_version;
593 out:
594 mutex_unlock(&MSDOS_SB(sb)->s_lock);
595
596 @@ -849,6 +851,7 @@ static int vfat_unlink(struct inode *dir, struct dentry *dentry)
597 clear_nlink(inode);
598 inode->i_mtime = inode->i_atime = CURRENT_TIME_SEC;
599 fat_detach(inode);
600 + dentry->d_time = dir->i_version;
601 out:
602 mutex_unlock(&MSDOS_SB(sb)->s_lock);
603
604 @@ -889,7 +892,6 @@ static int vfat_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
605 inode->i_mtime = inode->i_atime = inode->i_ctime = ts;
606 /* timestamp is already written, so mark_inode_dirty() is unneeded. */
607
608 - dentry->d_time = dentry->d_parent->d_inode->i_version;
609 d_instantiate(dentry, inode);
610
611 mutex_unlock(&MSDOS_SB(sb)->s_lock);
612 diff --git a/include/net/inet_common.h b/include/net/inet_common.h
613 index fe7994c48b75..b2828a06a5a6 100644
614 --- a/include/net/inet_common.h
615 +++ b/include/net/inet_common.h
616 @@ -37,6 +37,8 @@ int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
617 int inet_ctl_sock_create(struct sock **sk, unsigned short family,
618 unsigned short type, unsigned char protocol,
619 struct net *net);
620 +int inet_recv_error(struct sock *sk, struct msghdr *msg, int len,
621 + int *addr_len);
622
623 static inline void inet_ctl_sock_destroy(struct sock *sk)
624 {
625 diff --git a/mm/frontswap.c b/mm/frontswap.c
626 index c30eec536f03..f2a3571c6e22 100644
627 --- a/mm/frontswap.c
628 +++ b/mm/frontswap.c
629 @@ -244,8 +244,10 @@ int __frontswap_store(struct page *page)
630 the (older) page from frontswap
631 */
632 inc_frontswap_failed_stores();
633 - if (dup)
634 + if (dup) {
635 __frontswap_clear(sis, offset);
636 + frontswap_ops->invalidate_page(type, offset);
637 + }
638 }
639 if (frontswap_writethrough_enabled)
640 /* report failure so swap also writes to swap device */
641 diff --git a/mm/memory.c b/mm/memory.c
642 index 37b80fc3a9b6..e497defd663e 100644
643 --- a/mm/memory.c
644 +++ b/mm/memory.c
645 @@ -815,20 +815,20 @@ copy_one_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
646 if (!pte_file(pte)) {
647 swp_entry_t entry = pte_to_swp_entry(pte);
648
649 - if (swap_duplicate(entry) < 0)
650 - return entry.val;
651 -
652 - /* make sure dst_mm is on swapoff's mmlist. */
653 - if (unlikely(list_empty(&dst_mm->mmlist))) {
654 - spin_lock(&mmlist_lock);
655 - if (list_empty(&dst_mm->mmlist))
656 - list_add(&dst_mm->mmlist,
657 - &src_mm->mmlist);
658 - spin_unlock(&mmlist_lock);
659 - }
660 - if (likely(!non_swap_entry(entry)))
661 + if (likely(!non_swap_entry(entry))) {
662 + if (swap_duplicate(entry) < 0)
663 + return entry.val;
664 +
665 + /* make sure dst_mm is on swapoff's mmlist. */
666 + if (unlikely(list_empty(&dst_mm->mmlist))) {
667 + spin_lock(&mmlist_lock);
668 + if (list_empty(&dst_mm->mmlist))
669 + list_add(&dst_mm->mmlist,
670 + &src_mm->mmlist);
671 + spin_unlock(&mmlist_lock);
672 + }
673 rss[MM_SWAPENTS]++;
674 - else if (is_migration_entry(entry)) {
675 + } else if (is_migration_entry(entry)) {
676 page = migration_entry_to_page(entry);
677
678 if (PageAnon(page))
679 diff --git a/mm/mmap.c b/mm/mmap.c
680 index ebc25fab1545..a226d31a2395 100644
681 --- a/mm/mmap.c
682 +++ b/mm/mmap.c
683 @@ -752,8 +752,11 @@ again: remove_next = 1 + (end > next->vm_end);
684 * shrinking vma had, to cover any anon pages imported.
685 */
686 if (exporter && exporter->anon_vma && !importer->anon_vma) {
687 - if (anon_vma_clone(importer, exporter))
688 - return -ENOMEM;
689 + int error;
690 +
691 + error = anon_vma_clone(importer, exporter);
692 + if (error)
693 + return error;
694 importer->anon_vma = exporter->anon_vma;
695 }
696 }
697 @@ -2453,7 +2456,8 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
698 if (err)
699 goto out_free_vma;
700
701 - if (anon_vma_clone(new, vma))
702 + err = anon_vma_clone(new, vma);
703 + if (err)
704 goto out_free_mpol;
705
706 if (new->vm_file)
707 diff --git a/mm/rmap.c b/mm/rmap.c
708 index e01318d4b07e..1807ca3f8731 100644
709 --- a/mm/rmap.c
710 +++ b/mm/rmap.c
711 @@ -274,6 +274,7 @@ int anon_vma_fork(struct vm_area_struct *vma, struct vm_area_struct *pvma)
712 {
713 struct anon_vma_chain *avc;
714 struct anon_vma *anon_vma;
715 + int error;
716
717 /* Don't bother if the parent process has no anon_vma here. */
718 if (!pvma->anon_vma)
719 @@ -283,8 +284,9 @@ int anon_vma_fork(struct vm_area_struct *vma, struct vm_area_struct *pvma)
720 * First, attach the new VMA to the parent VMA's anon_vmas,
721 * so rmap can find non-COWed pages in child processes.
722 */
723 - if (anon_vma_clone(vma, pvma))
724 - return -ENOMEM;
725 + error = anon_vma_clone(vma, pvma);
726 + if (error)
727 + return error;
728
729 /* Then add our own anon_vma. */
730 anon_vma = anon_vma_alloc();
731 diff --git a/mm/slab.c b/mm/slab.c
732 index 7c52b3890d25..cc91c1ef4e8a 100644
733 --- a/mm/slab.c
734 +++ b/mm/slab.c
735 @@ -3108,7 +3108,7 @@ static void *____cache_alloc_node(struct kmem_cache *cachep, gfp_t flags,
736 void *obj;
737 int x;
738
739 - VM_BUG_ON(nodeid > num_online_nodes());
740 + VM_BUG_ON(nodeid < 0 || nodeid >= MAX_NUMNODES);
741 n = get_node(cachep, nodeid);
742 BUG_ON(!n);
743
744 diff --git a/mm/vmpressure.c b/mm/vmpressure.c
745 index d4042e75f7c7..c5afd573d7da 100644
746 --- a/mm/vmpressure.c
747 +++ b/mm/vmpressure.c
748 @@ -165,6 +165,7 @@ static void vmpressure_work_fn(struct work_struct *work)
749 unsigned long scanned;
750 unsigned long reclaimed;
751
752 + spin_lock(&vmpr->sr_lock);
753 /*
754 * Several contexts might be calling vmpressure(), so it is
755 * possible that the work was rescheduled again before the old
756 @@ -173,11 +174,12 @@ static void vmpressure_work_fn(struct work_struct *work)
757 * here. No need for any locks here since we don't care if
758 * vmpr->reclaimed is in sync.
759 */
760 - if (!vmpr->scanned)
761 + scanned = vmpr->scanned;
762 + if (!scanned) {
763 + spin_unlock(&vmpr->sr_lock);
764 return;
765 + }
766
767 - spin_lock(&vmpr->sr_lock);
768 - scanned = vmpr->scanned;
769 reclaimed = vmpr->reclaimed;
770 vmpr->scanned = 0;
771 vmpr->reclaimed = 0;
772 diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
773 index f0493e3b7471..4921b6536ea5 100644
774 --- a/net/core/rtnetlink.c
775 +++ b/net/core/rtnetlink.c
776 @@ -1495,6 +1495,7 @@ static int do_setlink(const struct sk_buff *skb,
777 goto errout;
778 }
779 if (!netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN)) {
780 + put_net(net);
781 err = -EPERM;
782 goto errout;
783 }
784 diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
785 index d156b3c5f363..bf78bc365481 100644
786 --- a/net/ipv4/af_inet.c
787 +++ b/net/ipv4/af_inet.c
788 @@ -1421,6 +1421,17 @@ out:
789 return pp;
790 }
791
792 +int inet_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
793 +{
794 + if (sk->sk_family == AF_INET)
795 + return ip_recv_error(sk, msg, len, addr_len);
796 +#if IS_ENABLED(CONFIG_IPV6)
797 + if (sk->sk_family == AF_INET6)
798 + return pingv6_ops.ipv6_recv_error(sk, msg, len, addr_len);
799 +#endif
800 + return -EINVAL;
801 +}
802 +
803 static int inet_gro_complete(struct sk_buff *skb, int nhoff)
804 {
805 __be16 newlen = htons(skb->len - nhoff);
806 diff --git a/net/ipv4/gre_offload.c b/net/ipv4/gre_offload.c
807 index dd73bea2a65f..657d80c0931a 100644
808 --- a/net/ipv4/gre_offload.c
809 +++ b/net/ipv4/gre_offload.c
810 @@ -279,6 +279,9 @@ static int gre_gro_complete(struct sk_buff *skb, int nhoff)
811 err = ptype->callbacks.gro_complete(skb, nhoff + grehlen);
812
813 rcu_read_unlock();
814 +
815 + skb_set_inner_mac_header(skb, nhoff + grehlen);
816 +
817 return err;
818 }
819
820 diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
821 index e453cb724a95..607395236c95 100644
822 --- a/net/ipv4/ip_vti.c
823 +++ b/net/ipv4/ip_vti.c
824 @@ -528,6 +528,7 @@ static struct rtnl_link_ops vti_link_ops __read_mostly = {
825 .validate = vti_tunnel_validate,
826 .newlink = vti_newlink,
827 .changelink = vti_changelink,
828 + .dellink = ip_tunnel_dellink,
829 .get_size = vti_get_size,
830 .fill_info = vti_fill_info,
831 };
832 diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
833 index 352476233608..b503a3021a71 100644
834 --- a/net/ipv4/ping.c
835 +++ b/net/ipv4/ping.c
836 @@ -855,16 +855,8 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
837 if (flags & MSG_OOB)
838 goto out;
839
840 - if (flags & MSG_ERRQUEUE) {
841 - if (family == AF_INET) {
842 - return ip_recv_error(sk, msg, len, addr_len);
843 -#if IS_ENABLED(CONFIG_IPV6)
844 - } else if (family == AF_INET6) {
845 - return pingv6_ops.ipv6_recv_error(sk, msg, len,
846 - addr_len);
847 -#endif
848 - }
849 - }
850 + if (flags & MSG_ERRQUEUE)
851 + return inet_recv_error(sk, msg, len, addr_len);
852
853 skb = skb_recv_datagram(sk, flags, noblock, &err);
854 if (!skb)
855 diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
856 index 6b0b38fdf4fc..9cbf8b1df165 100644
857 --- a/net/ipv4/tcp.c
858 +++ b/net/ipv4/tcp.c
859 @@ -1633,7 +1633,7 @@ int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
860 u32 urg_hole = 0;
861
862 if (unlikely(flags & MSG_ERRQUEUE))
863 - return ip_recv_error(sk, msg, len, addr_len);
864 + return inet_recv_error(sk, msg, len, addr_len);
865
866 if (sk_can_busy_loop(sk) && skb_queue_empty(&sk->sk_receive_queue) &&
867 (sk->sk_state == TCP_ESTABLISHED))
868 diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
869 index cacb493a133d..33d08abe43db 100644
870 --- a/net/ipv6/ip6_gre.c
871 +++ b/net/ipv6/ip6_gre.c
872 @@ -502,11 +502,11 @@ static int ip6gre_rcv(struct sk_buff *skb)
873
874 skb->protocol = gre_proto;
875 /* WCCP version 1 and 2 protocol decoding.
876 - * - Change protocol to IP
877 + * - Change protocol to IPv6
878 * - When dealing with WCCPv2, Skip extra 4 bytes in GRE header
879 */
880 if (flags == 0 && gre_proto == htons(ETH_P_WCCP)) {
881 - skb->protocol = htons(ETH_P_IP);
882 + skb->protocol = htons(ETH_P_IPV6);
883 if ((*(h + offset) & 0xF0) != 0x40)
884 offset += 4;
885 }
886 diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
887 index 99c9487f236a..3abcd4afeaaf 100644
888 --- a/net/ipv6/ip6_vti.c
889 +++ b/net/ipv6/ip6_vti.c
890 @@ -905,6 +905,15 @@ static int vti6_newlink(struct net *src_net, struct net_device *dev,
891 return vti6_tnl_create2(dev);
892 }
893
894 +static void vti6_dellink(struct net_device *dev, struct list_head *head)
895 +{
896 + struct net *net = dev_net(dev);
897 + struct vti6_net *ip6n = net_generic(net, vti6_net_id);
898 +
899 + if (dev != ip6n->fb_tnl_dev)
900 + unregister_netdevice_queue(dev, head);
901 +}
902 +
903 static int vti6_changelink(struct net_device *dev, struct nlattr *tb[],
904 struct nlattr *data[])
905 {
906 @@ -980,6 +989,7 @@ static struct rtnl_link_ops vti6_link_ops __read_mostly = {
907 .setup = vti6_dev_setup,
908 .validate = vti6_validate,
909 .newlink = vti6_newlink,
910 + .dellink = vti6_dellink,
911 .changelink = vti6_changelink,
912 .get_size = vti6_get_size,
913 .fill_info = vti6_fill_info,
914 @@ -1020,6 +1030,7 @@ static int __net_init vti6_init_net(struct net *net)
915 if (!ip6n->fb_tnl_dev)
916 goto err_alloc_dev;
917 dev_net_set(ip6n->fb_tnl_dev, net);
918 + ip6n->fb_tnl_dev->rtnl_link_ops = &vti6_link_ops;
919
920 err = vti6_fb_tnl_dev_init(ip6n->fb_tnl_dev);
921 if (err < 0)
922 diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
923 index 0007b8180397..b6bf8e8caec7 100644
924 --- a/net/netlink/af_netlink.c
925 +++ b/net/netlink/af_netlink.c
926 @@ -3130,7 +3130,7 @@ static int __init netlink_proto_init(void)
927 .head_offset = offsetof(struct netlink_sock, node),
928 .key_offset = offsetof(struct netlink_sock, portid),
929 .key_len = sizeof(u32), /* portid */
930 - .hashfn = arch_fast_hash,
931 + .hashfn = jhash,
932 .max_shift = 16, /* 64K */
933 .grow_decision = rht_grow_above_75,
934 .shrink_decision = rht_shrink_below_30,
935 diff --git a/net/sctp/output.c b/net/sctp/output.c
936 index 42dffd428389..fc5e45b8a832 100644
937 --- a/net/sctp/output.c
938 +++ b/net/sctp/output.c
939 @@ -401,12 +401,12 @@ int sctp_packet_transmit(struct sctp_packet *packet)
940 sk = chunk->skb->sk;
941
942 /* Allocate the new skb. */
943 - nskb = alloc_skb(packet->size + LL_MAX_HEADER, GFP_ATOMIC);
944 + nskb = alloc_skb(packet->size + MAX_HEADER, GFP_ATOMIC);
945 if (!nskb)
946 goto nomem;
947
948 /* Make sure the outbound skb has enough header room reserved. */
949 - skb_reserve(nskb, packet->overhead + LL_MAX_HEADER);
950 + skb_reserve(nskb, packet->overhead + MAX_HEADER);
951
952 /* Set the owning socket so that we know where to get the
953 * destination IP address.
954 diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
955 index 06275f8807a8..4714ff92f15e 100644
956 --- a/sound/pci/hda/patch_analog.c
957 +++ b/sound/pci/hda/patch_analog.c
958 @@ -332,6 +332,7 @@ static const struct hda_fixup ad1986a_fixups[] = {
959
960 static const struct snd_pci_quirk ad1986a_fixup_tbl[] = {
961 SND_PCI_QUIRK(0x103c, 0x30af, "HP B2800", AD1986A_FIXUP_LAPTOP_IMIC),
962 + SND_PCI_QUIRK(0x1043, 0x1443, "ASUS Z99He", AD1986A_FIXUP_EAPD),
963 SND_PCI_QUIRK(0x1043, 0x1447, "ASUS A8JN", AD1986A_FIXUP_EAPD),
964 SND_PCI_QUIRK_MASK(0x1043, 0xff00, 0x8100, "ASUS P5", AD1986A_FIXUP_3STACK),
965 SND_PCI_QUIRK_MASK(0x1043, 0xff00, 0x8200, "ASUS M2", AD1986A_FIXUP_3STACK),
966 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
967 index 623a9d0c8d52..71a2350a974d 100644
968 --- a/sound/pci/hda/patch_realtek.c
969 +++ b/sound/pci/hda/patch_realtek.c
970 @@ -5087,6 +5087,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
971 SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
972 SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
973 SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
974 + SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
975 SND_PCI_QUIRK(0x17aa, 0x3978, "IdeaPad Y410P", ALC269_FIXUP_NO_SHUTUP),
976 SND_PCI_QUIRK(0x17aa, 0x5013, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
977 SND_PCI_QUIRK(0x17aa, 0x501a, "Thinkpad", ALC283_FIXUP_INT_MIC),
978 diff --git a/sound/usb/midi.c b/sound/usb/midi.c
979 index 7b166c2be0f7..3ee6f8815fc6 100644
980 --- a/sound/usb/midi.c
981 +++ b/sound/usb/midi.c
982 @@ -365,6 +365,8 @@ static void snd_usbmidi_error_timer(unsigned long data)
983 if (in && in->error_resubmit) {
984 in->error_resubmit = 0;
985 for (j = 0; j < INPUT_URBS; ++j) {
986 + if (atomic_read(&in->urbs[j]->use_count))
987 + continue;
988 in->urbs[j]->dev = umidi->dev;
989 snd_usbmidi_submit_urb(in->urbs[j], GFP_ATOMIC);
990 }