Gentoo Archives: gentoo-commits

From: Mike Pagano <mpagano@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/linux-patches:4.4 commit in: /
Date: Wed, 27 Oct 2021 12:01:40
Message-Id: 1635336079.db278963afb658a99724089f386a9300b548eede.mpagano@gentoo
1 commit: db278963afb658a99724089f386a9300b548eede
2 Author: Mike Pagano <mpagano <AT> gentoo <DOT> org>
3 AuthorDate: Wed Oct 27 12:01:19 2021 +0000
4 Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org>
5 CommitDate: Wed Oct 27 12:01:19 2021 +0000
6 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=db278963
7
8 Linux patch 4.4.290
9
10 Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>
11
12 0000_README | 4 +
13 1289_linux-4.4.290.patch | 1093 ++++++++++++++++++++++++++++++++++++++++++++++
14 2 files changed, 1097 insertions(+)
15
16 diff --git a/0000_README b/0000_README
17 index a63694d..82a840c 100644
18 --- a/0000_README
19 +++ b/0000_README
20 @@ -1199,6 +1199,10 @@ Patch: 1288_linux-4.4.289.patch
21 From: http://www.kernel.org
22 Desc: Linux 4.4.289
23
24 +Patch: 1289_linux-4.4.290.patch
25 +From: http://www.kernel.org
26 +Desc: Linux 4.4.290
27 +
28 Patch: 1500_XATTR_USER_PREFIX.patch
29 From: https://bugs.gentoo.org/show_bug.cgi?id=470644
30 Desc: Support for namespace user.pax.* on tmpfs.
31
32 diff --git a/1289_linux-4.4.290.patch b/1289_linux-4.4.290.patch
33 new file mode 100644
34 index 0000000..a1daece
35 --- /dev/null
36 +++ b/1289_linux-4.4.290.patch
37 @@ -0,0 +1,1093 @@
38 +diff --git a/Makefile b/Makefile
39 +index 84e759c8461ce..c9dace8cb59d9 100644
40 +--- a/Makefile
41 ++++ b/Makefile
42 +@@ -1,6 +1,6 @@
43 + VERSION = 4
44 + PATCHLEVEL = 4
45 +-SUBLEVEL = 289
46 ++SUBLEVEL = 290
47 + EXTRAVERSION =
48 + NAME = Blurry Fish Butt
49 +
50 +diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
51 +index 7da18cc30d101..846a87cf20431 100644
52 +--- a/arch/arm/Kconfig
53 ++++ b/arch/arm/Kconfig
54 +@@ -51,6 +51,7 @@ config ARM
55 + select HAVE_FTRACE_MCOUNT_RECORD if (!XIP_KERNEL)
56 + select HAVE_FUNCTION_GRAPH_TRACER if (!THUMB2_KERNEL)
57 + select HAVE_FUNCTION_TRACER if (!XIP_KERNEL)
58 ++ select HAVE_FUTEX_CMPXCHG if FUTEX
59 + select HAVE_GENERIC_DMA_COHERENT
60 + select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7))
61 + select HAVE_IDE if PCI || ISA || PCMCIA
62 +diff --git a/arch/arm/boot/dts/spear3xx.dtsi b/arch/arm/boot/dts/spear3xx.dtsi
63 +index 118135d758990..4e4166d96b264 100644
64 +--- a/arch/arm/boot/dts/spear3xx.dtsi
65 ++++ b/arch/arm/boot/dts/spear3xx.dtsi
66 +@@ -53,7 +53,7 @@
67 + };
68 +
69 + gmac: eth@e0800000 {
70 +- compatible = "st,spear600-gmac";
71 ++ compatible = "snps,dwmac-3.40a";
72 + reg = <0xe0800000 0x8000>;
73 + interrupts = <23 22>;
74 + interrupt-names = "macirq", "eth_wake_irq";
75 +diff --git a/arch/nios2/include/asm/irqflags.h b/arch/nios2/include/asm/irqflags.h
76 +index 75ab92e639f85..0338fcb88203c 100644
77 +--- a/arch/nios2/include/asm/irqflags.h
78 ++++ b/arch/nios2/include/asm/irqflags.h
79 +@@ -22,7 +22,7 @@
80 +
81 + static inline unsigned long arch_local_save_flags(void)
82 + {
83 +- return RDCTL(CTL_STATUS);
84 ++ return RDCTL(CTL_FSTATUS);
85 + }
86 +
87 + /*
88 +@@ -31,7 +31,7 @@ static inline unsigned long arch_local_save_flags(void)
89 + */
90 + static inline void arch_local_irq_restore(unsigned long flags)
91 + {
92 +- WRCTL(CTL_STATUS, flags);
93 ++ WRCTL(CTL_FSTATUS, flags);
94 + }
95 +
96 + static inline void arch_local_irq_disable(void)
97 +diff --git a/arch/nios2/include/asm/registers.h b/arch/nios2/include/asm/registers.h
98 +index 615bce19b546e..33824f2ad1ab7 100644
99 +--- a/arch/nios2/include/asm/registers.h
100 ++++ b/arch/nios2/include/asm/registers.h
101 +@@ -24,7 +24,7 @@
102 + #endif
103 +
104 + /* control register numbers */
105 +-#define CTL_STATUS 0
106 ++#define CTL_FSTATUS 0
107 + #define CTL_ESTATUS 1
108 + #define CTL_BSTATUS 2
109 + #define CTL_IENABLE 3
110 +diff --git a/arch/s390/lib/string.c b/arch/s390/lib/string.c
111 +index b647d5ff0ad9c..ac67fa0f2e4d0 100644
112 +--- a/arch/s390/lib/string.c
113 ++++ b/arch/s390/lib/string.c
114 +@@ -225,14 +225,13 @@ EXPORT_SYMBOL(strcmp);
115 + */
116 + char * strrchr(const char * s, int c)
117 + {
118 +- size_t len = __strend(s) - s;
119 +-
120 +- if (len)
121 +- do {
122 +- if (s[len] == (char) c)
123 +- return (char *) s + len;
124 +- } while (--len > 0);
125 +- return NULL;
126 ++ ssize_t len = __strend(s) - s;
127 ++
128 ++ do {
129 ++ if (s[len] == (char)c)
130 ++ return (char *)s + len;
131 ++ } while (--len >= 0);
132 ++ return NULL;
133 + }
134 + EXPORT_SYMBOL(strrchr);
135 +
136 +diff --git a/drivers/ata/pata_legacy.c b/drivers/ata/pata_legacy.c
137 +index bce2a8ca4678a..55fcdb798002b 100644
138 +--- a/drivers/ata/pata_legacy.c
139 ++++ b/drivers/ata/pata_legacy.c
140 +@@ -328,7 +328,8 @@ static unsigned int pdc_data_xfer_vlb(struct ata_device *dev,
141 + iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
142 +
143 + if (unlikely(slop)) {
144 +- __le32 pad;
145 ++ __le32 pad = 0;
146 ++
147 + if (rw == READ) {
148 + pad = cpu_to_le32(ioread32(ap->ioaddr.data_addr));
149 + memcpy(buf + buflen - slop, &pad, slop);
150 +@@ -716,7 +717,8 @@ static unsigned int vlb32_data_xfer(struct ata_device *adev, unsigned char *buf,
151 + ioread32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
152 +
153 + if (unlikely(slop)) {
154 +- __le32 pad;
155 ++ __le32 pad = 0;
156 ++
157 + if (rw == WRITE) {
158 + memcpy(&pad, buf + buflen - slop, slop);
159 + iowrite32(le32_to_cpu(pad), ap->ioaddr.data_addr);
160 +diff --git a/drivers/firmware/efi/cper.c b/drivers/firmware/efi/cper.c
161 +index dc8d2603612ed..91dbc6ae56cf9 100644
162 +--- a/drivers/firmware/efi/cper.c
163 ++++ b/drivers/firmware/efi/cper.c
164 +@@ -35,8 +35,6 @@
165 +
166 + #define INDENT_SP " "
167 +
168 +-static char rcd_decode_str[CPER_REC_LEN];
169 +-
170 + /*
171 + * CPER record ID need to be unique even after reboot, because record
172 + * ID is used as index for ERST storage, while CPER records from
173 +@@ -293,6 +291,7 @@ const char *cper_mem_err_unpack(struct trace_seq *p,
174 + struct cper_mem_err_compact *cmem)
175 + {
176 + const char *ret = trace_seq_buffer_ptr(p);
177 ++ char rcd_decode_str[CPER_REC_LEN];
178 +
179 + if (cper_mem_err_location(cmem, rcd_decode_str))
180 + trace_seq_printf(p, "%s", rcd_decode_str);
181 +@@ -307,6 +306,7 @@ static void cper_print_mem(const char *pfx, const struct cper_sec_mem_err *mem,
182 + int len)
183 + {
184 + struct cper_mem_err_compact cmem;
185 ++ char rcd_decode_str[CPER_REC_LEN];
186 +
187 + /* Don't trust UEFI 2.1/2.2 structure with bad validation bits */
188 + if (len == sizeof(struct cper_sec_mem_err_old) &&
189 +diff --git a/drivers/gpu/drm/msm/edp/edp_ctrl.c b/drivers/gpu/drm/msm/edp/edp_ctrl.c
190 +index 81200e9be3821..1be6dc196e971 100644
191 +--- a/drivers/gpu/drm/msm/edp/edp_ctrl.c
192 ++++ b/drivers/gpu/drm/msm/edp/edp_ctrl.c
193 +@@ -1095,7 +1095,7 @@ void msm_edp_ctrl_power(struct edp_ctrl *ctrl, bool on)
194 + int msm_edp_ctrl_init(struct msm_edp *edp)
195 + {
196 + struct edp_ctrl *ctrl = NULL;
197 +- struct device *dev = &edp->pdev->dev;
198 ++ struct device *dev;
199 + int ret;
200 +
201 + if (!edp) {
202 +@@ -1103,6 +1103,7 @@ int msm_edp_ctrl_init(struct msm_edp *edp)
203 + return -EINVAL;
204 + }
205 +
206 ++ dev = &edp->pdev->dev;
207 + ctrl = devm_kzalloc(dev, sizeof(*ctrl), GFP_KERNEL);
208 + if (!ctrl)
209 + return -ENOMEM;
210 +diff --git a/drivers/iio/adc/ti-adc128s052.c b/drivers/iio/adc/ti-adc128s052.c
211 +index ff6f7f63c8d9b..27b8de41e34a1 100644
212 +--- a/drivers/iio/adc/ti-adc128s052.c
213 ++++ b/drivers/iio/adc/ti-adc128s052.c
214 +@@ -159,7 +159,13 @@ static int adc128_probe(struct spi_device *spi)
215 + mutex_init(&adc->lock);
216 +
217 + ret = iio_device_register(indio_dev);
218 ++ if (ret)
219 ++ goto err_disable_regulator;
220 +
221 ++ return 0;
222 ++
223 ++err_disable_regulator:
224 ++ regulator_disable(adc->reg);
225 + return ret;
226 + }
227 +
228 +diff --git a/drivers/iio/common/ssp_sensors/ssp_spi.c b/drivers/iio/common/ssp_sensors/ssp_spi.c
229 +index 704284a475aec..645749b90ec07 100644
230 +--- a/drivers/iio/common/ssp_sensors/ssp_spi.c
231 ++++ b/drivers/iio/common/ssp_sensors/ssp_spi.c
232 +@@ -147,7 +147,7 @@ static int ssp_print_mcu_debug(char *data_frame, int *data_index,
233 + if (length > received_len - *data_index || length <= 0) {
234 + ssp_dbg("[SSP]: MSG From MCU-invalid debug length(%d/%d)\n",
235 + length, received_len);
236 +- return length ? length : -EPROTO;
237 ++ return -EPROTO;
238 + }
239 +
240 + ssp_dbg("[SSP]: MSG From MCU - %s\n", &data_frame[*data_index]);
241 +@@ -286,6 +286,8 @@ static int ssp_parse_dataframe(struct ssp_data *data, char *dataframe, int len)
242 + for (idx = 0; idx < len;) {
243 + switch (dataframe[idx++]) {
244 + case SSP_MSG2AP_INST_BYPASS_DATA:
245 ++ if (idx >= len)
246 ++ return -EPROTO;
247 + sd = dataframe[idx++];
248 + if (sd < 0 || sd >= SSP_SENSOR_MAX) {
249 + dev_err(SSP_DEV,
250 +@@ -295,10 +297,13 @@ static int ssp_parse_dataframe(struct ssp_data *data, char *dataframe, int len)
251 +
252 + if (indio_devs[sd]) {
253 + spd = iio_priv(indio_devs[sd]);
254 +- if (spd->process_data)
255 ++ if (spd->process_data) {
256 ++ if (idx >= len)
257 ++ return -EPROTO;
258 + spd->process_data(indio_devs[sd],
259 + &dataframe[idx],
260 + data->timestamp);
261 ++ }
262 + } else {
263 + dev_err(SSP_DEV, "no client for frame\n");
264 + }
265 +@@ -306,6 +311,8 @@ static int ssp_parse_dataframe(struct ssp_data *data, char *dataframe, int len)
266 + idx += ssp_offset_map[sd];
267 + break;
268 + case SSP_MSG2AP_INST_DEBUG_DATA:
269 ++ if (idx >= len)
270 ++ return -EPROTO;
271 + sd = ssp_print_mcu_debug(dataframe, &idx, len);
272 + if (sd) {
273 + dev_err(SSP_DEV,
274 +diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
275 +index 4168ed0ef187e..f8f6bd92e314c 100644
276 +--- a/drivers/input/joystick/xpad.c
277 ++++ b/drivers/input/joystick/xpad.c
278 +@@ -348,6 +348,7 @@ static const struct xpad_device {
279 + { 0x24c6, 0x5b03, "Thrustmaster Ferrari 458 Racing Wheel", 0, XTYPE_XBOX360 },
280 + { 0x24c6, 0x5d04, "Razer Sabertooth", 0, XTYPE_XBOX360 },
281 + { 0x24c6, 0xfafe, "Rock Candy Gamepad for Xbox 360", 0, XTYPE_XBOX360 },
282 ++ { 0x3285, 0x0607, "Nacon GC-100", 0, XTYPE_XBOX360 },
283 + { 0x3767, 0x0101, "Fanatec Speedster 3 Forceshock Wheel", 0, XTYPE_XBOX },
284 + { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX },
285 + { 0x0000, 0x0000, "Generic X-Box pad", 0, XTYPE_UNKNOWN }
286 +@@ -464,6 +465,7 @@ static const struct usb_device_id xpad_table[] = {
287 + XPAD_XBOXONE_VENDOR(0x24c6), /* PowerA Controllers */
288 + XPAD_XBOXONE_VENDOR(0x2e24), /* Hyperkin Duke X-Box One pad */
289 + XPAD_XBOX360_VENDOR(0x2f24), /* GameSir Controllers */
290 ++ XPAD_XBOX360_VENDOR(0x3285), /* Nacon GC-100 */
291 + { }
292 + };
293 +
294 +diff --git a/drivers/isdn/capi/kcapi.c b/drivers/isdn/capi/kcapi.c
295 +index 9de62c3b8bf9f..658e116d8fe66 100644
296 +--- a/drivers/isdn/capi/kcapi.c
297 ++++ b/drivers/isdn/capi/kcapi.c
298 +@@ -564,6 +564,11 @@ int detach_capi_ctr(struct capi_ctr *ctr)
299 +
300 + ctr_down(ctr, CAPI_CTR_DETACHED);
301 +
302 ++ if (ctr->cnr < 1 || ctr->cnr - 1 >= CAPI_MAXCONTR) {
303 ++ err = -EINVAL;
304 ++ goto unlock_out;
305 ++ }
306 ++
307 + if (capi_controller[ctr->cnr - 1] != ctr) {
308 + err = -EINVAL;
309 + goto unlock_out;
310 +diff --git a/drivers/isdn/hardware/mISDN/netjet.c b/drivers/isdn/hardware/mISDN/netjet.c
311 +index 59eec2014b82c..a74741d28ca88 100644
312 +--- a/drivers/isdn/hardware/mISDN/netjet.c
313 ++++ b/drivers/isdn/hardware/mISDN/netjet.c
314 +@@ -963,8 +963,8 @@ nj_release(struct tiger_hw *card)
315 + nj_disable_hwirq(card);
316 + mode_tiger(&card->bc[0], ISDN_P_NONE);
317 + mode_tiger(&card->bc[1], ISDN_P_NONE);
318 +- card->isac.release(&card->isac);
319 + spin_unlock_irqrestore(&card->lock, flags);
320 ++ card->isac.release(&card->isac);
321 + release_region(card->base, card->base_s);
322 + card->base_s = 0;
323 + }
324 +diff --git a/drivers/misc/cb710/sgbuf2.c b/drivers/misc/cb710/sgbuf2.c
325 +index 2a40d0efdff5d..4d2a72a537d42 100644
326 +--- a/drivers/misc/cb710/sgbuf2.c
327 ++++ b/drivers/misc/cb710/sgbuf2.c
328 +@@ -50,7 +50,7 @@ static inline bool needs_unaligned_copy(const void *ptr)
329 + #ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
330 + return false;
331 + #else
332 +- return ((ptr - NULL) & 3) != 0;
333 ++ return ((uintptr_t)ptr & 3) != 0;
334 + #endif
335 + }
336 +
337 +diff --git a/drivers/net/can/rcar_can.c b/drivers/net/can/rcar_can.c
338 +index 9d93492ddfcc4..ed40405c8f4e0 100644
339 +--- a/drivers/net/can/rcar_can.c
340 ++++ b/drivers/net/can/rcar_can.c
341 +@@ -858,10 +858,12 @@ static int __maybe_unused rcar_can_suspend(struct device *dev)
342 + struct rcar_can_priv *priv = netdev_priv(ndev);
343 + u16 ctlr;
344 +
345 +- if (netif_running(ndev)) {
346 +- netif_stop_queue(ndev);
347 +- netif_device_detach(ndev);
348 +- }
349 ++ if (!netif_running(ndev))
350 ++ return 0;
351 ++
352 ++ netif_stop_queue(ndev);
353 ++ netif_device_detach(ndev);
354 ++
355 + ctlr = readw(&priv->regs->ctlr);
356 + ctlr |= RCAR_CAN_CTLR_CANM_HALT;
357 + writew(ctlr, &priv->regs->ctlr);
358 +@@ -880,6 +882,9 @@ static int __maybe_unused rcar_can_resume(struct device *dev)
359 + u16 ctlr;
360 + int err;
361 +
362 ++ if (!netif_running(ndev))
363 ++ return 0;
364 ++
365 + err = clk_enable(priv->clk);
366 + if (err) {
367 + netdev_err(ndev, "clk_enable() failed, error %d\n", err);
368 +@@ -893,10 +898,9 @@ static int __maybe_unused rcar_can_resume(struct device *dev)
369 + writew(ctlr, &priv->regs->ctlr);
370 + priv->can.state = CAN_STATE_ERROR_ACTIVE;
371 +
372 +- if (netif_running(ndev)) {
373 +- netif_device_attach(ndev);
374 +- netif_start_queue(ndev);
375 +- }
376 ++ netif_device_attach(ndev);
377 ++ netif_start_queue(ndev);
378 ++
379 + return 0;
380 + }
381 +
382 +diff --git a/drivers/net/can/sja1000/peak_pci.c b/drivers/net/can/sja1000/peak_pci.c
383 +index 131026fbc2d77..e12fc5d88382d 100644
384 +--- a/drivers/net/can/sja1000/peak_pci.c
385 ++++ b/drivers/net/can/sja1000/peak_pci.c
386 +@@ -736,16 +736,15 @@ static void peak_pci_remove(struct pci_dev *pdev)
387 + struct net_device *prev_dev = chan->prev_dev;
388 +
389 + dev_info(&pdev->dev, "removing device %s\n", dev->name);
390 ++ /* do that only for first channel */
391 ++ if (!prev_dev && chan->pciec_card)
392 ++ peak_pciec_remove(chan->pciec_card);
393 + unregister_sja1000dev(dev);
394 + free_sja1000dev(dev);
395 + dev = prev_dev;
396 +
397 +- if (!dev) {
398 +- /* do that only for first channel */
399 +- if (chan->pciec_card)
400 +- peak_pciec_remove(chan->pciec_card);
401 ++ if (!dev)
402 + break;
403 +- }
404 + priv = netdev_priv(dev);
405 + chan = priv->priv;
406 + }
407 +diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
408 +index 2e62cdc7ec7ab..1c3f95a639407 100644
409 +--- a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
410 ++++ b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
411 +@@ -559,11 +559,10 @@ static int pcan_usb_fd_decode_status(struct pcan_usb_fd_if *usb_if,
412 + } else if (sm->channel_p_w_b & PUCAN_BUS_WARNING) {
413 + new_state = CAN_STATE_ERROR_WARNING;
414 + } else {
415 +- /* no error bit (so, no error skb, back to active state) */
416 +- dev->can.state = CAN_STATE_ERROR_ACTIVE;
417 ++ /* back to (or still in) ERROR_ACTIVE state */
418 ++ new_state = CAN_STATE_ERROR_ACTIVE;
419 + pdev->bec.txerr = 0;
420 + pdev->bec.rxerr = 0;
421 +- return 0;
422 + }
423 +
424 + /* state hasn't changed */
425 +diff --git a/drivers/net/ethernet/Kconfig b/drivers/net/ethernet/Kconfig
426 +index 31c5e476fd648..3b7f6517c1128 100644
427 +--- a/drivers/net/ethernet/Kconfig
428 ++++ b/drivers/net/ethernet/Kconfig
429 +@@ -95,6 +95,7 @@ config JME
430 + config KORINA
431 + tristate "Korina (IDT RC32434) Ethernet support"
432 + depends on MIKROTIK_RB532
433 ++ select CRC32
434 + ---help---
435 + If you have a Mikrotik RouterBoard 500 or IDT RC32434
436 + based system say Y. Otherwise say N.
437 +diff --git a/drivers/net/ethernet/arc/Kconfig b/drivers/net/ethernet/arc/Kconfig
438 +index 52a6b16f57d20..6b5b4d2843d40 100644
439 +--- a/drivers/net/ethernet/arc/Kconfig
440 ++++ b/drivers/net/ethernet/arc/Kconfig
441 +@@ -19,6 +19,7 @@ config ARC_EMAC_CORE
442 + tristate
443 + select MII
444 + select PHYLIB
445 ++ select CRC32
446 +
447 + config ARC_EMAC
448 + tristate "ARC EMAC support"
449 +diff --git a/drivers/net/ethernet/microchip/encx24j600-regmap.c b/drivers/net/ethernet/microchip/encx24j600-regmap.c
450 +index f3bb9055a2927..b5de665ce7189 100644
451 +--- a/drivers/net/ethernet/microchip/encx24j600-regmap.c
452 ++++ b/drivers/net/ethernet/microchip/encx24j600-regmap.c
453 +@@ -500,13 +500,19 @@ static struct regmap_bus phymap_encx24j600 = {
454 + .reg_read = regmap_encx24j600_phy_reg_read,
455 + };
456 +
457 +-void devm_regmap_init_encx24j600(struct device *dev,
458 +- struct encx24j600_context *ctx)
459 ++int devm_regmap_init_encx24j600(struct device *dev,
460 ++ struct encx24j600_context *ctx)
461 + {
462 + mutex_init(&ctx->mutex);
463 + regcfg.lock_arg = ctx;
464 + ctx->regmap = devm_regmap_init(dev, &regmap_encx24j600, ctx, &regcfg);
465 ++ if (IS_ERR(ctx->regmap))
466 ++ return PTR_ERR(ctx->regmap);
467 + ctx->phymap = devm_regmap_init(dev, &phymap_encx24j600, ctx, &phycfg);
468 ++ if (IS_ERR(ctx->phymap))
469 ++ return PTR_ERR(ctx->phymap);
470 ++
471 ++ return 0;
472 + }
473 + EXPORT_SYMBOL_GPL(devm_regmap_init_encx24j600);
474 +
475 +diff --git a/drivers/net/ethernet/microchip/encx24j600.c b/drivers/net/ethernet/microchip/encx24j600.c
476 +index 2056b719c262f..eea9218a169c6 100644
477 +--- a/drivers/net/ethernet/microchip/encx24j600.c
478 ++++ b/drivers/net/ethernet/microchip/encx24j600.c
479 +@@ -1026,10 +1026,13 @@ static int encx24j600_spi_probe(struct spi_device *spi)
480 + priv->speed = SPEED_100;
481 +
482 + priv->ctx.spi = spi;
483 +- devm_regmap_init_encx24j600(&spi->dev, &priv->ctx);
484 + ndev->irq = spi->irq;
485 + ndev->netdev_ops = &encx24j600_netdev_ops;
486 +
487 ++ ret = devm_regmap_init_encx24j600(&spi->dev, &priv->ctx);
488 ++ if (ret)
489 ++ goto out_free;
490 ++
491 + mutex_init(&priv->lock);
492 +
493 + /* Reset device and check if it is connected */
494 +diff --git a/drivers/net/ethernet/microchip/encx24j600_hw.h b/drivers/net/ethernet/microchip/encx24j600_hw.h
495 +index 4be73d5553f89..c9b17ccf749ce 100644
496 +--- a/drivers/net/ethernet/microchip/encx24j600_hw.h
497 ++++ b/drivers/net/ethernet/microchip/encx24j600_hw.h
498 +@@ -14,8 +14,8 @@ struct encx24j600_context {
499 + int bank;
500 + };
501 +
502 +-void devm_regmap_init_encx24j600(struct device *dev,
503 +- struct encx24j600_context *ctx);
504 ++int devm_regmap_init_encx24j600(struct device *dev,
505 ++ struct encx24j600_context *ctx);
506 +
507 + /* Single-byte instructions */
508 + #define BANK_SELECT(bank) (0xC0 | ((bank & (BANK_MASK >> BANK_SHIFT)) << 1))
509 +diff --git a/drivers/net/ethernet/neterion/s2io.c b/drivers/net/ethernet/neterion/s2io.c
510 +index 9ba975853ec6c..395828830b57d 100644
511 +--- a/drivers/net/ethernet/neterion/s2io.c
512 ++++ b/drivers/net/ethernet/neterion/s2io.c
513 +@@ -8625,7 +8625,7 @@ static void s2io_io_resume(struct pci_dev *pdev)
514 + return;
515 + }
516 +
517 +- if (s2io_set_mac_addr(netdev, netdev->dev_addr) == FAILURE) {
518 ++ if (do_s2io_prog_unicast(netdev, netdev->dev_addr) == FAILURE) {
519 + s2io_card_down(sp);
520 + pr_err("Can't restore mac addr after reset.\n");
521 + return;
522 +diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
523 +index 4066fb5a935a7..d621cf07f3e07 100644
524 +--- a/drivers/net/phy/mdio_bus.c
525 ++++ b/drivers/net/phy/mdio_bus.c
526 +@@ -274,6 +274,7 @@ int __mdiobus_register(struct mii_bus *bus, struct module *owner)
527 + err = device_register(&bus->dev);
528 + if (err) {
529 + pr_err("mii_bus %s failed to register\n", bus->id);
530 ++ put_device(&bus->dev);
531 + return -EINVAL;
532 + }
533 +
534 +diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
535 +index 3a7286256db09..9272d0f938190 100644
536 +--- a/drivers/net/usb/Kconfig
537 ++++ b/drivers/net/usb/Kconfig
538 +@@ -98,6 +98,10 @@ config USB_RTL8150
539 + config USB_RTL8152
540 + tristate "Realtek RTL8152/RTL8153 Based USB Ethernet Adapters"
541 + select MII
542 ++ select CRC32
543 ++ select CRYPTO
544 ++ select CRYPTO_HASH
545 ++ select CRYPTO_SHA256
546 + help
547 + This option adds support for Realtek RTL8152 based USB 2.0
548 + 10/100 Ethernet adapters and RTL8153 based USB 3.0 10/100/1000
549 +diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
550 +index 5d6d1bb4f1106..0b8b2ee652193 100644
551 +--- a/drivers/nvmem/core.c
552 ++++ b/drivers/nvmem/core.c
553 +@@ -815,7 +815,8 @@ static inline void nvmem_shift_read_buffer_in_place(struct nvmem_cell *cell,
554 + *p-- = 0;
555 +
556 + /* clear msb bits if any leftover in the last byte */
557 +- *p &= GENMASK((cell->nbits%BITS_PER_BYTE) - 1, 0);
558 ++ if (cell->nbits % BITS_PER_BYTE)
559 ++ *p &= GENMASK((cell->nbits % BITS_PER_BYTE) - 1, 0);
560 + }
561 +
562 + static int __nvmem_cell_read(struct nvmem_device *nvmem,
563 +diff --git a/drivers/platform/x86/intel_scu_ipc.c b/drivers/platform/x86/intel_scu_ipc.c
564 +index f94b730540e24..04cabcbd8aaa7 100644
565 +--- a/drivers/platform/x86/intel_scu_ipc.c
566 ++++ b/drivers/platform/x86/intel_scu_ipc.c
567 +@@ -188,7 +188,7 @@ static inline int busy_loop(struct intel_scu_ipc_dev *scu)
568 + return 0;
569 + }
570 +
571 +-/* Wait till ipc ioc interrupt is received or timeout in 3 HZ */
572 ++/* Wait till ipc ioc interrupt is received or timeout in 10 HZ */
573 + static inline int ipc_wait_for_interrupt(struct intel_scu_ipc_dev *scu)
574 + {
575 + int status;
576 +diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
577 +index 5af57afb4e563..fd7925f20a6ad 100644
578 +--- a/drivers/usb/host/xhci-pci.c
579 ++++ b/drivers/usb/host/xhci-pci.c
580 +@@ -38,6 +38,7 @@
581 + #define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73
582 + #define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000
583 + #define PCI_DEVICE_ID_FRESCO_LOGIC_FL1009 0x1009
584 ++#define PCI_DEVICE_ID_FRESCO_LOGIC_FL1100 0x1100
585 + #define PCI_DEVICE_ID_FRESCO_LOGIC_FL1400 0x1400
586 +
587 + #define PCI_VENDOR_ID_ETRON 0x1b6f
588 +@@ -90,6 +91,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
589 + /* Look for vendor-specific quirks */
590 + if (pdev->vendor == PCI_VENDOR_ID_FRESCO_LOGIC &&
591 + (pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK ||
592 ++ pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_FL1100 ||
593 + pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_FL1400)) {
594 + if (pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK &&
595 + pdev->revision == 0x0) {
596 +diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
597 +index ec8ad931f41e3..9a0f8ee8cbd9f 100644
598 +--- a/drivers/usb/serial/option.c
599 ++++ b/drivers/usb/serial/option.c
600 +@@ -1209,6 +1209,8 @@ static const struct usb_device_id option_ids[] = {
601 + .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
602 + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1203, 0xff), /* Telit LE910Cx (RNDIS) */
603 + .driver_info = NCTRL(2) | RSVD(3) },
604 ++ { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1204, 0xff), /* Telit LE910Cx (MBIM) */
605 ++ .driver_info = NCTRL(0) | RSVD(1) },
606 + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4),
607 + .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) },
608 + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920),
609 +diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
610 +index 11fb4d78e2dbc..f0bd6a66f551e 100644
611 +--- a/drivers/usb/serial/qcserial.c
612 ++++ b/drivers/usb/serial/qcserial.c
613 +@@ -169,6 +169,7 @@ static const struct usb_device_id id_table[] = {
614 + {DEVICE_SWI(0x1199, 0x907b)}, /* Sierra Wireless EM74xx */
615 + {DEVICE_SWI(0x1199, 0x9090)}, /* Sierra Wireless EM7565 QDL */
616 + {DEVICE_SWI(0x1199, 0x9091)}, /* Sierra Wireless EM7565 */
617 ++ {DEVICE_SWI(0x1199, 0x90d2)}, /* Sierra Wireless EM9191 QDL */
618 + {DEVICE_SWI(0x413c, 0x81a2)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */
619 + {DEVICE_SWI(0x413c, 0x81a3)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */
620 + {DEVICE_SWI(0x413c, 0x81a4)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */
621 +diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
622 +index 0cd57db5c5af5..dfd1949b31eac 100644
623 +--- a/fs/nfsd/nfsctl.c
624 ++++ b/fs/nfsd/nfsctl.c
625 +@@ -768,7 +768,10 @@ out_close:
626 + svc_xprt_put(xprt);
627 + }
628 + out_err:
629 +- nfsd_destroy(net);
630 ++ if (!list_empty(&nn->nfsd_serv->sv_permsocks))
631 ++ nn->nfsd_serv->sv_nrthreads--;
632 ++ else
633 ++ nfsd_destroy(net);
634 + return err;
635 + }
636 +
637 +diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
638 +index 0ee1f088bace8..337f0628c3782 100644
639 +--- a/fs/ocfs2/super.c
640 ++++ b/fs/ocfs2/super.c
641 +@@ -2208,11 +2208,17 @@ static int ocfs2_initialize_super(struct super_block *sb,
642 + }
643 +
644 + if (ocfs2_clusterinfo_valid(osb)) {
645 ++ /*
646 ++ * ci_stack and ci_cluster in ocfs2_cluster_info may not be null
647 ++ * terminated, so make sure no overflow happens here by using
648 ++ * memcpy. Destination strings will always be null terminated
649 ++ * because osb is allocated using kzalloc.
650 ++ */
651 + osb->osb_stackflags =
652 + OCFS2_RAW_SB(di)->s_cluster_info.ci_stackflags;
653 +- strlcpy(osb->osb_cluster_stack,
654 ++ memcpy(osb->osb_cluster_stack,
655 + OCFS2_RAW_SB(di)->s_cluster_info.ci_stack,
656 +- OCFS2_STACK_LABEL_LEN + 1);
657 ++ OCFS2_STACK_LABEL_LEN);
658 + if (strlen(osb->osb_cluster_stack) != OCFS2_STACK_LABEL_LEN) {
659 + mlog(ML_ERROR,
660 + "couldn't mount because of an invalid "
661 +@@ -2221,9 +2227,9 @@ static int ocfs2_initialize_super(struct super_block *sb,
662 + status = -EINVAL;
663 + goto bail;
664 + }
665 +- strlcpy(osb->osb_cluster_name,
666 ++ memcpy(osb->osb_cluster_name,
667 + OCFS2_RAW_SB(di)->s_cluster_info.ci_cluster,
668 +- OCFS2_CLUSTER_NAME_LEN + 1);
669 ++ OCFS2_CLUSTER_NAME_LEN);
670 + } else {
671 + /* The empty string is identical with classic tools that
672 + * don't know about s_cluster_info. */
673 +diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c
674 +index eedacae889b95..80bf0ab52e810 100644
675 +--- a/fs/overlayfs/dir.c
676 ++++ b/fs/overlayfs/dir.c
677 +@@ -824,9 +824,13 @@ static int ovl_rename2(struct inode *olddir, struct dentry *old,
678 + }
679 + } else {
680 + new_create = true;
681 +- if (!d_is_negative(newdentry) &&
682 +- (!new_opaque || !ovl_is_whiteout(newdentry)))
683 +- goto out_dput;
684 ++ if (!d_is_negative(newdentry)) {
685 ++ if (!new_opaque || !ovl_is_whiteout(newdentry))
686 ++ goto out_dput;
687 ++ } else {
688 ++ if (flags & RENAME_EXCHANGE)
689 ++ goto out_dput;
690 ++ }
691 + }
692 +
693 + if (olddentry == trap)
694 +diff --git a/include/linux/elfcore.h b/include/linux/elfcore.h
695 +index 4adf7faeaeb59..a65dadad65bf8 100644
696 +--- a/include/linux/elfcore.h
697 ++++ b/include/linux/elfcore.h
698 +@@ -55,7 +55,7 @@ static inline int elf_core_copy_task_xfpregs(struct task_struct *t, elf_fpxregse
699 + }
700 + #endif
701 +
702 +-#if defined(CONFIG_UM) || defined(CONFIG_IA64)
703 ++#if (defined(CONFIG_UML) && defined(CONFIG_X86_32)) || defined(CONFIG_IA64)
704 + /*
705 + * These functions parameterize elf_core_dump in fs/binfmt_elf.c to write out
706 + * extra segments containing the gate DSO contents. Dumping its
707 +diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
708 +index e591da4449f03..c5484723abdae 100644
709 +--- a/kernel/trace/ftrace.c
710 ++++ b/kernel/trace/ftrace.c
711 +@@ -5185,7 +5185,7 @@ __ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip,
712 + struct ftrace_ops *op;
713 + int bit;
714 +
715 +- bit = trace_test_and_set_recursion(TRACE_LIST_START, TRACE_LIST_MAX);
716 ++ bit = trace_test_and_set_recursion(TRACE_LIST_START);
717 + if (bit < 0)
718 + return;
719 +
720 +@@ -5246,7 +5246,7 @@ static void ftrace_ops_recurs_func(unsigned long ip, unsigned long parent_ip,
721 + {
722 + int bit;
723 +
724 +- bit = trace_test_and_set_recursion(TRACE_LIST_START, TRACE_LIST_MAX);
725 ++ bit = trace_test_and_set_recursion(TRACE_LIST_START);
726 + if (bit < 0)
727 + return;
728 +
729 +diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
730 +index 7150892c692ac..d8032be314059 100644
731 +--- a/kernel/trace/trace.h
732 ++++ b/kernel/trace/trace.h
733 +@@ -431,23 +431,8 @@ struct tracer {
734 + * When function tracing occurs, the following steps are made:
735 + * If arch does not support a ftrace feature:
736 + * call internal function (uses INTERNAL bits) which calls...
737 +- * If callback is registered to the "global" list, the list
738 +- * function is called and recursion checks the GLOBAL bits.
739 +- * then this function calls...
740 + * The function callback, which can use the FTRACE bits to
741 + * check for recursion.
742 +- *
743 +- * Now if the arch does not suppport a feature, and it calls
744 +- * the global list function which calls the ftrace callback
745 +- * all three of these steps will do a recursion protection.
746 +- * There's no reason to do one if the previous caller already
747 +- * did. The recursion that we are protecting against will
748 +- * go through the same steps again.
749 +- *
750 +- * To prevent the multiple recursion checks, if a recursion
751 +- * bit is set that is higher than the MAX bit of the current
752 +- * check, then we know that the check was made by the previous
753 +- * caller, and we can skip the current check.
754 + */
755 + enum {
756 + TRACE_BUFFER_BIT,
757 +@@ -460,12 +445,14 @@ enum {
758 + TRACE_FTRACE_NMI_BIT,
759 + TRACE_FTRACE_IRQ_BIT,
760 + TRACE_FTRACE_SIRQ_BIT,
761 ++ TRACE_FTRACE_TRANSITION_BIT,
762 +
763 +- /* INTERNAL_BITs must be greater than FTRACE_BITs */
764 ++ /* Internal use recursion bits */
765 + TRACE_INTERNAL_BIT,
766 + TRACE_INTERNAL_NMI_BIT,
767 + TRACE_INTERNAL_IRQ_BIT,
768 + TRACE_INTERNAL_SIRQ_BIT,
769 ++ TRACE_INTERNAL_TRANSITION_BIT,
770 +
771 + TRACE_CONTROL_BIT,
772 +
773 +@@ -478,12 +465,6 @@ enum {
774 + * can only be modified by current, we can reuse trace_recursion.
775 + */
776 + TRACE_IRQ_BIT,
777 +-
778 +- /*
779 +- * When transitioning between context, the preempt_count() may
780 +- * not be correct. Allow for a single recursion to cover this case.
781 +- */
782 +- TRACE_TRANSITION_BIT,
783 + };
784 +
785 + #define trace_recursion_set(bit) do { (current)->trace_recursion |= (1<<(bit)); } while (0)
786 +@@ -493,12 +474,18 @@ enum {
787 + #define TRACE_CONTEXT_BITS 4
788 +
789 + #define TRACE_FTRACE_START TRACE_FTRACE_BIT
790 +-#define TRACE_FTRACE_MAX ((1 << (TRACE_FTRACE_START + TRACE_CONTEXT_BITS)) - 1)
791 +
792 + #define TRACE_LIST_START TRACE_INTERNAL_BIT
793 +-#define TRACE_LIST_MAX ((1 << (TRACE_LIST_START + TRACE_CONTEXT_BITS)) - 1)
794 +
795 +-#define TRACE_CONTEXT_MASK TRACE_LIST_MAX
796 ++#define TRACE_CONTEXT_MASK ((1 << (TRACE_LIST_START + TRACE_CONTEXT_BITS)) - 1)
797 ++
798 ++enum {
799 ++ TRACE_CTX_NMI,
800 ++ TRACE_CTX_IRQ,
801 ++ TRACE_CTX_SOFTIRQ,
802 ++ TRACE_CTX_NORMAL,
803 ++ TRACE_CTX_TRANSITION,
804 ++};
805 +
806 + static __always_inline int trace_get_context_bit(void)
807 + {
808 +@@ -506,59 +493,48 @@ static __always_inline int trace_get_context_bit(void)
809 +
810 + if (in_interrupt()) {
811 + if (in_nmi())
812 +- bit = 0;
813 ++ bit = TRACE_CTX_NMI;
814 +
815 + else if (in_irq())
816 +- bit = 1;
817 ++ bit = TRACE_CTX_IRQ;
818 + else
819 +- bit = 2;
820 ++ bit = TRACE_CTX_SOFTIRQ;
821 + } else
822 +- bit = 3;
823 ++ bit = TRACE_CTX_NORMAL;
824 +
825 + return bit;
826 + }
827 +
828 +-static __always_inline int trace_test_and_set_recursion(int start, int max)
829 ++static __always_inline int trace_test_and_set_recursion(int start)
830 + {
831 + unsigned int val = current->trace_recursion;
832 + int bit;
833 +
834 +- /* A previous recursion check was made */
835 +- if ((val & TRACE_CONTEXT_MASK) > max)
836 +- return 0;
837 +-
838 + bit = trace_get_context_bit() + start;
839 + if (unlikely(val & (1 << bit))) {
840 + /*
841 + * It could be that preempt_count has not been updated during
842 + * a switch between contexts. Allow for a single recursion.
843 + */
844 +- bit = TRACE_TRANSITION_BIT;
845 ++ bit = start + TRACE_CTX_TRANSITION;
846 + if (trace_recursion_test(bit))
847 + return -1;
848 + trace_recursion_set(bit);
849 + barrier();
850 +- return bit + 1;
851 ++ return bit;
852 + }
853 +
854 +- /* Normal check passed, clear the transition to allow it again */
855 +- trace_recursion_clear(TRACE_TRANSITION_BIT);
856 +-
857 + val |= 1 << bit;
858 + current->trace_recursion = val;
859 + barrier();
860 +
861 +- return bit + 1;
862 ++ return bit;
863 + }
864 +
865 + static __always_inline void trace_clear_recursion(int bit)
866 + {
867 + unsigned int val = current->trace_recursion;
868 +
869 +- if (!bit)
870 +- return;
871 +-
872 +- bit--;
873 + bit = 1 << bit;
874 + val &= ~bit;
875 +
876 +diff --git a/kernel/trace/trace_functions.c b/kernel/trace/trace_functions.c
877 +index fcd41a166405b..7adbfcf555fd5 100644
878 +--- a/kernel/trace/trace_functions.c
879 ++++ b/kernel/trace/trace_functions.c
880 +@@ -137,7 +137,7 @@ function_trace_call(unsigned long ip, unsigned long parent_ip,
881 + pc = preempt_count();
882 + preempt_disable_notrace();
883 +
884 +- bit = trace_test_and_set_recursion(TRACE_FTRACE_START, TRACE_FTRACE_MAX);
885 ++ bit = trace_test_and_set_recursion(TRACE_FTRACE_START);
886 + if (bit < 0)
887 + goto out;
888 +
889 +diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig
890 +index 4692782b52805..c244711a0b911 100644
891 +--- a/net/netfilter/Kconfig
892 ++++ b/net/netfilter/Kconfig
893 +@@ -71,7 +71,7 @@ config NF_CONNTRACK_MARK
894 + config NF_CONNTRACK_SECMARK
895 + bool 'Connection tracking security mark support'
896 + depends on NETWORK_SECMARK
897 +- default m if NETFILTER_ADVANCED=n
898 ++ default y if NETFILTER_ADVANCED=n
899 + help
900 + This option enables security markings to be applied to
901 + connections. Typically they are copied to connections from
902 +diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
903 +index 1adbcdda21587..dccaa816c17b1 100644
904 +--- a/net/netfilter/ipvs/ip_vs_ctl.c
905 ++++ b/net/netfilter/ipvs/ip_vs_ctl.c
906 +@@ -3922,6 +3922,11 @@ static int __net_init ip_vs_control_net_init_sysctl(struct netns_ipvs *ipvs)
907 + tbl[idx++].data = &ipvs->sysctl_conn_reuse_mode;
908 + tbl[idx++].data = &ipvs->sysctl_schedule_icmp;
909 + tbl[idx++].data = &ipvs->sysctl_ignore_tunneled;
910 ++#ifdef CONFIG_IP_VS_DEBUG
911 ++ /* Global sysctls must be ro in non-init netns */
912 ++ if (!net_eq(net, &init_net))
913 ++ tbl[idx++].mode = 0444;
914 ++#endif
915 +
916 + ipvs->sysctl_hdr = register_net_sysctl(net, "net/ipv4/vs", tbl);
917 + if (ipvs->sysctl_hdr == NULL) {
918 +diff --git a/net/nfc/af_nfc.c b/net/nfc/af_nfc.c
919 +index 54e40fa478226..1859b8e98ded2 100644
920 +--- a/net/nfc/af_nfc.c
921 ++++ b/net/nfc/af_nfc.c
922 +@@ -72,6 +72,9 @@ int nfc_proto_register(const struct nfc_protocol *nfc_proto)
923 + proto_tab[nfc_proto->id] = nfc_proto;
924 + write_unlock(&proto_tab_lock);
925 +
926 ++ if (rc)
927 ++ proto_unregister(nfc_proto->proto);
928 ++
929 + return rc;
930 + }
931 + EXPORT_SYMBOL(nfc_proto_register);
932 +diff --git a/net/nfc/digital_core.c b/net/nfc/digital_core.c
933 +index 23c2a118ac9f9..28c60e291c7ee 100644
934 +--- a/net/nfc/digital_core.c
935 ++++ b/net/nfc/digital_core.c
936 +@@ -280,6 +280,7 @@ int digital_tg_configure_hw(struct nfc_digital_dev *ddev, int type, int param)
937 + static int digital_tg_listen_mdaa(struct nfc_digital_dev *ddev, u8 rf_tech)
938 + {
939 + struct digital_tg_mdaa_params *params;
940 ++ int rc;
941 +
942 + params = kzalloc(sizeof(struct digital_tg_mdaa_params), GFP_KERNEL);
943 + if (!params)
944 +@@ -294,8 +295,12 @@ static int digital_tg_listen_mdaa(struct nfc_digital_dev *ddev, u8 rf_tech)
945 + get_random_bytes(params->nfcid2 + 2, NFC_NFCID2_MAXSIZE - 2);
946 + params->sc = DIGITAL_SENSF_FELICA_SC;
947 +
948 +- return digital_send_cmd(ddev, DIGITAL_CMD_TG_LISTEN_MDAA, NULL, params,
949 +- 500, digital_tg_recv_atr_req, NULL);
950 ++ rc = digital_send_cmd(ddev, DIGITAL_CMD_TG_LISTEN_MDAA, NULL, params,
951 ++ 500, digital_tg_recv_atr_req, NULL);
952 ++ if (rc)
953 ++ kfree(params);
954 ++
955 ++ return rc;
956 + }
957 +
958 + static int digital_tg_listen_md(struct nfc_digital_dev *ddev, u8 rf_tech)
959 +diff --git a/net/nfc/digital_technology.c b/net/nfc/digital_technology.c
960 +index fb58ed2dd41d1..082dd95f6ef36 100644
961 +--- a/net/nfc/digital_technology.c
962 ++++ b/net/nfc/digital_technology.c
963 +@@ -473,8 +473,12 @@ static int digital_in_send_sdd_req(struct nfc_digital_dev *ddev,
964 + *skb_put(skb, sizeof(u8)) = sel_cmd;
965 + *skb_put(skb, sizeof(u8)) = DIGITAL_SDD_REQ_SEL_PAR;
966 +
967 +- return digital_in_send_cmd(ddev, skb, 30, digital_in_recv_sdd_res,
968 +- target);
969 ++ rc = digital_in_send_cmd(ddev, skb, 30, digital_in_recv_sdd_res,
970 ++ target);
971 ++ if (rc)
972 ++ kfree_skb(skb);
973 ++
974 ++ return rc;
975 + }
976 +
977 + static void digital_in_recv_sens_res(struct nfc_digital_dev *ddev, void *arg,
978 +diff --git a/net/nfc/nci/rsp.c b/net/nfc/nci/rsp.c
979 +index 9b6eb913d801b..74e4d5e8c2752 100644
980 +--- a/net/nfc/nci/rsp.c
981 ++++ b/net/nfc/nci/rsp.c
982 +@@ -274,6 +274,8 @@ static void nci_core_conn_close_rsp_packet(struct nci_dev *ndev,
983 + conn_info = nci_get_conn_info_by_conn_id(ndev, ndev->cur_id);
984 + if (conn_info) {
985 + list_del(&conn_info->list);
986 ++ if (conn_info == ndev->rf_conn_info)
987 ++ ndev->rf_conn_info = NULL;
988 + devm_kfree(&ndev->nfc_dev->dev, conn_info);
989 + }
990 + }
991 +diff --git a/sound/core/seq/seq_device.c b/sound/core/seq/seq_device.c
992 +index e40a2cba5002a..5d16b20791195 100644
993 +--- a/sound/core/seq/seq_device.c
994 ++++ b/sound/core/seq/seq_device.c
995 +@@ -162,6 +162,8 @@ static int snd_seq_device_dev_free(struct snd_device *device)
996 + struct snd_seq_device *dev = device->device_data;
997 +
998 + cancel_autoload_drivers();
999 ++ if (dev->private_free)
1000 ++ dev->private_free(dev);
1001 + put_device(&dev->dev);
1002 + return 0;
1003 + }
1004 +@@ -189,11 +191,7 @@ static int snd_seq_device_dev_disconnect(struct snd_device *device)
1005 +
1006 + static void snd_seq_dev_release(struct device *dev)
1007 + {
1008 +- struct snd_seq_device *sdev = to_seq_dev(dev);
1009 +-
1010 +- if (sdev->private_free)
1011 +- sdev->private_free(sdev);
1012 +- kfree(sdev);
1013 ++ kfree(to_seq_dev(dev));
1014 + }
1015 +
1016 + /*
1017 +diff --git a/sound/hda/hdac_controller.c b/sound/hda/hdac_controller.c
1018 +index 4727f5b80e76d..4ee3458ad810e 100644
1019 +--- a/sound/hda/hdac_controller.c
1020 ++++ b/sound/hda/hdac_controller.c
1021 +@@ -288,8 +288,9 @@ static int azx_reset(struct hdac_bus *bus, bool full_reset)
1022 + if (!full_reset)
1023 + goto skip_reset;
1024 +
1025 +- /* clear STATESTS */
1026 +- snd_hdac_chip_writew(bus, STATESTS, STATESTS_INT_MASK);
1027 ++ /* clear STATESTS if not in reset */
1028 ++ if (snd_hdac_chip_readb(bus, GCTL) & AZX_GCTL_RESET)
1029 ++ snd_hdac_chip_writew(bus, STATESTS, STATESTS_INT_MASK);
1030 +
1031 + /* reset controller */
1032 + snd_hdac_bus_enter_link_reset(bus);
1033 +diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
1034 +index 7466e8c6815d7..551377fab0d03 100644
1035 +--- a/sound/soc/soc-dapm.c
1036 ++++ b/sound/soc/soc-dapm.c
1037 +@@ -2377,6 +2377,7 @@ static int snd_soc_dapm_set_pin(struct snd_soc_dapm_context *dapm,
1038 + const char *pin, int status)
1039 + {
1040 + struct snd_soc_dapm_widget *w = dapm_find_widget(dapm, pin, true);
1041 ++ int ret = 0;
1042 +
1043 + dapm_assert_locked(dapm);
1044 +
1045 +@@ -2389,13 +2390,14 @@ static int snd_soc_dapm_set_pin(struct snd_soc_dapm_context *dapm,
1046 + dapm_mark_dirty(w, "pin configuration");
1047 + dapm_widget_invalidate_input_paths(w);
1048 + dapm_widget_invalidate_output_paths(w);
1049 ++ ret = 1;
1050 + }
1051 +
1052 + w->connected = status;
1053 + if (status == 0)
1054 + w->force = 0;
1055 +
1056 +- return 0;
1057 ++ return ret;
1058 + }
1059 +
1060 + /**
1061 +@@ -3290,14 +3292,15 @@ int snd_soc_dapm_put_pin_switch(struct snd_kcontrol *kcontrol,
1062 + {
1063 + struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
1064 + const char *pin = (const char *)kcontrol->private_value;
1065 ++ int ret;
1066 +
1067 + if (ucontrol->value.integer.value[0])
1068 +- snd_soc_dapm_enable_pin(&card->dapm, pin);
1069 ++ ret = snd_soc_dapm_enable_pin(&card->dapm, pin);
1070 + else
1071 +- snd_soc_dapm_disable_pin(&card->dapm, pin);
1072 ++ ret = snd_soc_dapm_disable_pin(&card->dapm, pin);
1073 +
1074 + snd_soc_dapm_sync(&card->dapm);
1075 +- return 0;
1076 ++ return ret;
1077 + }
1078 + EXPORT_SYMBOL_GPL(snd_soc_dapm_put_pin_switch);
1079 +
1080 +@@ -3657,7 +3660,7 @@ static int snd_soc_dapm_dai_link_put(struct snd_kcontrol *kcontrol,
1081 +
1082 + w->params_select = ucontrol->value.enumerated.item[0];
1083 +
1084 +- return 0;
1085 ++ return 1;
1086 + }
1087 +
1088 + int snd_soc_dapm_new_pcm(struct snd_soc_card *card,
1089 +diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
1090 +index d3d3e05fe5b8d..1904fc542025d 100644
1091 +--- a/sound/usb/quirks-table.h
1092 ++++ b/sound/usb/quirks-table.h
1093 +@@ -3446,5 +3446,37 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
1094 + }
1095 + }
1096 + },
1097 ++{
1098 ++ /*
1099 ++ * Sennheiser GSP670
1100 ++ * Change order of interfaces loaded
1101 ++ */
1102 ++ USB_DEVICE(0x1395, 0x0300),
1103 ++ .bInterfaceClass = USB_CLASS_PER_INTERFACE,
1104 ++ .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
1105 ++ .ifnum = QUIRK_ANY_INTERFACE,
1106 ++ .type = QUIRK_COMPOSITE,
1107 ++ .data = &(const struct snd_usb_audio_quirk[]) {
1108 ++ // Communication
1109 ++ {
1110 ++ .ifnum = 3,
1111 ++ .type = QUIRK_AUDIO_STANDARD_INTERFACE
1112 ++ },
1113 ++ // Recording
1114 ++ {
1115 ++ .ifnum = 4,
1116 ++ .type = QUIRK_AUDIO_STANDARD_INTERFACE
1117 ++ },
1118 ++ // Main
1119 ++ {
1120 ++ .ifnum = 1,
1121 ++ .type = QUIRK_AUDIO_STANDARD_INTERFACE
1122 ++ },
1123 ++ {
1124 ++ .ifnum = -1
1125 ++ }
1126 ++ }
1127 ++ }
1128 ++},
1129 +
1130 + #undef USB_DEVICE_VENDOR_SPEC