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, ®map_encx24j600, ctx, ®cfg); |
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 |