Contents of /trunk/kernel-alx/patches-4.9/0115-4.9.16-all-fixes.patch
Parent Directory | Revision Log
Revision 2956 -
(show annotations)
(download)
Mon Jul 24 12:03:46 2017 UTC (7 years, 2 months ago) by niro
File size: 52098 byte(s)
Mon Jul 24 12:03:46 2017 UTC (7 years, 2 months ago) by niro
File size: 52098 byte(s)
-added patches-4.9
1 | diff --git a/Makefile b/Makefile |
2 | index 03df4fcacdf2..4e0f962eb434 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,6 +1,6 @@ |
6 | VERSION = 4 |
7 | PATCHLEVEL = 9 |
8 | -SUBLEVEL = 15 |
9 | +SUBLEVEL = 16 |
10 | EXTRAVERSION = |
11 | NAME = Roaring Lionus |
12 | |
13 | diff --git a/arch/mips/configs/ip22_defconfig b/arch/mips/configs/ip22_defconfig |
14 | index 5d83ff755547..ec8e9684296d 100644 |
15 | --- a/arch/mips/configs/ip22_defconfig |
16 | +++ b/arch/mips/configs/ip22_defconfig |
17 | @@ -67,8 +67,8 @@ CONFIG_NETFILTER_NETLINK_QUEUE=m |
18 | CONFIG_NF_CONNTRACK=m |
19 | CONFIG_NF_CONNTRACK_SECMARK=y |
20 | CONFIG_NF_CONNTRACK_EVENTS=y |
21 | -CONFIG_NF_CT_PROTO_DCCP=m |
22 | -CONFIG_NF_CT_PROTO_UDPLITE=m |
23 | +CONFIG_NF_CT_PROTO_DCCP=y |
24 | +CONFIG_NF_CT_PROTO_UDPLITE=y |
25 | CONFIG_NF_CONNTRACK_AMANDA=m |
26 | CONFIG_NF_CONNTRACK_FTP=m |
27 | CONFIG_NF_CONNTRACK_H323=m |
28 | diff --git a/arch/mips/configs/ip27_defconfig b/arch/mips/configs/ip27_defconfig |
29 | index 2b74aee320a1..e582069b44fd 100644 |
30 | --- a/arch/mips/configs/ip27_defconfig |
31 | +++ b/arch/mips/configs/ip27_defconfig |
32 | @@ -133,7 +133,7 @@ CONFIG_LIBFC=m |
33 | CONFIG_SCSI_QLOGIC_1280=y |
34 | CONFIG_SCSI_PMCRAID=m |
35 | CONFIG_SCSI_BFA_FC=m |
36 | -CONFIG_SCSI_DH=m |
37 | +CONFIG_SCSI_DH=y |
38 | CONFIG_SCSI_DH_RDAC=m |
39 | CONFIG_SCSI_DH_HP_SW=m |
40 | CONFIG_SCSI_DH_EMC=m |
41 | @@ -205,7 +205,6 @@ CONFIG_MLX4_EN=m |
42 | # CONFIG_MLX4_DEBUG is not set |
43 | CONFIG_TEHUTI=m |
44 | CONFIG_BNX2X=m |
45 | -CONFIG_QLGE=m |
46 | CONFIG_SFC=m |
47 | CONFIG_BE2NET=m |
48 | CONFIG_LIBERTAS_THINFIRM=m |
49 | diff --git a/arch/mips/configs/lemote2f_defconfig b/arch/mips/configs/lemote2f_defconfig |
50 | index 5da76e0e120f..0cdb431bff80 100644 |
51 | --- a/arch/mips/configs/lemote2f_defconfig |
52 | +++ b/arch/mips/configs/lemote2f_defconfig |
53 | @@ -39,7 +39,7 @@ CONFIG_HIBERNATION=y |
54 | CONFIG_PM_STD_PARTITION="/dev/hda3" |
55 | CONFIG_CPU_FREQ=y |
56 | CONFIG_CPU_FREQ_DEBUG=y |
57 | -CONFIG_CPU_FREQ_STAT=m |
58 | +CONFIG_CPU_FREQ_STAT=y |
59 | CONFIG_CPU_FREQ_STAT_DETAILS=y |
60 | CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y |
61 | CONFIG_CPU_FREQ_GOV_POWERSAVE=m |
62 | diff --git a/arch/mips/configs/malta_defconfig b/arch/mips/configs/malta_defconfig |
63 | index 58d43f3c348d..078ecac071ab 100644 |
64 | --- a/arch/mips/configs/malta_defconfig |
65 | +++ b/arch/mips/configs/malta_defconfig |
66 | @@ -59,8 +59,8 @@ CONFIG_NETFILTER=y |
67 | CONFIG_NF_CONNTRACK=m |
68 | CONFIG_NF_CONNTRACK_SECMARK=y |
69 | CONFIG_NF_CONNTRACK_EVENTS=y |
70 | -CONFIG_NF_CT_PROTO_DCCP=m |
71 | -CONFIG_NF_CT_PROTO_UDPLITE=m |
72 | +CONFIG_NF_CT_PROTO_DCCP=y |
73 | +CONFIG_NF_CT_PROTO_UDPLITE=y |
74 | CONFIG_NF_CONNTRACK_AMANDA=m |
75 | CONFIG_NF_CONNTRACK_FTP=m |
76 | CONFIG_NF_CONNTRACK_H323=m |
77 | diff --git a/arch/mips/configs/malta_kvm_defconfig b/arch/mips/configs/malta_kvm_defconfig |
78 | index c8f7e2835840..e233f878afef 100644 |
79 | --- a/arch/mips/configs/malta_kvm_defconfig |
80 | +++ b/arch/mips/configs/malta_kvm_defconfig |
81 | @@ -60,8 +60,8 @@ CONFIG_NETFILTER=y |
82 | CONFIG_NF_CONNTRACK=m |
83 | CONFIG_NF_CONNTRACK_SECMARK=y |
84 | CONFIG_NF_CONNTRACK_EVENTS=y |
85 | -CONFIG_NF_CT_PROTO_DCCP=m |
86 | -CONFIG_NF_CT_PROTO_UDPLITE=m |
87 | +CONFIG_NF_CT_PROTO_DCCP=y |
88 | +CONFIG_NF_CT_PROTO_UDPLITE=y |
89 | CONFIG_NF_CONNTRACK_AMANDA=m |
90 | CONFIG_NF_CONNTRACK_FTP=m |
91 | CONFIG_NF_CONNTRACK_H323=m |
92 | diff --git a/arch/mips/configs/malta_kvm_guest_defconfig b/arch/mips/configs/malta_kvm_guest_defconfig |
93 | index d2f54e55356c..fbe085c328ab 100644 |
94 | --- a/arch/mips/configs/malta_kvm_guest_defconfig |
95 | +++ b/arch/mips/configs/malta_kvm_guest_defconfig |
96 | @@ -59,8 +59,8 @@ CONFIG_NETFILTER=y |
97 | CONFIG_NF_CONNTRACK=m |
98 | CONFIG_NF_CONNTRACK_SECMARK=y |
99 | CONFIG_NF_CONNTRACK_EVENTS=y |
100 | -CONFIG_NF_CT_PROTO_DCCP=m |
101 | -CONFIG_NF_CT_PROTO_UDPLITE=m |
102 | +CONFIG_NF_CT_PROTO_DCCP=y |
103 | +CONFIG_NF_CT_PROTO_UDPLITE=y |
104 | CONFIG_NF_CONNTRACK_AMANDA=m |
105 | CONFIG_NF_CONNTRACK_FTP=m |
106 | CONFIG_NF_CONNTRACK_H323=m |
107 | diff --git a/arch/mips/configs/maltaup_xpa_defconfig b/arch/mips/configs/maltaup_xpa_defconfig |
108 | index 3d0d9cb9673f..2942610e4082 100644 |
109 | --- a/arch/mips/configs/maltaup_xpa_defconfig |
110 | +++ b/arch/mips/configs/maltaup_xpa_defconfig |
111 | @@ -61,8 +61,8 @@ CONFIG_NETFILTER=y |
112 | CONFIG_NF_CONNTRACK=m |
113 | CONFIG_NF_CONNTRACK_SECMARK=y |
114 | CONFIG_NF_CONNTRACK_EVENTS=y |
115 | -CONFIG_NF_CT_PROTO_DCCP=m |
116 | -CONFIG_NF_CT_PROTO_UDPLITE=m |
117 | +CONFIG_NF_CT_PROTO_DCCP=y |
118 | +CONFIG_NF_CT_PROTO_UDPLITE=y |
119 | CONFIG_NF_CONNTRACK_AMANDA=m |
120 | CONFIG_NF_CONNTRACK_FTP=m |
121 | CONFIG_NF_CONNTRACK_H323=m |
122 | diff --git a/arch/mips/configs/nlm_xlp_defconfig b/arch/mips/configs/nlm_xlp_defconfig |
123 | index b496c25fced6..07d01827a973 100644 |
124 | --- a/arch/mips/configs/nlm_xlp_defconfig |
125 | +++ b/arch/mips/configs/nlm_xlp_defconfig |
126 | @@ -110,7 +110,7 @@ CONFIG_NETFILTER=y |
127 | CONFIG_NF_CONNTRACK=m |
128 | CONFIG_NF_CONNTRACK_SECMARK=y |
129 | CONFIG_NF_CONNTRACK_EVENTS=y |
130 | -CONFIG_NF_CT_PROTO_UDPLITE=m |
131 | +CONFIG_NF_CT_PROTO_UDPLITE=y |
132 | CONFIG_NF_CONNTRACK_AMANDA=m |
133 | CONFIG_NF_CONNTRACK_FTP=m |
134 | CONFIG_NF_CONNTRACK_H323=m |
135 | diff --git a/arch/mips/configs/nlm_xlr_defconfig b/arch/mips/configs/nlm_xlr_defconfig |
136 | index 8e99ad807a57..f59969acb724 100644 |
137 | --- a/arch/mips/configs/nlm_xlr_defconfig |
138 | +++ b/arch/mips/configs/nlm_xlr_defconfig |
139 | @@ -90,7 +90,7 @@ CONFIG_NETFILTER=y |
140 | CONFIG_NF_CONNTRACK=m |
141 | CONFIG_NF_CONNTRACK_SECMARK=y |
142 | CONFIG_NF_CONNTRACK_EVENTS=y |
143 | -CONFIG_NF_CT_PROTO_UDPLITE=m |
144 | +CONFIG_NF_CT_PROTO_UDPLITE=y |
145 | CONFIG_NF_CONNTRACK_AMANDA=m |
146 | CONFIG_NF_CONNTRACK_FTP=m |
147 | CONFIG_NF_CONNTRACK_H323=m |
148 | diff --git a/arch/mips/include/asm/mach-ip27/spaces.h b/arch/mips/include/asm/mach-ip27/spaces.h |
149 | index 4775a1136a5b..24d5e31bcfa6 100644 |
150 | --- a/arch/mips/include/asm/mach-ip27/spaces.h |
151 | +++ b/arch/mips/include/asm/mach-ip27/spaces.h |
152 | @@ -12,14 +12,16 @@ |
153 | |
154 | /* |
155 | * IP27 uses the R10000's uncached attribute feature. Attribute 3 selects |
156 | - * uncached memory addressing. |
157 | + * uncached memory addressing. Hide the definitions on 32-bit compilation |
158 | + * of the compat-vdso code. |
159 | */ |
160 | - |
161 | +#ifdef CONFIG_64BIT |
162 | #define HSPEC_BASE 0x9000000000000000 |
163 | #define IO_BASE 0x9200000000000000 |
164 | #define MSPEC_BASE 0x9400000000000000 |
165 | #define UNCAC_BASE 0x9600000000000000 |
166 | #define CAC_BASE 0xa800000000000000 |
167 | +#endif |
168 | |
169 | #define TO_MSPEC(x) (MSPEC_BASE | ((x) & TO_PHYS_MASK)) |
170 | #define TO_HSPEC(x) (HSPEC_BASE | ((x) & TO_PHYS_MASK)) |
171 | diff --git a/arch/mips/ralink/prom.c b/arch/mips/ralink/prom.c |
172 | index 5a73c5e14221..23198c9050e5 100644 |
173 | --- a/arch/mips/ralink/prom.c |
174 | +++ b/arch/mips/ralink/prom.c |
175 | @@ -30,8 +30,10 @@ const char *get_system_type(void) |
176 | return soc_info.sys_type; |
177 | } |
178 | |
179 | -static __init void prom_init_cmdline(int argc, char **argv) |
180 | +static __init void prom_init_cmdline(void) |
181 | { |
182 | + int argc; |
183 | + char **argv; |
184 | int i; |
185 | |
186 | pr_debug("prom: fw_arg0=%08x fw_arg1=%08x fw_arg2=%08x fw_arg3=%08x\n", |
187 | @@ -60,14 +62,11 @@ static __init void prom_init_cmdline(int argc, char **argv) |
188 | |
189 | void __init prom_init(void) |
190 | { |
191 | - int argc; |
192 | - char **argv; |
193 | - |
194 | prom_soc_init(&soc_info); |
195 | |
196 | pr_info("SoC Type: %s\n", get_system_type()); |
197 | |
198 | - prom_init_cmdline(argc, argv); |
199 | + prom_init_cmdline(); |
200 | } |
201 | |
202 | void __init prom_free_prom_memory(void) |
203 | diff --git a/arch/mips/ralink/rt288x.c b/arch/mips/ralink/rt288x.c |
204 | index 285796e6d75c..2b76e3643869 100644 |
205 | --- a/arch/mips/ralink/rt288x.c |
206 | +++ b/arch/mips/ralink/rt288x.c |
207 | @@ -40,16 +40,6 @@ static struct rt2880_pmx_group rt2880_pinmux_data_act[] = { |
208 | { 0 } |
209 | }; |
210 | |
211 | -static void rt288x_wdt_reset(void) |
212 | -{ |
213 | - u32 t; |
214 | - |
215 | - /* enable WDT reset output on pin SRAM_CS_N */ |
216 | - t = rt_sysc_r32(SYSC_REG_CLKCFG); |
217 | - t |= CLKCFG_SRAM_CS_N_WDT; |
218 | - rt_sysc_w32(t, SYSC_REG_CLKCFG); |
219 | -} |
220 | - |
221 | void __init ralink_clk_init(void) |
222 | { |
223 | unsigned long cpu_rate, wmac_rate = 40000000; |
224 | diff --git a/arch/mips/ralink/rt305x.c b/arch/mips/ralink/rt305x.c |
225 | index c8a28c4bf29e..e778e0b54ffb 100644 |
226 | --- a/arch/mips/ralink/rt305x.c |
227 | +++ b/arch/mips/ralink/rt305x.c |
228 | @@ -89,17 +89,6 @@ static struct rt2880_pmx_group rt5350_pinmux_data[] = { |
229 | { 0 } |
230 | }; |
231 | |
232 | -static void rt305x_wdt_reset(void) |
233 | -{ |
234 | - u32 t; |
235 | - |
236 | - /* enable WDT reset output on pin SRAM_CS_N */ |
237 | - t = rt_sysc_r32(SYSC_REG_SYSTEM_CONFIG); |
238 | - t |= RT305X_SYSCFG_SRAM_CS0_MODE_WDT << |
239 | - RT305X_SYSCFG_SRAM_CS0_MODE_SHIFT; |
240 | - rt_sysc_w32(t, SYSC_REG_SYSTEM_CONFIG); |
241 | -} |
242 | - |
243 | static unsigned long rt5350_get_mem_size(void) |
244 | { |
245 | void __iomem *sysc = (void __iomem *) KSEG1ADDR(RT305X_SYSC_BASE); |
246 | diff --git a/arch/mips/ralink/rt3883.c b/arch/mips/ralink/rt3883.c |
247 | index 4cef9162bd9b..3e0aa09c6b55 100644 |
248 | --- a/arch/mips/ralink/rt3883.c |
249 | +++ b/arch/mips/ralink/rt3883.c |
250 | @@ -63,16 +63,6 @@ static struct rt2880_pmx_group rt3883_pinmux_data[] = { |
251 | { 0 } |
252 | }; |
253 | |
254 | -static void rt3883_wdt_reset(void) |
255 | -{ |
256 | - u32 t; |
257 | - |
258 | - /* enable WDT reset output on GPIO 2 */ |
259 | - t = rt_sysc_r32(RT3883_SYSC_REG_SYSCFG1); |
260 | - t |= RT3883_SYSCFG1_GPIO2_AS_WDT_OUT; |
261 | - rt_sysc_w32(t, RT3883_SYSC_REG_SYSCFG1); |
262 | -} |
263 | - |
264 | void __init ralink_clk_init(void) |
265 | { |
266 | unsigned long cpu_rate, sys_rate; |
267 | diff --git a/arch/mips/ralink/timer.c b/arch/mips/ralink/timer.c |
268 | index 8077ff39bdea..d4469b20d176 100644 |
269 | --- a/arch/mips/ralink/timer.c |
270 | +++ b/arch/mips/ralink/timer.c |
271 | @@ -71,11 +71,6 @@ static int rt_timer_request(struct rt_timer *rt) |
272 | return err; |
273 | } |
274 | |
275 | -static void rt_timer_free(struct rt_timer *rt) |
276 | -{ |
277 | - free_irq(rt->irq, rt); |
278 | -} |
279 | - |
280 | static int rt_timer_config(struct rt_timer *rt, unsigned long divisor) |
281 | { |
282 | if (rt->timer_freq < divisor) |
283 | @@ -101,15 +96,6 @@ static int rt_timer_enable(struct rt_timer *rt) |
284 | return 0; |
285 | } |
286 | |
287 | -static void rt_timer_disable(struct rt_timer *rt) |
288 | -{ |
289 | - u32 t; |
290 | - |
291 | - t = rt_timer_r32(rt, TIMER_REG_TMR0CTL); |
292 | - t &= ~TMR0CTL_ENABLE; |
293 | - rt_timer_w32(rt, TIMER_REG_TMR0CTL, t); |
294 | -} |
295 | - |
296 | static int rt_timer_probe(struct platform_device *pdev) |
297 | { |
298 | struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
299 | diff --git a/arch/mips/sgi-ip22/Platform b/arch/mips/sgi-ip22/Platform |
300 | index b7a4b7e04c38..e8f6b3a42a48 100644 |
301 | --- a/arch/mips/sgi-ip22/Platform |
302 | +++ b/arch/mips/sgi-ip22/Platform |
303 | @@ -25,7 +25,7 @@ endif |
304 | # Simplified: what IP22 does at 128MB+ in ksegN, IP28 does at 512MB+ in xkphys |
305 | # |
306 | ifdef CONFIG_SGI_IP28 |
307 | - ifeq ($(call cc-option-yn,-mr10k-cache-barrier=store), n) |
308 | + ifeq ($(call cc-option-yn,-march=r10000 -mr10k-cache-barrier=store), n) |
309 | $(error gcc doesn't support needed option -mr10k-cache-barrier=store) |
310 | endif |
311 | endif |
312 | diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c |
313 | index 3362299b1859..6ca3b902f7b9 100644 |
314 | --- a/arch/powerpc/lib/sstep.c |
315 | +++ b/arch/powerpc/lib/sstep.c |
316 | @@ -1807,8 +1807,6 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) |
317 | goto instr_done; |
318 | |
319 | case LARX: |
320 | - if (regs->msr & MSR_LE) |
321 | - return 0; |
322 | if (op.ea & (size - 1)) |
323 | break; /* can't handle misaligned */ |
324 | err = -EFAULT; |
325 | @@ -1832,8 +1830,6 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) |
326 | goto ldst_done; |
327 | |
328 | case STCX: |
329 | - if (regs->msr & MSR_LE) |
330 | - return 0; |
331 | if (op.ea & (size - 1)) |
332 | break; /* can't handle misaligned */ |
333 | err = -EFAULT; |
334 | @@ -1859,8 +1855,6 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) |
335 | goto ldst_done; |
336 | |
337 | case LOAD: |
338 | - if (regs->msr & MSR_LE) |
339 | - return 0; |
340 | err = read_mem(®s->gpr[op.reg], op.ea, size, regs); |
341 | if (!err) { |
342 | if (op.type & SIGNEXT) |
343 | @@ -1872,8 +1866,6 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) |
344 | |
345 | #ifdef CONFIG_PPC_FPU |
346 | case LOAD_FP: |
347 | - if (regs->msr & MSR_LE) |
348 | - return 0; |
349 | if (size == 4) |
350 | err = do_fp_load(op.reg, do_lfs, op.ea, size, regs); |
351 | else |
352 | @@ -1882,15 +1874,11 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) |
353 | #endif |
354 | #ifdef CONFIG_ALTIVEC |
355 | case LOAD_VMX: |
356 | - if (regs->msr & MSR_LE) |
357 | - return 0; |
358 | err = do_vec_load(op.reg, do_lvx, op.ea & ~0xfUL, regs); |
359 | goto ldst_done; |
360 | #endif |
361 | #ifdef CONFIG_VSX |
362 | case LOAD_VSX: |
363 | - if (regs->msr & MSR_LE) |
364 | - return 0; |
365 | err = do_vsx_load(op.reg, do_lxvd2x, op.ea, regs); |
366 | goto ldst_done; |
367 | #endif |
368 | @@ -1913,8 +1901,6 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) |
369 | goto instr_done; |
370 | |
371 | case STORE: |
372 | - if (regs->msr & MSR_LE) |
373 | - return 0; |
374 | if ((op.type & UPDATE) && size == sizeof(long) && |
375 | op.reg == 1 && op.update_reg == 1 && |
376 | !(regs->msr & MSR_PR) && |
377 | @@ -1927,8 +1913,6 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) |
378 | |
379 | #ifdef CONFIG_PPC_FPU |
380 | case STORE_FP: |
381 | - if (regs->msr & MSR_LE) |
382 | - return 0; |
383 | if (size == 4) |
384 | err = do_fp_store(op.reg, do_stfs, op.ea, size, regs); |
385 | else |
386 | @@ -1937,15 +1921,11 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) |
387 | #endif |
388 | #ifdef CONFIG_ALTIVEC |
389 | case STORE_VMX: |
390 | - if (regs->msr & MSR_LE) |
391 | - return 0; |
392 | err = do_vec_store(op.reg, do_stvx, op.ea & ~0xfUL, regs); |
393 | goto ldst_done; |
394 | #endif |
395 | #ifdef CONFIG_VSX |
396 | case STORE_VSX: |
397 | - if (regs->msr & MSR_LE) |
398 | - return 0; |
399 | err = do_vsx_store(op.reg, do_stxvd2x, op.ea, regs); |
400 | goto ldst_done; |
401 | #endif |
402 | diff --git a/arch/powerpc/sysdev/xics/icp-opal.c b/arch/powerpc/sysdev/xics/icp-opal.c |
403 | index c96c0cb95d87..32c46b424dd0 100644 |
404 | --- a/arch/powerpc/sysdev/xics/icp-opal.c |
405 | +++ b/arch/powerpc/sysdev/xics/icp-opal.c |
406 | @@ -91,6 +91,16 @@ static unsigned int icp_opal_get_irq(void) |
407 | |
408 | static void icp_opal_set_cpu_priority(unsigned char cppr) |
409 | { |
410 | + /* |
411 | + * Here be dragons. The caller has asked to allow only IPI's and not |
412 | + * external interrupts. But OPAL XIVE doesn't support that. So instead |
413 | + * of allowing no interrupts allow all. That's still not right, but |
414 | + * currently the only caller who does this is xics_migrate_irqs_away() |
415 | + * and it works in that case. |
416 | + */ |
417 | + if (cppr >= DEFAULT_PRIORITY) |
418 | + cppr = LOWEST_PRIORITY; |
419 | + |
420 | xics_set_base_cppr(cppr); |
421 | opal_int_set_cppr(cppr); |
422 | iosync(); |
423 | diff --git a/arch/powerpc/sysdev/xics/xics-common.c b/arch/powerpc/sysdev/xics/xics-common.c |
424 | index 69d858e51ac7..23efe4e42172 100644 |
425 | --- a/arch/powerpc/sysdev/xics/xics-common.c |
426 | +++ b/arch/powerpc/sysdev/xics/xics-common.c |
427 | @@ -20,6 +20,7 @@ |
428 | #include <linux/of.h> |
429 | #include <linux/slab.h> |
430 | #include <linux/spinlock.h> |
431 | +#include <linux/delay.h> |
432 | |
433 | #include <asm/prom.h> |
434 | #include <asm/io.h> |
435 | @@ -198,9 +199,6 @@ void xics_migrate_irqs_away(void) |
436 | /* Remove ourselves from the global interrupt queue */ |
437 | xics_set_cpu_giq(xics_default_distrib_server, 0); |
438 | |
439 | - /* Allow IPIs again... */ |
440 | - icp_ops->set_priority(DEFAULT_PRIORITY); |
441 | - |
442 | for_each_irq_desc(virq, desc) { |
443 | struct irq_chip *chip; |
444 | long server; |
445 | @@ -255,6 +253,19 @@ void xics_migrate_irqs_away(void) |
446 | unlock: |
447 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
448 | } |
449 | + |
450 | + /* Allow "sufficient" time to drop any inflight IRQ's */ |
451 | + mdelay(5); |
452 | + |
453 | + /* |
454 | + * Allow IPIs again. This is done at the very end, after migrating all |
455 | + * interrupts, the expectation is that we'll only get woken up by an IPI |
456 | + * interrupt beyond this point, but leave externals masked just to be |
457 | + * safe. If we're using icp-opal this may actually allow all |
458 | + * interrupts anyway, but that should be OK. |
459 | + */ |
460 | + icp_ops->set_priority(DEFAULT_PRIORITY); |
461 | + |
462 | } |
463 | #endif /* CONFIG_HOTPLUG_CPU */ |
464 | |
465 | diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c |
466 | index d56ef26d4681..7678f7956409 100644 |
467 | --- a/arch/s390/mm/pgtable.c |
468 | +++ b/arch/s390/mm/pgtable.c |
469 | @@ -606,12 +606,29 @@ void ptep_zap_key(struct mm_struct *mm, unsigned long addr, pte_t *ptep) |
470 | bool test_and_clear_guest_dirty(struct mm_struct *mm, unsigned long addr) |
471 | { |
472 | spinlock_t *ptl; |
473 | + pgd_t *pgd; |
474 | + pud_t *pud; |
475 | + pmd_t *pmd; |
476 | pgste_t pgste; |
477 | pte_t *ptep; |
478 | pte_t pte; |
479 | bool dirty; |
480 | |
481 | - ptep = get_locked_pte(mm, addr, &ptl); |
482 | + pgd = pgd_offset(mm, addr); |
483 | + pud = pud_alloc(mm, pgd, addr); |
484 | + if (!pud) |
485 | + return false; |
486 | + pmd = pmd_alloc(mm, pud, addr); |
487 | + if (!pmd) |
488 | + return false; |
489 | + /* We can't run guests backed by huge pages, but userspace can |
490 | + * still set them up and then try to migrate them without any |
491 | + * migration support. |
492 | + */ |
493 | + if (pmd_large(*pmd)) |
494 | + return true; |
495 | + |
496 | + ptep = pte_alloc_map_lock(mm, pmd, addr, &ptl); |
497 | if (unlikely(!ptep)) |
498 | return false; |
499 | |
500 | diff --git a/crypto/Makefile b/crypto/Makefile |
501 | index bd6a029094e6..9e52b3c528df 100644 |
502 | --- a/crypto/Makefile |
503 | +++ b/crypto/Makefile |
504 | @@ -71,6 +71,7 @@ obj-$(CONFIG_CRYPTO_SHA256) += sha256_generic.o |
505 | obj-$(CONFIG_CRYPTO_SHA512) += sha512_generic.o |
506 | obj-$(CONFIG_CRYPTO_SHA3) += sha3_generic.o |
507 | obj-$(CONFIG_CRYPTO_WP512) += wp512.o |
508 | +CFLAGS_wp512.o := $(call cc-option,-fno-schedule-insns) # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79149 |
509 | obj-$(CONFIG_CRYPTO_TGR192) += tgr192.o |
510 | obj-$(CONFIG_CRYPTO_GF128MUL) += gf128mul.o |
511 | obj-$(CONFIG_CRYPTO_ECB) += ecb.o |
512 | @@ -94,6 +95,7 @@ obj-$(CONFIG_CRYPTO_BLOWFISH_COMMON) += blowfish_common.o |
513 | obj-$(CONFIG_CRYPTO_TWOFISH) += twofish_generic.o |
514 | obj-$(CONFIG_CRYPTO_TWOFISH_COMMON) += twofish_common.o |
515 | obj-$(CONFIG_CRYPTO_SERPENT) += serpent_generic.o |
516 | +CFLAGS_serpent_generic.o := $(call cc-option,-fsched-pressure) # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79149 |
517 | obj-$(CONFIG_CRYPTO_AES) += aes_generic.o |
518 | obj-$(CONFIG_CRYPTO_CAMELLIA) += camellia_generic.o |
519 | obj-$(CONFIG_CRYPTO_CAST_COMMON) += cast_common.o |
520 | diff --git a/drivers/firmware/efi/arm-runtime.c b/drivers/firmware/efi/arm-runtime.c |
521 | index 7c75a8d9091a..6bdf39e1e385 100644 |
522 | --- a/drivers/firmware/efi/arm-runtime.c |
523 | +++ b/drivers/firmware/efi/arm-runtime.c |
524 | @@ -65,6 +65,7 @@ static bool __init efi_virtmap_init(void) |
525 | bool systab_found; |
526 | |
527 | efi_mm.pgd = pgd_alloc(&efi_mm); |
528 | + mm_init_cpumask(&efi_mm); |
529 | init_new_context(NULL, &efi_mm); |
530 | |
531 | systab_found = false; |
532 | diff --git a/drivers/i2c/i2c-mux.c b/drivers/i2c/i2c-mux.c |
533 | index 83768e85a919..2178266bca79 100644 |
534 | --- a/drivers/i2c/i2c-mux.c |
535 | +++ b/drivers/i2c/i2c-mux.c |
536 | @@ -429,6 +429,7 @@ void i2c_mux_del_adapters(struct i2c_mux_core *muxc) |
537 | while (muxc->num_adapters) { |
538 | struct i2c_adapter *adap = muxc->adapter[--muxc->num_adapters]; |
539 | struct i2c_mux_priv *priv = adap->algo_data; |
540 | + struct device_node *np = adap->dev.of_node; |
541 | |
542 | muxc->adapter[muxc->num_adapters] = NULL; |
543 | |
544 | @@ -438,6 +439,7 @@ void i2c_mux_del_adapters(struct i2c_mux_core *muxc) |
545 | |
546 | sysfs_remove_link(&priv->adap.dev.kobj, "mux_device"); |
547 | i2c_del_adapter(adap); |
548 | + of_node_put(np); |
549 | kfree(priv); |
550 | } |
551 | } |
552 | diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c |
553 | index 4cab29ea394c..11bfa27b022c 100644 |
554 | --- a/drivers/infiniband/hw/mlx5/main.c |
555 | +++ b/drivers/infiniband/hw/mlx5/main.c |
556 | @@ -3141,9 +3141,11 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev) |
557 | if (err) |
558 | goto err_rsrc; |
559 | |
560 | - err = mlx5_ib_alloc_q_counters(dev); |
561 | - if (err) |
562 | - goto err_odp; |
563 | + if (MLX5_CAP_GEN(dev->mdev, max_qp_cnt)) { |
564 | + err = mlx5_ib_alloc_q_counters(dev); |
565 | + if (err) |
566 | + goto err_odp; |
567 | + } |
568 | |
569 | err = ib_register_device(&dev->ib_dev, NULL); |
570 | if (err) |
571 | @@ -3171,7 +3173,8 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev) |
572 | ib_unregister_device(&dev->ib_dev); |
573 | |
574 | err_q_cnt: |
575 | - mlx5_ib_dealloc_q_counters(dev); |
576 | + if (MLX5_CAP_GEN(dev->mdev, max_qp_cnt)) |
577 | + mlx5_ib_dealloc_q_counters(dev); |
578 | |
579 | err_odp: |
580 | mlx5_ib_odp_remove_one(dev); |
581 | @@ -3201,7 +3204,8 @@ static void mlx5_ib_remove(struct mlx5_core_dev *mdev, void *context) |
582 | |
583 | mlx5_remove_roce_notifier(dev); |
584 | ib_unregister_device(&dev->ib_dev); |
585 | - mlx5_ib_dealloc_q_counters(dev); |
586 | + if (MLX5_CAP_GEN(dev->mdev, max_qp_cnt)) |
587 | + mlx5_ib_dealloc_q_counters(dev); |
588 | destroy_umrc_res(dev); |
589 | mlx5_ib_odp_remove_one(dev); |
590 | destroy_dev_resources(&dev->devr); |
591 | diff --git a/drivers/md/dm.c b/drivers/md/dm.c |
592 | index ef7bf1dd6900..628ba001bb3c 100644 |
593 | --- a/drivers/md/dm.c |
594 | +++ b/drivers/md/dm.c |
595 | @@ -972,10 +972,61 @@ void dm_accept_partial_bio(struct bio *bio, unsigned n_sectors) |
596 | } |
597 | EXPORT_SYMBOL_GPL(dm_accept_partial_bio); |
598 | |
599 | +/* |
600 | + * Flush current->bio_list when the target map method blocks. |
601 | + * This fixes deadlocks in snapshot and possibly in other targets. |
602 | + */ |
603 | +struct dm_offload { |
604 | + struct blk_plug plug; |
605 | + struct blk_plug_cb cb; |
606 | +}; |
607 | + |
608 | +static void flush_current_bio_list(struct blk_plug_cb *cb, bool from_schedule) |
609 | +{ |
610 | + struct dm_offload *o = container_of(cb, struct dm_offload, cb); |
611 | + struct bio_list list; |
612 | + struct bio *bio; |
613 | + |
614 | + INIT_LIST_HEAD(&o->cb.list); |
615 | + |
616 | + if (unlikely(!current->bio_list)) |
617 | + return; |
618 | + |
619 | + list = *current->bio_list; |
620 | + bio_list_init(current->bio_list); |
621 | + |
622 | + while ((bio = bio_list_pop(&list))) { |
623 | + struct bio_set *bs = bio->bi_pool; |
624 | + if (unlikely(!bs) || bs == fs_bio_set) { |
625 | + bio_list_add(current->bio_list, bio); |
626 | + continue; |
627 | + } |
628 | + |
629 | + spin_lock(&bs->rescue_lock); |
630 | + bio_list_add(&bs->rescue_list, bio); |
631 | + queue_work(bs->rescue_workqueue, &bs->rescue_work); |
632 | + spin_unlock(&bs->rescue_lock); |
633 | + } |
634 | +} |
635 | + |
636 | +static void dm_offload_start(struct dm_offload *o) |
637 | +{ |
638 | + blk_start_plug(&o->plug); |
639 | + o->cb.callback = flush_current_bio_list; |
640 | + list_add(&o->cb.list, ¤t->plug->cb_list); |
641 | +} |
642 | + |
643 | +static void dm_offload_end(struct dm_offload *o) |
644 | +{ |
645 | + list_del(&o->cb.list); |
646 | + blk_finish_plug(&o->plug); |
647 | +} |
648 | + |
649 | static void __map_bio(struct dm_target_io *tio) |
650 | { |
651 | int r; |
652 | sector_t sector; |
653 | + struct dm_offload o; |
654 | struct bio *clone = &tio->clone; |
655 | struct dm_target *ti = tio->ti; |
656 | |
657 | @@ -988,7 +1039,11 @@ static void __map_bio(struct dm_target_io *tio) |
658 | */ |
659 | atomic_inc(&tio->io->io_count); |
660 | sector = clone->bi_iter.bi_sector; |
661 | + |
662 | + dm_offload_start(&o); |
663 | r = ti->type->map(ti, clone); |
664 | + dm_offload_end(&o); |
665 | + |
666 | if (r == DM_MAPIO_REMAPPED) { |
667 | /* the bio has been remapped so dispatch it */ |
668 | |
669 | diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c |
670 | index d9c1f2ff7119..aba77357ab23 100644 |
671 | --- a/drivers/media/rc/rc-main.c |
672 | +++ b/drivers/media/rc/rc-main.c |
673 | @@ -1411,6 +1411,7 @@ int rc_register_device(struct rc_dev *dev) |
674 | int attr = 0; |
675 | int minor; |
676 | int rc; |
677 | + u64 rc_type; |
678 | |
679 | if (!dev || !dev->map_name) |
680 | return -EINVAL; |
681 | @@ -1496,14 +1497,18 @@ int rc_register_device(struct rc_dev *dev) |
682 | goto out_input; |
683 | } |
684 | |
685 | + rc_type = BIT_ULL(rc_map->rc_type); |
686 | + |
687 | if (dev->change_protocol) { |
688 | - u64 rc_type = (1ll << rc_map->rc_type); |
689 | rc = dev->change_protocol(dev, &rc_type); |
690 | if (rc < 0) |
691 | goto out_raw; |
692 | dev->enabled_protocols = rc_type; |
693 | } |
694 | |
695 | + if (dev->driver_type == RC_DRIVER_IR_RAW) |
696 | + ir_raw_load_modules(&rc_type); |
697 | + |
698 | /* Allow the RC sysfs nodes to be accessible */ |
699 | atomic_set(&dev->initialized, 1); |
700 | |
701 | diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c |
702 | index 2c720cb2fb00..c3e67347a977 100644 |
703 | --- a/drivers/media/usb/dvb-usb/dw2102.c |
704 | +++ b/drivers/media/usb/dvb-usb/dw2102.c |
705 | @@ -68,6 +68,7 @@ |
706 | struct dw2102_state { |
707 | u8 initialized; |
708 | u8 last_lock; |
709 | + u8 data[MAX_XFER_SIZE + 4]; |
710 | struct i2c_client *i2c_client_demod; |
711 | struct i2c_client *i2c_client_tuner; |
712 | |
713 | @@ -662,62 +663,72 @@ static int su3000_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], |
714 | int num) |
715 | { |
716 | struct dvb_usb_device *d = i2c_get_adapdata(adap); |
717 | - u8 obuf[0x40], ibuf[0x40]; |
718 | + struct dw2102_state *state; |
719 | |
720 | if (!d) |
721 | return -ENODEV; |
722 | + |
723 | + state = d->priv; |
724 | + |
725 | if (mutex_lock_interruptible(&d->i2c_mutex) < 0) |
726 | return -EAGAIN; |
727 | + if (mutex_lock_interruptible(&d->data_mutex) < 0) { |
728 | + mutex_unlock(&d->i2c_mutex); |
729 | + return -EAGAIN; |
730 | + } |
731 | |
732 | switch (num) { |
733 | case 1: |
734 | switch (msg[0].addr) { |
735 | case SU3000_STREAM_CTRL: |
736 | - obuf[0] = msg[0].buf[0] + 0x36; |
737 | - obuf[1] = 3; |
738 | - obuf[2] = 0; |
739 | - if (dvb_usb_generic_rw(d, obuf, 3, ibuf, 0, 0) < 0) |
740 | + state->data[0] = msg[0].buf[0] + 0x36; |
741 | + state->data[1] = 3; |
742 | + state->data[2] = 0; |
743 | + if (dvb_usb_generic_rw(d, state->data, 3, |
744 | + state->data, 0, 0) < 0) |
745 | err("i2c transfer failed."); |
746 | break; |
747 | case DW2102_RC_QUERY: |
748 | - obuf[0] = 0x10; |
749 | - if (dvb_usb_generic_rw(d, obuf, 1, ibuf, 2, 0) < 0) |
750 | + state->data[0] = 0x10; |
751 | + if (dvb_usb_generic_rw(d, state->data, 1, |
752 | + state->data, 2, 0) < 0) |
753 | err("i2c transfer failed."); |
754 | - msg[0].buf[1] = ibuf[0]; |
755 | - msg[0].buf[0] = ibuf[1]; |
756 | + msg[0].buf[1] = state->data[0]; |
757 | + msg[0].buf[0] = state->data[1]; |
758 | break; |
759 | default: |
760 | /* always i2c write*/ |
761 | - obuf[0] = 0x08; |
762 | - obuf[1] = msg[0].addr; |
763 | - obuf[2] = msg[0].len; |
764 | + state->data[0] = 0x08; |
765 | + state->data[1] = msg[0].addr; |
766 | + state->data[2] = msg[0].len; |
767 | |
768 | - memcpy(&obuf[3], msg[0].buf, msg[0].len); |
769 | + memcpy(&state->data[3], msg[0].buf, msg[0].len); |
770 | |
771 | - if (dvb_usb_generic_rw(d, obuf, msg[0].len + 3, |
772 | - ibuf, 1, 0) < 0) |
773 | + if (dvb_usb_generic_rw(d, state->data, msg[0].len + 3, |
774 | + state->data, 1, 0) < 0) |
775 | err("i2c transfer failed."); |
776 | |
777 | } |
778 | break; |
779 | case 2: |
780 | /* always i2c read */ |
781 | - obuf[0] = 0x09; |
782 | - obuf[1] = msg[0].len; |
783 | - obuf[2] = msg[1].len; |
784 | - obuf[3] = msg[0].addr; |
785 | - memcpy(&obuf[4], msg[0].buf, msg[0].len); |
786 | - |
787 | - if (dvb_usb_generic_rw(d, obuf, msg[0].len + 4, |
788 | - ibuf, msg[1].len + 1, 0) < 0) |
789 | + state->data[0] = 0x09; |
790 | + state->data[1] = msg[0].len; |
791 | + state->data[2] = msg[1].len; |
792 | + state->data[3] = msg[0].addr; |
793 | + memcpy(&state->data[4], msg[0].buf, msg[0].len); |
794 | + |
795 | + if (dvb_usb_generic_rw(d, state->data, msg[0].len + 4, |
796 | + state->data, msg[1].len + 1, 0) < 0) |
797 | err("i2c transfer failed."); |
798 | |
799 | - memcpy(msg[1].buf, &ibuf[1], msg[1].len); |
800 | + memcpy(msg[1].buf, &state->data[1], msg[1].len); |
801 | break; |
802 | default: |
803 | warn("more than 2 i2c messages at a time is not handled yet."); |
804 | break; |
805 | } |
806 | + mutex_unlock(&d->data_mutex); |
807 | mutex_unlock(&d->i2c_mutex); |
808 | return num; |
809 | } |
810 | @@ -845,17 +856,23 @@ static int su3000_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff) |
811 | static int su3000_power_ctrl(struct dvb_usb_device *d, int i) |
812 | { |
813 | struct dw2102_state *state = (struct dw2102_state *)d->priv; |
814 | - u8 obuf[] = {0xde, 0}; |
815 | + int ret = 0; |
816 | |
817 | info("%s: %d, initialized %d", __func__, i, state->initialized); |
818 | |
819 | if (i && !state->initialized) { |
820 | + mutex_lock(&d->data_mutex); |
821 | + |
822 | + state->data[0] = 0xde; |
823 | + state->data[1] = 0; |
824 | + |
825 | state->initialized = 1; |
826 | /* reset board */ |
827 | - return dvb_usb_generic_rw(d, obuf, 2, NULL, 0, 0); |
828 | + ret = dvb_usb_generic_rw(d, state->data, 2, NULL, 0, 0); |
829 | + mutex_unlock(&d->data_mutex); |
830 | } |
831 | |
832 | - return 0; |
833 | + return ret; |
834 | } |
835 | |
836 | static int su3000_read_mac_address(struct dvb_usb_device *d, u8 mac[6]) |
837 | @@ -1310,49 +1327,57 @@ static int prof_7500_frontend_attach(struct dvb_usb_adapter *d) |
838 | return 0; |
839 | } |
840 | |
841 | -static int su3000_frontend_attach(struct dvb_usb_adapter *d) |
842 | +static int su3000_frontend_attach(struct dvb_usb_adapter *adap) |
843 | { |
844 | - u8 obuf[3] = { 0xe, 0x80, 0 }; |
845 | - u8 ibuf[] = { 0 }; |
846 | + struct dvb_usb_device *d = adap->dev; |
847 | + struct dw2102_state *state = d->priv; |
848 | + |
849 | + mutex_lock(&d->data_mutex); |
850 | + |
851 | + state->data[0] = 0xe; |
852 | + state->data[1] = 0x80; |
853 | + state->data[2] = 0; |
854 | |
855 | - if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) |
856 | + if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) |
857 | err("command 0x0e transfer failed."); |
858 | |
859 | - obuf[0] = 0xe; |
860 | - obuf[1] = 0x02; |
861 | - obuf[2] = 1; |
862 | + state->data[0] = 0xe; |
863 | + state->data[1] = 0x02; |
864 | + state->data[2] = 1; |
865 | |
866 | - if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) |
867 | + if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) |
868 | err("command 0x0e transfer failed."); |
869 | msleep(300); |
870 | |
871 | - obuf[0] = 0xe; |
872 | - obuf[1] = 0x83; |
873 | - obuf[2] = 0; |
874 | + state->data[0] = 0xe; |
875 | + state->data[1] = 0x83; |
876 | + state->data[2] = 0; |
877 | |
878 | - if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) |
879 | + if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) |
880 | err("command 0x0e transfer failed."); |
881 | |
882 | - obuf[0] = 0xe; |
883 | - obuf[1] = 0x83; |
884 | - obuf[2] = 1; |
885 | + state->data[0] = 0xe; |
886 | + state->data[1] = 0x83; |
887 | + state->data[2] = 1; |
888 | |
889 | - if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) |
890 | + if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) |
891 | err("command 0x0e transfer failed."); |
892 | |
893 | - obuf[0] = 0x51; |
894 | + state->data[0] = 0x51; |
895 | |
896 | - if (dvb_usb_generic_rw(d->dev, obuf, 1, ibuf, 1, 0) < 0) |
897 | + if (dvb_usb_generic_rw(d, state->data, 1, state->data, 1, 0) < 0) |
898 | err("command 0x51 transfer failed."); |
899 | |
900 | - d->fe_adap[0].fe = dvb_attach(ds3000_attach, &su3000_ds3000_config, |
901 | - &d->dev->i2c_adap); |
902 | - if (d->fe_adap[0].fe == NULL) |
903 | + mutex_unlock(&d->data_mutex); |
904 | + |
905 | + adap->fe_adap[0].fe = dvb_attach(ds3000_attach, &su3000_ds3000_config, |
906 | + &d->i2c_adap); |
907 | + if (adap->fe_adap[0].fe == NULL) |
908 | return -EIO; |
909 | |
910 | - if (dvb_attach(ts2020_attach, d->fe_adap[0].fe, |
911 | + if (dvb_attach(ts2020_attach, adap->fe_adap[0].fe, |
912 | &dw2104_ts2020_config, |
913 | - &d->dev->i2c_adap)) { |
914 | + &d->i2c_adap)) { |
915 | info("Attached DS3000/TS2020!"); |
916 | return 0; |
917 | } |
918 | @@ -1361,47 +1386,55 @@ static int su3000_frontend_attach(struct dvb_usb_adapter *d) |
919 | return -EIO; |
920 | } |
921 | |
922 | -static int t220_frontend_attach(struct dvb_usb_adapter *d) |
923 | +static int t220_frontend_attach(struct dvb_usb_adapter *adap) |
924 | { |
925 | - u8 obuf[3] = { 0xe, 0x87, 0 }; |
926 | - u8 ibuf[] = { 0 }; |
927 | + struct dvb_usb_device *d = adap->dev; |
928 | + struct dw2102_state *state = d->priv; |
929 | + |
930 | + mutex_lock(&d->data_mutex); |
931 | |
932 | - if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) |
933 | + state->data[0] = 0xe; |
934 | + state->data[1] = 0x87; |
935 | + state->data[2] = 0x0; |
936 | + |
937 | + if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) |
938 | err("command 0x0e transfer failed."); |
939 | |
940 | - obuf[0] = 0xe; |
941 | - obuf[1] = 0x86; |
942 | - obuf[2] = 1; |
943 | + state->data[0] = 0xe; |
944 | + state->data[1] = 0x86; |
945 | + state->data[2] = 1; |
946 | |
947 | - if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) |
948 | + if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) |
949 | err("command 0x0e transfer failed."); |
950 | |
951 | - obuf[0] = 0xe; |
952 | - obuf[1] = 0x80; |
953 | - obuf[2] = 0; |
954 | + state->data[0] = 0xe; |
955 | + state->data[1] = 0x80; |
956 | + state->data[2] = 0; |
957 | |
958 | - if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) |
959 | + if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) |
960 | err("command 0x0e transfer failed."); |
961 | |
962 | msleep(50); |
963 | |
964 | - obuf[0] = 0xe; |
965 | - obuf[1] = 0x80; |
966 | - obuf[2] = 1; |
967 | + state->data[0] = 0xe; |
968 | + state->data[1] = 0x80; |
969 | + state->data[2] = 1; |
970 | |
971 | - if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) |
972 | + if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) |
973 | err("command 0x0e transfer failed."); |
974 | |
975 | - obuf[0] = 0x51; |
976 | + state->data[0] = 0x51; |
977 | |
978 | - if (dvb_usb_generic_rw(d->dev, obuf, 1, ibuf, 1, 0) < 0) |
979 | + if (dvb_usb_generic_rw(d, state->data, 1, state->data, 1, 0) < 0) |
980 | err("command 0x51 transfer failed."); |
981 | |
982 | - d->fe_adap[0].fe = dvb_attach(cxd2820r_attach, &cxd2820r_config, |
983 | - &d->dev->i2c_adap, NULL); |
984 | - if (d->fe_adap[0].fe != NULL) { |
985 | - if (dvb_attach(tda18271_attach, d->fe_adap[0].fe, 0x60, |
986 | - &d->dev->i2c_adap, &tda18271_config)) { |
987 | + mutex_unlock(&d->data_mutex); |
988 | + |
989 | + adap->fe_adap[0].fe = dvb_attach(cxd2820r_attach, &cxd2820r_config, |
990 | + &d->i2c_adap, NULL); |
991 | + if (adap->fe_adap[0].fe != NULL) { |
992 | + if (dvb_attach(tda18271_attach, adap->fe_adap[0].fe, 0x60, |
993 | + &d->i2c_adap, &tda18271_config)) { |
994 | info("Attached TDA18271HD/CXD2820R!"); |
995 | return 0; |
996 | } |
997 | @@ -1411,23 +1444,30 @@ static int t220_frontend_attach(struct dvb_usb_adapter *d) |
998 | return -EIO; |
999 | } |
1000 | |
1001 | -static int m88rs2000_frontend_attach(struct dvb_usb_adapter *d) |
1002 | +static int m88rs2000_frontend_attach(struct dvb_usb_adapter *adap) |
1003 | { |
1004 | - u8 obuf[] = { 0x51 }; |
1005 | - u8 ibuf[] = { 0 }; |
1006 | + struct dvb_usb_device *d = adap->dev; |
1007 | + struct dw2102_state *state = d->priv; |
1008 | + |
1009 | + mutex_lock(&d->data_mutex); |
1010 | |
1011 | - if (dvb_usb_generic_rw(d->dev, obuf, 1, ibuf, 1, 0) < 0) |
1012 | + state->data[0] = 0x51; |
1013 | + |
1014 | + if (dvb_usb_generic_rw(d, state->data, 1, state->data, 1, 0) < 0) |
1015 | err("command 0x51 transfer failed."); |
1016 | |
1017 | - d->fe_adap[0].fe = dvb_attach(m88rs2000_attach, &s421_m88rs2000_config, |
1018 | - &d->dev->i2c_adap); |
1019 | + mutex_unlock(&d->data_mutex); |
1020 | |
1021 | - if (d->fe_adap[0].fe == NULL) |
1022 | + adap->fe_adap[0].fe = dvb_attach(m88rs2000_attach, |
1023 | + &s421_m88rs2000_config, |
1024 | + &d->i2c_adap); |
1025 | + |
1026 | + if (adap->fe_adap[0].fe == NULL) |
1027 | return -EIO; |
1028 | |
1029 | - if (dvb_attach(ts2020_attach, d->fe_adap[0].fe, |
1030 | + if (dvb_attach(ts2020_attach, adap->fe_adap[0].fe, |
1031 | &dw2104_ts2020_config, |
1032 | - &d->dev->i2c_adap)) { |
1033 | + &d->i2c_adap)) { |
1034 | info("Attached RS2000/TS2020!"); |
1035 | return 0; |
1036 | } |
1037 | @@ -1440,44 +1480,50 @@ static int tt_s2_4600_frontend_attach(struct dvb_usb_adapter *adap) |
1038 | { |
1039 | struct dvb_usb_device *d = adap->dev; |
1040 | struct dw2102_state *state = d->priv; |
1041 | - u8 obuf[3] = { 0xe, 0x80, 0 }; |
1042 | - u8 ibuf[] = { 0 }; |
1043 | struct i2c_adapter *i2c_adapter; |
1044 | struct i2c_client *client; |
1045 | struct i2c_board_info board_info; |
1046 | struct m88ds3103_platform_data m88ds3103_pdata = {}; |
1047 | struct ts2020_config ts2020_config = {}; |
1048 | |
1049 | - if (dvb_usb_generic_rw(d, obuf, 3, ibuf, 1, 0) < 0) |
1050 | + mutex_lock(&d->data_mutex); |
1051 | + |
1052 | + state->data[0] = 0xe; |
1053 | + state->data[1] = 0x80; |
1054 | + state->data[2] = 0x0; |
1055 | + |
1056 | + if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) |
1057 | err("command 0x0e transfer failed."); |
1058 | |
1059 | - obuf[0] = 0xe; |
1060 | - obuf[1] = 0x02; |
1061 | - obuf[2] = 1; |
1062 | + state->data[0] = 0xe; |
1063 | + state->data[1] = 0x02; |
1064 | + state->data[2] = 1; |
1065 | |
1066 | - if (dvb_usb_generic_rw(d, obuf, 3, ibuf, 1, 0) < 0) |
1067 | + if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) |
1068 | err("command 0x0e transfer failed."); |
1069 | msleep(300); |
1070 | |
1071 | - obuf[0] = 0xe; |
1072 | - obuf[1] = 0x83; |
1073 | - obuf[2] = 0; |
1074 | + state->data[0] = 0xe; |
1075 | + state->data[1] = 0x83; |
1076 | + state->data[2] = 0; |
1077 | |
1078 | - if (dvb_usb_generic_rw(d, obuf, 3, ibuf, 1, 0) < 0) |
1079 | + if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) |
1080 | err("command 0x0e transfer failed."); |
1081 | |
1082 | - obuf[0] = 0xe; |
1083 | - obuf[1] = 0x83; |
1084 | - obuf[2] = 1; |
1085 | + state->data[0] = 0xe; |
1086 | + state->data[1] = 0x83; |
1087 | + state->data[2] = 1; |
1088 | |
1089 | - if (dvb_usb_generic_rw(d, obuf, 3, ibuf, 1, 0) < 0) |
1090 | + if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) |
1091 | err("command 0x0e transfer failed."); |
1092 | |
1093 | - obuf[0] = 0x51; |
1094 | + state->data[0] = 0x51; |
1095 | |
1096 | - if (dvb_usb_generic_rw(d, obuf, 1, ibuf, 1, 0) < 0) |
1097 | + if (dvb_usb_generic_rw(d, state->data, 1, state->data, 1, 0) < 0) |
1098 | err("command 0x51 transfer failed."); |
1099 | |
1100 | + mutex_unlock(&d->data_mutex); |
1101 | + |
1102 | /* attach demod */ |
1103 | m88ds3103_pdata.clk = 27000000; |
1104 | m88ds3103_pdata.i2c_wr_max = 33; |
1105 | diff --git a/drivers/mtd/maps/pmcmsp-flash.c b/drivers/mtd/maps/pmcmsp-flash.c |
1106 | index f9fa3fad728e..2051f28ddac6 100644 |
1107 | --- a/drivers/mtd/maps/pmcmsp-flash.c |
1108 | +++ b/drivers/mtd/maps/pmcmsp-flash.c |
1109 | @@ -139,15 +139,13 @@ static int __init init_msp_flash(void) |
1110 | } |
1111 | |
1112 | msp_maps[i].bankwidth = 1; |
1113 | - msp_maps[i].name = kmalloc(7, GFP_KERNEL); |
1114 | + msp_maps[i].name = kstrndup(flash_name, 7, GFP_KERNEL); |
1115 | if (!msp_maps[i].name) { |
1116 | iounmap(msp_maps[i].virt); |
1117 | kfree(msp_parts[i]); |
1118 | goto cleanup_loop; |
1119 | } |
1120 | |
1121 | - msp_maps[i].name = strncpy(msp_maps[i].name, flash_name, 7); |
1122 | - |
1123 | for (j = 0; j < pcnt; j++) { |
1124 | part_name[5] = '0' + i; |
1125 | part_name[7] = '0' + j; |
1126 | diff --git a/drivers/net/ethernet/broadcom/bcm63xx_enet.c b/drivers/net/ethernet/broadcom/bcm63xx_enet.c |
1127 | index 537090952c45..08d91efceed0 100644 |
1128 | --- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c |
1129 | +++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c |
1130 | @@ -913,6 +913,8 @@ static int bcm_enet_open(struct net_device *dev) |
1131 | priv->old_link = 0; |
1132 | priv->old_duplex = -1; |
1133 | priv->old_pause = -1; |
1134 | + } else { |
1135 | + phydev = NULL; |
1136 | } |
1137 | |
1138 | /* mask all interrupts and request them */ |
1139 | @@ -1083,7 +1085,7 @@ static int bcm_enet_open(struct net_device *dev) |
1140 | enet_dmac_writel(priv, priv->dma_chan_int_mask, |
1141 | ENETDMAC_IRMASK, priv->tx_chan); |
1142 | |
1143 | - if (priv->has_phy) |
1144 | + if (phydev) |
1145 | phy_start(phydev); |
1146 | else |
1147 | bcm_enet_adjust_link(dev); |
1148 | @@ -1126,7 +1128,7 @@ static int bcm_enet_open(struct net_device *dev) |
1149 | free_irq(dev->irq, dev); |
1150 | |
1151 | out_phy_disconnect: |
1152 | - if (priv->has_phy) |
1153 | + if (phydev) |
1154 | phy_disconnect(phydev); |
1155 | |
1156 | return ret; |
1157 | diff --git a/drivers/net/ethernet/ti/cpmac.c b/drivers/net/ethernet/ti/cpmac.c |
1158 | index 28097be2ff28..5127b7e48fcb 100644 |
1159 | --- a/drivers/net/ethernet/ti/cpmac.c |
1160 | +++ b/drivers/net/ethernet/ti/cpmac.c |
1161 | @@ -1211,7 +1211,7 @@ int cpmac_init(void) |
1162 | goto fail_alloc; |
1163 | } |
1164 | |
1165 | -#warning FIXME: unhardcode gpio&reset bits |
1166 | + /* FIXME: unhardcode gpio&reset bits */ |
1167 | ar7_gpio_disable(26); |
1168 | ar7_gpio_disable(27); |
1169 | ar7_device_reset(AR7_RESET_BIT_CPMAC_LO); |
1170 | diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c |
1171 | index 3a035e073889..087a218a875f 100644 |
1172 | --- a/drivers/pci/quirks.c |
1173 | +++ b/drivers/pci/quirks.c |
1174 | @@ -2173,6 +2173,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_LSI_LOGIC, 0x005d, quirk_blacklist_vpd); |
1175 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_LSI_LOGIC, 0x005f, quirk_blacklist_vpd); |
1176 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC, PCI_ANY_ID, |
1177 | quirk_blacklist_vpd); |
1178 | +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_QLOGIC, 0x2261, quirk_blacklist_vpd); |
1179 | |
1180 | /* |
1181 | * For Broadcom 5706, 5708, 5709 rev. A nics, any read beyond the |
1182 | diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c |
1183 | index f44615fa474d..3e2ef4fd7382 100644 |
1184 | --- a/drivers/tty/serial/samsung.c |
1185 | +++ b/drivers/tty/serial/samsung.c |
1186 | @@ -1036,8 +1036,10 @@ static int s3c64xx_serial_startup(struct uart_port *port) |
1187 | if (ourport->dma) { |
1188 | ret = s3c24xx_serial_request_dma(ourport); |
1189 | if (ret < 0) { |
1190 | - dev_warn(port->dev, "DMA request failed\n"); |
1191 | - return ret; |
1192 | + dev_warn(port->dev, |
1193 | + "DMA request failed, DMA will not be used\n"); |
1194 | + devm_kfree(port->dev, ourport->dma); |
1195 | + ourport->dma = NULL; |
1196 | } |
1197 | } |
1198 | |
1199 | diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c |
1200 | index 29e80cc9b634..5dd1832564c7 100644 |
1201 | --- a/drivers/usb/dwc3/dwc3-omap.c |
1202 | +++ b/drivers/usb/dwc3/dwc3-omap.c |
1203 | @@ -249,6 +249,7 @@ static void dwc3_omap_set_mailbox(struct dwc3_omap *omap, |
1204 | val = dwc3_omap_read_utmi_ctrl(omap); |
1205 | val |= USBOTGSS_UTMI_OTG_CTRL_IDDIG; |
1206 | dwc3_omap_write_utmi_ctrl(omap, val); |
1207 | + break; |
1208 | |
1209 | case OMAP_DWC3_VBUS_OFF: |
1210 | val = dwc3_omap_read_utmi_ctrl(omap); |
1211 | diff --git a/drivers/usb/dwc3/gadget.h b/drivers/usb/dwc3/gadget.h |
1212 | index e4a1d974a5ae..39459b718e98 100644 |
1213 | --- a/drivers/usb/dwc3/gadget.h |
1214 | +++ b/drivers/usb/dwc3/gadget.h |
1215 | @@ -28,23 +28,23 @@ struct dwc3; |
1216 | #define gadget_to_dwc(g) (container_of(g, struct dwc3, gadget)) |
1217 | |
1218 | /* DEPCFG parameter 1 */ |
1219 | -#define DWC3_DEPCFG_INT_NUM(n) ((n) << 0) |
1220 | +#define DWC3_DEPCFG_INT_NUM(n) (((n) & 0x1f) << 0) |
1221 | #define DWC3_DEPCFG_XFER_COMPLETE_EN (1 << 8) |
1222 | #define DWC3_DEPCFG_XFER_IN_PROGRESS_EN (1 << 9) |
1223 | #define DWC3_DEPCFG_XFER_NOT_READY_EN (1 << 10) |
1224 | #define DWC3_DEPCFG_FIFO_ERROR_EN (1 << 11) |
1225 | #define DWC3_DEPCFG_STREAM_EVENT_EN (1 << 13) |
1226 | -#define DWC3_DEPCFG_BINTERVAL_M1(n) ((n) << 16) |
1227 | +#define DWC3_DEPCFG_BINTERVAL_M1(n) (((n) & 0xff) << 16) |
1228 | #define DWC3_DEPCFG_STREAM_CAPABLE (1 << 24) |
1229 | -#define DWC3_DEPCFG_EP_NUMBER(n) ((n) << 25) |
1230 | +#define DWC3_DEPCFG_EP_NUMBER(n) (((n) & 0x1f) << 25) |
1231 | #define DWC3_DEPCFG_BULK_BASED (1 << 30) |
1232 | #define DWC3_DEPCFG_FIFO_BASED (1 << 31) |
1233 | |
1234 | /* DEPCFG parameter 0 */ |
1235 | -#define DWC3_DEPCFG_EP_TYPE(n) ((n) << 1) |
1236 | -#define DWC3_DEPCFG_MAX_PACKET_SIZE(n) ((n) << 3) |
1237 | -#define DWC3_DEPCFG_FIFO_NUMBER(n) ((n) << 17) |
1238 | -#define DWC3_DEPCFG_BURST_SIZE(n) ((n) << 22) |
1239 | +#define DWC3_DEPCFG_EP_TYPE(n) (((n) & 0x3) << 1) |
1240 | +#define DWC3_DEPCFG_MAX_PACKET_SIZE(n) (((n) & 0x7ff) << 3) |
1241 | +#define DWC3_DEPCFG_FIFO_NUMBER(n) (((n) & 0x1f) << 17) |
1242 | +#define DWC3_DEPCFG_BURST_SIZE(n) (((n) & 0xf) << 22) |
1243 | #define DWC3_DEPCFG_DATA_SEQ_NUM(n) ((n) << 26) |
1244 | /* This applies for core versions earlier than 1.94a */ |
1245 | #define DWC3_DEPCFG_IGN_SEQ_NUM (1 << 31) |
1246 | diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c |
1247 | index 8d412d8b1f29..89081b834615 100644 |
1248 | --- a/drivers/usb/gadget/function/f_fs.c |
1249 | +++ b/drivers/usb/gadget/function/f_fs.c |
1250 | @@ -1833,11 +1833,14 @@ static int ffs_func_eps_enable(struct ffs_function *func) |
1251 | spin_lock_irqsave(&func->ffs->eps_lock, flags); |
1252 | do { |
1253 | struct usb_endpoint_descriptor *ds; |
1254 | + struct usb_ss_ep_comp_descriptor *comp_desc = NULL; |
1255 | + int needs_comp_desc = false; |
1256 | int desc_idx; |
1257 | |
1258 | - if (ffs->gadget->speed == USB_SPEED_SUPER) |
1259 | + if (ffs->gadget->speed == USB_SPEED_SUPER) { |
1260 | desc_idx = 2; |
1261 | - else if (ffs->gadget->speed == USB_SPEED_HIGH) |
1262 | + needs_comp_desc = true; |
1263 | + } else if (ffs->gadget->speed == USB_SPEED_HIGH) |
1264 | desc_idx = 1; |
1265 | else |
1266 | desc_idx = 0; |
1267 | @@ -1854,6 +1857,14 @@ static int ffs_func_eps_enable(struct ffs_function *func) |
1268 | |
1269 | ep->ep->driver_data = ep; |
1270 | ep->ep->desc = ds; |
1271 | + |
1272 | + comp_desc = (struct usb_ss_ep_comp_descriptor *)(ds + |
1273 | + USB_DT_ENDPOINT_SIZE); |
1274 | + ep->ep->maxburst = comp_desc->bMaxBurst + 1; |
1275 | + |
1276 | + if (needs_comp_desc) |
1277 | + ep->ep->comp_desc = comp_desc; |
1278 | + |
1279 | ret = usb_ep_enable(ep->ep); |
1280 | if (likely(!ret)) { |
1281 | epfile->ep = ep; |
1282 | diff --git a/drivers/usb/gadget/function/f_uvc.c b/drivers/usb/gadget/function/f_uvc.c |
1283 | index 27ed51b5082f..29b41b5dee04 100644 |
1284 | --- a/drivers/usb/gadget/function/f_uvc.c |
1285 | +++ b/drivers/usb/gadget/function/f_uvc.c |
1286 | @@ -258,13 +258,6 @@ uvc_function_setup(struct usb_function *f, const struct usb_ctrlrequest *ctrl) |
1287 | memcpy(&uvc_event->req, ctrl, sizeof(uvc_event->req)); |
1288 | v4l2_event_queue(&uvc->vdev, &v4l2_event); |
1289 | |
1290 | - /* Pass additional setup data to userspace */ |
1291 | - if (uvc->event_setup_out && uvc->event_length) { |
1292 | - uvc->control_req->length = uvc->event_length; |
1293 | - return usb_ep_queue(uvc->func.config->cdev->gadget->ep0, |
1294 | - uvc->control_req, GFP_ATOMIC); |
1295 | - } |
1296 | - |
1297 | return 0; |
1298 | } |
1299 | |
1300 | diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c |
1301 | index a81d9ab861dc..4fa5de2eb501 100644 |
1302 | --- a/drivers/usb/gadget/udc/dummy_hcd.c |
1303 | +++ b/drivers/usb/gadget/udc/dummy_hcd.c |
1304 | @@ -1031,6 +1031,8 @@ static int dummy_udc_probe(struct platform_device *pdev) |
1305 | int rc; |
1306 | |
1307 | dum = *((void **)dev_get_platdata(&pdev->dev)); |
1308 | + /* Clear usb_gadget region for new registration to udc-core */ |
1309 | + memzero_explicit(&dum->gadget, sizeof(struct usb_gadget)); |
1310 | dum->gadget.name = gadget_name; |
1311 | dum->gadget.ops = &dummy_ops; |
1312 | dum->gadget.max_speed = USB_SPEED_SUPER; |
1313 | diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c |
1314 | index b38a228134df..af0566da77e7 100644 |
1315 | --- a/drivers/usb/host/ohci-at91.c |
1316 | +++ b/drivers/usb/host/ohci-at91.c |
1317 | @@ -361,7 +361,7 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, |
1318 | |
1319 | case USB_PORT_FEAT_SUSPEND: |
1320 | dev_dbg(hcd->self.controller, "SetPortFeat: SUSPEND\n"); |
1321 | - if (valid_port(wIndex)) { |
1322 | + if (valid_port(wIndex) && ohci_at91->sfr_regmap) { |
1323 | ohci_at91_port_suspend(ohci_at91->sfr_regmap, |
1324 | 1); |
1325 | return 0; |
1326 | @@ -404,7 +404,7 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, |
1327 | |
1328 | case USB_PORT_FEAT_SUSPEND: |
1329 | dev_dbg(hcd->self.controller, "ClearPortFeature: SUSPEND\n"); |
1330 | - if (valid_port(wIndex)) { |
1331 | + if (valid_port(wIndex) && ohci_at91->sfr_regmap) { |
1332 | ohci_at91_port_suspend(ohci_at91->sfr_regmap, |
1333 | 0); |
1334 | return 0; |
1335 | diff --git a/drivers/usb/host/xhci-dbg.c b/drivers/usb/host/xhci-dbg.c |
1336 | index 74c42f722678..3425154baf8b 100644 |
1337 | --- a/drivers/usb/host/xhci-dbg.c |
1338 | +++ b/drivers/usb/host/xhci-dbg.c |
1339 | @@ -111,7 +111,7 @@ static void xhci_print_cap_regs(struct xhci_hcd *xhci) |
1340 | xhci_dbg(xhci, "RTSOFF 0x%x:\n", temp & RTSOFF_MASK); |
1341 | |
1342 | /* xhci 1.1 controllers have the HCCPARAMS2 register */ |
1343 | - if (hci_version > 100) { |
1344 | + if (hci_version > 0x100) { |
1345 | temp = readl(&xhci->cap_regs->hcc_params2); |
1346 | xhci_dbg(xhci, "HCC PARAMS2 0x%x:\n", (unsigned int) temp); |
1347 | xhci_dbg(xhci, " HC %s Force save context capability", |
1348 | diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c |
1349 | index abe360684f0b..5895e84f9dcc 100644 |
1350 | --- a/drivers/usb/host/xhci-plat.c |
1351 | +++ b/drivers/usb/host/xhci-plat.c |
1352 | @@ -274,6 +274,8 @@ static int xhci_plat_remove(struct platform_device *dev) |
1353 | struct xhci_hcd *xhci = hcd_to_xhci(hcd); |
1354 | struct clk *clk = xhci->clk; |
1355 | |
1356 | + xhci->xhc_state |= XHCI_STATE_REMOVING; |
1357 | + |
1358 | usb_remove_hcd(xhci->shared_hcd); |
1359 | usb_phy_shutdown(hcd->usb_phy); |
1360 | |
1361 | diff --git a/drivers/usb/misc/iowarrior.c b/drivers/usb/misc/iowarrior.c |
1362 | index 095778ff984d..37c63cb39714 100644 |
1363 | --- a/drivers/usb/misc/iowarrior.c |
1364 | +++ b/drivers/usb/misc/iowarrior.c |
1365 | @@ -781,12 +781,6 @@ static int iowarrior_probe(struct usb_interface *interface, |
1366 | iface_desc = interface->cur_altsetting; |
1367 | dev->product_id = le16_to_cpu(udev->descriptor.idProduct); |
1368 | |
1369 | - if (iface_desc->desc.bNumEndpoints < 1) { |
1370 | - dev_err(&interface->dev, "Invalid number of endpoints\n"); |
1371 | - retval = -EINVAL; |
1372 | - goto error; |
1373 | - } |
1374 | - |
1375 | /* set up the endpoint information */ |
1376 | for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { |
1377 | endpoint = &iface_desc->endpoint[i].desc; |
1378 | @@ -797,6 +791,21 @@ static int iowarrior_probe(struct usb_interface *interface, |
1379 | /* this one will match for the IOWarrior56 only */ |
1380 | dev->int_out_endpoint = endpoint; |
1381 | } |
1382 | + |
1383 | + if (!dev->int_in_endpoint) { |
1384 | + dev_err(&interface->dev, "no interrupt-in endpoint found\n"); |
1385 | + retval = -ENODEV; |
1386 | + goto error; |
1387 | + } |
1388 | + |
1389 | + if (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56) { |
1390 | + if (!dev->int_out_endpoint) { |
1391 | + dev_err(&interface->dev, "no interrupt-out endpoint found\n"); |
1392 | + retval = -ENODEV; |
1393 | + goto error; |
1394 | + } |
1395 | + } |
1396 | + |
1397 | /* we have to check the report_size often, so remember it in the endianness suitable for our machine */ |
1398 | dev->report_size = usb_endpoint_maxp(dev->int_in_endpoint); |
1399 | if ((dev->interface->cur_altsetting->desc.bInterfaceNumber == 0) && |
1400 | diff --git a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c |
1401 | index 6a1df9e824ca..30bf0f5db82d 100644 |
1402 | --- a/drivers/usb/serial/digi_acceleport.c |
1403 | +++ b/drivers/usb/serial/digi_acceleport.c |
1404 | @@ -1482,16 +1482,20 @@ static int digi_read_oob_callback(struct urb *urb) |
1405 | struct usb_serial *serial = port->serial; |
1406 | struct tty_struct *tty; |
1407 | struct digi_port *priv = usb_get_serial_port_data(port); |
1408 | + unsigned char *buf = urb->transfer_buffer; |
1409 | int opcode, line, status, val; |
1410 | int i; |
1411 | unsigned int rts; |
1412 | |
1413 | + if (urb->actual_length < 4) |
1414 | + return -1; |
1415 | + |
1416 | /* handle each oob command */ |
1417 | - for (i = 0; i < urb->actual_length - 3;) { |
1418 | - opcode = ((unsigned char *)urb->transfer_buffer)[i++]; |
1419 | - line = ((unsigned char *)urb->transfer_buffer)[i++]; |
1420 | - status = ((unsigned char *)urb->transfer_buffer)[i++]; |
1421 | - val = ((unsigned char *)urb->transfer_buffer)[i++]; |
1422 | + for (i = 0; i < urb->actual_length - 3; i += 4) { |
1423 | + opcode = buf[i]; |
1424 | + line = buf[i + 1]; |
1425 | + status = buf[i + 2]; |
1426 | + val = buf[i + 3]; |
1427 | |
1428 | dev_dbg(&port->dev, "digi_read_oob_callback: opcode=%d, line=%d, status=%d, val=%d\n", |
1429 | opcode, line, status, val); |
1430 | diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c |
1431 | index c02808a30436..f1a8fdcd8674 100644 |
1432 | --- a/drivers/usb/serial/io_ti.c |
1433 | +++ b/drivers/usb/serial/io_ti.c |
1434 | @@ -1674,6 +1674,12 @@ static void edge_interrupt_callback(struct urb *urb) |
1435 | function = TIUMP_GET_FUNC_FROM_CODE(data[0]); |
1436 | dev_dbg(dev, "%s - port_number %d, function %d, info 0x%x\n", __func__, |
1437 | port_number, function, data[1]); |
1438 | + |
1439 | + if (port_number >= edge_serial->serial->num_ports) { |
1440 | + dev_err(dev, "bad port number %d\n", port_number); |
1441 | + goto exit; |
1442 | + } |
1443 | + |
1444 | port = edge_serial->serial->port[port_number]; |
1445 | edge_port = usb_get_serial_port_data(port); |
1446 | if (!edge_port) { |
1447 | @@ -1755,7 +1761,7 @@ static void edge_bulk_in_callback(struct urb *urb) |
1448 | |
1449 | port_number = edge_port->port->port_number; |
1450 | |
1451 | - if (edge_port->lsr_event) { |
1452 | + if (urb->actual_length > 0 && edge_port->lsr_event) { |
1453 | edge_port->lsr_event = 0; |
1454 | dev_dbg(dev, "%s ===== Port %u LSR Status = %02x, Data = %02x ======\n", |
1455 | __func__, port_number, edge_port->lsr_mask, *data); |
1456 | diff --git a/drivers/usb/serial/omninet.c b/drivers/usb/serial/omninet.c |
1457 | index a180b17d2432..76564b3bebb9 100644 |
1458 | --- a/drivers/usb/serial/omninet.c |
1459 | +++ b/drivers/usb/serial/omninet.c |
1460 | @@ -142,12 +142,6 @@ static int omninet_port_remove(struct usb_serial_port *port) |
1461 | |
1462 | static int omninet_open(struct tty_struct *tty, struct usb_serial_port *port) |
1463 | { |
1464 | - struct usb_serial *serial = port->serial; |
1465 | - struct usb_serial_port *wport; |
1466 | - |
1467 | - wport = serial->port[1]; |
1468 | - tty_port_tty_set(&wport->port, tty); |
1469 | - |
1470 | return usb_serial_generic_open(tty, port); |
1471 | } |
1472 | |
1473 | diff --git a/drivers/usb/serial/safe_serial.c b/drivers/usb/serial/safe_serial.c |
1474 | index 93c6c9b08daa..8a069aa154ed 100644 |
1475 | --- a/drivers/usb/serial/safe_serial.c |
1476 | +++ b/drivers/usb/serial/safe_serial.c |
1477 | @@ -200,6 +200,11 @@ static void safe_process_read_urb(struct urb *urb) |
1478 | if (!safe) |
1479 | goto out; |
1480 | |
1481 | + if (length < 2) { |
1482 | + dev_err(&port->dev, "malformed packet\n"); |
1483 | + return; |
1484 | + } |
1485 | + |
1486 | fcs = fcs_compute10(data, length, CRC10_INITFCS); |
1487 | if (fcs) { |
1488 | dev_err(&port->dev, "%s - bad CRC %x\n", __func__, fcs); |
1489 | diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c |
1490 | index 1d4f5faa04b5..dc9d64ac5969 100644 |
1491 | --- a/fs/ext4/inode.c |
1492 | +++ b/fs/ext4/inode.c |
1493 | @@ -3824,6 +3824,10 @@ static int ext4_block_truncate_page(handle_t *handle, |
1494 | unsigned blocksize; |
1495 | struct inode *inode = mapping->host; |
1496 | |
1497 | + /* If we are processing an encrypted inode during orphan list handling */ |
1498 | + if (ext4_encrypted_inode(inode) && !fscrypt_has_encryption_key(inode)) |
1499 | + return 0; |
1500 | + |
1501 | blocksize = inode->i_sb->s_blocksize; |
1502 | length = blocksize - (offset & (blocksize - 1)); |
1503 | |
1504 | diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h |
1505 | index eb209d4523f5..dc797739f164 100644 |
1506 | --- a/include/linux/user_namespace.h |
1507 | +++ b/include/linux/user_namespace.h |
1508 | @@ -65,7 +65,7 @@ struct ucounts { |
1509 | struct hlist_node node; |
1510 | struct user_namespace *ns; |
1511 | kuid_t uid; |
1512 | - atomic_t count; |
1513 | + int count; |
1514 | atomic_t ucount[UCOUNT_COUNTS]; |
1515 | }; |
1516 | |
1517 | diff --git a/include/trace/events/syscalls.h b/include/trace/events/syscalls.h |
1518 | index 14e49c798135..b35533b94277 100644 |
1519 | --- a/include/trace/events/syscalls.h |
1520 | +++ b/include/trace/events/syscalls.h |
1521 | @@ -1,5 +1,6 @@ |
1522 | #undef TRACE_SYSTEM |
1523 | #define TRACE_SYSTEM raw_syscalls |
1524 | +#undef TRACE_INCLUDE_FILE |
1525 | #define TRACE_INCLUDE_FILE syscalls |
1526 | |
1527 | #if !defined(_TRACE_EVENTS_SYSCALLS_H) || defined(TRACE_HEADER_MULTI_READ) |
1528 | diff --git a/kernel/ucount.c b/kernel/ucount.c |
1529 | index 4bbd38ec3788..f4ac18509ecf 100644 |
1530 | --- a/kernel/ucount.c |
1531 | +++ b/kernel/ucount.c |
1532 | @@ -139,7 +139,7 @@ static struct ucounts *get_ucounts(struct user_namespace *ns, kuid_t uid) |
1533 | |
1534 | new->ns = ns; |
1535 | new->uid = uid; |
1536 | - atomic_set(&new->count, 0); |
1537 | + new->count = 0; |
1538 | |
1539 | spin_lock_irq(&ucounts_lock); |
1540 | ucounts = find_ucounts(ns, uid, hashent); |
1541 | @@ -150,8 +150,10 @@ static struct ucounts *get_ucounts(struct user_namespace *ns, kuid_t uid) |
1542 | ucounts = new; |
1543 | } |
1544 | } |
1545 | - if (!atomic_add_unless(&ucounts->count, 1, INT_MAX)) |
1546 | + if (ucounts->count == INT_MAX) |
1547 | ucounts = NULL; |
1548 | + else |
1549 | + ucounts->count += 1; |
1550 | spin_unlock_irq(&ucounts_lock); |
1551 | return ucounts; |
1552 | } |
1553 | @@ -160,13 +162,15 @@ static void put_ucounts(struct ucounts *ucounts) |
1554 | { |
1555 | unsigned long flags; |
1556 | |
1557 | - if (atomic_dec_and_test(&ucounts->count)) { |
1558 | - spin_lock_irqsave(&ucounts_lock, flags); |
1559 | + spin_lock_irqsave(&ucounts_lock, flags); |
1560 | + ucounts->count -= 1; |
1561 | + if (!ucounts->count) |
1562 | hlist_del_init(&ucounts->node); |
1563 | - spin_unlock_irqrestore(&ucounts_lock, flags); |
1564 | + else |
1565 | + ucounts = NULL; |
1566 | + spin_unlock_irqrestore(&ucounts_lock, flags); |
1567 | |
1568 | - kfree(ucounts); |
1569 | - } |
1570 | + kfree(ucounts); |
1571 | } |
1572 | |
1573 | static inline bool atomic_inc_below(atomic_t *v, int u) |
1574 | diff --git a/virt/kvm/arm/vgic/vgic-mmio.c b/virt/kvm/arm/vgic/vgic-mmio.c |
1575 | index ebe1b9fa3c4d..85814d1bad11 100644 |
1576 | --- a/virt/kvm/arm/vgic/vgic-mmio.c |
1577 | +++ b/virt/kvm/arm/vgic/vgic-mmio.c |
1578 | @@ -187,21 +187,37 @@ unsigned long vgic_mmio_read_active(struct kvm_vcpu *vcpu, |
1579 | static void vgic_mmio_change_active(struct kvm_vcpu *vcpu, struct vgic_irq *irq, |
1580 | bool new_active_state) |
1581 | { |
1582 | + struct kvm_vcpu *requester_vcpu; |
1583 | spin_lock(&irq->irq_lock); |
1584 | + |
1585 | + /* |
1586 | + * The vcpu parameter here can mean multiple things depending on how |
1587 | + * this function is called; when handling a trap from the kernel it |
1588 | + * depends on the GIC version, and these functions are also called as |
1589 | + * part of save/restore from userspace. |
1590 | + * |
1591 | + * Therefore, we have to figure out the requester in a reliable way. |
1592 | + * |
1593 | + * When accessing VGIC state from user space, the requester_vcpu is |
1594 | + * NULL, which is fine, because we guarantee that no VCPUs are running |
1595 | + * when accessing VGIC state from user space so irq->vcpu->cpu is |
1596 | + * always -1. |
1597 | + */ |
1598 | + requester_vcpu = kvm_arm_get_running_vcpu(); |
1599 | + |
1600 | /* |
1601 | * If this virtual IRQ was written into a list register, we |
1602 | * have to make sure the CPU that runs the VCPU thread has |
1603 | - * synced back LR state to the struct vgic_irq. We can only |
1604 | - * know this for sure, when either this irq is not assigned to |
1605 | - * anyone's AP list anymore, or the VCPU thread is not |
1606 | - * running on any CPUs. |
1607 | + * synced back the LR state to the struct vgic_irq. |
1608 | * |
1609 | - * In the opposite case, we know the VCPU thread may be on its |
1610 | - * way back from the guest and still has to sync back this |
1611 | - * IRQ, so we release and re-acquire the spin_lock to let the |
1612 | - * other thread sync back the IRQ. |
1613 | + * As long as the conditions below are true, we know the VCPU thread |
1614 | + * may be on its way back from the guest (we kicked the VCPU thread in |
1615 | + * vgic_change_active_prepare) and still has to sync back this IRQ, |
1616 | + * so we release and re-acquire the spin_lock to let the other thread |
1617 | + * sync back the IRQ. |
1618 | */ |
1619 | while (irq->vcpu && /* IRQ may have state in an LR somewhere */ |
1620 | + irq->vcpu != requester_vcpu && /* Current thread is not the VCPU thread */ |
1621 | irq->vcpu->cpu != -1) /* VCPU thread is running */ |
1622 | cond_resched_lock(&irq->irq_lock); |
1623 |