Magellan Linux

Contents of /trunk/kernel-magellan/patches-3.17/0100-3.17.1-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2502 - (show annotations) (download)
Thu Apr 3 04:50:39 2014 UTC (10 years, 1 month ago) by niro
File size: 38726 byte(s)
-3.17.1-magellan-r1
1 diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
2 index 10d51c2f10d7..1edd5fdc629d 100644
3 --- a/Documentation/kernel-parameters.txt
4 +++ b/Documentation/kernel-parameters.txt
5 @@ -3522,6 +3522,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
6 READ_DISC_INFO command);
7 e = NO_READ_CAPACITY_16 (don't use
8 READ_CAPACITY_16 command);
9 + f = NO_REPORT_OPCODES (don't use report opcodes
10 + command, uas only);
11 h = CAPACITY_HEURISTICS (decrease the
12 reported device capacity by one
13 sector if the number is odd);
14 @@ -3541,6 +3543,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
15 bogus residue values);
16 s = SINGLE_LUN (the device has only one
17 Logical Unit);
18 + t = NO_ATA_1X (don't allow ATA(12) and ATA(16)
19 + commands, uas only);
20 u = IGNORE_UAS (don't bind to the uas driver);
21 w = NO_WP_DETECT (don't test whether the
22 medium is write-protected).
23 diff --git a/Makefile b/Makefile
24 index b77de27e58fc..46694098725d 100644
25 --- a/Makefile
26 +++ b/Makefile
27 @@ -1,6 +1,6 @@
28 VERSION = 3
29 PATCHLEVEL = 17
30 -SUBLEVEL = 0
31 +SUBLEVEL = 1
32 EXTRAVERSION =
33 NAME = Shuffling Zombie Juror
34
35 diff --git a/arch/alpha/include/asm/Kbuild b/arch/alpha/include/asm/Kbuild
36 index e858aa0ad8af..a52cbf178c3a 100644
37 --- a/arch/alpha/include/asm/Kbuild
38 +++ b/arch/alpha/include/asm/Kbuild
39 @@ -4,6 +4,7 @@ generic-y += clkdev.h
40 generic-y += cputime.h
41 generic-y += exec.h
42 generic-y += hash.h
43 +generic-y += irq_work.h
44 generic-y += mcs_spinlock.h
45 generic-y += preempt.h
46 generic-y += scatterlist.h
47 diff --git a/arch/arc/include/asm/Kbuild b/arch/arc/include/asm/Kbuild
48 index e76fd79f32b0..b8fffc1a2ac2 100644
49 --- a/arch/arc/include/asm/Kbuild
50 +++ b/arch/arc/include/asm/Kbuild
51 @@ -18,6 +18,7 @@ generic-y += ioctl.h
52 generic-y += ioctls.h
53 generic-y += ipcbuf.h
54 generic-y += irq_regs.h
55 +generic-y += irq_work.h
56 generic-y += kmap_types.h
57 generic-y += kvm_para.h
58 generic-y += local.h
59 diff --git a/arch/arm/include/asm/irq_work.h b/arch/arm/include/asm/irq_work.h
60 new file mode 100644
61 index 000000000000..712d03e5973a
62 --- /dev/null
63 +++ b/arch/arm/include/asm/irq_work.h
64 @@ -0,0 +1,11 @@
65 +#ifndef __ASM_ARM_IRQ_WORK_H
66 +#define __ASM_ARM_IRQ_WORK_H
67 +
68 +#include <asm/smp_plat.h>
69 +
70 +static inline bool arch_irq_work_has_interrupt(void)
71 +{
72 + return is_smp();
73 +}
74 +
75 +#endif /* _ASM_ARM_IRQ_WORK_H */
76 diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
77 index 9388a3d479e1..bbe22fcb78f6 100644
78 --- a/arch/arm/kernel/smp.c
79 +++ b/arch/arm/kernel/smp.c
80 @@ -503,7 +503,7 @@ void arch_send_call_function_single_ipi(int cpu)
81 #ifdef CONFIG_IRQ_WORK
82 void arch_irq_work_raise(void)
83 {
84 - if (is_smp())
85 + if (arch_irq_work_has_interrupt())
86 smp_cross_call(cpumask_of(smp_processor_id()), IPI_IRQ_WORK);
87 }
88 #endif
89 diff --git a/arch/arm64/include/asm/Kbuild b/arch/arm64/include/asm/Kbuild
90 index 0b3fcf86e6ba..c1968475cc4e 100644
91 --- a/arch/arm64/include/asm/Kbuild
92 +++ b/arch/arm64/include/asm/Kbuild
93 @@ -9,8 +9,8 @@ generic-y += current.h
94 generic-y += delay.h
95 generic-y += div64.h
96 generic-y += dma.h
97 -generic-y += emergency-restart.h
98 generic-y += early_ioremap.h
99 +generic-y += emergency-restart.h
100 generic-y += errno.h
101 generic-y += ftrace.h
102 generic-y += hash.h
103 diff --git a/arch/arm64/include/asm/irq_work.h b/arch/arm64/include/asm/irq_work.h
104 new file mode 100644
105 index 000000000000..8e24ef3f7c82
106 --- /dev/null
107 +++ b/arch/arm64/include/asm/irq_work.h
108 @@ -0,0 +1,11 @@
109 +#ifndef __ASM_IRQ_WORK_H
110 +#define __ASM_IRQ_WORK_H
111 +
112 +#include <asm/smp.h>
113 +
114 +static inline bool arch_irq_work_has_interrupt(void)
115 +{
116 + return !!__smp_cross_call;
117 +}
118 +
119 +#endif /* __ASM_IRQ_WORK_H */
120 diff --git a/arch/arm64/include/asm/smp.h b/arch/arm64/include/asm/smp.h
121 index a498f2cd2c2a..780f82c827b6 100644
122 --- a/arch/arm64/include/asm/smp.h
123 +++ b/arch/arm64/include/asm/smp.h
124 @@ -48,6 +48,8 @@ extern void smp_init_cpus(void);
125 */
126 extern void set_smp_cross_call(void (*)(const struct cpumask *, unsigned int));
127
128 +extern void (*__smp_cross_call)(const struct cpumask *, unsigned int);
129 +
130 /*
131 * Called from the secondary holding pen, this is the secondary CPU entry point.
132 */
133 diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
134 index 474339718105..b06d1d90ee8c 100644
135 --- a/arch/arm64/kernel/smp.c
136 +++ b/arch/arm64/kernel/smp.c
137 @@ -470,7 +470,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
138 }
139 }
140
141 -static void (*__smp_cross_call)(const struct cpumask *, unsigned int);
142 +void (*__smp_cross_call)(const struct cpumask *, unsigned int);
143
144 void __init set_smp_cross_call(void (*fn)(const struct cpumask *, unsigned int))
145 {
146 diff --git a/arch/avr32/include/asm/Kbuild b/arch/avr32/include/asm/Kbuild
147 index 00a0f3ccd6eb..2a71b1cb9848 100644
148 --- a/arch/avr32/include/asm/Kbuild
149 +++ b/arch/avr32/include/asm/Kbuild
150 @@ -9,6 +9,7 @@ generic-y += exec.h
151 generic-y += futex.h
152 generic-y += hash.h
153 generic-y += irq_regs.h
154 +generic-y += irq_work.h
155 generic-y += local.h
156 generic-y += local64.h
157 generic-y += mcs_spinlock.h
158 diff --git a/arch/blackfin/include/asm/Kbuild b/arch/blackfin/include/asm/Kbuild
159 index 0d93b9a79ca9..46ed6bb9c679 100644
160 --- a/arch/blackfin/include/asm/Kbuild
161 +++ b/arch/blackfin/include/asm/Kbuild
162 @@ -15,6 +15,7 @@ generic-y += hw_irq.h
163 generic-y += ioctl.h
164 generic-y += ipcbuf.h
165 generic-y += irq_regs.h
166 +generic-y += irq_work.h
167 generic-y += kdebug.h
168 generic-y += kmap_types.h
169 generic-y += kvm_para.h
170 diff --git a/arch/c6x/include/asm/Kbuild b/arch/c6x/include/asm/Kbuild
171 index 8dbdce8421b0..e77e0c1dbe75 100644
172 --- a/arch/c6x/include/asm/Kbuild
173 +++ b/arch/c6x/include/asm/Kbuild
174 @@ -22,6 +22,7 @@ generic-y += ioctl.h
175 generic-y += ioctls.h
176 generic-y += ipcbuf.h
177 generic-y += irq_regs.h
178 +generic-y += irq_work.h
179 generic-y += kdebug.h
180 generic-y += kmap_types.h
181 generic-y += local.h
182 diff --git a/arch/cris/include/asm/Kbuild b/arch/cris/include/asm/Kbuild
183 index 31742dfadff9..802b94c4ca86 100644
184 --- a/arch/cris/include/asm/Kbuild
185 +++ b/arch/cris/include/asm/Kbuild
186 @@ -8,6 +8,7 @@ generic-y += clkdev.h
187 generic-y += cputime.h
188 generic-y += exec.h
189 generic-y += hash.h
190 +generic-y += irq_work.h
191 generic-y += kvm_para.h
192 generic-y += linkage.h
193 generic-y += mcs_spinlock.h
194 diff --git a/arch/frv/include/asm/Kbuild b/arch/frv/include/asm/Kbuild
195 index 5b73921b6e9d..3caf05cabfc5 100644
196 --- a/arch/frv/include/asm/Kbuild
197 +++ b/arch/frv/include/asm/Kbuild
198 @@ -3,6 +3,7 @@ generic-y += clkdev.h
199 generic-y += cputime.h
200 generic-y += exec.h
201 generic-y += hash.h
202 +generic-y += irq_work.h
203 generic-y += mcs_spinlock.h
204 generic-y += preempt.h
205 generic-y += scatterlist.h
206 diff --git a/arch/hexagon/include/asm/Kbuild b/arch/hexagon/include/asm/Kbuild
207 index 0e69796b58c7..5f234a5a2320 100644
208 --- a/arch/hexagon/include/asm/Kbuild
209 +++ b/arch/hexagon/include/asm/Kbuild
210 @@ -23,6 +23,7 @@ generic-y += ioctls.h
211 generic-y += iomap.h
212 generic-y += ipcbuf.h
213 generic-y += irq_regs.h
214 +generic-y += irq_work.h
215 generic-y += kdebug.h
216 generic-y += kmap_types.h
217 generic-y += local.h
218 diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild
219 index e8317d2d6c8d..747320be9d0e 100644
220 --- a/arch/ia64/include/asm/Kbuild
221 +++ b/arch/ia64/include/asm/Kbuild
222 @@ -2,6 +2,7 @@
223 generic-y += clkdev.h
224 generic-y += exec.h
225 generic-y += hash.h
226 +generic-y += irq_work.h
227 generic-y += kvm_para.h
228 generic-y += mcs_spinlock.h
229 generic-y += preempt.h
230 diff --git a/arch/m32r/include/asm/Kbuild b/arch/m32r/include/asm/Kbuild
231 index accc10a3dc78..e02448b0648b 100644
232 --- a/arch/m32r/include/asm/Kbuild
233 +++ b/arch/m32r/include/asm/Kbuild
234 @@ -3,6 +3,7 @@ generic-y += clkdev.h
235 generic-y += cputime.h
236 generic-y += exec.h
237 generic-y += hash.h
238 +generic-y += irq_work.h
239 generic-y += mcs_spinlock.h
240 generic-y += module.h
241 generic-y += preempt.h
242 diff --git a/arch/m68k/include/asm/Kbuild b/arch/m68k/include/asm/Kbuild
243 index c67c94a2d672..dbaf9f3065e8 100644
244 --- a/arch/m68k/include/asm/Kbuild
245 +++ b/arch/m68k/include/asm/Kbuild
246 @@ -11,6 +11,7 @@ generic-y += hw_irq.h
247 generic-y += ioctl.h
248 generic-y += ipcbuf.h
249 generic-y += irq_regs.h
250 +generic-y += irq_work.h
251 generic-y += kdebug.h
252 generic-y += kmap_types.h
253 generic-y += kvm_para.h
254 diff --git a/arch/metag/include/asm/Kbuild b/arch/metag/include/asm/Kbuild
255 index c29ead89a317..7b8111c8f937 100644
256 --- a/arch/metag/include/asm/Kbuild
257 +++ b/arch/metag/include/asm/Kbuild
258 @@ -19,6 +19,7 @@ generic-y += ioctl.h
259 generic-y += ioctls.h
260 generic-y += ipcbuf.h
261 generic-y += irq_regs.h
262 +generic-y += irq_work.h
263 generic-y += kdebug.h
264 generic-y += kmap_types.h
265 generic-y += kvm_para.h
266 diff --git a/arch/microblaze/include/asm/Kbuild b/arch/microblaze/include/asm/Kbuild
267 index 27a3acda6c19..448143b8cabd 100644
268 --- a/arch/microblaze/include/asm/Kbuild
269 +++ b/arch/microblaze/include/asm/Kbuild
270 @@ -5,6 +5,7 @@ generic-y += cputime.h
271 generic-y += device.h
272 generic-y += exec.h
273 generic-y += hash.h
274 +generic-y += irq_work.h
275 generic-y += mcs_spinlock.h
276 generic-y += preempt.h
277 generic-y += scatterlist.h
278 diff --git a/arch/mips/include/asm/Kbuild b/arch/mips/include/asm/Kbuild
279 index 335e5290ec75..57012ef1f51e 100644
280 --- a/arch/mips/include/asm/Kbuild
281 +++ b/arch/mips/include/asm/Kbuild
282 @@ -3,6 +3,7 @@ generic-y += cputime.h
283 generic-y += current.h
284 generic-y += emergency-restart.h
285 generic-y += hash.h
286 +generic-y += irq_work.h
287 generic-y += local64.h
288 generic-y += mcs_spinlock.h
289 generic-y += mutex.h
290 diff --git a/arch/mn10300/include/asm/Kbuild b/arch/mn10300/include/asm/Kbuild
291 index ecbd6676bd33..77eb1a68d13b 100644
292 --- a/arch/mn10300/include/asm/Kbuild
293 +++ b/arch/mn10300/include/asm/Kbuild
294 @@ -4,6 +4,7 @@ generic-y += clkdev.h
295 generic-y += cputime.h
296 generic-y += exec.h
297 generic-y += hash.h
298 +generic-y += irq_work.h
299 generic-y += mcs_spinlock.h
300 generic-y += preempt.h
301 generic-y += scatterlist.h
302 diff --git a/arch/openrisc/include/asm/Kbuild b/arch/openrisc/include/asm/Kbuild
303 index 480af0d9c2f5..89b61d7dc790 100644
304 --- a/arch/openrisc/include/asm/Kbuild
305 +++ b/arch/openrisc/include/asm/Kbuild
306 @@ -31,6 +31,7 @@ generic-y += ioctl.h
307 generic-y += ioctls.h
308 generic-y += ipcbuf.h
309 generic-y += irq_regs.h
310 +generic-y += irq_work.h
311 generic-y += kdebug.h
312 generic-y += kmap_types.h
313 generic-y += kvm_para.h
314 diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild
315 index ecf25e6678ad..ffb024b8423f 100644
316 --- a/arch/parisc/include/asm/Kbuild
317 +++ b/arch/parisc/include/asm/Kbuild
318 @@ -10,6 +10,7 @@ generic-y += exec.h
319 generic-y += hash.h
320 generic-y += hw_irq.h
321 generic-y += irq_regs.h
322 +generic-y += irq_work.h
323 generic-y += kdebug.h
324 generic-y += kvm_para.h
325 generic-y += local.h
326 diff --git a/arch/powerpc/include/asm/Kbuild b/arch/powerpc/include/asm/Kbuild
327 index 7f23f162ce9c..31e8f59aff38 100644
328 --- a/arch/powerpc/include/asm/Kbuild
329 +++ b/arch/powerpc/include/asm/Kbuild
330 @@ -1,6 +1,7 @@
331
332 generic-y += clkdev.h
333 generic-y += hash.h
334 +generic-y += irq_work.h
335 generic-y += mcs_spinlock.h
336 generic-y += preempt.h
337 generic-y += rwsem.h
338 diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild
339 index b3fea0722ff1..773f86676588 100644
340 --- a/arch/s390/include/asm/Kbuild
341 +++ b/arch/s390/include/asm/Kbuild
342 @@ -2,6 +2,7 @@
343
344 generic-y += clkdev.h
345 generic-y += hash.h
346 +generic-y += irq_work.h
347 generic-y += mcs_spinlock.h
348 generic-y += preempt.h
349 generic-y += scatterlist.h
350 diff --git a/arch/score/include/asm/Kbuild b/arch/score/include/asm/Kbuild
351 index aad209199f7e..1909d2a5b82f 100644
352 --- a/arch/score/include/asm/Kbuild
353 +++ b/arch/score/include/asm/Kbuild
354 @@ -6,6 +6,7 @@ generic-y += barrier.h
355 generic-y += clkdev.h
356 generic-y += cputime.h
357 generic-y += hash.h
358 +generic-y += irq_work.h
359 generic-y += mcs_spinlock.h
360 generic-y += preempt.h
361 generic-y += scatterlist.h
362 diff --git a/arch/sh/include/asm/Kbuild b/arch/sh/include/asm/Kbuild
363 index c19e47dacb31..5a6c9acff0d2 100644
364 --- a/arch/sh/include/asm/Kbuild
365 +++ b/arch/sh/include/asm/Kbuild
366 @@ -12,6 +12,7 @@ generic-y += hash.h
367 generic-y += ioctl.h
368 generic-y += ipcbuf.h
369 generic-y += irq_regs.h
370 +generic-y += irq_work.h
371 generic-y += kvm_para.h
372 generic-y += local.h
373 generic-y += local64.h
374 diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild
375 index cdd1b447bb6c..f5f94ce1692c 100644
376 --- a/arch/sparc/include/asm/Kbuild
377 +++ b/arch/sparc/include/asm/Kbuild
378 @@ -8,6 +8,7 @@ generic-y += emergency-restart.h
379 generic-y += exec.h
380 generic-y += hash.h
381 generic-y += irq_regs.h
382 +generic-y += irq_work.h
383 generic-y += linkage.h
384 generic-y += local.h
385 generic-y += local64.h
386 diff --git a/arch/tile/include/asm/Kbuild b/arch/tile/include/asm/Kbuild
387 index 0aa5675e7025..e6462b8a6284 100644
388 --- a/arch/tile/include/asm/Kbuild
389 +++ b/arch/tile/include/asm/Kbuild
390 @@ -17,6 +17,7 @@ generic-y += ioctl.h
391 generic-y += ioctls.h
392 generic-y += ipcbuf.h
393 generic-y += irq_regs.h
394 +generic-y += irq_work.h
395 generic-y += local.h
396 generic-y += local64.h
397 generic-y += mcs_spinlock.h
398 diff --git a/arch/um/include/asm/Kbuild b/arch/um/include/asm/Kbuild
399 index 7bd64aa2e94a..244b12c8cb39 100644
400 --- a/arch/um/include/asm/Kbuild
401 +++ b/arch/um/include/asm/Kbuild
402 @@ -14,6 +14,7 @@ generic-y += hash.h
403 generic-y += hw_irq.h
404 generic-y += io.h
405 generic-y += irq_regs.h
406 +generic-y += irq_work.h
407 generic-y += kdebug.h
408 generic-y += mcs_spinlock.h
409 generic-y += mutex.h
410 diff --git a/arch/unicore32/include/asm/Kbuild b/arch/unicore32/include/asm/Kbuild
411 index 1e5fb872a4aa..5a2bb53faa42 100644
412 --- a/arch/unicore32/include/asm/Kbuild
413 +++ b/arch/unicore32/include/asm/Kbuild
414 @@ -22,6 +22,7 @@ generic-y += ioctl.h
415 generic-y += ioctls.h
416 generic-y += ipcbuf.h
417 generic-y += irq_regs.h
418 +generic-y += irq_work.h
419 generic-y += kdebug.h
420 generic-y += kmap_types.h
421 generic-y += local.h
422 diff --git a/arch/x86/include/asm/irq_work.h b/arch/x86/include/asm/irq_work.h
423 new file mode 100644
424 index 000000000000..78162f8e248b
425 --- /dev/null
426 +++ b/arch/x86/include/asm/irq_work.h
427 @@ -0,0 +1,11 @@
428 +#ifndef _ASM_IRQ_WORK_H
429 +#define _ASM_IRQ_WORK_H
430 +
431 +#include <asm/processor.h>
432 +
433 +static inline bool arch_irq_work_has_interrupt(void)
434 +{
435 + return cpu_has_apic;
436 +}
437 +
438 +#endif /* _ASM_IRQ_WORK_H */
439 diff --git a/arch/x86/kernel/irq_work.c b/arch/x86/kernel/irq_work.c
440 index 1de84e3ab4e0..15d741ddfeeb 100644
441 --- a/arch/x86/kernel/irq_work.c
442 +++ b/arch/x86/kernel/irq_work.c
443 @@ -41,7 +41,7 @@ __visible void smp_trace_irq_work_interrupt(struct pt_regs *regs)
444 void arch_irq_work_raise(void)
445 {
446 #ifdef CONFIG_X86_LOCAL_APIC
447 - if (!cpu_has_apic)
448 + if (!arch_irq_work_has_interrupt())
449 return;
450
451 apic->send_IPI_self(IRQ_WORK_VECTOR);
452 diff --git a/arch/xtensa/include/asm/Kbuild b/arch/xtensa/include/asm/Kbuild
453 index c3d20ba6eb86..105d38922c44 100644
454 --- a/arch/xtensa/include/asm/Kbuild
455 +++ b/arch/xtensa/include/asm/Kbuild
456 @@ -12,6 +12,7 @@ generic-y += hardirq.h
457 generic-y += hash.h
458 generic-y += ioctl.h
459 generic-y += irq_regs.h
460 +generic-y += irq_work.h
461 generic-y += kdebug.h
462 generic-y += kmap_types.h
463 generic-y += kvm_para.h
464 diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
465 index f3e7b9f894cd..6f674906c64c 100644
466 --- a/drivers/ata/libata-core.c
467 +++ b/drivers/ata/libata-core.c
468 @@ -4261,10 +4261,10 @@ static unsigned long ata_dev_blacklisted(const struct ata_device *dev)
469 ata_id_c_string(dev->id, model_rev, ATA_ID_FW_REV, sizeof(model_rev));
470
471 while (ad->model_num) {
472 - if (glob_match(model_num, ad->model_num)) {
473 + if (glob_match(ad->model_num, model_num)) {
474 if (ad->model_rev == NULL)
475 return ad->horkage;
476 - if (glob_match(model_rev, ad->model_rev))
477 + if (glob_match(ad->model_rev, model_rev))
478 return ad->horkage;
479 }
480 ad++;
481 diff --git a/drivers/base/node.c b/drivers/base/node.c
482 index c6d3ae05f1ca..d51c49c9bafa 100644
483 --- a/drivers/base/node.c
484 +++ b/drivers/base/node.c
485 @@ -603,7 +603,6 @@ void unregister_one_node(int nid)
486 return;
487
488 unregister_node(node_devices[nid]);
489 - kfree(node_devices[nid]);
490 node_devices[nid] = NULL;
491 }
492
493 diff --git a/drivers/crypto/caam/caamhash.c b/drivers/crypto/caam/caamhash.c
494 index b464d03ebf40..e9cc753d5095 100644
495 --- a/drivers/crypto/caam/caamhash.c
496 +++ b/drivers/crypto/caam/caamhash.c
497 @@ -1413,9 +1413,9 @@ static int ahash_update_first(struct ahash_request *req)
498 struct device *jrdev = ctx->jrdev;
499 gfp_t flags = (req->base.flags & (CRYPTO_TFM_REQ_MAY_BACKLOG |
500 CRYPTO_TFM_REQ_MAY_SLEEP)) ? GFP_KERNEL : GFP_ATOMIC;
501 - u8 *next_buf = state->buf_0 + state->current_buf *
502 - CAAM_MAX_HASH_BLOCK_SIZE;
503 - int *next_buflen = &state->buflen_0 + state->current_buf;
504 + u8 *next_buf = state->current_buf ? state->buf_1 : state->buf_0;
505 + int *next_buflen = state->current_buf ?
506 + &state->buflen_1 : &state->buflen_0;
507 int to_hash;
508 u32 *sh_desc = ctx->sh_desc_update_first, *desc;
509 dma_addr_t ptr = ctx->sh_desc_update_first_dma;
510 diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c
511 index 8ca49f04acec..0a3108b3c267 100644
512 --- a/drivers/net/ethernet/3com/3c59x.c
513 +++ b/drivers/net/ethernet/3com/3c59x.c
514 @@ -2214,7 +2214,7 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev)
515 }
516 }
517 #else
518 - dma_addr = cpu_to_le32(pci_map_single(VORTEX_PCI(vp), skb->data, skb->len, PCI_DMA_TODEVICE));
519 + dma_addr = pci_map_single(VORTEX_PCI(vp), skb->data, skb->len, PCI_DMA_TODEVICE);
520 if (dma_mapping_error(&VORTEX_PCI(vp)->dev, dma_addr))
521 goto out_dma_err;
522 vp->tx_ring[entry].addr = cpu_to_le32(dma_addr);
523 diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
524 index d9b9170ed2fc..71068d7d930d 100644
525 --- a/drivers/net/ethernet/broadcom/bcmsysport.c
526 +++ b/drivers/net/ethernet/broadcom/bcmsysport.c
527 @@ -848,7 +848,8 @@ static irqreturn_t bcm_sysport_wol_isr(int irq, void *dev_id)
528 return IRQ_HANDLED;
529 }
530
531 -static int bcm_sysport_insert_tsb(struct sk_buff *skb, struct net_device *dev)
532 +static struct sk_buff *bcm_sysport_insert_tsb(struct sk_buff *skb,
533 + struct net_device *dev)
534 {
535 struct sk_buff *nskb;
536 struct bcm_tsb *tsb;
537 @@ -864,7 +865,7 @@ static int bcm_sysport_insert_tsb(struct sk_buff *skb, struct net_device *dev)
538 if (!nskb) {
539 dev->stats.tx_errors++;
540 dev->stats.tx_dropped++;
541 - return -ENOMEM;
542 + return NULL;
543 }
544 skb = nskb;
545 }
546 @@ -883,7 +884,7 @@ static int bcm_sysport_insert_tsb(struct sk_buff *skb, struct net_device *dev)
547 ip_proto = ipv6_hdr(skb)->nexthdr;
548 break;
549 default:
550 - return 0;
551 + return skb;
552 }
553
554 /* Get the checksum offset and the L4 (transport) offset */
555 @@ -902,7 +903,7 @@ static int bcm_sysport_insert_tsb(struct sk_buff *skb, struct net_device *dev)
556 tsb->l4_ptr_dest_map = csum_info;
557 }
558
559 - return 0;
560 + return skb;
561 }
562
563 static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb,
564 @@ -936,8 +937,8 @@ static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb,
565
566 /* Insert TSB and checksum infos */
567 if (priv->tsb_en) {
568 - ret = bcm_sysport_insert_tsb(skb, dev);
569 - if (ret) {
570 + skb = bcm_sysport_insert_tsb(skb, dev);
571 + if (!skb) {
572 ret = NETDEV_TX_OK;
573 goto out;
574 }
575 diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
576 index 66979cf7fca6..da2d34688370 100644
577 --- a/drivers/net/hyperv/netvsc.c
578 +++ b/drivers/net/hyperv/netvsc.c
579 @@ -705,6 +705,7 @@ int netvsc_send(struct hv_device *device,
580 unsigned int section_index = NETVSC_INVALID_INDEX;
581 u32 msg_size = 0;
582 struct sk_buff *skb;
583 + u16 q_idx = packet->q_idx;
584
585
586 net_device = get_outbound_net_device(device);
587 @@ -769,24 +770,24 @@ int netvsc_send(struct hv_device *device,
588
589 if (ret == 0) {
590 atomic_inc(&net_device->num_outstanding_sends);
591 - atomic_inc(&net_device->queue_sends[packet->q_idx]);
592 + atomic_inc(&net_device->queue_sends[q_idx]);
593
594 if (hv_ringbuf_avail_percent(&out_channel->outbound) <
595 RING_AVAIL_PERCENT_LOWATER) {
596 netif_tx_stop_queue(netdev_get_tx_queue(
597 - ndev, packet->q_idx));
598 + ndev, q_idx));
599
600 if (atomic_read(&net_device->
601 - queue_sends[packet->q_idx]) < 1)
602 + queue_sends[q_idx]) < 1)
603 netif_tx_wake_queue(netdev_get_tx_queue(
604 - ndev, packet->q_idx));
605 + ndev, q_idx));
606 }
607 } else if (ret == -EAGAIN) {
608 netif_tx_stop_queue(netdev_get_tx_queue(
609 - ndev, packet->q_idx));
610 - if (atomic_read(&net_device->queue_sends[packet->q_idx]) < 1) {
611 + ndev, q_idx));
612 + if (atomic_read(&net_device->queue_sends[q_idx]) < 1) {
613 netif_tx_wake_queue(netdev_get_tx_queue(
614 - ndev, packet->q_idx));
615 + ndev, q_idx));
616 ret = -ENOSPC;
617 }
618 } else {
619 diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
620 index ef10302ec936..1f76c2ea53f2 100644
621 --- a/drivers/net/team/team.c
622 +++ b/drivers/net/team/team.c
623 @@ -647,7 +647,7 @@ static void team_notify_peers(struct team *team)
624 {
625 if (!team->notify_peers.count || !netif_running(team->dev))
626 return;
627 - atomic_set(&team->notify_peers.count_pending, team->notify_peers.count);
628 + atomic_add(team->notify_peers.count, &team->notify_peers.count_pending);
629 schedule_delayed_work(&team->notify_peers.dw, 0);
630 }
631
632 @@ -687,7 +687,7 @@ static void team_mcast_rejoin(struct team *team)
633 {
634 if (!team->mcast_rejoin.count || !netif_running(team->dev))
635 return;
636 - atomic_set(&team->mcast_rejoin.count_pending, team->mcast_rejoin.count);
637 + atomic_add(team->mcast_rejoin.count, &team->mcast_rejoin.count_pending);
638 schedule_delayed_work(&team->mcast_rejoin.dw, 0);
639 }
640
641 diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c
642 index 2a412fa3b338..af91077d3513 100644
643 --- a/drivers/pci/hotplug/pciehp_hpc.c
644 +++ b/drivers/pci/hotplug/pciehp_hpc.c
645 @@ -173,7 +173,7 @@ static void pcie_wait_cmd(struct controller *ctrl)
646 if (!rc)
647 ctrl_info(ctrl, "Timeout on hotplug command %#010x (issued %u msec ago)\n",
648 ctrl->slot_ctrl,
649 - jiffies_to_msecs(now - ctrl->cmd_started));
650 + jiffies_to_msecs(jiffies - ctrl->cmd_started));
651 }
652
653 /**
654 diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
655 index 61830b1792eb..14d3e6be8800 100644
656 --- a/drivers/tty/serial/8250/8250_pci.c
657 +++ b/drivers/tty/serial/8250/8250_pci.c
658 @@ -1788,6 +1788,7 @@ pci_wch_ch353_setup(struct serial_private *priv,
659 #define PCI_DEVICE_ID_COMMTECH_4222PCIE 0x0022
660 #define PCI_DEVICE_ID_BROADCOM_TRUMANAGE 0x160a
661 #define PCI_DEVICE_ID_AMCC_ADDIDATA_APCI7800 0x818e
662 +#define PCI_DEVICE_ID_INTEL_QRK_UART 0x0936
663
664 #define PCI_VENDOR_ID_SUNIX 0x1fd4
665 #define PCI_DEVICE_ID_SUNIX_1999 0x1999
666 @@ -1898,6 +1899,13 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
667 .subdevice = PCI_ANY_ID,
668 .setup = byt_serial_setup,
669 },
670 + {
671 + .vendor = PCI_VENDOR_ID_INTEL,
672 + .device = PCI_DEVICE_ID_INTEL_QRK_UART,
673 + .subvendor = PCI_ANY_ID,
674 + .subdevice = PCI_ANY_ID,
675 + .setup = pci_default_setup,
676 + },
677 /*
678 * ITE
679 */
680 @@ -2740,6 +2748,7 @@ enum pci_board_num_t {
681 pbn_ADDIDATA_PCIe_8_3906250,
682 pbn_ce4100_1_115200,
683 pbn_byt,
684 + pbn_qrk,
685 pbn_omegapci,
686 pbn_NETMOS9900_2s_115200,
687 pbn_brcm_trumanage,
688 @@ -3490,6 +3499,12 @@ static struct pciserial_board pci_boards[] = {
689 .uart_offset = 0x80,
690 .reg_shift = 2,
691 },
692 + [pbn_qrk] = {
693 + .flags = FL_BASE0,
694 + .num_ports = 1,
695 + .base_baud = 2764800,
696 + .reg_shift = 2,
697 + },
698 [pbn_omegapci] = {
699 .flags = FL_BASE0,
700 .num_ports = 8,
701 @@ -5192,6 +5207,12 @@ static struct pci_device_id serial_pci_tbl[] = {
702 pbn_byt },
703
704 /*
705 + * Intel Quark x1000
706 + */
707 + { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_QRK_UART,
708 + PCI_ANY_ID, PCI_ANY_ID, 0, 0,
709 + pbn_qrk },
710 + /*
711 * Cronyx Omega PCI
712 */
713 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_CRONYX_OMEGA,
714 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
715 index d481c99a20d7..dc849154f9de 100644
716 --- a/drivers/usb/core/hub.c
717 +++ b/drivers/usb/core/hub.c
718 @@ -1983,8 +1983,10 @@ void usb_set_device_state(struct usb_device *udev,
719 || new_state == USB_STATE_SUSPENDED)
720 ; /* No change to wakeup settings */
721 else if (new_state == USB_STATE_CONFIGURED)
722 - wakeup = udev->actconfig->desc.bmAttributes
723 - & USB_CONFIG_ATT_WAKEUP;
724 + wakeup = (udev->quirks &
725 + USB_QUIRK_IGNORE_REMOTE_WAKEUP) ? 0 :
726 + udev->actconfig->desc.bmAttributes &
727 + USB_CONFIG_ATT_WAKEUP;
728 else
729 wakeup = 0;
730 }
731 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
732 index bae636e2a1a3..814e712655e4 100644
733 --- a/drivers/usb/core/quirks.c
734 +++ b/drivers/usb/core/quirks.c
735 @@ -159,6 +159,10 @@ static const struct usb_device_id usb_quirk_list[] = {
736 /* USB3503 */
737 { USB_DEVICE(0x0424, 0x3503), .driver_info = USB_QUIRK_RESET_RESUME },
738
739 + /* ASUS Base Station(T100) */
740 + { USB_DEVICE(0x0b05, 0x17e0), .driver_info =
741 + USB_QUIRK_IGNORE_REMOTE_WAKEUP },
742 +
743 { } /* terminating entry must be last */
744 };
745
746 diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
747 index 6935a822ce2b..f80151932053 100644
748 --- a/drivers/usb/gadget/composite.c
749 +++ b/drivers/usb/gadget/composite.c
750 @@ -1956,7 +1956,6 @@ void composite_dev_cleanup(struct usb_composite_dev *cdev)
751 }
752 if (cdev->req) {
753 kfree(cdev->req->buf);
754 - usb_ep_dequeue(cdev->gadget->ep0, cdev->req);
755 usb_ep_free_request(cdev->gadget->ep0, cdev->req);
756 }
757 cdev->next_string_id = 0;
758 diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
759 index 0dc3552d1360..7ad7137ba39a 100644
760 --- a/drivers/usb/gadget/function/f_fs.c
761 +++ b/drivers/usb/gadget/function/f_fs.c
762 @@ -2393,7 +2393,8 @@ static int __ffs_func_bind_do_descs(enum ffs_entity_type type, u8 *valuep,
763 struct usb_endpoint_descriptor *ds = (void *)desc;
764 struct ffs_function *func = priv;
765 struct ffs_ep *ffs_ep;
766 - unsigned ep_desc_id, idx;
767 + unsigned ep_desc_id;
768 + int idx;
769 static const char *speed_names[] = { "full", "high", "super" };
770
771 if (type != FFS_DESCRIPTOR)
772 diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
773 index c791ba5da91a..154bcf1b5dfa 100644
774 --- a/drivers/usb/musb/musb_dsps.c
775 +++ b/drivers/usb/musb/musb_dsps.c
776 @@ -870,6 +870,7 @@ static int dsps_suspend(struct device *dev)
777 struct musb *musb = platform_get_drvdata(glue->musb);
778 void __iomem *mbase = musb->ctrl_base;
779
780 + del_timer_sync(&glue->timer);
781 glue->context.control = dsps_readl(mbase, wrp->control);
782 glue->context.epintr = dsps_readl(mbase, wrp->epintr_set);
783 glue->context.coreintr = dsps_readl(mbase, wrp->coreintr_set);
784 @@ -895,6 +896,7 @@ static int dsps_resume(struct device *dev)
785 dsps_writel(mbase, wrp->mode, glue->context.mode);
786 dsps_writel(mbase, wrp->tx_mode, glue->context.tx_mode);
787 dsps_writel(mbase, wrp->rx_mode, glue->context.rx_mode);
788 + setup_timer(&glue->timer, otg_timer, (unsigned long) musb);
789
790 return 0;
791 }
792 diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
793 index e4bb62225cb9..eca1747ca8c7 100644
794 --- a/drivers/usb/serial/cp210x.c
795 +++ b/drivers/usb/serial/cp210x.c
796 @@ -122,6 +122,7 @@ static const struct usb_device_id id_table[] = {
797 { USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */
798 { USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */
799 { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */
800 + { USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */
801 { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
802 { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
803 { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */
804 @@ -155,6 +156,7 @@ static const struct usb_device_id id_table[] = {
805 { USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */
806 { USB_DEVICE(0x1B1C, 0x1C00) }, /* Corsair USB Dongle */
807 { USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */
808 + { USB_DEVICE(0x1D6F, 0x0010) }, /* Seluxit ApS RF Dongle */
809 { USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */
810 { USB_DEVICE(0x1E29, 0x0501) }, /* Festo CMSP */
811 { USB_DEVICE(0x1FB9, 0x0100) }, /* Lake Shore Model 121 Current Source */
812 diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
813 index 9bfa7252f7f9..98ff609f968b 100644
814 --- a/drivers/usb/storage/uas.c
815 +++ b/drivers/usb/storage/uas.c
816 @@ -28,6 +28,7 @@
817 #include <scsi/scsi_tcq.h>
818
819 #include "uas-detect.h"
820 +#include "scsiglue.h"
821
822 /*
823 * The r00-r01c specs define this version of the SENSE IU data structure.
824 @@ -49,6 +50,7 @@ struct uas_dev_info {
825 struct usb_anchor cmd_urbs;
826 struct usb_anchor sense_urbs;
827 struct usb_anchor data_urbs;
828 + unsigned long flags;
829 int qdepth, resetting;
830 struct response_iu response;
831 unsigned cmd_pipe, status_pipe, data_in_pipe, data_out_pipe;
832 @@ -714,6 +716,15 @@ static int uas_queuecommand_lck(struct scsi_cmnd *cmnd,
833
834 BUILD_BUG_ON(sizeof(struct uas_cmd_info) > sizeof(struct scsi_pointer));
835
836 + if ((devinfo->flags & US_FL_NO_ATA_1X) &&
837 + (cmnd->cmnd[0] == ATA_12 || cmnd->cmnd[0] == ATA_16)) {
838 + memcpy(cmnd->sense_buffer, usb_stor_sense_invalidCDB,
839 + sizeof(usb_stor_sense_invalidCDB));
840 + cmnd->result = SAM_STAT_CHECK_CONDITION;
841 + cmnd->scsi_done(cmnd);
842 + return 0;
843 + }
844 +
845 spin_lock_irqsave(&devinfo->lock, flags);
846
847 if (devinfo->resetting) {
848 @@ -950,6 +961,10 @@ static int uas_slave_alloc(struct scsi_device *sdev)
849 static int uas_slave_configure(struct scsi_device *sdev)
850 {
851 struct uas_dev_info *devinfo = sdev->hostdata;
852 +
853 + if (devinfo->flags & US_FL_NO_REPORT_OPCODES)
854 + sdev->no_report_opcodes = 1;
855 +
856 scsi_set_tag_type(sdev, MSG_ORDERED_TAG);
857 scsi_activate_tcq(sdev, devinfo->qdepth - 2);
858 return 0;
859 @@ -1087,6 +1102,8 @@ static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id)
860 devinfo->resetting = 0;
861 devinfo->running_task = 0;
862 devinfo->shutdown = 0;
863 + devinfo->flags = id->driver_info;
864 + usb_stor_adjust_quirks(udev, &devinfo->flags);
865 init_usb_anchor(&devinfo->cmd_urbs);
866 init_usb_anchor(&devinfo->sense_urbs);
867 init_usb_anchor(&devinfo->data_urbs);
868 diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h
869 index 7244444df8ee..8511b54a65d9 100644
870 --- a/drivers/usb/storage/unusual_uas.h
871 +++ b/drivers/usb/storage/unusual_uas.h
872 @@ -40,13 +40,38 @@
873 * and don't forget to CC: the USB development list <linux-usb@vger.kernel.org>
874 */
875
876 -/*
877 - * This is an example entry for the US_FL_IGNORE_UAS flag. Once we have an
878 - * actual entry using US_FL_IGNORE_UAS this entry should be removed.
879 - *
880 - * UNUSUAL_DEV( 0xabcd, 0x1234, 0x0100, 0x0100,
881 - * "Example",
882 - * "Storage with broken UAS",
883 - * USB_SC_DEVICE, USB_PR_DEVICE, NULL,
884 - * US_FL_IGNORE_UAS),
885 - */
886 +/* https://bugzilla.kernel.org/show_bug.cgi?id=79511 */
887 +UNUSUAL_DEV(0x0bc2, 0x2312, 0x0000, 0x9999,
888 + "Seagate",
889 + "Expansion Desk",
890 + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
891 + US_FL_NO_ATA_1X),
892 +
893 +/* https://bbs.archlinux.org/viewtopic.php?id=183190 */
894 +UNUSUAL_DEV(0x0bc2, 0x3312, 0x0000, 0x9999,
895 + "Seagate",
896 + "Expansion Desk",
897 + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
898 + US_FL_NO_ATA_1X),
899 +
900 +/* https://bbs.archlinux.org/viewtopic.php?id=183190 */
901 +UNUSUAL_DEV(0x0bc2, 0xab20, 0x0000, 0x9999,
902 + "Seagate",
903 + "Backup+ BK",
904 + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
905 + US_FL_NO_ATA_1X),
906 +
907 +/* Reported-by: Claudio Bizzarri <claudio.bizzarri@gmail.com> */
908 +UNUSUAL_DEV(0x152d, 0x0567, 0x0000, 0x9999,
909 + "JMicron",
910 + "JMS567",
911 + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
912 + US_FL_NO_REPORT_OPCODES),
913 +
914 +/* Most ASM1051 based devices have issues with uas, blacklist them all */
915 +/* Reported-by: Hans de Goede <hdegoede@redhat.com> */
916 +UNUSUAL_DEV(0x174c, 0x5106, 0x0000, 0x9999,
917 + "ASMedia",
918 + "ASM1051",
919 + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
920 + US_FL_IGNORE_UAS),
921 diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
922 index cedb29252a92..f60e7d463636 100644
923 --- a/drivers/usb/storage/usb.c
924 +++ b/drivers/usb/storage/usb.c
925 @@ -478,7 +478,8 @@ void usb_stor_adjust_quirks(struct usb_device *udev, unsigned long *fflags)
926 US_FL_CAPACITY_OK | US_FL_IGNORE_RESIDUE |
927 US_FL_SINGLE_LUN | US_FL_NO_WP_DETECT |
928 US_FL_NO_READ_DISC_INFO | US_FL_NO_READ_CAPACITY_16 |
929 - US_FL_INITIAL_READ10 | US_FL_WRITE_CACHE);
930 + US_FL_INITIAL_READ10 | US_FL_WRITE_CACHE |
931 + US_FL_NO_ATA_1X | US_FL_NO_REPORT_OPCODES);
932
933 p = quirks;
934 while (*p) {
935 @@ -516,6 +517,9 @@ void usb_stor_adjust_quirks(struct usb_device *udev, unsigned long *fflags)
936 case 'e':
937 f |= US_FL_NO_READ_CAPACITY_16;
938 break;
939 + case 'f':
940 + f |= US_FL_NO_REPORT_OPCODES;
941 + break;
942 case 'h':
943 f |= US_FL_CAPACITY_HEURISTICS;
944 break;
945 @@ -543,6 +547,9 @@ void usb_stor_adjust_quirks(struct usb_device *udev, unsigned long *fflags)
946 case 's':
947 f |= US_FL_SINGLE_LUN;
948 break;
949 + case 't':
950 + f |= US_FL_NO_ATA_1X;
951 + break;
952 case 'u':
953 f |= US_FL_IGNORE_UAS;
954 break;
955 diff --git a/include/asm-generic/irq_work.h b/include/asm-generic/irq_work.h
956 new file mode 100644
957 index 000000000000..a44f452c6590
958 --- /dev/null
959 +++ b/include/asm-generic/irq_work.h
960 @@ -0,0 +1,10 @@
961 +#ifndef __ASM_IRQ_WORK_H
962 +#define __ASM_IRQ_WORK_H
963 +
964 +static inline bool arch_irq_work_has_interrupt(void)
965 +{
966 + return false;
967 +}
968 +
969 +#endif /* __ASM_IRQ_WORK_H */
970 +
971 diff --git a/include/linux/irq_work.h b/include/linux/irq_work.h
972 index bf9422c3aefe..bf3fe719c7ce 100644
973 --- a/include/linux/irq_work.h
974 +++ b/include/linux/irq_work.h
975 @@ -39,9 +39,12 @@ bool irq_work_queue_on(struct irq_work *work, int cpu);
976 #endif
977
978 void irq_work_run(void);
979 +void irq_work_tick(void);
980 void irq_work_sync(struct irq_work *work);
981
982 #ifdef CONFIG_IRQ_WORK
983 +#include <asm/irq_work.h>
984 +
985 bool irq_work_needs_cpu(void);
986 #else
987 static inline bool irq_work_needs_cpu(void) { return false; }
988 diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h
989 index 55a17b188daa..32e0f5c04e72 100644
990 --- a/include/linux/usb/quirks.h
991 +++ b/include/linux/usb/quirks.h
992 @@ -41,4 +41,7 @@
993 */
994 #define USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL 0x00000080
995
996 +/* device generates spurious wakeup, ignore remote wakeup capability */
997 +#define USB_QUIRK_IGNORE_REMOTE_WAKEUP 0x00000200
998 +
999 #endif /* __LINUX_USB_QUIRKS_H */
1000 diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h
1001 index 9b7de1b46437..a7f2604c5f25 100644
1002 --- a/include/linux/usb_usual.h
1003 +++ b/include/linux/usb_usual.h
1004 @@ -73,6 +73,10 @@
1005 /* Device advertises UAS but it is broken */ \
1006 US_FLAG(BROKEN_FUA, 0x01000000) \
1007 /* Cannot handle FUA in WRITE or READ CDBs */ \
1008 + US_FLAG(NO_ATA_1X, 0x02000000) \
1009 + /* Cannot handle ATA_12 or ATA_16 CDBs */ \
1010 + US_FLAG(NO_REPORT_OPCODES, 0x04000000) \
1011 + /* Cannot handle MI_REPORT_SUPPORTED_OPERATION_CODES */ \
1012
1013 #define US_FLAG(name, value) US_FL_##name = value ,
1014 enum { US_DO_ALL_FLAGS };
1015 diff --git a/include/net/sctp/command.h b/include/net/sctp/command.h
1016 index f22538e68245..d4a20d00461c 100644
1017 --- a/include/net/sctp/command.h
1018 +++ b/include/net/sctp/command.h
1019 @@ -115,7 +115,7 @@ typedef enum {
1020 * analysis of the state functions, but in reality just taken from
1021 * thin air in the hopes othat we don't trigger a kernel panic.
1022 */
1023 -#define SCTP_MAX_NUM_COMMANDS 14
1024 +#define SCTP_MAX_NUM_COMMANDS 20
1025
1026 typedef union {
1027 void *zero_all; /* Set to NULL to clear the entire union */
1028 diff --git a/kernel/irq_work.c b/kernel/irq_work.c
1029 index e6bcbe756663..385b85aded19 100644
1030 --- a/kernel/irq_work.c
1031 +++ b/kernel/irq_work.c
1032 @@ -115,8 +115,10 @@ bool irq_work_needs_cpu(void)
1033
1034 raised = &__get_cpu_var(raised_list);
1035 lazy = &__get_cpu_var(lazy_list);
1036 - if (llist_empty(raised) && llist_empty(lazy))
1037 - return false;
1038 +
1039 + if (llist_empty(raised) || arch_irq_work_has_interrupt())
1040 + if (llist_empty(lazy))
1041 + return false;
1042
1043 /* All work should have been flushed before going offline */
1044 WARN_ON_ONCE(cpu_is_offline(smp_processor_id()));
1045 @@ -171,6 +173,15 @@ void irq_work_run(void)
1046 }
1047 EXPORT_SYMBOL_GPL(irq_work_run);
1048
1049 +void irq_work_tick(void)
1050 +{
1051 + struct llist_head *raised = &__get_cpu_var(raised_list);
1052 +
1053 + if (!llist_empty(raised) && !arch_irq_work_has_interrupt())
1054 + irq_work_run_list(raised);
1055 + irq_work_run_list(&__get_cpu_var(lazy_list));
1056 +}
1057 +
1058 /*
1059 * Synchronize against the irq_work @entry, ensures the entry is not
1060 * currently in use.
1061 diff --git a/kernel/time/timer.c b/kernel/time/timer.c
1062 index aca5dfe2fa3d..9bbb8344ed3b 100644
1063 --- a/kernel/time/timer.c
1064 +++ b/kernel/time/timer.c
1065 @@ -1385,7 +1385,7 @@ void update_process_times(int user_tick)
1066 rcu_check_callbacks(cpu, user_tick);
1067 #ifdef CONFIG_IRQ_WORK
1068 if (in_irq())
1069 - irq_work_run();
1070 + irq_work_tick();
1071 #endif
1072 scheduler_tick();
1073 run_posix_cpu_timers(p);
1074 diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
1075 index f304471477dc..97299d76c1b0 100644
1076 --- a/net/ipv6/ip6_gre.c
1077 +++ b/net/ipv6/ip6_gre.c
1078 @@ -782,7 +782,7 @@ static inline int ip6gre_xmit_ipv4(struct sk_buff *skb, struct net_device *dev)
1079 encap_limit = t->parms.encap_limit;
1080
1081 memcpy(&fl6, &t->fl.u.ip6, sizeof(fl6));
1082 - fl6.flowi6_proto = IPPROTO_IPIP;
1083 + fl6.flowi6_proto = IPPROTO_GRE;
1084
1085 dsfield = ipv4_get_dsfield(iph);
1086
1087 @@ -832,7 +832,7 @@ static inline int ip6gre_xmit_ipv6(struct sk_buff *skb, struct net_device *dev)
1088 encap_limit = t->parms.encap_limit;
1089
1090 memcpy(&fl6, &t->fl.u.ip6, sizeof(fl6));
1091 - fl6.flowi6_proto = IPPROTO_IPV6;
1092 + fl6.flowi6_proto = IPPROTO_GRE;
1093
1094 dsfield = ipv6_get_dsfield(ipv6h);
1095 if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS)
1096 diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
1097 index c28b0d327b12..4f4e08b0e2b7 100644
1098 --- a/net/sched/cls_api.c
1099 +++ b/net/sched/cls_api.c
1100 @@ -549,6 +549,7 @@ void tcf_exts_change(struct tcf_proto *tp, struct tcf_exts *dst,
1101 tcf_tree_lock(tp);
1102 list_splice_init(&dst->actions, &tmp);
1103 list_splice(&src->actions, &dst->actions);
1104 + dst->type = src->type;
1105 tcf_tree_unlock(tp);
1106 tcf_action_destroy(&tmp, TCA_ACT_UNBIND);
1107 #endif
1108 diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c
1109 index d3f1ea460c50..c8f606324134 100644
1110 --- a/net/sctp/sm_statefuns.c
1111 +++ b/net/sctp/sm_statefuns.c
1112 @@ -1775,9 +1775,22 @@ static sctp_disposition_t sctp_sf_do_dupcook_a(struct net *net,
1113 /* Update the content of current association. */
1114 sctp_add_cmd_sf(commands, SCTP_CMD_UPDATE_ASSOC, SCTP_ASOC(new_asoc));
1115 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, SCTP_ULPEVENT(ev));
1116 - sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE,
1117 - SCTP_STATE(SCTP_STATE_ESTABLISHED));
1118 - sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl));
1119 + if (sctp_state(asoc, SHUTDOWN_PENDING) &&
1120 + (sctp_sstate(asoc->base.sk, CLOSING) ||
1121 + sock_flag(asoc->base.sk, SOCK_DEAD))) {
1122 + /* if were currently in SHUTDOWN_PENDING, but the socket
1123 + * has been closed by user, don't transition to ESTABLISHED.
1124 + * Instead trigger SHUTDOWN bundled with COOKIE_ACK.
1125 + */
1126 + sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl));
1127 + return sctp_sf_do_9_2_start_shutdown(net, ep, asoc,
1128 + SCTP_ST_CHUNK(0), NULL,
1129 + commands);
1130 + } else {
1131 + sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE,
1132 + SCTP_STATE(SCTP_STATE_ESTABLISHED));
1133 + sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl));
1134 + }
1135 return SCTP_DISPOSITION_CONSUME;
1136
1137 nomem_ev: