Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2502 - (hide annotations) (download)
Thu Apr 3 04:50:39 2014 UTC (10 years, 2 months ago) by niro
File size: 38726 byte(s)
-3.17.1-magellan-r1
1 niro 2502 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: