Annotation of /trunk/kernel-alx/patches-4.9/0115-4.9.16-all-fixes.patch
Parent Directory | Revision Log
Revision 2956 -
(hide 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 | niro | 2956 | 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 |