Magellan Linux

Contents of /trunk/kernel-alx-legacy/patches-4.9/0387-4.9.288-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3689 - (show annotations) (download)
Mon Oct 24 14:08:04 2022 UTC (18 months, 1 week ago) by niro
File size: 42113 byte(s)
-linux-4.9.288
1 diff --git a/Makefile b/Makefile
2 index 76eff0f592346..49568e384a924 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 9
8 -SUBLEVEL = 287
9 +SUBLEVEL = 288
10 EXTRAVERSION =
11 NAME = Roaring Lionus
12
13 diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
14 index 9dbaa283f01db..0f1dbd3238a5e 100644
15 --- a/arch/arm/Kconfig
16 +++ b/arch/arm/Kconfig
17 @@ -55,6 +55,7 @@ config ARM
18 select HAVE_FTRACE_MCOUNT_RECORD if (!XIP_KERNEL)
19 select HAVE_FUNCTION_GRAPH_TRACER if (!THUMB2_KERNEL)
20 select HAVE_FUNCTION_TRACER if (!XIP_KERNEL)
21 + select HAVE_FUTEX_CMPXCHG if FUTEX
22 select HAVE_GCC_PLUGINS
23 select HAVE_GENERIC_DMA_COHERENT
24 select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7))
25 diff --git a/arch/arm/boot/dts/spear3xx.dtsi b/arch/arm/boot/dts/spear3xx.dtsi
26 index 118135d758990..4e4166d96b264 100644
27 --- a/arch/arm/boot/dts/spear3xx.dtsi
28 +++ b/arch/arm/boot/dts/spear3xx.dtsi
29 @@ -53,7 +53,7 @@
30 };
31
32 gmac: eth@e0800000 {
33 - compatible = "st,spear600-gmac";
34 + compatible = "snps,dwmac-3.40a";
35 reg = <0xe0800000 0x8000>;
36 interrupts = <23 22>;
37 interrupt-names = "macirq", "eth_wake_irq";
38 diff --git a/arch/nios2/include/asm/irqflags.h b/arch/nios2/include/asm/irqflags.h
39 index 75ab92e639f85..0338fcb88203c 100644
40 --- a/arch/nios2/include/asm/irqflags.h
41 +++ b/arch/nios2/include/asm/irqflags.h
42 @@ -22,7 +22,7 @@
43
44 static inline unsigned long arch_local_save_flags(void)
45 {
46 - return RDCTL(CTL_STATUS);
47 + return RDCTL(CTL_FSTATUS);
48 }
49
50 /*
51 @@ -31,7 +31,7 @@ static inline unsigned long arch_local_save_flags(void)
52 */
53 static inline void arch_local_irq_restore(unsigned long flags)
54 {
55 - WRCTL(CTL_STATUS, flags);
56 + WRCTL(CTL_FSTATUS, flags);
57 }
58
59 static inline void arch_local_irq_disable(void)
60 diff --git a/arch/nios2/include/asm/registers.h b/arch/nios2/include/asm/registers.h
61 index 615bce19b546e..33824f2ad1ab7 100644
62 --- a/arch/nios2/include/asm/registers.h
63 +++ b/arch/nios2/include/asm/registers.h
64 @@ -24,7 +24,7 @@
65 #endif
66
67 /* control register numbers */
68 -#define CTL_STATUS 0
69 +#define CTL_FSTATUS 0
70 #define CTL_ESTATUS 1
71 #define CTL_BSTATUS 2
72 #define CTL_IENABLE 3
73 diff --git a/arch/s390/lib/string.c b/arch/s390/lib/string.c
74 index 48352bffbc929..a82335215d54d 100644
75 --- a/arch/s390/lib/string.c
76 +++ b/arch/s390/lib/string.c
77 @@ -225,14 +225,13 @@ EXPORT_SYMBOL(strcmp);
78 */
79 char * strrchr(const char * s, int c)
80 {
81 - size_t len = __strend(s) - s;
82 -
83 - if (len)
84 - do {
85 - if (s[len] == (char) c)
86 - return (char *) s + len;
87 - } while (--len > 0);
88 - return NULL;
89 + ssize_t len = __strend(s) - s;
90 +
91 + do {
92 + if (s[len] == (char)c)
93 + return (char *)s + len;
94 + } while (--len >= 0);
95 + return NULL;
96 }
97 EXPORT_SYMBOL(strrchr);
98
99 diff --git a/arch/xtensa/platforms/xtfpga/setup.c b/arch/xtensa/platforms/xtfpga/setup.c
100 index 42285f35d3135..db5122765f166 100644
101 --- a/arch/xtensa/platforms/xtfpga/setup.c
102 +++ b/arch/xtensa/platforms/xtfpga/setup.c
103 @@ -54,8 +54,12 @@ void platform_power_off(void)
104
105 void platform_restart(void)
106 {
107 - /* Flush and reset the mmu, simulate a processor reset, and
108 - * jump to the reset vector. */
109 + /* Try software reset first. */
110 + WRITE_ONCE(*(u32 *)XTFPGA_SWRST_VADDR, 0xdead);
111 +
112 + /* If software reset did not work, flush and reset the mmu,
113 + * simulate a processor reset, and jump to the reset vector.
114 + */
115 cpu_reset();
116 /* control never gets here */
117 }
118 @@ -85,7 +89,7 @@ void __init platform_calibrate_ccount(void)
119
120 #endif
121
122 -#ifdef CONFIG_OF
123 +#ifdef CONFIG_USE_OF
124
125 static void __init xtfpga_clk_setup(struct device_node *np)
126 {
127 @@ -303,4 +307,4 @@ static int __init xtavnet_init(void)
128 */
129 arch_initcall(xtavnet_init);
130
131 -#endif /* CONFIG_OF */
132 +#endif /* CONFIG_USE_OF */
133 diff --git a/drivers/ata/pata_legacy.c b/drivers/ata/pata_legacy.c
134 index bce2a8ca4678a..55fcdb798002b 100644
135 --- a/drivers/ata/pata_legacy.c
136 +++ b/drivers/ata/pata_legacy.c
137 @@ -328,7 +328,8 @@ static unsigned int pdc_data_xfer_vlb(struct ata_device *dev,
138 iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
139
140 if (unlikely(slop)) {
141 - __le32 pad;
142 + __le32 pad = 0;
143 +
144 if (rw == READ) {
145 pad = cpu_to_le32(ioread32(ap->ioaddr.data_addr));
146 memcpy(buf + buflen - slop, &pad, slop);
147 @@ -716,7 +717,8 @@ static unsigned int vlb32_data_xfer(struct ata_device *adev, unsigned char *buf,
148 ioread32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
149
150 if (unlikely(slop)) {
151 - __le32 pad;
152 + __le32 pad = 0;
153 +
154 if (rw == WRITE) {
155 memcpy(&pad, buf + buflen - slop, slop);
156 iowrite32(le32_to_cpu(pad), ap->ioaddr.data_addr);
157 diff --git a/drivers/firmware/efi/cper.c b/drivers/firmware/efi/cper.c
158 index dc8d2603612ed..91dbc6ae56cf9 100644
159 --- a/drivers/firmware/efi/cper.c
160 +++ b/drivers/firmware/efi/cper.c
161 @@ -35,8 +35,6 @@
162
163 #define INDENT_SP " "
164
165 -static char rcd_decode_str[CPER_REC_LEN];
166 -
167 /*
168 * CPER record ID need to be unique even after reboot, because record
169 * ID is used as index for ERST storage, while CPER records from
170 @@ -293,6 +291,7 @@ const char *cper_mem_err_unpack(struct trace_seq *p,
171 struct cper_mem_err_compact *cmem)
172 {
173 const char *ret = trace_seq_buffer_ptr(p);
174 + char rcd_decode_str[CPER_REC_LEN];
175
176 if (cper_mem_err_location(cmem, rcd_decode_str))
177 trace_seq_printf(p, "%s", rcd_decode_str);
178 @@ -307,6 +306,7 @@ static void cper_print_mem(const char *pfx, const struct cper_sec_mem_err *mem,
179 int len)
180 {
181 struct cper_mem_err_compact cmem;
182 + char rcd_decode_str[CPER_REC_LEN];
183
184 /* Don't trust UEFI 2.1/2.2 structure with bad validation bits */
185 if (len == sizeof(struct cper_sec_mem_err_old) &&
186 diff --git a/drivers/firmware/efi/runtime-wrappers.c b/drivers/firmware/efi/runtime-wrappers.c
187 index dd7f63354ca06..60a32440daffe 100644
188 --- a/drivers/firmware/efi/runtime-wrappers.c
189 +++ b/drivers/firmware/efi/runtime-wrappers.c
190 @@ -259,7 +259,7 @@ static void virt_efi_reset_system(int reset_type,
191 unsigned long data_size,
192 efi_char16_t *data)
193 {
194 - if (down_interruptible(&efi_runtime_lock)) {
195 + if (down_trylock(&efi_runtime_lock)) {
196 pr_warn("failed to invoke the reset_system() runtime service:\n"
197 "could not get exclusive access to the firmware\n");
198 return;
199 diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c
200 index e49b414c012c6..246336a9f47d6 100644
201 --- a/drivers/gpu/drm/msm/dsi/dsi_host.c
202 +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c
203 @@ -439,7 +439,7 @@ static int dsi_bus_clk_enable(struct msm_dsi_host *msm_host)
204
205 return 0;
206 err:
207 - for (; i > 0; i--)
208 + while (--i >= 0)
209 clk_disable_unprepare(msm_host->bus_clks[i]);
210
211 return ret;
212 diff --git a/drivers/gpu/drm/msm/edp/edp_ctrl.c b/drivers/gpu/drm/msm/edp/edp_ctrl.c
213 index 149bfe7ddd82d..090ce0a46f068 100644
214 --- a/drivers/gpu/drm/msm/edp/edp_ctrl.c
215 +++ b/drivers/gpu/drm/msm/edp/edp_ctrl.c
216 @@ -1090,7 +1090,7 @@ void msm_edp_ctrl_power(struct edp_ctrl *ctrl, bool on)
217 int msm_edp_ctrl_init(struct msm_edp *edp)
218 {
219 struct edp_ctrl *ctrl = NULL;
220 - struct device *dev = &edp->pdev->dev;
221 + struct device *dev;
222 int ret;
223
224 if (!edp) {
225 @@ -1098,6 +1098,7 @@ int msm_edp_ctrl_init(struct msm_edp *edp)
226 return -EINVAL;
227 }
228
229 + dev = &edp->pdev->dev;
230 ctrl = devm_kzalloc(dev, sizeof(*ctrl), GFP_KERNEL);
231 if (!ctrl)
232 return -ENOMEM;
233 diff --git a/drivers/iio/adc/ti-adc128s052.c b/drivers/iio/adc/ti-adc128s052.c
234 index 89dfbd31be5c8..b7c7cba2dc092 100644
235 --- a/drivers/iio/adc/ti-adc128s052.c
236 +++ b/drivers/iio/adc/ti-adc128s052.c
237 @@ -169,7 +169,13 @@ static int adc128_probe(struct spi_device *spi)
238 mutex_init(&adc->lock);
239
240 ret = iio_device_register(indio_dev);
241 + if (ret)
242 + goto err_disable_regulator;
243
244 + return 0;
245 +
246 +err_disable_regulator:
247 + regulator_disable(adc->reg);
248 return ret;
249 }
250
251 diff --git a/drivers/iio/common/ssp_sensors/ssp_spi.c b/drivers/iio/common/ssp_sensors/ssp_spi.c
252 index 704284a475aec..645749b90ec07 100644
253 --- a/drivers/iio/common/ssp_sensors/ssp_spi.c
254 +++ b/drivers/iio/common/ssp_sensors/ssp_spi.c
255 @@ -147,7 +147,7 @@ static int ssp_print_mcu_debug(char *data_frame, int *data_index,
256 if (length > received_len - *data_index || length <= 0) {
257 ssp_dbg("[SSP]: MSG From MCU-invalid debug length(%d/%d)\n",
258 length, received_len);
259 - return length ? length : -EPROTO;
260 + return -EPROTO;
261 }
262
263 ssp_dbg("[SSP]: MSG From MCU - %s\n", &data_frame[*data_index]);
264 @@ -286,6 +286,8 @@ static int ssp_parse_dataframe(struct ssp_data *data, char *dataframe, int len)
265 for (idx = 0; idx < len;) {
266 switch (dataframe[idx++]) {
267 case SSP_MSG2AP_INST_BYPASS_DATA:
268 + if (idx >= len)
269 + return -EPROTO;
270 sd = dataframe[idx++];
271 if (sd < 0 || sd >= SSP_SENSOR_MAX) {
272 dev_err(SSP_DEV,
273 @@ -295,10 +297,13 @@ static int ssp_parse_dataframe(struct ssp_data *data, char *dataframe, int len)
274
275 if (indio_devs[sd]) {
276 spd = iio_priv(indio_devs[sd]);
277 - if (spd->process_data)
278 + if (spd->process_data) {
279 + if (idx >= len)
280 + return -EPROTO;
281 spd->process_data(indio_devs[sd],
282 &dataframe[idx],
283 data->timestamp);
284 + }
285 } else {
286 dev_err(SSP_DEV, "no client for frame\n");
287 }
288 @@ -306,6 +311,8 @@ static int ssp_parse_dataframe(struct ssp_data *data, char *dataframe, int len)
289 idx += ssp_offset_map[sd];
290 break;
291 case SSP_MSG2AP_INST_DEBUG_DATA:
292 + if (idx >= len)
293 + return -EPROTO;
294 sd = ssp_print_mcu_debug(dataframe, &idx, len);
295 if (sd) {
296 dev_err(SSP_DEV,
297 diff --git a/drivers/iio/light/opt3001.c b/drivers/iio/light/opt3001.c
298 index be55477de2acc..0a0e52c95ff2d 100644
299 --- a/drivers/iio/light/opt3001.c
300 +++ b/drivers/iio/light/opt3001.c
301 @@ -283,6 +283,8 @@ static int opt3001_get_lux(struct opt3001 *opt, int *val, int *val2)
302 ret = wait_event_timeout(opt->result_ready_queue,
303 opt->result_ready,
304 msecs_to_jiffies(OPT3001_RESULT_READY_LONG));
305 + if (ret == 0)
306 + return -ETIMEDOUT;
307 } else {
308 /* Sleep for result ready time */
309 timeout = (opt->int_time == OPT3001_INT_TIME_SHORT) ?
310 @@ -319,9 +321,7 @@ err:
311 /* Disallow IRQ to access the device while lock is active */
312 opt->ok_to_ignore_lock = false;
313
314 - if (ret == 0)
315 - return -ETIMEDOUT;
316 - else if (ret < 0)
317 + if (ret < 0)
318 return ret;
319
320 if (opt->use_irq) {
321 diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
322 index 4168ed0ef187e..f8f6bd92e314c 100644
323 --- a/drivers/input/joystick/xpad.c
324 +++ b/drivers/input/joystick/xpad.c
325 @@ -348,6 +348,7 @@ static const struct xpad_device {
326 { 0x24c6, 0x5b03, "Thrustmaster Ferrari 458 Racing Wheel", 0, XTYPE_XBOX360 },
327 { 0x24c6, 0x5d04, "Razer Sabertooth", 0, XTYPE_XBOX360 },
328 { 0x24c6, 0xfafe, "Rock Candy Gamepad for Xbox 360", 0, XTYPE_XBOX360 },
329 + { 0x3285, 0x0607, "Nacon GC-100", 0, XTYPE_XBOX360 },
330 { 0x3767, 0x0101, "Fanatec Speedster 3 Forceshock Wheel", 0, XTYPE_XBOX },
331 { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX },
332 { 0x0000, 0x0000, "Generic X-Box pad", 0, XTYPE_UNKNOWN }
333 @@ -464,6 +465,7 @@ static const struct usb_device_id xpad_table[] = {
334 XPAD_XBOXONE_VENDOR(0x24c6), /* PowerA Controllers */
335 XPAD_XBOXONE_VENDOR(0x2e24), /* Hyperkin Duke X-Box One pad */
336 XPAD_XBOX360_VENDOR(0x2f24), /* GameSir Controllers */
337 + XPAD_XBOX360_VENDOR(0x3285), /* Nacon GC-100 */
338 { }
339 };
340
341 diff --git a/drivers/isdn/capi/kcapi.c b/drivers/isdn/capi/kcapi.c
342 index 9de62c3b8bf9f..658e116d8fe66 100644
343 --- a/drivers/isdn/capi/kcapi.c
344 +++ b/drivers/isdn/capi/kcapi.c
345 @@ -564,6 +564,11 @@ int detach_capi_ctr(struct capi_ctr *ctr)
346
347 ctr_down(ctr, CAPI_CTR_DETACHED);
348
349 + if (ctr->cnr < 1 || ctr->cnr - 1 >= CAPI_MAXCONTR) {
350 + err = -EINVAL;
351 + goto unlock_out;
352 + }
353 +
354 if (capi_controller[ctr->cnr - 1] != ctr) {
355 err = -EINVAL;
356 goto unlock_out;
357 diff --git a/drivers/isdn/hardware/mISDN/netjet.c b/drivers/isdn/hardware/mISDN/netjet.c
358 index 6dea4c180c494..feada9d7cbcc2 100644
359 --- a/drivers/isdn/hardware/mISDN/netjet.c
360 +++ b/drivers/isdn/hardware/mISDN/netjet.c
361 @@ -963,8 +963,8 @@ nj_release(struct tiger_hw *card)
362 nj_disable_hwirq(card);
363 mode_tiger(&card->bc[0], ISDN_P_NONE);
364 mode_tiger(&card->bc[1], ISDN_P_NONE);
365 - card->isac.release(&card->isac);
366 spin_unlock_irqrestore(&card->lock, flags);
367 + card->isac.release(&card->isac);
368 release_region(card->base, card->base_s);
369 card->base_s = 0;
370 }
371 diff --git a/drivers/misc/cb710/sgbuf2.c b/drivers/misc/cb710/sgbuf2.c
372 index 2a40d0efdff5d..4d2a72a537d42 100644
373 --- a/drivers/misc/cb710/sgbuf2.c
374 +++ b/drivers/misc/cb710/sgbuf2.c
375 @@ -50,7 +50,7 @@ static inline bool needs_unaligned_copy(const void *ptr)
376 #ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
377 return false;
378 #else
379 - return ((ptr - NULL) & 3) != 0;
380 + return ((uintptr_t)ptr & 3) != 0;
381 #endif
382 }
383
384 diff --git a/drivers/net/can/rcar/rcar_can.c b/drivers/net/can/rcar/rcar_can.c
385 index 9b2c3bd00f8b4..2ac33ee1067eb 100644
386 --- a/drivers/net/can/rcar/rcar_can.c
387 +++ b/drivers/net/can/rcar/rcar_can.c
388 @@ -858,10 +858,12 @@ static int __maybe_unused rcar_can_suspend(struct device *dev)
389 struct rcar_can_priv *priv = netdev_priv(ndev);
390 u16 ctlr;
391
392 - if (netif_running(ndev)) {
393 - netif_stop_queue(ndev);
394 - netif_device_detach(ndev);
395 - }
396 + if (!netif_running(ndev))
397 + return 0;
398 +
399 + netif_stop_queue(ndev);
400 + netif_device_detach(ndev);
401 +
402 ctlr = readw(&priv->regs->ctlr);
403 ctlr |= RCAR_CAN_CTLR_CANM_HALT;
404 writew(ctlr, &priv->regs->ctlr);
405 @@ -880,6 +882,9 @@ static int __maybe_unused rcar_can_resume(struct device *dev)
406 u16 ctlr;
407 int err;
408
409 + if (!netif_running(ndev))
410 + return 0;
411 +
412 err = clk_enable(priv->clk);
413 if (err) {
414 netdev_err(ndev, "clk_enable() failed, error %d\n", err);
415 @@ -893,10 +898,9 @@ static int __maybe_unused rcar_can_resume(struct device *dev)
416 writew(ctlr, &priv->regs->ctlr);
417 priv->can.state = CAN_STATE_ERROR_ACTIVE;
418
419 - if (netif_running(ndev)) {
420 - netif_device_attach(ndev);
421 - netif_start_queue(ndev);
422 - }
423 + netif_device_attach(ndev);
424 + netif_start_queue(ndev);
425 +
426 return 0;
427 }
428
429 diff --git a/drivers/net/can/sja1000/peak_pci.c b/drivers/net/can/sja1000/peak_pci.c
430 index 131026fbc2d77..e12fc5d88382d 100644
431 --- a/drivers/net/can/sja1000/peak_pci.c
432 +++ b/drivers/net/can/sja1000/peak_pci.c
433 @@ -736,16 +736,15 @@ static void peak_pci_remove(struct pci_dev *pdev)
434 struct net_device *prev_dev = chan->prev_dev;
435
436 dev_info(&pdev->dev, "removing device %s\n", dev->name);
437 + /* do that only for first channel */
438 + if (!prev_dev && chan->pciec_card)
439 + peak_pciec_remove(chan->pciec_card);
440 unregister_sja1000dev(dev);
441 free_sja1000dev(dev);
442 dev = prev_dev;
443
444 - if (!dev) {
445 - /* do that only for first channel */
446 - if (chan->pciec_card)
447 - peak_pciec_remove(chan->pciec_card);
448 + if (!dev)
449 break;
450 - }
451 priv = netdev_priv(dev);
452 chan = priv->priv;
453 }
454 diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
455 index d314e73f3d061..e7ffc073fbd68 100644
456 --- a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
457 +++ b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
458 @@ -559,11 +559,10 @@ static int pcan_usb_fd_decode_status(struct pcan_usb_fd_if *usb_if,
459 } else if (sm->channel_p_w_b & PUCAN_BUS_WARNING) {
460 new_state = CAN_STATE_ERROR_WARNING;
461 } else {
462 - /* no error bit (so, no error skb, back to active state) */
463 - dev->can.state = CAN_STATE_ERROR_ACTIVE;
464 + /* back to (or still in) ERROR_ACTIVE state */
465 + new_state = CAN_STATE_ERROR_ACTIVE;
466 pdev->bec.txerr = 0;
467 pdev->bec.rxerr = 0;
468 - return 0;
469 }
470
471 /* state hasn't changed */
472 diff --git a/drivers/net/ethernet/Kconfig b/drivers/net/ethernet/Kconfig
473 index 8cc7467b6c1f6..8c80ca4b8ae18 100644
474 --- a/drivers/net/ethernet/Kconfig
475 +++ b/drivers/net/ethernet/Kconfig
476 @@ -96,6 +96,7 @@ config JME
477 config KORINA
478 tristate "Korina (IDT RC32434) Ethernet support"
479 depends on MIKROTIK_RB532
480 + select CRC32
481 ---help---
482 If you have a Mikrotik RouterBoard 500 or IDT RC32434
483 based system say Y. Otherwise say N.
484 diff --git a/drivers/net/ethernet/arc/Kconfig b/drivers/net/ethernet/arc/Kconfig
485 index 689045186064a..ef4988716cf44 100644
486 --- a/drivers/net/ethernet/arc/Kconfig
487 +++ b/drivers/net/ethernet/arc/Kconfig
488 @@ -19,6 +19,7 @@ config ARC_EMAC_CORE
489 tristate
490 select MII
491 select PHYLIB
492 + select CRC32
493
494 config ARC_EMAC
495 tristate "ARC EMAC support"
496 diff --git a/drivers/net/ethernet/microchip/encx24j600-regmap.c b/drivers/net/ethernet/microchip/encx24j600-regmap.c
497 index f3bb9055a2927..b5de665ce7189 100644
498 --- a/drivers/net/ethernet/microchip/encx24j600-regmap.c
499 +++ b/drivers/net/ethernet/microchip/encx24j600-regmap.c
500 @@ -500,13 +500,19 @@ static struct regmap_bus phymap_encx24j600 = {
501 .reg_read = regmap_encx24j600_phy_reg_read,
502 };
503
504 -void devm_regmap_init_encx24j600(struct device *dev,
505 - struct encx24j600_context *ctx)
506 +int devm_regmap_init_encx24j600(struct device *dev,
507 + struct encx24j600_context *ctx)
508 {
509 mutex_init(&ctx->mutex);
510 regcfg.lock_arg = ctx;
511 ctx->regmap = devm_regmap_init(dev, &regmap_encx24j600, ctx, &regcfg);
512 + if (IS_ERR(ctx->regmap))
513 + return PTR_ERR(ctx->regmap);
514 ctx->phymap = devm_regmap_init(dev, &phymap_encx24j600, ctx, &phycfg);
515 + if (IS_ERR(ctx->phymap))
516 + return PTR_ERR(ctx->phymap);
517 +
518 + return 0;
519 }
520 EXPORT_SYMBOL_GPL(devm_regmap_init_encx24j600);
521
522 diff --git a/drivers/net/ethernet/microchip/encx24j600.c b/drivers/net/ethernet/microchip/encx24j600.c
523 index ad661d1979c78..906751f78ef6c 100644
524 --- a/drivers/net/ethernet/microchip/encx24j600.c
525 +++ b/drivers/net/ethernet/microchip/encx24j600.c
526 @@ -1015,10 +1015,13 @@ static int encx24j600_spi_probe(struct spi_device *spi)
527 priv->speed = SPEED_100;
528
529 priv->ctx.spi = spi;
530 - devm_regmap_init_encx24j600(&spi->dev, &priv->ctx);
531 ndev->irq = spi->irq;
532 ndev->netdev_ops = &encx24j600_netdev_ops;
533
534 + ret = devm_regmap_init_encx24j600(&spi->dev, &priv->ctx);
535 + if (ret)
536 + goto out_free;
537 +
538 mutex_init(&priv->lock);
539
540 /* Reset device and check if it is connected */
541 diff --git a/drivers/net/ethernet/microchip/encx24j600_hw.h b/drivers/net/ethernet/microchip/encx24j600_hw.h
542 index 4be73d5553f89..c9b17ccf749ce 100644
543 --- a/drivers/net/ethernet/microchip/encx24j600_hw.h
544 +++ b/drivers/net/ethernet/microchip/encx24j600_hw.h
545 @@ -14,8 +14,8 @@ struct encx24j600_context {
546 int bank;
547 };
548
549 -void devm_regmap_init_encx24j600(struct device *dev,
550 - struct encx24j600_context *ctx);
551 +int devm_regmap_init_encx24j600(struct device *dev,
552 + struct encx24j600_context *ctx);
553
554 /* Single-byte instructions */
555 #define BANK_SELECT(bank) (0xC0 | ((bank & (BANK_MASK >> BANK_SHIFT)) << 1))
556 diff --git a/drivers/net/ethernet/neterion/s2io.c b/drivers/net/ethernet/neterion/s2io.c
557 index eaa37c079a7cd..a1447d7ff48b5 100644
558 --- a/drivers/net/ethernet/neterion/s2io.c
559 +++ b/drivers/net/ethernet/neterion/s2io.c
560 @@ -8618,7 +8618,7 @@ static void s2io_io_resume(struct pci_dev *pdev)
561 return;
562 }
563
564 - if (s2io_set_mac_addr(netdev, netdev->dev_addr) == FAILURE) {
565 + if (do_s2io_prog_unicast(netdev, netdev->dev_addr) == FAILURE) {
566 s2io_card_down(sp);
567 pr_err("Can't restore mac addr after reset.\n");
568 return;
569 diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
570 index 92fb664b56fbb..73f97d00ede79 100644
571 --- a/drivers/net/phy/mdio_bus.c
572 +++ b/drivers/net/phy/mdio_bus.c
573 @@ -326,6 +326,7 @@ int __mdiobus_register(struct mii_bus *bus, struct module *owner)
574 err = device_register(&bus->dev);
575 if (err) {
576 pr_err("mii_bus %s failed to register\n", bus->id);
577 + put_device(&bus->dev);
578 return -EINVAL;
579 }
580
581 diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
582 index 3a7286256db09..9272d0f938190 100644
583 --- a/drivers/net/usb/Kconfig
584 +++ b/drivers/net/usb/Kconfig
585 @@ -98,6 +98,10 @@ config USB_RTL8150
586 config USB_RTL8152
587 tristate "Realtek RTL8152/RTL8153 Based USB Ethernet Adapters"
588 select MII
589 + select CRC32
590 + select CRYPTO
591 + select CRYPTO_HASH
592 + select CRYPTO_SHA256
593 help
594 This option adds support for Realtek RTL8152 based USB 2.0
595 10/100 Ethernet adapters and RTL8153 based USB 3.0 10/100/1000
596 diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
597 index 2a0c5f3b0e509..286196e3a35d3 100644
598 --- a/drivers/nvmem/core.c
599 +++ b/drivers/nvmem/core.c
600 @@ -967,7 +967,8 @@ static inline void nvmem_shift_read_buffer_in_place(struct nvmem_cell *cell,
601 *p-- = 0;
602
603 /* clear msb bits if any leftover in the last byte */
604 - *p &= GENMASK((cell->nbits%BITS_PER_BYTE) - 1, 0);
605 + if (cell->nbits % BITS_PER_BYTE)
606 + *p &= GENMASK((cell->nbits % BITS_PER_BYTE) - 1, 0);
607 }
608
609 static int __nvmem_cell_read(struct nvmem_device *nvmem,
610 diff --git a/drivers/platform/x86/intel_scu_ipc.c b/drivers/platform/x86/intel_scu_ipc.c
611 index e81daff65f622..238ee4275f5c8 100644
612 --- a/drivers/platform/x86/intel_scu_ipc.c
613 +++ b/drivers/platform/x86/intel_scu_ipc.c
614 @@ -187,7 +187,7 @@ static inline int busy_loop(struct intel_scu_ipc_dev *scu)
615 return 0;
616 }
617
618 -/* Wait till ipc ioc interrupt is received or timeout in 3 HZ */
619 +/* Wait till ipc ioc interrupt is received or timeout in 10 HZ */
620 static inline int ipc_wait_for_interrupt(struct intel_scu_ipc_dev *scu)
621 {
622 int status;
623 diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
624 index bb63cc5cbca05..ae67f6383ca32 100644
625 --- a/drivers/usb/host/xhci-pci.c
626 +++ b/drivers/usb/host/xhci-pci.c
627 @@ -38,6 +38,7 @@
628 #define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73
629 #define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000
630 #define PCI_DEVICE_ID_FRESCO_LOGIC_FL1009 0x1009
631 +#define PCI_DEVICE_ID_FRESCO_LOGIC_FL1100 0x1100
632 #define PCI_DEVICE_ID_FRESCO_LOGIC_FL1400 0x1400
633
634 #define PCI_VENDOR_ID_ETRON 0x1b6f
635 @@ -91,6 +92,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
636 /* Look for vendor-specific quirks */
637 if (pdev->vendor == PCI_VENDOR_ID_FRESCO_LOGIC &&
638 (pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK ||
639 + pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_FL1100 ||
640 pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_FL1400)) {
641 if (pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK &&
642 pdev->revision == 0x0) {
643 diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
644 index ec8ad931f41e3..9a0f8ee8cbd9f 100644
645 --- a/drivers/usb/serial/option.c
646 +++ b/drivers/usb/serial/option.c
647 @@ -1209,6 +1209,8 @@ static const struct usb_device_id option_ids[] = {
648 .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
649 { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1203, 0xff), /* Telit LE910Cx (RNDIS) */
650 .driver_info = NCTRL(2) | RSVD(3) },
651 + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1204, 0xff), /* Telit LE910Cx (MBIM) */
652 + .driver_info = NCTRL(0) | RSVD(1) },
653 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4),
654 .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) },
655 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920),
656 diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
657 index 11fb4d78e2dbc..f0bd6a66f551e 100644
658 --- a/drivers/usb/serial/qcserial.c
659 +++ b/drivers/usb/serial/qcserial.c
660 @@ -169,6 +169,7 @@ static const struct usb_device_id id_table[] = {
661 {DEVICE_SWI(0x1199, 0x907b)}, /* Sierra Wireless EM74xx */
662 {DEVICE_SWI(0x1199, 0x9090)}, /* Sierra Wireless EM7565 QDL */
663 {DEVICE_SWI(0x1199, 0x9091)}, /* Sierra Wireless EM7565 */
664 + {DEVICE_SWI(0x1199, 0x90d2)}, /* Sierra Wireless EM9191 QDL */
665 {DEVICE_SWI(0x413c, 0x81a2)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */
666 {DEVICE_SWI(0x413c, 0x81a3)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */
667 {DEVICE_SWI(0x413c, 0x81a4)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */
668 diff --git a/fs/exec.c b/fs/exec.c
669 index 319a1f5732fa9..482a8b4f41a5b 100644
670 --- a/fs/exec.c
671 +++ b/fs/exec.c
672 @@ -994,7 +994,7 @@ int kernel_read_file_from_fd(int fd, void **buf, loff_t *size, loff_t max_size,
673 struct fd f = fdget(fd);
674 int ret = -EBADF;
675
676 - if (!f.file)
677 + if (!f.file || !(f.file->f_mode & FMODE_READ))
678 goto out;
679
680 ret = kernel_read_file(f.file, buf, size, max_size, id);
681 diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
682 index f704f90db36cd..2418b9d829ae1 100644
683 --- a/fs/nfsd/nfsctl.c
684 +++ b/fs/nfsd/nfsctl.c
685 @@ -765,7 +765,10 @@ out_close:
686 svc_xprt_put(xprt);
687 }
688 out_err:
689 - nfsd_destroy(net);
690 + if (!list_empty(&nn->nfsd_serv->sv_permsocks))
691 + nn->nfsd_serv->sv_nrthreads--;
692 + else
693 + nfsd_destroy(net);
694 return err;
695 }
696
697 diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
698 index dfb8a923921e0..04bb03b01f62d 100644
699 --- a/fs/ocfs2/alloc.c
700 +++ b/fs/ocfs2/alloc.c
701 @@ -6891,7 +6891,7 @@ void ocfs2_set_inode_data_inline(struct inode *inode, struct ocfs2_dinode *di)
702 int ocfs2_convert_inline_data_to_extents(struct inode *inode,
703 struct buffer_head *di_bh)
704 {
705 - int ret, i, has_data, num_pages = 0;
706 + int ret, has_data, num_pages = 0;
707 int need_free = 0;
708 u32 bit_off, num;
709 handle_t *handle;
710 @@ -6900,26 +6900,17 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode,
711 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
712 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
713 struct ocfs2_alloc_context *data_ac = NULL;
714 - struct page **pages = NULL;
715 - loff_t end = osb->s_clustersize;
716 + struct page *page = NULL;
717 struct ocfs2_extent_tree et;
718 int did_quota = 0;
719
720 has_data = i_size_read(inode) ? 1 : 0;
721
722 if (has_data) {
723 - pages = kcalloc(ocfs2_pages_per_cluster(osb->sb),
724 - sizeof(struct page *), GFP_NOFS);
725 - if (pages == NULL) {
726 - ret = -ENOMEM;
727 - mlog_errno(ret);
728 - return ret;
729 - }
730 -
731 ret = ocfs2_reserve_clusters(osb, 1, &data_ac);
732 if (ret) {
733 mlog_errno(ret);
734 - goto free_pages;
735 + goto out;
736 }
737 }
738
739 @@ -6939,7 +6930,8 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode,
740 }
741
742 if (has_data) {
743 - unsigned int page_end;
744 + unsigned int page_end = min_t(unsigned, PAGE_SIZE,
745 + osb->s_clustersize);
746 u64 phys;
747
748 ret = dquot_alloc_space_nodirty(inode,
749 @@ -6963,15 +6955,8 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode,
750 */
751 block = phys = ocfs2_clusters_to_blocks(inode->i_sb, bit_off);
752
753 - /*
754 - * Non sparse file systems zero on extend, so no need
755 - * to do that now.
756 - */
757 - if (!ocfs2_sparse_alloc(osb) &&
758 - PAGE_SIZE < osb->s_clustersize)
759 - end = PAGE_SIZE;
760 -
761 - ret = ocfs2_grab_eof_pages(inode, 0, end, pages, &num_pages);
762 + ret = ocfs2_grab_eof_pages(inode, 0, page_end, &page,
763 + &num_pages);
764 if (ret) {
765 mlog_errno(ret);
766 need_free = 1;
767 @@ -6982,20 +6967,15 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode,
768 * This should populate the 1st page for us and mark
769 * it up to date.
770 */
771 - ret = ocfs2_read_inline_data(inode, pages[0], di_bh);
772 + ret = ocfs2_read_inline_data(inode, page, di_bh);
773 if (ret) {
774 mlog_errno(ret);
775 need_free = 1;
776 goto out_unlock;
777 }
778
779 - page_end = PAGE_SIZE;
780 - if (PAGE_SIZE > osb->s_clustersize)
781 - page_end = osb->s_clustersize;
782 -
783 - for (i = 0; i < num_pages; i++)
784 - ocfs2_map_and_dirty_page(inode, handle, 0, page_end,
785 - pages[i], i > 0, &phys);
786 + ocfs2_map_and_dirty_page(inode, handle, 0, page_end, page, 0,
787 + &phys);
788 }
789
790 spin_lock(&oi->ip_lock);
791 @@ -7026,8 +7006,8 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode,
792 }
793
794 out_unlock:
795 - if (pages)
796 - ocfs2_unlock_and_free_pages(pages, num_pages);
797 + if (page)
798 + ocfs2_unlock_and_free_pages(&page, num_pages);
799
800 out_commit:
801 if (ret < 0 && did_quota)
802 @@ -7051,8 +7031,6 @@ out_commit:
803 out:
804 if (data_ac)
805 ocfs2_free_alloc_context(data_ac);
806 -free_pages:
807 - kfree(pages);
808 return ret;
809 }
810
811 diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
812 index e0fb62f5cf63d..454aad87b866c 100644
813 --- a/fs/ocfs2/super.c
814 +++ b/fs/ocfs2/super.c
815 @@ -2189,11 +2189,17 @@ static int ocfs2_initialize_super(struct super_block *sb,
816 }
817
818 if (ocfs2_clusterinfo_valid(osb)) {
819 + /*
820 + * ci_stack and ci_cluster in ocfs2_cluster_info may not be null
821 + * terminated, so make sure no overflow happens here by using
822 + * memcpy. Destination strings will always be null terminated
823 + * because osb is allocated using kzalloc.
824 + */
825 osb->osb_stackflags =
826 OCFS2_RAW_SB(di)->s_cluster_info.ci_stackflags;
827 - strlcpy(osb->osb_cluster_stack,
828 + memcpy(osb->osb_cluster_stack,
829 OCFS2_RAW_SB(di)->s_cluster_info.ci_stack,
830 - OCFS2_STACK_LABEL_LEN + 1);
831 + OCFS2_STACK_LABEL_LEN);
832 if (strlen(osb->osb_cluster_stack) != OCFS2_STACK_LABEL_LEN) {
833 mlog(ML_ERROR,
834 "couldn't mount because of an invalid "
835 @@ -2202,9 +2208,9 @@ static int ocfs2_initialize_super(struct super_block *sb,
836 status = -EINVAL;
837 goto bail;
838 }
839 - strlcpy(osb->osb_cluster_name,
840 + memcpy(osb->osb_cluster_name,
841 OCFS2_RAW_SB(di)->s_cluster_info.ci_cluster,
842 - OCFS2_CLUSTER_NAME_LEN + 1);
843 + OCFS2_CLUSTER_NAME_LEN);
844 } else {
845 /* The empty string is identical with classic tools that
846 * don't know about s_cluster_info. */
847 diff --git a/include/linux/elfcore.h b/include/linux/elfcore.h
848 index 4adf7faeaeb59..a65dadad65bf8 100644
849 --- a/include/linux/elfcore.h
850 +++ b/include/linux/elfcore.h
851 @@ -55,7 +55,7 @@ static inline int elf_core_copy_task_xfpregs(struct task_struct *t, elf_fpxregse
852 }
853 #endif
854
855 -#if defined(CONFIG_UM) || defined(CONFIG_IA64)
856 +#if (defined(CONFIG_UML) && defined(CONFIG_X86_32)) || defined(CONFIG_IA64)
857 /*
858 * These functions parameterize elf_core_dump in fs/binfmt_elf.c to write out
859 * extra segments containing the gate DSO contents. Dumping its
860 diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
861 index 84f2caf6a6991..06841602025ef 100644
862 --- a/kernel/trace/ftrace.c
863 +++ b/kernel/trace/ftrace.c
864 @@ -5288,7 +5288,7 @@ __ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip,
865 struct ftrace_ops *op;
866 int bit;
867
868 - bit = trace_test_and_set_recursion(TRACE_LIST_START, TRACE_LIST_MAX);
869 + bit = trace_test_and_set_recursion(TRACE_LIST_START);
870 if (bit < 0)
871 return;
872
873 @@ -5363,7 +5363,7 @@ static void ftrace_ops_assist_func(unsigned long ip, unsigned long parent_ip,
874 {
875 int bit;
876
877 - bit = trace_test_and_set_recursion(TRACE_LIST_START, TRACE_LIST_MAX);
878 + bit = trace_test_and_set_recursion(TRACE_LIST_START);
879 if (bit < 0)
880 return;
881
882 diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
883 index d9b7910ef3658..ecea27ba29e68 100644
884 --- a/kernel/trace/trace.h
885 +++ b/kernel/trace/trace.h
886 @@ -446,23 +446,8 @@ struct tracer {
887 * When function tracing occurs, the following steps are made:
888 * If arch does not support a ftrace feature:
889 * call internal function (uses INTERNAL bits) which calls...
890 - * If callback is registered to the "global" list, the list
891 - * function is called and recursion checks the GLOBAL bits.
892 - * then this function calls...
893 * The function callback, which can use the FTRACE bits to
894 * check for recursion.
895 - *
896 - * Now if the arch does not suppport a feature, and it calls
897 - * the global list function which calls the ftrace callback
898 - * all three of these steps will do a recursion protection.
899 - * There's no reason to do one if the previous caller already
900 - * did. The recursion that we are protecting against will
901 - * go through the same steps again.
902 - *
903 - * To prevent the multiple recursion checks, if a recursion
904 - * bit is set that is higher than the MAX bit of the current
905 - * check, then we know that the check was made by the previous
906 - * caller, and we can skip the current check.
907 */
908 enum {
909 TRACE_BUFFER_BIT,
910 @@ -475,12 +460,14 @@ enum {
911 TRACE_FTRACE_NMI_BIT,
912 TRACE_FTRACE_IRQ_BIT,
913 TRACE_FTRACE_SIRQ_BIT,
914 + TRACE_FTRACE_TRANSITION_BIT,
915
916 - /* INTERNAL_BITs must be greater than FTRACE_BITs */
917 + /* Internal use recursion bits */
918 TRACE_INTERNAL_BIT,
919 TRACE_INTERNAL_NMI_BIT,
920 TRACE_INTERNAL_IRQ_BIT,
921 TRACE_INTERNAL_SIRQ_BIT,
922 + TRACE_INTERNAL_TRANSITION_BIT,
923
924 TRACE_BRANCH_BIT,
925 /*
926 @@ -491,12 +478,6 @@ enum {
927 * can only be modified by current, we can reuse trace_recursion.
928 */
929 TRACE_IRQ_BIT,
930 -
931 - /*
932 - * When transitioning between context, the preempt_count() may
933 - * not be correct. Allow for a single recursion to cover this case.
934 - */
935 - TRACE_TRANSITION_BIT,
936 };
937
938 #define trace_recursion_set(bit) do { (current)->trace_recursion |= (1<<(bit)); } while (0)
939 @@ -506,12 +487,18 @@ enum {
940 #define TRACE_CONTEXT_BITS 4
941
942 #define TRACE_FTRACE_START TRACE_FTRACE_BIT
943 -#define TRACE_FTRACE_MAX ((1 << (TRACE_FTRACE_START + TRACE_CONTEXT_BITS)) - 1)
944
945 #define TRACE_LIST_START TRACE_INTERNAL_BIT
946 -#define TRACE_LIST_MAX ((1 << (TRACE_LIST_START + TRACE_CONTEXT_BITS)) - 1)
947
948 -#define TRACE_CONTEXT_MASK TRACE_LIST_MAX
949 +#define TRACE_CONTEXT_MASK ((1 << (TRACE_LIST_START + TRACE_CONTEXT_BITS)) - 1)
950 +
951 +enum {
952 + TRACE_CTX_NMI,
953 + TRACE_CTX_IRQ,
954 + TRACE_CTX_SOFTIRQ,
955 + TRACE_CTX_NORMAL,
956 + TRACE_CTX_TRANSITION,
957 +};
958
959 static __always_inline int trace_get_context_bit(void)
960 {
961 @@ -519,59 +506,48 @@ static __always_inline int trace_get_context_bit(void)
962
963 if (in_interrupt()) {
964 if (in_nmi())
965 - bit = 0;
966 + bit = TRACE_CTX_NMI;
967
968 else if (in_irq())
969 - bit = 1;
970 + bit = TRACE_CTX_IRQ;
971 else
972 - bit = 2;
973 + bit = TRACE_CTX_SOFTIRQ;
974 } else
975 - bit = 3;
976 + bit = TRACE_CTX_NORMAL;
977
978 return bit;
979 }
980
981 -static __always_inline int trace_test_and_set_recursion(int start, int max)
982 +static __always_inline int trace_test_and_set_recursion(int start)
983 {
984 unsigned int val = current->trace_recursion;
985 int bit;
986
987 - /* A previous recursion check was made */
988 - if ((val & TRACE_CONTEXT_MASK) > max)
989 - return 0;
990 -
991 bit = trace_get_context_bit() + start;
992 if (unlikely(val & (1 << bit))) {
993 /*
994 * It could be that preempt_count has not been updated during
995 * a switch between contexts. Allow for a single recursion.
996 */
997 - bit = TRACE_TRANSITION_BIT;
998 + bit = start + TRACE_CTX_TRANSITION;
999 if (trace_recursion_test(bit))
1000 return -1;
1001 trace_recursion_set(bit);
1002 barrier();
1003 - return bit + 1;
1004 + return bit;
1005 }
1006
1007 - /* Normal check passed, clear the transition to allow it again */
1008 - trace_recursion_clear(TRACE_TRANSITION_BIT);
1009 -
1010 val |= 1 << bit;
1011 current->trace_recursion = val;
1012 barrier();
1013
1014 - return bit + 1;
1015 + return bit;
1016 }
1017
1018 static __always_inline void trace_clear_recursion(int bit)
1019 {
1020 unsigned int val = current->trace_recursion;
1021
1022 - if (!bit)
1023 - return;
1024 -
1025 - bit--;
1026 bit = 1 << bit;
1027 val &= ~bit;
1028
1029 diff --git a/kernel/trace/trace_functions.c b/kernel/trace/trace_functions.c
1030 index 0efa00d80623d..9434d2fe932f5 100644
1031 --- a/kernel/trace/trace_functions.c
1032 +++ b/kernel/trace/trace_functions.c
1033 @@ -137,7 +137,7 @@ function_trace_call(unsigned long ip, unsigned long parent_ip,
1034 pc = preempt_count();
1035 preempt_disable_notrace();
1036
1037 - bit = trace_test_and_set_recursion(TRACE_FTRACE_START, TRACE_FTRACE_MAX);
1038 + bit = trace_test_and_set_recursion(TRACE_FTRACE_START);
1039 if (bit < 0)
1040 goto out;
1041
1042 diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig
1043 index e8d56d9a4df2c..dacd2d34a790b 100644
1044 --- a/net/netfilter/Kconfig
1045 +++ b/net/netfilter/Kconfig
1046 @@ -71,7 +71,7 @@ config NF_CONNTRACK_MARK
1047 config NF_CONNTRACK_SECMARK
1048 bool 'Connection tracking security mark support'
1049 depends on NETWORK_SECMARK
1050 - default m if NETFILTER_ADVANCED=n
1051 + default y if NETFILTER_ADVANCED=n
1052 help
1053 This option enables security markings to be applied to
1054 connections. Typically they are copied to connections from
1055 diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
1056 index 4e08305a55c48..3ee198b3bfe28 100644
1057 --- a/net/netfilter/ipvs/ip_vs_ctl.c
1058 +++ b/net/netfilter/ipvs/ip_vs_ctl.c
1059 @@ -3987,6 +3987,11 @@ static int __net_init ip_vs_control_net_init_sysctl(struct netns_ipvs *ipvs)
1060 tbl[idx++].data = &ipvs->sysctl_conn_reuse_mode;
1061 tbl[idx++].data = &ipvs->sysctl_schedule_icmp;
1062 tbl[idx++].data = &ipvs->sysctl_ignore_tunneled;
1063 +#ifdef CONFIG_IP_VS_DEBUG
1064 + /* Global sysctls must be ro in non-init netns */
1065 + if (!net_eq(net, &init_net))
1066 + tbl[idx++].mode = 0444;
1067 +#endif
1068
1069 ipvs->sysctl_hdr = register_net_sysctl(net, "net/ipv4/vs", tbl);
1070 if (ipvs->sysctl_hdr == NULL) {
1071 diff --git a/net/nfc/af_nfc.c b/net/nfc/af_nfc.c
1072 index 54e40fa478226..1859b8e98ded2 100644
1073 --- a/net/nfc/af_nfc.c
1074 +++ b/net/nfc/af_nfc.c
1075 @@ -72,6 +72,9 @@ int nfc_proto_register(const struct nfc_protocol *nfc_proto)
1076 proto_tab[nfc_proto->id] = nfc_proto;
1077 write_unlock(&proto_tab_lock);
1078
1079 + if (rc)
1080 + proto_unregister(nfc_proto->proto);
1081 +
1082 return rc;
1083 }
1084 EXPORT_SYMBOL(nfc_proto_register);
1085 diff --git a/net/nfc/digital_core.c b/net/nfc/digital_core.c
1086 index 0fd5518bf2522..8d083037f05bf 100644
1087 --- a/net/nfc/digital_core.c
1088 +++ b/net/nfc/digital_core.c
1089 @@ -286,6 +286,7 @@ int digital_tg_configure_hw(struct nfc_digital_dev *ddev, int type, int param)
1090 static int digital_tg_listen_mdaa(struct nfc_digital_dev *ddev, u8 rf_tech)
1091 {
1092 struct digital_tg_mdaa_params *params;
1093 + int rc;
1094
1095 params = kzalloc(sizeof(struct digital_tg_mdaa_params), GFP_KERNEL);
1096 if (!params)
1097 @@ -300,8 +301,12 @@ static int digital_tg_listen_mdaa(struct nfc_digital_dev *ddev, u8 rf_tech)
1098 get_random_bytes(params->nfcid2 + 2, NFC_NFCID2_MAXSIZE - 2);
1099 params->sc = DIGITAL_SENSF_FELICA_SC;
1100
1101 - return digital_send_cmd(ddev, DIGITAL_CMD_TG_LISTEN_MDAA, NULL, params,
1102 - 500, digital_tg_recv_atr_req, NULL);
1103 + rc = digital_send_cmd(ddev, DIGITAL_CMD_TG_LISTEN_MDAA, NULL, params,
1104 + 500, digital_tg_recv_atr_req, NULL);
1105 + if (rc)
1106 + kfree(params);
1107 +
1108 + return rc;
1109 }
1110
1111 static int digital_tg_listen_md(struct nfc_digital_dev *ddev, u8 rf_tech)
1112 diff --git a/net/nfc/digital_technology.c b/net/nfc/digital_technology.c
1113 index d9080dec5d278..76622b3678fbb 100644
1114 --- a/net/nfc/digital_technology.c
1115 +++ b/net/nfc/digital_technology.c
1116 @@ -473,8 +473,12 @@ static int digital_in_send_sdd_req(struct nfc_digital_dev *ddev,
1117 *skb_put(skb, sizeof(u8)) = sel_cmd;
1118 *skb_put(skb, sizeof(u8)) = DIGITAL_SDD_REQ_SEL_PAR;
1119
1120 - return digital_in_send_cmd(ddev, skb, 30, digital_in_recv_sdd_res,
1121 - target);
1122 + rc = digital_in_send_cmd(ddev, skb, 30, digital_in_recv_sdd_res,
1123 + target);
1124 + if (rc)
1125 + kfree_skb(skb);
1126 +
1127 + return rc;
1128 }
1129
1130 static void digital_in_recv_sens_res(struct nfc_digital_dev *ddev, void *arg,
1131 diff --git a/net/nfc/nci/rsp.c b/net/nfc/nci/rsp.c
1132 index e3bbf1937d0e9..7681f89dc312b 100644
1133 --- a/net/nfc/nci/rsp.c
1134 +++ b/net/nfc/nci/rsp.c
1135 @@ -289,6 +289,8 @@ static void nci_core_conn_close_rsp_packet(struct nci_dev *ndev,
1136 ndev->cur_conn_id);
1137 if (conn_info) {
1138 list_del(&conn_info->list);
1139 + if (conn_info == ndev->rf_conn_info)
1140 + ndev->rf_conn_info = NULL;
1141 devm_kfree(&ndev->nfc_dev->dev, conn_info);
1142 }
1143 }
1144 diff --git a/sound/core/seq/seq_device.c b/sound/core/seq/seq_device.c
1145 index e40a2cba5002a..5d16b20791195 100644
1146 --- a/sound/core/seq/seq_device.c
1147 +++ b/sound/core/seq/seq_device.c
1148 @@ -162,6 +162,8 @@ static int snd_seq_device_dev_free(struct snd_device *device)
1149 struct snd_seq_device *dev = device->device_data;
1150
1151 cancel_autoload_drivers();
1152 + if (dev->private_free)
1153 + dev->private_free(dev);
1154 put_device(&dev->dev);
1155 return 0;
1156 }
1157 @@ -189,11 +191,7 @@ static int snd_seq_device_dev_disconnect(struct snd_device *device)
1158
1159 static void snd_seq_dev_release(struct device *dev)
1160 {
1161 - struct snd_seq_device *sdev = to_seq_dev(dev);
1162 -
1163 - if (sdev->private_free)
1164 - sdev->private_free(sdev);
1165 - kfree(sdev);
1166 + kfree(to_seq_dev(dev));
1167 }
1168
1169 /*
1170 diff --git a/sound/hda/hdac_controller.c b/sound/hda/hdac_controller.c
1171 index 00c6af2ae1c29..f0e112906c687 100644
1172 --- a/sound/hda/hdac_controller.c
1173 +++ b/sound/hda/hdac_controller.c
1174 @@ -389,8 +389,9 @@ static int azx_reset(struct hdac_bus *bus, bool full_reset)
1175 if (!full_reset)
1176 goto skip_reset;
1177
1178 - /* clear STATESTS */
1179 - snd_hdac_chip_writew(bus, STATESTS, STATESTS_INT_MASK);
1180 + /* clear STATESTS if not in reset */
1181 + if (snd_hdac_chip_readb(bus, GCTL) & AZX_GCTL_RESET)
1182 + snd_hdac_chip_writew(bus, STATESTS, STATESTS_INT_MASK);
1183
1184 /* reset controller */
1185 snd_hdac_bus_enter_link_reset(bus);
1186 diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
1187 index 11edb6f6bdafe..5451705f429e0 100644
1188 --- a/sound/soc/soc-dapm.c
1189 +++ b/sound/soc/soc-dapm.c
1190 @@ -2410,6 +2410,7 @@ static int snd_soc_dapm_set_pin(struct snd_soc_dapm_context *dapm,
1191 const char *pin, int status)
1192 {
1193 struct snd_soc_dapm_widget *w = dapm_find_widget(dapm, pin, true);
1194 + int ret = 0;
1195
1196 dapm_assert_locked(dapm);
1197
1198 @@ -2422,13 +2423,14 @@ static int snd_soc_dapm_set_pin(struct snd_soc_dapm_context *dapm,
1199 dapm_mark_dirty(w, "pin configuration");
1200 dapm_widget_invalidate_input_paths(w);
1201 dapm_widget_invalidate_output_paths(w);
1202 + ret = 1;
1203 }
1204
1205 w->connected = status;
1206 if (status == 0)
1207 w->force = 0;
1208
1209 - return 0;
1210 + return ret;
1211 }
1212
1213 /**
1214 @@ -3323,14 +3325,15 @@ int snd_soc_dapm_put_pin_switch(struct snd_kcontrol *kcontrol,
1215 {
1216 struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
1217 const char *pin = (const char *)kcontrol->private_value;
1218 + int ret;
1219
1220 if (ucontrol->value.integer.value[0])
1221 - snd_soc_dapm_enable_pin(&card->dapm, pin);
1222 + ret = snd_soc_dapm_enable_pin(&card->dapm, pin);
1223 else
1224 - snd_soc_dapm_disable_pin(&card->dapm, pin);
1225 + ret = snd_soc_dapm_disable_pin(&card->dapm, pin);
1226
1227 snd_soc_dapm_sync(&card->dapm);
1228 - return 0;
1229 + return ret;
1230 }
1231 EXPORT_SYMBOL_GPL(snd_soc_dapm_put_pin_switch);
1232
1233 @@ -3706,7 +3709,7 @@ static int snd_soc_dapm_dai_link_put(struct snd_kcontrol *kcontrol,
1234
1235 w->params_select = ucontrol->value.enumerated.item[0];
1236
1237 - return 0;
1238 + return 1;
1239 }
1240
1241 int snd_soc_dapm_new_pcm(struct snd_soc_card *card,
1242 diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
1243 index d3d3e05fe5b8d..1904fc542025d 100644
1244 --- a/sound/usb/quirks-table.h
1245 +++ b/sound/usb/quirks-table.h
1246 @@ -3446,5 +3446,37 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
1247 }
1248 }
1249 },
1250 +{
1251 + /*
1252 + * Sennheiser GSP670
1253 + * Change order of interfaces loaded
1254 + */
1255 + USB_DEVICE(0x1395, 0x0300),
1256 + .bInterfaceClass = USB_CLASS_PER_INTERFACE,
1257 + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
1258 + .ifnum = QUIRK_ANY_INTERFACE,
1259 + .type = QUIRK_COMPOSITE,
1260 + .data = &(const struct snd_usb_audio_quirk[]) {
1261 + // Communication
1262 + {
1263 + .ifnum = 3,
1264 + .type = QUIRK_AUDIO_STANDARD_INTERFACE
1265 + },
1266 + // Recording
1267 + {
1268 + .ifnum = 4,
1269 + .type = QUIRK_AUDIO_STANDARD_INTERFACE
1270 + },
1271 + // Main
1272 + {
1273 + .ifnum = 1,
1274 + .type = QUIRK_AUDIO_STANDARD_INTERFACE
1275 + },
1276 + {
1277 + .ifnum = -1
1278 + }
1279 + }
1280 + }
1281 +},
1282
1283 #undef USB_DEVICE_VENDOR_SPEC