Annotation of /trunk/kernel-magellan/patches-3.17/0100-3.17.1-all-fixes.patch
Parent Directory | Revision Log
Revision 2502 -
(hide annotations)
(download)
Thu Apr 3 04:50:39 2014 UTC (10 years, 5 months ago) by niro
File size: 38726 byte(s)
Thu Apr 3 04:50:39 2014 UTC (10 years, 5 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: |