Magellan Linux

Contents of /trunk/kernel26-magellan/patches-2.6.35-r4/0101-2.6.35.2-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1138 - (show annotations) (download)
Tue Sep 21 13:53:34 2010 UTC (13 years, 7 months ago) by niro
File size: 94083 byte(s)
-2.6.35-magellan-r4: updated to linux-2.6.35.5, removed CVE-2010-3301 hotfix, as it is provided by 2.6.35.5
1 diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
2 index 98922f7..4824fb4 100644
3 --- a/arch/arm/Kconfig
4 +++ b/arch/arm/Kconfig
5 @@ -1027,6 +1027,18 @@ config PL310_ERRATA_588369
6 is not correctly implemented in PL310 as clean lines are not
7 invalidated as a result of these operations. Note that this errata
8 uses Texas Instrument's secure monitor api.
9 +
10 +config ARM_ERRATA_720789
11 + bool "ARM errata: TLBIASIDIS and TLBIMVAIS operations can broadcast a faulty ASID"
12 + depends on CPU_V7 && SMP
13 + help
14 + This option enables the workaround for the 720789 Cortex-A9 (prior to
15 + r2p0) erratum. A faulty ASID can be sent to the other CPUs for the
16 + broadcasted CP15 TLB maintenance operations TLBIASIDIS and TLBIMVAIS.
17 + As a consequence of this erratum, some TLB entries which should be
18 + invalidated are not, resulting in an incoherency in the system page
19 + tables. The workaround changes the TLB flushing routines to invalidate
20 + entries regardless of the ASID.
21 endmenu
22
23 source "arch/arm/common/Kconfig"
24 diff --git a/arch/arm/include/asm/tlbflush.h b/arch/arm/include/asm/tlbflush.h
25 index bd863d8..33b546a 100644
26 --- a/arch/arm/include/asm/tlbflush.h
27 +++ b/arch/arm/include/asm/tlbflush.h
28 @@ -378,7 +378,11 @@ static inline void local_flush_tlb_mm(struct mm_struct *mm)
29 if (tlb_flag(TLB_V6_I_ASID))
30 asm("mcr p15, 0, %0, c8, c5, 2" : : "r" (asid) : "cc");
31 if (tlb_flag(TLB_V7_UIS_ASID))
32 +#ifdef CONFIG_ARM_ERRATA_720789
33 + asm("mcr p15, 0, %0, c8, c3, 0" : : "r" (zero) : "cc");
34 +#else
35 asm("mcr p15, 0, %0, c8, c3, 2" : : "r" (asid) : "cc");
36 +#endif
37
38 if (tlb_flag(TLB_BTB)) {
39 /* flush the branch target cache */
40 @@ -424,7 +428,11 @@ local_flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
41 if (tlb_flag(TLB_V6_I_PAGE))
42 asm("mcr p15, 0, %0, c8, c5, 1" : : "r" (uaddr) : "cc");
43 if (tlb_flag(TLB_V7_UIS_PAGE))
44 +#ifdef CONFIG_ARM_ERRATA_720789
45 + asm("mcr p15, 0, %0, c8, c3, 3" : : "r" (uaddr & PAGE_MASK) : "cc");
46 +#else
47 asm("mcr p15, 0, %0, c8, c3, 1" : : "r" (uaddr) : "cc");
48 +#endif
49
50 if (tlb_flag(TLB_BTB)) {
51 /* flush the branch target cache */
52 diff --git a/arch/arm/mach-pxa/cm-x300.c b/arch/arm/mach-pxa/cm-x300.c
53 index fdda6be..d717b49 100644
54 --- a/arch/arm/mach-pxa/cm-x300.c
55 +++ b/arch/arm/mach-pxa/cm-x300.c
56 @@ -745,9 +745,10 @@ static void __init cm_x300_init(void)
57 {
58 cm_x300_init_mfp();
59
60 - pxa_set_ffuart_info(NULL);
61 pxa_set_btuart_info(NULL);
62 pxa_set_stuart_info(NULL);
63 + if (cpu_is_pxa300())
64 + pxa_set_ffuart_info(NULL);
65
66 cm_x300_init_da9030();
67 cm_x300_init_dm9000();
68 diff --git a/arch/arm/plat-mxc/include/mach/gpio.h b/arch/arm/plat-mxc/include/mach/gpio.h
69 index 6bd932c..7a0dc5a 100644
70 --- a/arch/arm/plat-mxc/include/mach/gpio.h
71 +++ b/arch/arm/plat-mxc/include/mach/gpio.h
72 @@ -19,6 +19,7 @@
73 #ifndef __ASM_ARCH_MXC_GPIO_H__
74 #define __ASM_ARCH_MXC_GPIO_H__
75
76 +#include <linux/spinlock.h>
77 #include <mach/hardware.h>
78 #include <asm-generic/gpio.h>
79
80 diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
81 index 77cfe7a..5d2f17d 100644
82 --- a/arch/powerpc/Makefile
83 +++ b/arch/powerpc/Makefile
84 @@ -163,9 +163,11 @@ drivers-$(CONFIG_OPROFILE) += arch/powerpc/oprofile/
85 # Default to zImage, override when needed
86 all: zImage
87
88 -BOOT_TARGETS = zImage zImage.initrd uImage zImage% dtbImage% treeImage.% cuImage.% simpleImage.%
89 +# With make 3.82 we cannot mix normal and wildcard targets
90 +BOOT_TARGETS1 := zImage zImage.initrd uImaged
91 +BOOT_TARGETS2 := zImage% dtbImage% treeImage.% cuImage.% simpleImage.%
92
93 -PHONY += $(BOOT_TARGETS)
94 +PHONY += $(BOOT_TARGETS1) $(BOOT_TARGETS2)
95
96 boot := arch/$(ARCH)/boot
97
98 @@ -180,10 +182,16 @@ relocs_check: arch/powerpc/relocs_check.pl vmlinux
99 zImage: relocs_check
100 endif
101
102 -$(BOOT_TARGETS): vmlinux
103 +$(BOOT_TARGETS1): vmlinux
104 + $(Q)$(MAKE) ARCH=ppc64 $(build)=$(boot) $(patsubst %,$(boot)/%,$@)
105 +$(BOOT_TARGETS2): vmlinux
106 + $(Q)$(MAKE) ARCH=ppc64 $(build)=$(boot) $(patsubst %,$(boot)/%,$@)
107 +
108 +
109 +bootwrapper_install:
110 $(Q)$(MAKE) ARCH=ppc64 $(build)=$(boot) $(patsubst %,$(boot)/%,$@)
111
112 -bootwrapper_install %.dtb:
113 +%.dtb:
114 $(Q)$(MAKE) ARCH=ppc64 $(build)=$(boot) $(patsubst %,$(boot)/%,$@)
115
116 define archhelp
117 diff --git a/arch/powerpc/kernel/perf_event_fsl_emb.c b/arch/powerpc/kernel/perf_event_fsl_emb.c
118 index babccee..4339d20 100644
119 --- a/arch/powerpc/kernel/perf_event_fsl_emb.c
120 +++ b/arch/powerpc/kernel/perf_event_fsl_emb.c
121 @@ -569,6 +569,7 @@ static void record_and_restart(struct perf_event *event, unsigned long val,
122 struct perf_sample_data data;
123
124 perf_sample_data_init(&data, 0);
125 + data.period = event->hw.last_period;
126
127 if (perf_event_overflow(event, nmi, &data, regs)) {
128 /*
129 diff --git a/arch/x86/include/asm/cmpxchg_32.h b/arch/x86/include/asm/cmpxchg_32.h
130 index 8859e12..c1cf59d 100644
131 --- a/arch/x86/include/asm/cmpxchg_32.h
132 +++ b/arch/x86/include/asm/cmpxchg_32.h
133 @@ -27,20 +27,20 @@ struct __xchg_dummy {
134 switch (size) { \
135 case 1: \
136 asm volatile("xchgb %b0,%1" \
137 - : "=q" (__x) \
138 - : "m" (*__xg(ptr)), "0" (__x) \
139 + : "=q" (__x), "+m" (*__xg(ptr)) \
140 + : "0" (__x) \
141 : "memory"); \
142 break; \
143 case 2: \
144 asm volatile("xchgw %w0,%1" \
145 - : "=r" (__x) \
146 - : "m" (*__xg(ptr)), "0" (__x) \
147 + : "=r" (__x), "+m" (*__xg(ptr)) \
148 + : "0" (__x) \
149 : "memory"); \
150 break; \
151 case 4: \
152 asm volatile("xchgl %0,%1" \
153 - : "=r" (__x) \
154 - : "m" (*__xg(ptr)), "0" (__x) \
155 + : "=r" (__x), "+m" (*__xg(ptr)) \
156 + : "0" (__x) \
157 : "memory"); \
158 break; \
159 default: \
160 @@ -70,14 +70,14 @@ static inline void __set_64bit(unsigned long long *ptr,
161 unsigned int low, unsigned int high)
162 {
163 asm volatile("\n1:\t"
164 - "movl (%0), %%eax\n\t"
165 - "movl 4(%0), %%edx\n\t"
166 - LOCK_PREFIX "cmpxchg8b (%0)\n\t"
167 + "movl (%1), %%eax\n\t"
168 + "movl 4(%1), %%edx\n\t"
169 + LOCK_PREFIX "cmpxchg8b (%1)\n\t"
170 "jnz 1b"
171 - : /* no outputs */
172 - : "D"(ptr),
173 - "b"(low),
174 - "c"(high)
175 + : "=m" (*ptr)
176 + : "D" (ptr),
177 + "b" (low),
178 + "c" (high)
179 : "ax", "dx", "memory");
180 }
181
182 @@ -121,21 +121,21 @@ extern void __cmpxchg_wrong_size(void);
183 __typeof__(*(ptr)) __new = (new); \
184 switch (size) { \
185 case 1: \
186 - asm volatile(lock "cmpxchgb %b1,%2" \
187 - : "=a"(__ret) \
188 - : "q"(__new), "m"(*__xg(ptr)), "0"(__old) \
189 + asm volatile(lock "cmpxchgb %b2,%1" \
190 + : "=a" (__ret), "+m" (*__xg(ptr)) \
191 + : "q" (__new), "0" (__old) \
192 : "memory"); \
193 break; \
194 case 2: \
195 - asm volatile(lock "cmpxchgw %w1,%2" \
196 - : "=a"(__ret) \
197 - : "r"(__new), "m"(*__xg(ptr)), "0"(__old) \
198 + asm volatile(lock "cmpxchgw %w2,%1" \
199 + : "=a" (__ret), "+m" (*__xg(ptr)) \
200 + : "r" (__new), "0" (__old) \
201 : "memory"); \
202 break; \
203 case 4: \
204 - asm volatile(lock "cmpxchgl %1,%2" \
205 - : "=a"(__ret) \
206 - : "r"(__new), "m"(*__xg(ptr)), "0"(__old) \
207 + asm volatile(lock "cmpxchgl %2,%1" \
208 + : "=a" (__ret), "+m" (*__xg(ptr)) \
209 + : "r" (__new), "0" (__old) \
210 : "memory"); \
211 break; \
212 default: \
213 @@ -180,12 +180,12 @@ static inline unsigned long long __cmpxchg64(volatile void *ptr,
214 unsigned long long new)
215 {
216 unsigned long long prev;
217 - asm volatile(LOCK_PREFIX "cmpxchg8b %3"
218 - : "=A"(prev)
219 - : "b"((unsigned long)new),
220 - "c"((unsigned long)(new >> 32)),
221 - "m"(*__xg(ptr)),
222 - "0"(old)
223 + asm volatile(LOCK_PREFIX "cmpxchg8b %1"
224 + : "=A" (prev),
225 + "+m" (*__xg(ptr))
226 + : "b" ((unsigned long)new),
227 + "c" ((unsigned long)(new >> 32)),
228 + "0" (old)
229 : "memory");
230 return prev;
231 }
232 @@ -195,12 +195,12 @@ static inline unsigned long long __cmpxchg64_local(volatile void *ptr,
233 unsigned long long new)
234 {
235 unsigned long long prev;
236 - asm volatile("cmpxchg8b %3"
237 - : "=A"(prev)
238 - : "b"((unsigned long)new),
239 - "c"((unsigned long)(new >> 32)),
240 - "m"(*__xg(ptr)),
241 - "0"(old)
242 + asm volatile("cmpxchg8b %1"
243 + : "=A" (prev),
244 + "+m" (*__xg(ptr))
245 + : "b" ((unsigned long)new),
246 + "c" ((unsigned long)(new >> 32)),
247 + "0" (old)
248 : "memory");
249 return prev;
250 }
251 diff --git a/arch/x86/include/asm/cmpxchg_64.h b/arch/x86/include/asm/cmpxchg_64.h
252 index 485ae41..b92f147 100644
253 --- a/arch/x86/include/asm/cmpxchg_64.h
254 +++ b/arch/x86/include/asm/cmpxchg_64.h
255 @@ -26,26 +26,26 @@ extern void __cmpxchg_wrong_size(void);
256 switch (size) { \
257 case 1: \
258 asm volatile("xchgb %b0,%1" \
259 - : "=q" (__x) \
260 - : "m" (*__xg(ptr)), "0" (__x) \
261 + : "=q" (__x), "+m" (*__xg(ptr)) \
262 + : "0" (__x) \
263 : "memory"); \
264 break; \
265 case 2: \
266 asm volatile("xchgw %w0,%1" \
267 - : "=r" (__x) \
268 - : "m" (*__xg(ptr)), "0" (__x) \
269 + : "=r" (__x), "+m" (*__xg(ptr)) \
270 + : "0" (__x) \
271 : "memory"); \
272 break; \
273 case 4: \
274 asm volatile("xchgl %k0,%1" \
275 - : "=r" (__x) \
276 - : "m" (*__xg(ptr)), "0" (__x) \
277 + : "=r" (__x), "+m" (*__xg(ptr)) \
278 + : "0" (__x) \
279 : "memory"); \
280 break; \
281 case 8: \
282 asm volatile("xchgq %0,%1" \
283 - : "=r" (__x) \
284 - : "m" (*__xg(ptr)), "0" (__x) \
285 + : "=r" (__x), "+m" (*__xg(ptr)) \
286 + : "0" (__x) \
287 : "memory"); \
288 break; \
289 default: \
290 @@ -71,27 +71,27 @@ extern void __cmpxchg_wrong_size(void);
291 __typeof__(*(ptr)) __new = (new); \
292 switch (size) { \
293 case 1: \
294 - asm volatile(lock "cmpxchgb %b1,%2" \
295 - : "=a"(__ret) \
296 - : "q"(__new), "m"(*__xg(ptr)), "0"(__old) \
297 + asm volatile(lock "cmpxchgb %b2,%1" \
298 + : "=a" (__ret), "+m" (*__xg(ptr)) \
299 + : "q" (__new), "0" (__old) \
300 : "memory"); \
301 break; \
302 case 2: \
303 - asm volatile(lock "cmpxchgw %w1,%2" \
304 - : "=a"(__ret) \
305 - : "r"(__new), "m"(*__xg(ptr)), "0"(__old) \
306 + asm volatile(lock "cmpxchgw %w2,%1" \
307 + : "=a" (__ret), "+m" (*__xg(ptr)) \
308 + : "r" (__new), "0" (__old) \
309 : "memory"); \
310 break; \
311 case 4: \
312 - asm volatile(lock "cmpxchgl %k1,%2" \
313 - : "=a"(__ret) \
314 - : "r"(__new), "m"(*__xg(ptr)), "0"(__old) \
315 + asm volatile(lock "cmpxchgl %k2,%1" \
316 + : "=a" (__ret), "+m" (*__xg(ptr)) \
317 + : "r" (__new), "0" (__old) \
318 : "memory"); \
319 break; \
320 case 8: \
321 - asm volatile(lock "cmpxchgq %1,%2" \
322 - : "=a"(__ret) \
323 - : "r"(__new), "m"(*__xg(ptr)), "0"(__old) \
324 + asm volatile(lock "cmpxchgq %2,%1" \
325 + : "=a" (__ret), "+m" (*__xg(ptr)) \
326 + : "r" (__new), "0" (__old) \
327 : "memory"); \
328 break; \
329 default: \
330 diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c
331 index 79556bd..01c0f3e 100644
332 --- a/arch/x86/kernel/cpu/mtrr/main.c
333 +++ b/arch/x86/kernel/cpu/mtrr/main.c
334 @@ -35,6 +35,7 @@
335
336 #include <linux/types.h> /* FIXME: kvm_para.h needs this */
337
338 +#include <linux/stop_machine.h>
339 #include <linux/kvm_para.h>
340 #include <linux/uaccess.h>
341 #include <linux/module.h>
342 @@ -143,22 +144,28 @@ struct set_mtrr_data {
343 mtrr_type smp_type;
344 };
345
346 +static DEFINE_PER_CPU(struct cpu_stop_work, mtrr_work);
347 +
348 /**
349 - * ipi_handler - Synchronisation handler. Executed by "other" CPUs.
350 + * mtrr_work_handler - Synchronisation handler. Executed by "other" CPUs.
351 * @info: pointer to mtrr configuration data
352 *
353 * Returns nothing.
354 */
355 -static void ipi_handler(void *info)
356 +static int mtrr_work_handler(void *info)
357 {
358 #ifdef CONFIG_SMP
359 struct set_mtrr_data *data = info;
360 unsigned long flags;
361
362 + atomic_dec(&data->count);
363 + while (!atomic_read(&data->gate))
364 + cpu_relax();
365 +
366 local_irq_save(flags);
367
368 atomic_dec(&data->count);
369 - while (!atomic_read(&data->gate))
370 + while (atomic_read(&data->gate))
371 cpu_relax();
372
373 /* The master has cleared me to execute */
374 @@ -173,12 +180,13 @@ static void ipi_handler(void *info)
375 }
376
377 atomic_dec(&data->count);
378 - while (atomic_read(&data->gate))
379 + while (!atomic_read(&data->gate))
380 cpu_relax();
381
382 atomic_dec(&data->count);
383 local_irq_restore(flags);
384 #endif
385 + return 0;
386 }
387
388 static inline int types_compatible(mtrr_type type1, mtrr_type type2)
389 @@ -198,7 +206,7 @@ static inline int types_compatible(mtrr_type type1, mtrr_type type2)
390 *
391 * This is kinda tricky, but fortunately, Intel spelled it out for us cleanly:
392 *
393 - * 1. Send IPI to do the following:
394 + * 1. Queue work to do the following on all processors:
395 * 2. Disable Interrupts
396 * 3. Wait for all procs to do so
397 * 4. Enter no-fill cache mode
398 @@ -215,14 +223,17 @@ static inline int types_compatible(mtrr_type type1, mtrr_type type2)
399 * 15. Enable interrupts.
400 *
401 * What does that mean for us? Well, first we set data.count to the number
402 - * of CPUs. As each CPU disables interrupts, it'll decrement it once. We wait
403 - * until it hits 0 and proceed. We set the data.gate flag and reset data.count.
404 - * Meanwhile, they are waiting for that flag to be set. Once it's set, each
405 + * of CPUs. As each CPU announces that it started the rendezvous handler by
406 + * decrementing the count, We reset data.count and set the data.gate flag
407 + * allowing all the cpu's to proceed with the work. As each cpu disables
408 + * interrupts, it'll decrement data.count once. We wait until it hits 0 and
409 + * proceed. We clear the data.gate flag and reset data.count. Meanwhile, they
410 + * are waiting for that flag to be cleared. Once it's cleared, each
411 * CPU goes through the transition of updating MTRRs.
412 * The CPU vendors may each do it differently,
413 * so we call mtrr_if->set() callback and let them take care of it.
414 * When they're done, they again decrement data->count and wait for data.gate
415 - * to be reset.
416 + * to be set.
417 * When we finish, we wait for data.count to hit 0 and toggle the data.gate flag
418 * Everyone then enables interrupts and we all continue on.
419 *
420 @@ -234,6 +245,9 @@ set_mtrr(unsigned int reg, unsigned long base, unsigned long size, mtrr_type typ
421 {
422 struct set_mtrr_data data;
423 unsigned long flags;
424 + int cpu;
425 +
426 + preempt_disable();
427
428 data.smp_reg = reg;
429 data.smp_base = base;
430 @@ -246,10 +260,15 @@ set_mtrr(unsigned int reg, unsigned long base, unsigned long size, mtrr_type typ
431 atomic_set(&data.gate, 0);
432
433 /* Start the ball rolling on other CPUs */
434 - if (smp_call_function(ipi_handler, &data, 0) != 0)
435 - panic("mtrr: timed out waiting for other CPUs\n");
436 + for_each_online_cpu(cpu) {
437 + struct cpu_stop_work *work = &per_cpu(mtrr_work, cpu);
438 +
439 + if (cpu == smp_processor_id())
440 + continue;
441 +
442 + stop_one_cpu_nowait(cpu, mtrr_work_handler, &data, work);
443 + }
444
445 - local_irq_save(flags);
446
447 while (atomic_read(&data.count))
448 cpu_relax();
449 @@ -259,6 +278,16 @@ set_mtrr(unsigned int reg, unsigned long base, unsigned long size, mtrr_type typ
450 smp_wmb();
451 atomic_set(&data.gate, 1);
452
453 + local_irq_save(flags);
454 +
455 + while (atomic_read(&data.count))
456 + cpu_relax();
457 +
458 + /* Ok, reset count and toggle gate */
459 + atomic_set(&data.count, num_booting_cpus() - 1);
460 + smp_wmb();
461 + atomic_set(&data.gate, 0);
462 +
463 /* Do our MTRR business */
464
465 /*
466 @@ -279,7 +308,7 @@ set_mtrr(unsigned int reg, unsigned long base, unsigned long size, mtrr_type typ
467
468 atomic_set(&data.count, num_booting_cpus() - 1);
469 smp_wmb();
470 - atomic_set(&data.gate, 0);
471 + atomic_set(&data.gate, 1);
472
473 /*
474 * Wait here for everyone to have seen the gate change
475 @@ -289,6 +318,7 @@ set_mtrr(unsigned int reg, unsigned long base, unsigned long size, mtrr_type typ
476 cpu_relax();
477
478 local_irq_restore(flags);
479 + preempt_enable();
480 }
481
482 /**
483 diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c
484 index b9d1ff5..227b044 100644
485 --- a/arch/x86/kernel/cpu/vmware.c
486 +++ b/arch/x86/kernel/cpu/vmware.c
487 @@ -51,7 +51,7 @@ static inline int __vmware_platform(void)
488
489 static unsigned long vmware_get_tsc_khz(void)
490 {
491 - uint64_t tsc_hz;
492 + uint64_t tsc_hz, lpj;
493 uint32_t eax, ebx, ecx, edx;
494
495 VMWARE_PORT(GETHZ, eax, ebx, ecx, edx);
496 @@ -62,6 +62,13 @@ static unsigned long vmware_get_tsc_khz(void)
497 printk(KERN_INFO "TSC freq read from hypervisor : %lu.%03lu MHz\n",
498 (unsigned long) tsc_hz / 1000,
499 (unsigned long) tsc_hz % 1000);
500 +
501 + if (!preset_lpj) {
502 + lpj = ((u64)tsc_hz * 1000);
503 + do_div(lpj, HZ);
504 + preset_lpj = lpj;
505 + }
506 +
507 return tsc_hz;
508 }
509
510 diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
511 index c4f33b2..11015fd 100644
512 --- a/arch/x86/kernel/smpboot.c
513 +++ b/arch/x86/kernel/smpboot.c
514 @@ -816,6 +816,13 @@ do_rest:
515 if (cpumask_test_cpu(cpu, cpu_callin_mask))
516 break; /* It has booted */
517 udelay(100);
518 + /*
519 + * Allow other tasks to run while we wait for the
520 + * AP to come online. This also gives a chance
521 + * for the MTRR work(triggered by the AP coming online)
522 + * to be completed in the stop machine context.
523 + */
524 + schedule();
525 }
526
527 if (cpumask_test_cpu(cpu, cpu_callin_mask))
528 diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
529 index f627779..4c4508e 100644
530 --- a/arch/x86/mm/fault.c
531 +++ b/arch/x86/mm/fault.c
532 @@ -802,8 +802,10 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address,
533 up_read(&mm->mmap_sem);
534
535 /* Kernel mode? Handle exceptions or die: */
536 - if (!(error_code & PF_USER))
537 + if (!(error_code & PF_USER)) {
538 no_context(regs, error_code, address);
539 + return;
540 + }
541
542 /* User-space => ok to do another page fault: */
543 if (is_prefetch(regs, error_code, address))
544 diff --git a/arch/x86/mm/kmmio.c b/arch/x86/mm/kmmio.c
545 index 5d0e67f..e5d5e2c 100644
546 --- a/arch/x86/mm/kmmio.c
547 +++ b/arch/x86/mm/kmmio.c
548 @@ -45,6 +45,8 @@ struct kmmio_fault_page {
549 * Protected by kmmio_lock, when linked into kmmio_page_table.
550 */
551 int count;
552 +
553 + bool scheduled_for_release;
554 };
555
556 struct kmmio_delayed_release {
557 @@ -398,8 +400,11 @@ static void release_kmmio_fault_page(unsigned long page,
558 BUG_ON(f->count < 0);
559 if (!f->count) {
560 disarm_kmmio_fault_page(f);
561 - f->release_next = *release_list;
562 - *release_list = f;
563 + if (!f->scheduled_for_release) {
564 + f->release_next = *release_list;
565 + *release_list = f;
566 + f->scheduled_for_release = true;
567 + }
568 }
569 }
570
571 @@ -471,8 +476,10 @@ static void remove_kmmio_fault_pages(struct rcu_head *head)
572 prevp = &f->release_next;
573 } else {
574 *prevp = f->release_next;
575 + f->release_next = NULL;
576 + f->scheduled_for_release = false;
577 }
578 - f = f->release_next;
579 + f = *prevp;
580 }
581 spin_unlock_irqrestore(&kmmio_lock, flags);
582
583 @@ -510,6 +517,9 @@ void unregister_kmmio_probe(struct kmmio_probe *p)
584 kmmio_count--;
585 spin_unlock_irqrestore(&kmmio_lock, flags);
586
587 + if (!release_list)
588 + return;
589 +
590 drelease = kmalloc(sizeof(*drelease), GFP_ATOMIC);
591 if (!drelease) {
592 pr_crit("leaking kmmio_fault_page objects.\n");
593 diff --git a/arch/x86/mm/testmmiotrace.c b/arch/x86/mm/testmmiotrace.c
594 index 8565d94..38868ad 100644
595 --- a/arch/x86/mm/testmmiotrace.c
596 +++ b/arch/x86/mm/testmmiotrace.c
597 @@ -90,6 +90,27 @@ static void do_test(unsigned long size)
598 iounmap(p);
599 }
600
601 +/*
602 + * Tests how mmiotrace behaves in face of multiple ioremap / iounmaps in
603 + * a short time. We had a bug in deferred freeing procedure which tried
604 + * to free this region multiple times (ioremap can reuse the same address
605 + * for many mappings).
606 + */
607 +static void do_test_bulk_ioremapping(void)
608 +{
609 + void __iomem *p;
610 + int i;
611 +
612 + for (i = 0; i < 10; ++i) {
613 + p = ioremap_nocache(mmio_address, PAGE_SIZE);
614 + if (p)
615 + iounmap(p);
616 + }
617 +
618 + /* Force freeing. If it will crash we will know why. */
619 + synchronize_rcu();
620 +}
621 +
622 static int __init init(void)
623 {
624 unsigned long size = (read_far) ? (8 << 20) : (16 << 10);
625 @@ -104,6 +125,7 @@ static int __init init(void)
626 "and writing 16 kB of rubbish in there.\n",
627 size >> 10, mmio_address);
628 do_test(size);
629 + do_test_bulk_ioremapping();
630 pr_info("All done.\n");
631 return 0;
632 }
633 diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
634 index 2ec04c4..15466c0 100644
635 --- a/arch/x86/pci/acpi.c
636 +++ b/arch/x86/pci/acpi.c
637 @@ -34,6 +34,15 @@ static const struct dmi_system_id pci_use_crs_table[] __initconst = {
638 DMI_MATCH(DMI_PRODUCT_NAME, "x3800"),
639 },
640 },
641 + /* https://bugzilla.kernel.org/show_bug.cgi?id=16007 */
642 + /* 2006 AMD HT/VIA system with two host bridges */
643 + {
644 + .callback = set_use_crs,
645 + .ident = "ASRock ALiveSATA2-GLAN",
646 + .matches = {
647 + DMI_MATCH(DMI_PRODUCT_NAME, "ALiveSATA2-GLAN"),
648 + },
649 + },
650 {}
651 };
652
653 diff --git a/crypto/Kconfig b/crypto/Kconfig
654 index 9d9434f..df332c1 100644
655 --- a/crypto/Kconfig
656 +++ b/crypto/Kconfig
657 @@ -96,6 +96,14 @@ config CRYPTO_MANAGER2
658 select CRYPTO_BLKCIPHER2
659 select CRYPTO_PCOMP
660
661 +config CRYPTO_MANAGER_TESTS
662 + bool "Run algolithms' self-tests"
663 + default y
664 + depends on CRYPTO_MANAGER2
665 + help
666 + Run cryptomanager's tests for the new crypto algorithms being
667 + registered.
668 +
669 config CRYPTO_GF128MUL
670 tristate "GF(2^128) multiplication functions (EXPERIMENTAL)"
671 depends on EXPERIMENTAL
672 diff --git a/crypto/algboss.c b/crypto/algboss.c
673 index c3c196b..40bd391 100644
674 --- a/crypto/algboss.c
675 +++ b/crypto/algboss.c
676 @@ -206,6 +206,7 @@ err:
677 return NOTIFY_OK;
678 }
679
680 +#ifdef CONFIG_CRYPTO_MANAGER_TESTS
681 static int cryptomgr_test(void *data)
682 {
683 struct crypto_test_param *param = data;
684 @@ -266,6 +267,7 @@ err_put_module:
685 err:
686 return NOTIFY_OK;
687 }
688 +#endif /* CONFIG_CRYPTO_MANAGER_TESTS */
689
690 static int cryptomgr_notify(struct notifier_block *this, unsigned long msg,
691 void *data)
692 @@ -273,8 +275,10 @@ static int cryptomgr_notify(struct notifier_block *this, unsigned long msg,
693 switch (msg) {
694 case CRYPTO_MSG_ALG_REQUEST:
695 return cryptomgr_schedule_probe(data);
696 +#ifdef CONFIG_CRYPTO_MANAGER_TESTS
697 case CRYPTO_MSG_ALG_REGISTER:
698 return cryptomgr_schedule_test(data);
699 +#endif
700 }
701
702 return NOTIFY_DONE;
703 diff --git a/crypto/testmgr.c b/crypto/testmgr.c
704 index 5c8aaa0..abd980c 100644
705 --- a/crypto/testmgr.c
706 +++ b/crypto/testmgr.c
707 @@ -22,6 +22,17 @@
708 #include <crypto/rng.h>
709
710 #include "internal.h"
711 +
712 +#ifndef CONFIG_CRYPTO_MANAGER_TESTS
713 +
714 +/* a perfect nop */
715 +int alg_test(const char *driver, const char *alg, u32 type, u32 mask)
716 +{
717 + return 0;
718 +}
719 +
720 +#else
721 +
722 #include "testmgr.h"
723
724 /*
725 @@ -2530,4 +2541,7 @@ notest:
726 non_fips_alg:
727 return -EINVAL;
728 }
729 +
730 +#endif /* CONFIG_CRYPTO_MANAGER_TESTS */
731 +
732 EXPORT_SYMBOL_GPL(alg_test);
733 diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
734 index 7409f98..3971bc0 100644
735 --- a/drivers/ata/ata_piix.c
736 +++ b/drivers/ata/ata_piix.c
737 @@ -158,6 +158,7 @@ struct piix_map_db {
738 struct piix_host_priv {
739 const int *map;
740 u32 saved_iocfg;
741 + spinlock_t sidpr_lock; /* FIXME: remove once locking in EH is fixed */
742 void __iomem *sidpr;
743 };
744
745 @@ -951,12 +952,15 @@ static int piix_sidpr_scr_read(struct ata_link *link,
746 unsigned int reg, u32 *val)
747 {
748 struct piix_host_priv *hpriv = link->ap->host->private_data;
749 + unsigned long flags;
750
751 if (reg >= ARRAY_SIZE(piix_sidx_map))
752 return -EINVAL;
753
754 + spin_lock_irqsave(&hpriv->sidpr_lock, flags);
755 piix_sidpr_sel(link, reg);
756 *val = ioread32(hpriv->sidpr + PIIX_SIDPR_DATA);
757 + spin_unlock_irqrestore(&hpriv->sidpr_lock, flags);
758 return 0;
759 }
760
761 @@ -964,12 +968,15 @@ static int piix_sidpr_scr_write(struct ata_link *link,
762 unsigned int reg, u32 val)
763 {
764 struct piix_host_priv *hpriv = link->ap->host->private_data;
765 + unsigned long flags;
766
767 if (reg >= ARRAY_SIZE(piix_sidx_map))
768 return -EINVAL;
769
770 + spin_lock_irqsave(&hpriv->sidpr_lock, flags);
771 piix_sidpr_sel(link, reg);
772 iowrite32(val, hpriv->sidpr + PIIX_SIDPR_DATA);
773 + spin_unlock_irqrestore(&hpriv->sidpr_lock, flags);
774 return 0;
775 }
776
777 @@ -1566,6 +1573,7 @@ static int __devinit piix_init_one(struct pci_dev *pdev,
778 hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL);
779 if (!hpriv)
780 return -ENOMEM;
781 + spin_lock_init(&hpriv->sidpr_lock);
782
783 /* Save IOCFG, this will be used for cable detection, quirk
784 * detection and restoration on detach. This is necessary
785 diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c
786 index ded76c4..3613422 100644
787 --- a/drivers/atm/solos-pci.c
788 +++ b/drivers/atm/solos-pci.c
789 @@ -781,7 +781,8 @@ static struct atm_vcc *find_vcc(struct atm_dev *dev, short vpi, int vci)
790 sk_for_each(s, node, head) {
791 vcc = atm_sk(s);
792 if (vcc->dev == dev && vcc->vci == vci &&
793 - vcc->vpi == vpi && vcc->qos.rxtp.traffic_class != ATM_NONE)
794 + vcc->vpi == vpi && vcc->qos.rxtp.traffic_class != ATM_NONE &&
795 + test_bit(ATM_VF_READY, &vcc->flags))
796 goto out;
797 }
798 vcc = NULL;
799 @@ -907,6 +908,10 @@ static void pclose(struct atm_vcc *vcc)
800 clear_bit(ATM_VF_ADDR, &vcc->flags);
801 clear_bit(ATM_VF_READY, &vcc->flags);
802
803 + /* Hold up vcc_destroy_socket() (our caller) until solos_bh() in the
804 + tasklet has finished processing any incoming packets (and, more to
805 + the point, using the vcc pointer). */
806 + tasklet_unlock_wait(&card->tlet);
807 return;
808 }
809
810 diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
811 index 7258c95..60bbfcf 100644
812 --- a/drivers/block/drbd/drbd_main.c
813 +++ b/drivers/block/drbd/drbd_main.c
814 @@ -2371,11 +2371,7 @@ static int _drbd_send_zc_ee(struct drbd_conf *mdev, struct drbd_epoch_entry *e)
815
816 static void consider_delay_probes(struct drbd_conf *mdev)
817 {
818 - if (mdev->state.conn != C_SYNC_SOURCE || mdev->agreed_pro_version < 93)
819 - return;
820 -
821 - if (mdev->dp_volume_last + mdev->sync_conf.dp_volume * 2 < mdev->send_cnt)
822 - drbd_send_delay_probes(mdev);
823 + return;
824 }
825
826 static int w_delay_probes(struct drbd_conf *mdev, struct drbd_work *w, int cancel)
827 @@ -2660,9 +2656,24 @@ static void drbd_unplug_fn(struct request_queue *q)
828
829 static void drbd_set_defaults(struct drbd_conf *mdev)
830 {
831 - mdev->sync_conf.after = DRBD_AFTER_DEF;
832 - mdev->sync_conf.rate = DRBD_RATE_DEF;
833 - mdev->sync_conf.al_extents = DRBD_AL_EXTENTS_DEF;
834 + /* This way we get a compile error when sync_conf grows,
835 + and we forgot to initialize it here */
836 + mdev->sync_conf = (struct syncer_conf) {
837 + /* .rate = */ DRBD_RATE_DEF,
838 + /* .after = */ DRBD_AFTER_DEF,
839 + /* .al_extents = */ DRBD_AL_EXTENTS_DEF,
840 + /* .dp_volume = */ DRBD_DP_VOLUME_DEF,
841 + /* .dp_interval = */ DRBD_DP_INTERVAL_DEF,
842 + /* .throttle_th = */ DRBD_RS_THROTTLE_TH_DEF,
843 + /* .hold_off_th = */ DRBD_RS_HOLD_OFF_TH_DEF,
844 + /* .verify_alg = */ {}, 0,
845 + /* .cpu_mask = */ {}, 0,
846 + /* .csums_alg = */ {}, 0,
847 + /* .use_rle = */ 0
848 + };
849 +
850 + /* Have to use that way, because the layout differs between
851 + big endian and little endian */
852 mdev->state = (union drbd_state) {
853 { .role = R_SECONDARY,
854 .peer = R_UNKNOWN,
855 diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
856 index 5d9cc53..6fcb971 100644
857 --- a/drivers/bluetooth/btusb.c
858 +++ b/drivers/bluetooth/btusb.c
859 @@ -59,6 +59,9 @@ static struct usb_device_id btusb_table[] = {
860 /* Generic Bluetooth USB device */
861 { USB_DEVICE_INFO(0xe0, 0x01, 0x01) },
862
863 + /* Apple iMac11,1 */
864 + { USB_DEVICE(0x05ac, 0x8215) },
865 +
866 /* AVM BlueFRITZ! USB v2.0 */
867 { USB_DEVICE(0x057c, 0x3800) },
868
869 diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
870 index 094bdc3..ff68e7c 100644
871 --- a/drivers/char/ipmi/ipmi_si_intf.c
872 +++ b/drivers/char/ipmi/ipmi_si_intf.c
873 @@ -2176,6 +2176,14 @@ static int __devinit ipmi_pnp_probe(struct pnp_dev *dev,
874 info->io.addr_data = res->start;
875
876 info->io.regspacing = DEFAULT_REGSPACING;
877 + res = pnp_get_resource(dev,
878 + (info->io.addr_type == IPMI_IO_ADDR_SPACE) ?
879 + IORESOURCE_IO : IORESOURCE_MEM,
880 + 1);
881 + if (res) {
882 + if (res->start > info->io.addr_data)
883 + info->io.regspacing = res->start - info->io.addr_data;
884 + }
885 info->io.regsize = DEFAULT_REGSPACING;
886 info->io.regshift = 0;
887
888 diff --git a/drivers/char/nozomi.c b/drivers/char/nozomi.c
889 index a663800..18af923 100644
890 --- a/drivers/char/nozomi.c
891 +++ b/drivers/char/nozomi.c
892 @@ -1611,6 +1611,8 @@ static int ntty_install(struct tty_driver *driver, struct tty_struct *tty)
893 ret = tty_init_termios(tty);
894 if (ret == 0) {
895 tty_driver_kref_get(driver);
896 + tty->count++;
897 + tty->driver_data = port;
898 driver->ttys[tty->index] = tty;
899 }
900 return ret;
901 @@ -1639,7 +1641,7 @@ static int ntty_activate(struct tty_port *tport, struct tty_struct *tty)
902
903 static int ntty_open(struct tty_struct *tty, struct file *filp)
904 {
905 - struct port *port = get_port_by_tty(tty);
906 + struct port *port = tty->driver_data;
907 return tty_port_open(&port->port, tty, filp);
908 }
909
910 diff --git a/drivers/dma/ioat/dma.h b/drivers/dma/ioat/dma.h
911 index 6d3a73b..5216c8a 100644
912 --- a/drivers/dma/ioat/dma.h
913 +++ b/drivers/dma/ioat/dma.h
914 @@ -97,6 +97,7 @@ struct ioat_chan_common {
915 #define IOAT_RESET_PENDING 2
916 #define IOAT_KOBJ_INIT_FAIL 3
917 #define IOAT_RESHAPE_PENDING 4
918 + #define IOAT_RUN 5
919 struct timer_list timer;
920 #define COMPLETION_TIMEOUT msecs_to_jiffies(100)
921 #define IDLE_TIMEOUT msecs_to_jiffies(2000)
922 diff --git a/drivers/dma/ioat/dma_v2.c b/drivers/dma/ioat/dma_v2.c
923 index 3c8b32a..216f9d3 100644
924 --- a/drivers/dma/ioat/dma_v2.c
925 +++ b/drivers/dma/ioat/dma_v2.c
926 @@ -287,7 +287,10 @@ void ioat2_timer_event(unsigned long data)
927 chanerr = readl(chan->reg_base + IOAT_CHANERR_OFFSET);
928 dev_err(to_dev(chan), "%s: Channel halted (%x)\n",
929 __func__, chanerr);
930 - BUG_ON(is_ioat_bug(chanerr));
931 + if (test_bit(IOAT_RUN, &chan->state))
932 + BUG_ON(is_ioat_bug(chanerr));
933 + else /* we never got off the ground */
934 + return;
935 }
936
937 /* if we haven't made progress and we have already
938 @@ -492,6 +495,8 @@ static struct ioat_ring_ent **ioat2_alloc_ring(struct dma_chan *c, int order, gf
939 return ring;
940 }
941
942 +void ioat2_free_chan_resources(struct dma_chan *c);
943 +
944 /* ioat2_alloc_chan_resources - allocate/initialize ioat2 descriptor ring
945 * @chan: channel to be initialized
946 */
947 @@ -500,6 +505,7 @@ int ioat2_alloc_chan_resources(struct dma_chan *c)
948 struct ioat2_dma_chan *ioat = to_ioat2_chan(c);
949 struct ioat_chan_common *chan = &ioat->base;
950 struct ioat_ring_ent **ring;
951 + u64 status;
952 int order;
953
954 /* have we already been set up? */
955 @@ -540,7 +546,20 @@ int ioat2_alloc_chan_resources(struct dma_chan *c)
956 tasklet_enable(&chan->cleanup_task);
957 ioat2_start_null_desc(ioat);
958
959 - return 1 << ioat->alloc_order;
960 + /* check that we got off the ground */
961 + udelay(5);
962 + status = ioat_chansts(chan);
963 + if (is_ioat_active(status) || is_ioat_idle(status)) {
964 + set_bit(IOAT_RUN, &chan->state);
965 + return 1 << ioat->alloc_order;
966 + } else {
967 + u32 chanerr = readl(chan->reg_base + IOAT_CHANERR_OFFSET);
968 +
969 + dev_WARN(to_dev(chan),
970 + "failed to start channel chanerr: %#x\n", chanerr);
971 + ioat2_free_chan_resources(c);
972 + return -EFAULT;
973 + }
974 }
975
976 bool reshape_ring(struct ioat2_dma_chan *ioat, int order)
977 @@ -778,6 +797,7 @@ void ioat2_free_chan_resources(struct dma_chan *c)
978 del_timer_sync(&chan->timer);
979 device->cleanup_fn((unsigned long) c);
980 device->reset_hw(chan);
981 + clear_bit(IOAT_RUN, &chan->state);
982
983 spin_lock_bh(&chan->cleanup_lock);
984 spin_lock_bh(&ioat->prep_lock);
985 diff --git a/drivers/dma/ioat/dma_v3.c b/drivers/dma/ioat/dma_v3.c
986 index 1cdd22e..d0f4990 100644
987 --- a/drivers/dma/ioat/dma_v3.c
988 +++ b/drivers/dma/ioat/dma_v3.c
989 @@ -361,7 +361,10 @@ static void ioat3_timer_event(unsigned long data)
990 chanerr = readl(chan->reg_base + IOAT_CHANERR_OFFSET);
991 dev_err(to_dev(chan), "%s: Channel halted (%x)\n",
992 __func__, chanerr);
993 - BUG_ON(is_ioat_bug(chanerr));
994 + if (test_bit(IOAT_RUN, &chan->state))
995 + BUG_ON(is_ioat_bug(chanerr));
996 + else /* we never got off the ground */
997 + return;
998 }
999
1000 /* if we haven't made progress and we have already
1001 diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
1002 index 64207df..2de76cc 100644
1003 --- a/drivers/ide/ide-cd.c
1004 +++ b/drivers/ide/ide-cd.c
1005 @@ -506,15 +506,22 @@ int ide_cd_queue_pc(ide_drive_t *drive, const unsigned char *cmd,
1006 return (flags & REQ_FAILED) ? -EIO : 0;
1007 }
1008
1009 -static void ide_cd_error_cmd(ide_drive_t *drive, struct ide_cmd *cmd)
1010 +/*
1011 + * returns true if rq has been completed
1012 + */
1013 +static bool ide_cd_error_cmd(ide_drive_t *drive, struct ide_cmd *cmd)
1014 {
1015 unsigned int nr_bytes = cmd->nbytes - cmd->nleft;
1016
1017 if (cmd->tf_flags & IDE_TFLAG_WRITE)
1018 nr_bytes -= cmd->last_xfer_len;
1019
1020 - if (nr_bytes > 0)
1021 + if (nr_bytes > 0) {
1022 ide_complete_rq(drive, 0, nr_bytes);
1023 + return true;
1024 + }
1025 +
1026 + return false;
1027 }
1028
1029 static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
1030 @@ -679,7 +686,8 @@ out_end:
1031 }
1032
1033 if (uptodate == 0 && rq->bio)
1034 - ide_cd_error_cmd(drive, cmd);
1035 + if (ide_cd_error_cmd(drive, cmd))
1036 + return ide_stopped;
1037
1038 /* make sure it's fully ended */
1039 if (blk_fs_request(rq) == 0) {
1040 diff --git a/drivers/md/md.c b/drivers/md/md.c
1041 index cb20d0b..7476d95 100644
1042 --- a/drivers/md/md.c
1043 +++ b/drivers/md/md.c
1044 @@ -532,13 +532,17 @@ static void mddev_unlock(mddev_t * mddev)
1045 * an access to the files will try to take reconfig_mutex
1046 * while holding the file unremovable, which leads to
1047 * a deadlock.
1048 - * So hold open_mutex instead - we are allowed to take
1049 - * it while holding reconfig_mutex, and md_run can
1050 - * use it to wait for the remove to complete.
1051 + * So hold set sysfs_active while the remove in happeing,
1052 + * and anything else which might set ->to_remove or my
1053 + * otherwise change the sysfs namespace will fail with
1054 + * -EBUSY if sysfs_active is still set.
1055 + * We set sysfs_active under reconfig_mutex and elsewhere
1056 + * test it under the same mutex to ensure its correct value
1057 + * is seen.
1058 */
1059 struct attribute_group *to_remove = mddev->to_remove;
1060 mddev->to_remove = NULL;
1061 - mutex_lock(&mddev->open_mutex);
1062 + mddev->sysfs_active = 1;
1063 mutex_unlock(&mddev->reconfig_mutex);
1064
1065 if (to_remove != &md_redundancy_group)
1066 @@ -550,7 +554,7 @@ static void mddev_unlock(mddev_t * mddev)
1067 sysfs_put(mddev->sysfs_action);
1068 mddev->sysfs_action = NULL;
1069 }
1070 - mutex_unlock(&mddev->open_mutex);
1071 + mddev->sysfs_active = 0;
1072 } else
1073 mutex_unlock(&mddev->reconfig_mutex);
1074
1075 @@ -2960,7 +2964,9 @@ level_store(mddev_t *mddev, const char *buf, size_t len)
1076 * - new personality will access other array.
1077 */
1078
1079 - if (mddev->sync_thread || mddev->reshape_position != MaxSector)
1080 + if (mddev->sync_thread ||
1081 + mddev->reshape_position != MaxSector ||
1082 + mddev->sysfs_active)
1083 return -EBUSY;
1084
1085 if (!mddev->pers->quiesce) {
1086 @@ -4344,13 +4350,9 @@ static int md_run(mddev_t *mddev)
1087
1088 if (mddev->pers)
1089 return -EBUSY;
1090 -
1091 - /* These two calls synchronise us with the
1092 - * sysfs_remove_group calls in mddev_unlock,
1093 - * so they must have completed.
1094 - */
1095 - mutex_lock(&mddev->open_mutex);
1096 - mutex_unlock(&mddev->open_mutex);
1097 + /* Cannot run until previous stop completes properly */
1098 + if (mddev->sysfs_active)
1099 + return -EBUSY;
1100
1101 /*
1102 * Analyze all RAID superblock(s)
1103 @@ -4711,12 +4713,13 @@ out:
1104 */
1105 static int do_md_stop(mddev_t * mddev, int mode, int is_open)
1106 {
1107 - int err = 0;
1108 + int err = 0, revalidate = 0;
1109 struct gendisk *disk = mddev->gendisk;
1110 mdk_rdev_t *rdev;
1111
1112 mutex_lock(&mddev->open_mutex);
1113 - if (atomic_read(&mddev->openers) > is_open) {
1114 + if (atomic_read(&mddev->openers) > is_open ||
1115 + mddev->sysfs_active) {
1116 printk("md: %s still in use.\n",mdname(mddev));
1117 err = -EBUSY;
1118 } else if (mddev->pers) {
1119 @@ -4740,7 +4743,7 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
1120 }
1121
1122 set_capacity(disk, 0);
1123 - revalidate_disk(disk);
1124 + revalidate = 1;
1125
1126 if (mddev->ro)
1127 mddev->ro = 0;
1128 @@ -4748,6 +4751,8 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
1129 err = 0;
1130 }
1131 mutex_unlock(&mddev->open_mutex);
1132 + if (revalidate)
1133 + revalidate_disk(disk);
1134 if (err)
1135 return err;
1136 /*
1137 diff --git a/drivers/md/md.h b/drivers/md/md.h
1138 index 10597bf..9ec208e 100644
1139 --- a/drivers/md/md.h
1140 +++ b/drivers/md/md.h
1141 @@ -125,6 +125,10 @@ struct mddev_s
1142 int suspended;
1143 atomic_t active_io;
1144 int ro;
1145 + int sysfs_active; /* set when sysfs deletes
1146 + * are happening, so run/
1147 + * takeover/stop are not safe
1148 + */
1149
1150 struct gendisk *gendisk;
1151
1152 diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
1153 index 42e64e4..d1d6891 100644
1154 --- a/drivers/md/raid10.c
1155 +++ b/drivers/md/raid10.c
1156 @@ -825,11 +825,29 @@ static int make_request(mddev_t *mddev, struct bio * bio)
1157 */
1158 bp = bio_split(bio,
1159 chunk_sects - (bio->bi_sector & (chunk_sects - 1)) );
1160 +
1161 + /* Each of these 'make_request' calls will call 'wait_barrier'.
1162 + * If the first succeeds but the second blocks due to the resync
1163 + * thread raising the barrier, we will deadlock because the
1164 + * IO to the underlying device will be queued in generic_make_request
1165 + * and will never complete, so will never reduce nr_pending.
1166 + * So increment nr_waiting here so no new raise_barriers will
1167 + * succeed, and so the second wait_barrier cannot block.
1168 + */
1169 + spin_lock_irq(&conf->resync_lock);
1170 + conf->nr_waiting++;
1171 + spin_unlock_irq(&conf->resync_lock);
1172 +
1173 if (make_request(mddev, &bp->bio1))
1174 generic_make_request(&bp->bio1);
1175 if (make_request(mddev, &bp->bio2))
1176 generic_make_request(&bp->bio2);
1177
1178 + spin_lock_irq(&conf->resync_lock);
1179 + conf->nr_waiting--;
1180 + wake_up(&conf->wait_barrier);
1181 + spin_unlock_irq(&conf->resync_lock);
1182 +
1183 bio_pair_release(bp);
1184 return 0;
1185 bad_map:
1186 diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c
1187 index 82e9438..8878503 100644
1188 --- a/drivers/mtd/nand/mxc_nand.c
1189 +++ b/drivers/mtd/nand/mxc_nand.c
1190 @@ -604,8 +604,8 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command,
1191 /* Command pre-processing step */
1192 switch (command) {
1193 case NAND_CMD_RESET:
1194 - send_cmd(host, command, false);
1195 preset(mtd);
1196 + send_cmd(host, command, false);
1197 break;
1198
1199 case NAND_CMD_STATUS:
1200 diff --git a/drivers/mtd/nand/plat_nand.c b/drivers/mtd/nand/plat_nand.c
1201 index 8d46731..90e143e 100644
1202 --- a/drivers/mtd/nand/plat_nand.c
1203 +++ b/drivers/mtd/nand/plat_nand.c
1204 @@ -91,7 +91,7 @@ static int __devinit plat_nand_probe(struct platform_device *pdev)
1205 }
1206
1207 /* Scan to find existance of the device */
1208 - if (nand_scan(&data->mtd, 1)) {
1209 + if (nand_scan(&data->mtd, pdata->chip.nr_chips)) {
1210 err = -ENXIO;
1211 goto out;
1212 }
1213 diff --git a/drivers/net/e100.c b/drivers/net/e100.c
1214 index b194bad..8e2eab4 100644
1215 --- a/drivers/net/e100.c
1216 +++ b/drivers/net/e100.c
1217 @@ -1779,6 +1779,7 @@ static int e100_tx_clean(struct nic *nic)
1218 for (cb = nic->cb_to_clean;
1219 cb->status & cpu_to_le16(cb_complete);
1220 cb = nic->cb_to_clean = cb->next) {
1221 + rmb(); /* read skb after status */
1222 netif_printk(nic, tx_done, KERN_DEBUG, nic->netdev,
1223 "cb[%d]->status = 0x%04X\n",
1224 (int)(((void*)cb - (void*)nic->cbs)/sizeof(struct cb)),
1225 @@ -1927,6 +1928,7 @@ static int e100_rx_indicate(struct nic *nic, struct rx *rx,
1226
1227 netif_printk(nic, rx_status, KERN_DEBUG, nic->netdev,
1228 "status=0x%04X\n", rfd_status);
1229 + rmb(); /* read size after status bit */
1230
1231 /* If data isn't ready, nothing to indicate */
1232 if (unlikely(!(rfd_status & cb_complete))) {
1233 diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
1234 index 68a8089..a2680bf 100644
1235 --- a/drivers/net/e1000/e1000_main.c
1236 +++ b/drivers/net/e1000/e1000_main.c
1237 @@ -3448,6 +3448,7 @@ static bool e1000_clean_tx_irq(struct e1000_adapter *adapter,
1238 while ((eop_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) &&
1239 (count < tx_ring->count)) {
1240 bool cleaned = false;
1241 + rmb(); /* read buffer_info after eop_desc */
1242 for ( ; !cleaned; count++) {
1243 tx_desc = E1000_TX_DESC(*tx_ring, i);
1244 buffer_info = &tx_ring->buffer_info[i];
1245 @@ -3637,6 +3638,7 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter,
1246 if (*work_done >= work_to_do)
1247 break;
1248 (*work_done)++;
1249 + rmb(); /* read descriptor and rx_buffer_info after status DD */
1250
1251 status = rx_desc->status;
1252 skb = buffer_info->skb;
1253 @@ -3843,6 +3845,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
1254 if (*work_done >= work_to_do)
1255 break;
1256 (*work_done)++;
1257 + rmb(); /* read descriptor and rx_buffer_info after status DD */
1258
1259 status = rx_desc->status;
1260 skb = buffer_info->skb;
1261 diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
1262 index 79e38dc..ba24679 100644
1263 --- a/drivers/net/e1000e/netdev.c
1264 +++ b/drivers/net/e1000e/netdev.c
1265 @@ -774,6 +774,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
1266 if (*work_done >= work_to_do)
1267 break;
1268 (*work_done)++;
1269 + rmb(); /* read descriptor and rx_buffer_info after status DD */
1270
1271 status = rx_desc->status;
1272 skb = buffer_info->skb;
1273 @@ -984,6 +985,7 @@ static bool e1000_clean_tx_irq(struct e1000_adapter *adapter)
1274 while ((eop_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) &&
1275 (count < tx_ring->count)) {
1276 bool cleaned = false;
1277 + rmb(); /* read buffer_info after eop_desc */
1278 for (; !cleaned; count++) {
1279 tx_desc = E1000_TX_DESC(*tx_ring, i);
1280 buffer_info = &tx_ring->buffer_info[i];
1281 @@ -1080,6 +1082,7 @@ static bool e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,
1282 break;
1283 (*work_done)++;
1284 skb = buffer_info->skb;
1285 + rmb(); /* read descriptor and rx_buffer_info after status DD */
1286
1287 /* in the packet split case this is header only */
1288 prefetch(skb->data - NET_IP_ALIGN);
1289 @@ -1279,6 +1282,7 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter,
1290 if (*work_done >= work_to_do)
1291 break;
1292 (*work_done)++;
1293 + rmb(); /* read descriptor and rx_buffer_info after status DD */
1294
1295 status = rx_desc->status;
1296 skb = buffer_info->skb;
1297 diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c
1298 index df2a6d7..c9cb9c4 100644
1299 --- a/drivers/net/igb/igb_main.c
1300 +++ b/drivers/net/igb/igb_main.c
1301 @@ -5344,6 +5344,7 @@ static bool igb_clean_tx_irq(struct igb_q_vector *q_vector)
1302
1303 while ((eop_desc->wb.status & cpu_to_le32(E1000_TXD_STAT_DD)) &&
1304 (count < tx_ring->count)) {
1305 + rmb(); /* read buffer_info after eop_desc status */
1306 for (cleaned = false; !cleaned; count++) {
1307 tx_desc = E1000_TX_DESC_ADV(*tx_ring, i);
1308 buffer_info = &tx_ring->buffer_info[i];
1309 @@ -5549,6 +5550,7 @@ static bool igb_clean_rx_irq_adv(struct igb_q_vector *q_vector,
1310 if (*work_done >= budget)
1311 break;
1312 (*work_done)++;
1313 + rmb(); /* read descriptor and rx_buffer_info after status DD */
1314
1315 skb = buffer_info->skb;
1316 prefetch(skb->data - NET_IP_ALIGN);
1317 diff --git a/drivers/net/igbvf/netdev.c b/drivers/net/igbvf/netdev.c
1318 index 5e2b2a8..57b5fee 100644
1319 --- a/drivers/net/igbvf/netdev.c
1320 +++ b/drivers/net/igbvf/netdev.c
1321 @@ -248,6 +248,7 @@ static bool igbvf_clean_rx_irq(struct igbvf_adapter *adapter,
1322 if (*work_done >= work_to_do)
1323 break;
1324 (*work_done)++;
1325 + rmb(); /* read descriptor and rx_buffer_info after status DD */
1326
1327 buffer_info = &rx_ring->buffer_info[i];
1328
1329 @@ -780,6 +781,7 @@ static bool igbvf_clean_tx_irq(struct igbvf_ring *tx_ring)
1330
1331 while ((eop_desc->wb.status & cpu_to_le32(E1000_TXD_STAT_DD)) &&
1332 (count < tx_ring->count)) {
1333 + rmb(); /* read buffer_info after eop_desc status */
1334 for (cleaned = false; !cleaned; count++) {
1335 tx_desc = IGBVF_TX_DESC_ADV(*tx_ring, i);
1336 buffer_info = &tx_ring->buffer_info[i];
1337 diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c
1338 index c6b75c8..45fc89b 100644
1339 --- a/drivers/net/ixgb/ixgb_main.c
1340 +++ b/drivers/net/ixgb/ixgb_main.c
1341 @@ -1816,6 +1816,7 @@ ixgb_clean_tx_irq(struct ixgb_adapter *adapter)
1342
1343 while (eop_desc->status & IXGB_TX_DESC_STATUS_DD) {
1344
1345 + rmb(); /* read buffer_info after eop_desc */
1346 for (cleaned = false; !cleaned; ) {
1347 tx_desc = IXGB_TX_DESC(*tx_ring, i);
1348 buffer_info = &tx_ring->buffer_info[i];
1349 @@ -1976,6 +1977,7 @@ ixgb_clean_rx_irq(struct ixgb_adapter *adapter, int *work_done, int work_to_do)
1350 break;
1351
1352 (*work_done)++;
1353 + rmb(); /* read descriptor and rx_buffer_info after status DD */
1354 status = rx_desc->status;
1355 skb = buffer_info->skb;
1356 buffer_info->skb = NULL;
1357 diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
1358 index 74d9b6d..649c867 100644
1359 --- a/drivers/net/ixgbe/ixgbe_main.c
1360 +++ b/drivers/net/ixgbe/ixgbe_main.c
1361 @@ -748,6 +748,7 @@ static bool ixgbe_clean_tx_irq(struct ixgbe_q_vector *q_vector,
1362 while ((eop_desc->wb.status & cpu_to_le32(IXGBE_TXD_STAT_DD)) &&
1363 (count < tx_ring->work_limit)) {
1364 bool cleaned = false;
1365 + rmb(); /* read buffer_info after eop_desc */
1366 for ( ; !cleaned; count++) {
1367 struct sk_buff *skb;
1368 tx_desc = IXGBE_TX_DESC_ADV(*tx_ring, i);
1369 diff --git a/drivers/net/ixgbevf/ixgbevf_main.c b/drivers/net/ixgbevf/ixgbevf_main.c
1370 index a16cff7..3ea59f1 100644
1371 --- a/drivers/net/ixgbevf/ixgbevf_main.c
1372 +++ b/drivers/net/ixgbevf/ixgbevf_main.c
1373 @@ -231,6 +231,7 @@ static bool ixgbevf_clean_tx_irq(struct ixgbevf_adapter *adapter,
1374 while ((eop_desc->wb.status & cpu_to_le32(IXGBE_TXD_STAT_DD)) &&
1375 (count < tx_ring->work_limit)) {
1376 bool cleaned = false;
1377 + rmb(); /* read buffer_info after eop_desc */
1378 for ( ; !cleaned; count++) {
1379 struct sk_buff *skb;
1380 tx_desc = IXGBE_TX_DESC_ADV(*tx_ring, i);
1381 @@ -518,6 +519,7 @@ static bool ixgbevf_clean_rx_irq(struct ixgbevf_q_vector *q_vector,
1382 break;
1383 (*work_done)++;
1384
1385 + rmb(); /* read descriptor and rx_buffer_info after status DD */
1386 if (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED) {
1387 hdr_info = le16_to_cpu(ixgbevf_get_hdr_info(rx_desc));
1388 len = (hdr_info & IXGBE_RXDADV_HDRBUFLEN_MASK) >>
1389 diff --git a/drivers/net/smsc911x.c b/drivers/net/smsc911x.c
1390 index cc55974..7a7b01a 100644
1391 --- a/drivers/net/smsc911x.c
1392 +++ b/drivers/net/smsc911x.c
1393 @@ -84,8 +84,7 @@ struct smsc911x_data {
1394 */
1395 spinlock_t mac_lock;
1396
1397 - /* spinlock to ensure 16-bit accesses are serialised.
1398 - * unused with a 32-bit bus */
1399 + /* spinlock to ensure register accesses are serialised */
1400 spinlock_t dev_lock;
1401
1402 struct phy_device *phy_dev;
1403 @@ -118,37 +117,33 @@ struct smsc911x_data {
1404 unsigned int hashlo;
1405 };
1406
1407 -/* The 16-bit access functions are significantly slower, due to the locking
1408 - * necessary. If your bus hardware can be configured to do this for you
1409 - * (in response to a single 32-bit operation from software), you should use
1410 - * the 32-bit access functions instead. */
1411 -
1412 -static inline u32 smsc911x_reg_read(struct smsc911x_data *pdata, u32 reg)
1413 +static inline u32 __smsc911x_reg_read(struct smsc911x_data *pdata, u32 reg)
1414 {
1415 if (pdata->config.flags & SMSC911X_USE_32BIT)
1416 return readl(pdata->ioaddr + reg);
1417
1418 - if (pdata->config.flags & SMSC911X_USE_16BIT) {
1419 - u32 data;
1420 - unsigned long flags;
1421 -
1422 - /* these two 16-bit reads must be performed consecutively, so
1423 - * must not be interrupted by our own ISR (which would start
1424 - * another read operation) */
1425 - spin_lock_irqsave(&pdata->dev_lock, flags);
1426 - data = ((readw(pdata->ioaddr + reg) & 0xFFFF) |
1427 + if (pdata->config.flags & SMSC911X_USE_16BIT)
1428 + return ((readw(pdata->ioaddr + reg) & 0xFFFF) |
1429 ((readw(pdata->ioaddr + reg + 2) & 0xFFFF) << 16));
1430 - spin_unlock_irqrestore(&pdata->dev_lock, flags);
1431 -
1432 - return data;
1433 - }
1434
1435 BUG();
1436 return 0;
1437 }
1438
1439 -static inline void smsc911x_reg_write(struct smsc911x_data *pdata, u32 reg,
1440 - u32 val)
1441 +static inline u32 smsc911x_reg_read(struct smsc911x_data *pdata, u32 reg)
1442 +{
1443 + u32 data;
1444 + unsigned long flags;
1445 +
1446 + spin_lock_irqsave(&pdata->dev_lock, flags);
1447 + data = __smsc911x_reg_read(pdata, reg);
1448 + spin_unlock_irqrestore(&pdata->dev_lock, flags);
1449 +
1450 + return data;
1451 +}
1452 +
1453 +static inline void __smsc911x_reg_write(struct smsc911x_data *pdata, u32 reg,
1454 + u32 val)
1455 {
1456 if (pdata->config.flags & SMSC911X_USE_32BIT) {
1457 writel(val, pdata->ioaddr + reg);
1458 @@ -156,44 +151,54 @@ static inline void smsc911x_reg_write(struct smsc911x_data *pdata, u32 reg,
1459 }
1460
1461 if (pdata->config.flags & SMSC911X_USE_16BIT) {
1462 - unsigned long flags;
1463 -
1464 - /* these two 16-bit writes must be performed consecutively, so
1465 - * must not be interrupted by our own ISR (which would start
1466 - * another read operation) */
1467 - spin_lock_irqsave(&pdata->dev_lock, flags);
1468 writew(val & 0xFFFF, pdata->ioaddr + reg);
1469 writew((val >> 16) & 0xFFFF, pdata->ioaddr + reg + 2);
1470 - spin_unlock_irqrestore(&pdata->dev_lock, flags);
1471 return;
1472 }
1473
1474 BUG();
1475 }
1476
1477 +static inline void smsc911x_reg_write(struct smsc911x_data *pdata, u32 reg,
1478 + u32 val)
1479 +{
1480 + unsigned long flags;
1481 +
1482 + spin_lock_irqsave(&pdata->dev_lock, flags);
1483 + __smsc911x_reg_write(pdata, reg, val);
1484 + spin_unlock_irqrestore(&pdata->dev_lock, flags);
1485 +}
1486 +
1487 /* Writes a packet to the TX_DATA_FIFO */
1488 static inline void
1489 smsc911x_tx_writefifo(struct smsc911x_data *pdata, unsigned int *buf,
1490 unsigned int wordcount)
1491 {
1492 + unsigned long flags;
1493 +
1494 + spin_lock_irqsave(&pdata->dev_lock, flags);
1495 +
1496 if (pdata->config.flags & SMSC911X_SWAP_FIFO) {
1497 while (wordcount--)
1498 - smsc911x_reg_write(pdata, TX_DATA_FIFO, swab32(*buf++));
1499 - return;
1500 + __smsc911x_reg_write(pdata, TX_DATA_FIFO,
1501 + swab32(*buf++));
1502 + goto out;
1503 }
1504
1505 if (pdata->config.flags & SMSC911X_USE_32BIT) {
1506 writesl(pdata->ioaddr + TX_DATA_FIFO, buf, wordcount);
1507 - return;
1508 + goto out;
1509 }
1510
1511 if (pdata->config.flags & SMSC911X_USE_16BIT) {
1512 while (wordcount--)
1513 - smsc911x_reg_write(pdata, TX_DATA_FIFO, *buf++);
1514 - return;
1515 + __smsc911x_reg_write(pdata, TX_DATA_FIFO, *buf++);
1516 + goto out;
1517 }
1518
1519 BUG();
1520 +out:
1521 + spin_unlock_irqrestore(&pdata->dev_lock, flags);
1522 }
1523
1524 /* Reads a packet out of the RX_DATA_FIFO */
1525 @@ -201,24 +206,31 @@ static inline void
1526 smsc911x_rx_readfifo(struct smsc911x_data *pdata, unsigned int *buf,
1527 unsigned int wordcount)
1528 {
1529 + unsigned long flags;
1530 +
1531 + spin_lock_irqsave(&pdata->dev_lock, flags);
1532 +
1533 if (pdata->config.flags & SMSC911X_SWAP_FIFO) {
1534 while (wordcount--)
1535 - *buf++ = swab32(smsc911x_reg_read(pdata, RX_DATA_FIFO));
1536 - return;
1537 + *buf++ = swab32(__smsc911x_reg_read(pdata,
1538 + RX_DATA_FIFO));
1539 + goto out;
1540 }
1541
1542 if (pdata->config.flags & SMSC911X_USE_32BIT) {
1543 readsl(pdata->ioaddr + RX_DATA_FIFO, buf, wordcount);
1544 - return;
1545 + goto out;
1546 }
1547
1548 if (pdata->config.flags & SMSC911X_USE_16BIT) {
1549 while (wordcount--)
1550 - *buf++ = smsc911x_reg_read(pdata, RX_DATA_FIFO);
1551 - return;
1552 + *buf++ = __smsc911x_reg_read(pdata, RX_DATA_FIFO);
1553 + goto out;
1554 }
1555
1556 BUG();
1557 +out:
1558 + spin_unlock_irqrestore(&pdata->dev_lock, flags);
1559 }
1560
1561 /* waits for MAC not busy, with timeout. Only called by smsc911x_mac_read
1562 diff --git a/drivers/net/wireless/iwlwifi/iwl-devtrace.h b/drivers/net/wireless/iwlwifi/iwl-devtrace.h
1563 index ae7319b..4cf864c 100644
1564 --- a/drivers/net/wireless/iwlwifi/iwl-devtrace.h
1565 +++ b/drivers/net/wireless/iwlwifi/iwl-devtrace.h
1566 @@ -193,7 +193,7 @@ TRACE_EVENT(iwlwifi_dev_tx,
1567 __entry->framelen = buf0_len + buf1_len;
1568 memcpy(__get_dynamic_array(tfd), tfd, tfdlen);
1569 memcpy(__get_dynamic_array(buf0), buf0, buf0_len);
1570 - memcpy(__get_dynamic_array(buf1), buf1, buf0_len);
1571 + memcpy(__get_dynamic_array(buf1), buf1, buf1_len);
1572 ),
1573 TP_printk("[%p] TX %.2x (%zu bytes)",
1574 __entry->priv,
1575 diff --git a/drivers/net/wireless/rtl818x/rtl8180_dev.c b/drivers/net/wireless/rtl818x/rtl8180_dev.c
1576 index 515817d..15f09e8 100644
1577 --- a/drivers/net/wireless/rtl818x/rtl8180_dev.c
1578 +++ b/drivers/net/wireless/rtl818x/rtl8180_dev.c
1579 @@ -688,6 +688,8 @@ void rtl8180_beacon_work(struct work_struct *work)
1580
1581 /* grab a fresh beacon */
1582 skb = ieee80211_beacon_get(dev, vif);
1583 + if (!skb)
1584 + goto resched;
1585
1586 /*
1587 * update beacon timestamp w/ TSF value
1588 diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
1589 index c9171be..435fbbc 100644
1590 --- a/drivers/pci/intel-iommu.c
1591 +++ b/drivers/pci/intel-iommu.c
1592 @@ -3030,6 +3030,34 @@ static void __init iommu_exit_mempool(void)
1593
1594 }
1595
1596 +static void quirk_ioat_snb_local_iommu(struct pci_dev *pdev)
1597 +{
1598 + struct dmar_drhd_unit *drhd;
1599 + u32 vtbar;
1600 + int rc;
1601 +
1602 + /* We know that this device on this chipset has its own IOMMU.
1603 + * If we find it under a different IOMMU, then the BIOS is lying
1604 + * to us. Hope that the IOMMU for this device is actually
1605 + * disabled, and it needs no translation...
1606 + */
1607 + rc = pci_bus_read_config_dword(pdev->bus, PCI_DEVFN(0, 0), 0xb0, &vtbar);
1608 + if (rc) {
1609 + /* "can't" happen */
1610 + dev_info(&pdev->dev, "failed to run vt-d quirk\n");
1611 + return;
1612 + }
1613 + vtbar &= 0xffff0000;
1614 +
1615 + /* we know that the this iommu should be at offset 0xa000 from vtbar */
1616 + drhd = dmar_find_matched_drhd_unit(pdev);
1617 + if (WARN_TAINT_ONCE(!drhd || drhd->reg_base_addr - vtbar != 0xa000,
1618 + TAINT_FIRMWARE_WORKAROUND,
1619 + "BIOS assigned incorrect VT-d unit for Intel(R) QuickData Technology device\n"))
1620 + pdev->dev.archdata.iommu = DUMMY_DEVICE_DOMAIN_INFO;
1621 +}
1622 +DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_IOAT_SNB, quirk_ioat_snb_local_iommu);
1623 +
1624 static void __init init_no_remapping_devices(void)
1625 {
1626 struct dmar_drhd_unit *drhd;
1627 diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
1628 index 477345d..e28524e 100644
1629 --- a/drivers/pci/quirks.c
1630 +++ b/drivers/pci/quirks.c
1631 @@ -2115,6 +2115,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disabl
1632 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3336, quirk_disable_all_msi);
1633 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi);
1634 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3364, quirk_disable_all_msi);
1635 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8380_0, quirk_disable_all_msi);
1636
1637 /* Disable MSI on chipsets that are known to not support it */
1638 static void __devinit quirk_disable_msi(struct pci_dev *dev)
1639 @@ -2390,6 +2391,9 @@ static void __devinit __nv_msi_ht_cap_quirk(struct pci_dev *dev, int all)
1640 int pos;
1641 int found;
1642
1643 + if (!pci_msi_enabled())
1644 + return;
1645 +
1646 /* check if there is HT MSI cap or enabled on this device */
1647 found = ht_check_msi_mapping(dev);
1648
1649 diff --git a/drivers/pcmcia/pcmcia_resource.c b/drivers/pcmcia/pcmcia_resource.c
1650 index a4cd9ad..015e274 100644
1651 --- a/drivers/pcmcia/pcmcia_resource.c
1652 +++ b/drivers/pcmcia/pcmcia_resource.c
1653 @@ -651,7 +651,7 @@ EXPORT_SYMBOL(__pcmcia_request_exclusive_irq);
1654 #ifdef CONFIG_PCMCIA_PROBE
1655
1656 /* mask of IRQs already reserved by other cards, we should avoid using them */
1657 -static u8 pcmcia_used_irq[NR_IRQS];
1658 +static u8 pcmcia_used_irq[32];
1659
1660 static irqreturn_t test_action(int cpl, void *dev_id)
1661 {
1662 @@ -674,6 +674,9 @@ static int pcmcia_setup_isa_irq(struct pcmcia_device *p_dev, int type)
1663 for (try = 0; try < 64; try++) {
1664 irq = try % 32;
1665
1666 + if (irq > NR_IRQS)
1667 + continue;
1668 +
1669 /* marked as available by driver, not blocked by userspace? */
1670 if (!((mask >> irq) & 1))
1671 continue;
1672 diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c
1673 index 746a446..53be4d3 100644
1674 --- a/drivers/serial/8250_pci.c
1675 +++ b/drivers/serial/8250_pci.c
1676 @@ -994,6 +994,7 @@ static int skip_tx_en_setup(struct serial_private *priv,
1677 #define PCI_DEVICE_ID_TITAN_800E 0xA014
1678 #define PCI_DEVICE_ID_TITAN_200EI 0xA016
1679 #define PCI_DEVICE_ID_TITAN_200EISI 0xA017
1680 +#define PCI_DEVICE_ID_OXSEMI_16PCI958 0x9538
1681
1682 /* Unknown vendors/cards - this should not be in linux/pci_ids.h */
1683 #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584
1684 @@ -1542,6 +1543,8 @@ enum pci_board_num_t {
1685 pbn_b2_4_921600,
1686 pbn_b2_8_921600,
1687
1688 + pbn_b2_8_1152000,
1689 +
1690 pbn_b2_bt_1_115200,
1691 pbn_b2_bt_2_115200,
1692 pbn_b2_bt_4_115200,
1693 @@ -1960,6 +1963,13 @@ static struct pciserial_board pci_boards[] __devinitdata = {
1694 .uart_offset = 8,
1695 },
1696
1697 + [pbn_b2_8_1152000] = {
1698 + .flags = FL_BASE2,
1699 + .num_ports = 8,
1700 + .base_baud = 1152000,
1701 + .uart_offset = 8,
1702 + },
1703 +
1704 [pbn_b2_bt_1_115200] = {
1705 .flags = FL_BASE2|FL_BASE_BARS,
1706 .num_ports = 1,
1707 @@ -2875,6 +2885,9 @@ static struct pci_device_id serial_pci_tbl[] = {
1708 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI952,
1709 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
1710 pbn_b0_bt_2_921600 },
1711 + { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI958,
1712 + PCI_ANY_ID , PCI_ANY_ID, 0, 0,
1713 + pbn_b2_8_1152000 },
1714
1715 /*
1716 * Oxford Semiconductor Inc. Tornado PCI express device range.
1717 diff --git a/drivers/staging/hv/Kconfig b/drivers/staging/hv/Kconfig
1718 index 97480f5..7455c80 100644
1719 --- a/drivers/staging/hv/Kconfig
1720 +++ b/drivers/staging/hv/Kconfig
1721 @@ -17,7 +17,7 @@ config HYPERV_STORAGE
1722
1723 config HYPERV_BLOCK
1724 tristate "Microsoft Hyper-V virtual block driver"
1725 - depends on BLOCK && SCSI && LBDAF
1726 + depends on BLOCK && SCSI && (LBDAF || 64BIT)
1727 default HYPERV
1728 help
1729 Select this option to enable the Hyper-V virtual block driver.
1730 diff --git a/drivers/staging/line6/Kconfig b/drivers/staging/line6/Kconfig
1731 index 7852d4a..bc1ffbe 100644
1732 --- a/drivers/staging/line6/Kconfig
1733 +++ b/drivers/staging/line6/Kconfig
1734 @@ -2,6 +2,7 @@ config LINE6_USB
1735 tristate "Line6 USB support"
1736 depends on USB && SND
1737 select SND_RAWMIDI
1738 + select SND_PCM
1739 help
1740 This is a driver for the guitar amp, cab, and effects modeller
1741 PODxt Pro by Line6 (and similar devices), supporting the
1742 diff --git a/drivers/staging/panel/panel.c b/drivers/staging/panel/panel.c
1743 index 9ca0e9e..6474c3a 100644
1744 --- a/drivers/staging/panel/panel.c
1745 +++ b/drivers/staging/panel/panel.c
1746 @@ -2179,6 +2179,7 @@ int panel_init(void)
1747 if (pprt) {
1748 parport_release(pprt);
1749 parport_unregister_device(pprt);
1750 + pprt = NULL;
1751 }
1752 parport_unregister_driver(&panel_driver);
1753 printk(KERN_ERR "Panel driver version " PANEL_VERSION
1754 @@ -2228,6 +2229,7 @@ static void __exit panel_cleanup_module(void)
1755 /* TODO: free all input signals */
1756 parport_release(pprt);
1757 parport_unregister_device(pprt);
1758 + pprt = NULL;
1759 }
1760 parport_unregister_driver(&panel_driver);
1761 }
1762 diff --git a/drivers/staging/rt2860/usb_main_dev.c b/drivers/staging/rt2860/usb_main_dev.c
1763 index 674769d..c48e85d 100644
1764 --- a/drivers/staging/rt2860/usb_main_dev.c
1765 +++ b/drivers/staging/rt2860/usb_main_dev.c
1766 @@ -64,6 +64,7 @@ struct usb_device_id rtusb_usb_id[] = {
1767 {USB_DEVICE(0x14B2, 0x3C07)}, /* AL */
1768 {USB_DEVICE(0x050D, 0x8053)}, /* Belkin */
1769 {USB_DEVICE(0x050D, 0x825B)}, /* Belkin */
1770 + {USB_DEVICE(0x050D, 0x935B)}, /* Belkin F6D4050 v2 */
1771 {USB_DEVICE(0x14B2, 0x3C23)}, /* Airlink */
1772 {USB_DEVICE(0x14B2, 0x3C27)}, /* Airlink */
1773 {USB_DEVICE(0x07AA, 0x002F)}, /* Corega */
1774 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
1775 index 70cccc7..ffc80e3 100644
1776 --- a/drivers/usb/core/hub.c
1777 +++ b/drivers/usb/core/hub.c
1778 @@ -20,6 +20,7 @@
1779 #include <linux/usb.h>
1780 #include <linux/usbdevice_fs.h>
1781 #include <linux/usb/hcd.h>
1782 +#include <linux/usb/quirks.h>
1783 #include <linux/kthread.h>
1784 #include <linux/mutex.h>
1785 #include <linux/freezer.h>
1786 @@ -1801,7 +1802,6 @@ int usb_new_device(struct usb_device *udev)
1787 pm_runtime_set_active(&udev->dev);
1788 pm_runtime_enable(&udev->dev);
1789
1790 - usb_detect_quirks(udev);
1791 err = usb_enumerate_device(udev); /* Read descriptors */
1792 if (err < 0)
1793 goto fail;
1794 @@ -3111,6 +3111,10 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1,
1795 if (status < 0)
1796 goto loop;
1797
1798 + usb_detect_quirks(udev);
1799 + if (udev->quirks & USB_QUIRK_DELAY_INIT)
1800 + msleep(1000);
1801 +
1802 /* consecutive bus-powered hubs aren't reliable; they can
1803 * violate the voltage drop budget. if the new child has
1804 * a "powered" LED, users should notice we didn't enable it
1805 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
1806 index db99c08..25719da 100644
1807 --- a/drivers/usb/core/quirks.c
1808 +++ b/drivers/usb/core/quirks.c
1809 @@ -38,6 +38,9 @@ static const struct usb_device_id usb_quirk_list[] = {
1810 /* Creative SB Audigy 2 NX */
1811 { USB_DEVICE(0x041e, 0x3020), .driver_info = USB_QUIRK_RESET_RESUME },
1812
1813 + /* Logitech Harmony 700-series */
1814 + { USB_DEVICE(0x046d, 0xc122), .driver_info = USB_QUIRK_DELAY_INIT },
1815 +
1816 /* Philips PSC805 audio device */
1817 { USB_DEVICE(0x0471, 0x0155), .driver_info = USB_QUIRK_RESET_RESUME },
1818
1819 diff --git a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c
1820 index 7c05555..419e6b3 100644
1821 --- a/drivers/usb/core/urb.c
1822 +++ b/drivers/usb/core/urb.c
1823 @@ -137,6 +137,16 @@ void usb_anchor_urb(struct urb *urb, struct usb_anchor *anchor)
1824 }
1825 EXPORT_SYMBOL_GPL(usb_anchor_urb);
1826
1827 +/* Callers must hold anchor->lock */
1828 +static void __usb_unanchor_urb(struct urb *urb, struct usb_anchor *anchor)
1829 +{
1830 + urb->anchor = NULL;
1831 + list_del(&urb->anchor_list);
1832 + usb_put_urb(urb);
1833 + if (list_empty(&anchor->urb_list))
1834 + wake_up(&anchor->wait);
1835 +}
1836 +
1837 /**
1838 * usb_unanchor_urb - unanchors an URB
1839 * @urb: pointer to the urb to anchor
1840 @@ -156,17 +166,14 @@ void usb_unanchor_urb(struct urb *urb)
1841 return;
1842
1843 spin_lock_irqsave(&anchor->lock, flags);
1844 - if (unlikely(anchor != urb->anchor)) {
1845 - /* we've lost the race to another thread */
1846 - spin_unlock_irqrestore(&anchor->lock, flags);
1847 - return;
1848 - }
1849 - urb->anchor = NULL;
1850 - list_del(&urb->anchor_list);
1851 + /*
1852 + * At this point, we could be competing with another thread which
1853 + * has the same intention. To protect the urb from being unanchored
1854 + * twice, only the winner of the race gets the job.
1855 + */
1856 + if (likely(anchor == urb->anchor))
1857 + __usb_unanchor_urb(urb, anchor);
1858 spin_unlock_irqrestore(&anchor->lock, flags);
1859 - usb_put_urb(urb);
1860 - if (list_empty(&anchor->urb_list))
1861 - wake_up(&anchor->wait);
1862 }
1863 EXPORT_SYMBOL_GPL(usb_unanchor_urb);
1864
1865 @@ -749,20 +756,11 @@ EXPORT_SYMBOL_GPL(usb_unpoison_anchored_urbs);
1866 void usb_unlink_anchored_urbs(struct usb_anchor *anchor)
1867 {
1868 struct urb *victim;
1869 - unsigned long flags;
1870
1871 - spin_lock_irqsave(&anchor->lock, flags);
1872 - while (!list_empty(&anchor->urb_list)) {
1873 - victim = list_entry(anchor->urb_list.prev, struct urb,
1874 - anchor_list);
1875 - usb_get_urb(victim);
1876 - spin_unlock_irqrestore(&anchor->lock, flags);
1877 - /* this will unanchor the URB */
1878 + while ((victim = usb_get_from_anchor(anchor)) != NULL) {
1879 usb_unlink_urb(victim);
1880 usb_put_urb(victim);
1881 - spin_lock_irqsave(&anchor->lock, flags);
1882 }
1883 - spin_unlock_irqrestore(&anchor->lock, flags);
1884 }
1885 EXPORT_SYMBOL_GPL(usb_unlink_anchored_urbs);
1886
1887 @@ -799,12 +797,11 @@ struct urb *usb_get_from_anchor(struct usb_anchor *anchor)
1888 victim = list_entry(anchor->urb_list.next, struct urb,
1889 anchor_list);
1890 usb_get_urb(victim);
1891 - spin_unlock_irqrestore(&anchor->lock, flags);
1892 - usb_unanchor_urb(victim);
1893 + __usb_unanchor_urb(victim, anchor);
1894 } else {
1895 - spin_unlock_irqrestore(&anchor->lock, flags);
1896 victim = NULL;
1897 }
1898 + spin_unlock_irqrestore(&anchor->lock, flags);
1899
1900 return victim;
1901 }
1902 @@ -826,12 +823,7 @@ void usb_scuttle_anchored_urbs(struct usb_anchor *anchor)
1903 while (!list_empty(&anchor->urb_list)) {
1904 victim = list_entry(anchor->urb_list.prev, struct urb,
1905 anchor_list);
1906 - usb_get_urb(victim);
1907 - spin_unlock_irqrestore(&anchor->lock, flags);
1908 - /* this may free the URB */
1909 - usb_unanchor_urb(victim);
1910 - usb_put_urb(victim);
1911 - spin_lock_irqsave(&anchor->lock, flags);
1912 + __usb_unanchor_urb(victim, anchor);
1913 }
1914 spin_unlock_irqrestore(&anchor->lock, flags);
1915 }
1916 diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
1917 index d43d176..19f5070 100644
1918 --- a/drivers/usb/host/ehci-pci.c
1919 +++ b/drivers/usb/host/ehci-pci.c
1920 @@ -114,6 +114,7 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
1921 break;
1922 case PCI_VENDOR_ID_INTEL:
1923 ehci->need_io_watchdog = 0;
1924 + ehci->fs_i_thresh = 1;
1925 if (pdev->device == 0x27cc) {
1926 ehci->broken_periodic = 1;
1927 ehci_info(ehci, "using broken periodic workaround\n");
1928 diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c
1929 index 805ec63..93f58e5 100644
1930 --- a/drivers/usb/host/ehci-sched.c
1931 +++ b/drivers/usb/host/ehci-sched.c
1932 @@ -1400,7 +1400,6 @@ iso_stream_schedule (
1933 int status;
1934 unsigned mod = ehci->periodic_size << 3;
1935 struct ehci_iso_sched *sched = urb->hcpriv;
1936 - struct pci_dev *pdev;
1937
1938 if (sched->span > (mod - SCHEDULE_SLOP)) {
1939 ehci_dbg (ehci, "iso request %p too long\n", urb);
1940 @@ -1427,15 +1426,14 @@ iso_stream_schedule (
1941 * slot in the schedule, implicitly assuming URB_ISO_ASAP.
1942 */
1943 if (likely (!list_empty (&stream->td_list))) {
1944 - pdev = to_pci_dev(ehci_to_hcd(ehci)->self.controller);
1945 start = stream->next_uframe;
1946
1947 /* For high speed devices, allow scheduling within the
1948 - * isochronous scheduling threshold. For full speed devices,
1949 - * don't. (Work around for Intel ICH9 bug.)
1950 + * isochronous scheduling threshold. For full speed devices
1951 + * and Intel PCI-based controllers, don't (work around for
1952 + * Intel ICH9 bug).
1953 */
1954 - if (!stream->highspeed &&
1955 - pdev->vendor == PCI_VENDOR_ID_INTEL)
1956 + if (!stream->highspeed && ehci->fs_i_thresh)
1957 next = now + ehci->i_thresh;
1958 else
1959 next = now;
1960 diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h
1961 index 650a687..8b3d9c8 100644
1962 --- a/drivers/usb/host/ehci.h
1963 +++ b/drivers/usb/host/ehci.h
1964 @@ -130,6 +130,7 @@ struct ehci_hcd { /* one per controller */
1965 unsigned has_amcc_usb23:1;
1966 unsigned need_io_watchdog:1;
1967 unsigned broken_periodic:1;
1968 + unsigned fs_i_thresh:1; /* Intel iso scheduling */
1969
1970 /* required for usb32 quirk */
1971 #define OHCI_CTRL_HCFS (3 << 6)
1972 diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
1973 index 16dffe9..c3049c7 100644
1974 --- a/drivers/usb/misc/usbtest.c
1975 +++ b/drivers/usb/misc/usbtest.c
1976 @@ -1378,7 +1378,6 @@ static void iso_callback (struct urb *urb)
1977 break;
1978 }
1979 }
1980 - simple_free_urb (urb);
1981
1982 ctx->pending--;
1983 if (ctx->pending == 0) {
1984 @@ -1495,6 +1494,7 @@ test_iso_queue (struct usbtest_dev *dev, struct usbtest_param *param,
1985 }
1986
1987 simple_free_urb (urbs [i]);
1988 + urbs[i] = NULL;
1989 context.pending--;
1990 context.submit_error = 1;
1991 break;
1992 @@ -1504,6 +1504,10 @@ test_iso_queue (struct usbtest_dev *dev, struct usbtest_param *param,
1993
1994 wait_for_completion (&context.done);
1995
1996 + for (i = 0; i < param->sglen; i++) {
1997 + if (urbs[i])
1998 + simple_free_urb(urbs[i]);
1999 + }
2000 /*
2001 * Isochronous transfers are expected to fail sometimes. As an
2002 * arbitrary limit, we will report an error if any submissions
2003 diff --git a/drivers/usb/mon/mon_bin.c b/drivers/usb/mon/mon_bin.c
2004 index 61c76b1..56c93ca 100644
2005 --- a/drivers/usb/mon/mon_bin.c
2006 +++ b/drivers/usb/mon/mon_bin.c
2007 @@ -1009,7 +1009,7 @@ static int mon_bin_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
2008
2009 mutex_lock(&rp->fetch_lock);
2010 spin_lock_irqsave(&rp->b_lock, flags);
2011 - mon_free_buff(rp->b_vec, size/CHUNK_SIZE);
2012 + mon_free_buff(rp->b_vec, rp->b_size/CHUNK_SIZE);
2013 kfree(rp->b_vec);
2014 rp->b_vec = vec;
2015 rp->b_size = size;
2016 diff --git a/drivers/usb/musb/musb_debugfs.c b/drivers/usb/musb/musb_debugfs.c
2017 index bba76af..c79a5e3 100644
2018 --- a/drivers/usb/musb/musb_debugfs.c
2019 +++ b/drivers/usb/musb/musb_debugfs.c
2020 @@ -92,29 +92,29 @@ static const struct musb_register_map musb_regmap[] = {
2021 { "LS_EOF1", 0x7E, 8 },
2022 { "SOFT_RST", 0x7F, 8 },
2023 { "DMA_CNTLch0", 0x204, 16 },
2024 - { "DMA_ADDRch0", 0x208, 16 },
2025 - { "DMA_COUNTch0", 0x20C, 16 },
2026 + { "DMA_ADDRch0", 0x208, 32 },
2027 + { "DMA_COUNTch0", 0x20C, 32 },
2028 { "DMA_CNTLch1", 0x214, 16 },
2029 - { "DMA_ADDRch1", 0x218, 16 },
2030 - { "DMA_COUNTch1", 0x21C, 16 },
2031 + { "DMA_ADDRch1", 0x218, 32 },
2032 + { "DMA_COUNTch1", 0x21C, 32 },
2033 { "DMA_CNTLch2", 0x224, 16 },
2034 - { "DMA_ADDRch2", 0x228, 16 },
2035 - { "DMA_COUNTch2", 0x22C, 16 },
2036 + { "DMA_ADDRch2", 0x228, 32 },
2037 + { "DMA_COUNTch2", 0x22C, 32 },
2038 { "DMA_CNTLch3", 0x234, 16 },
2039 - { "DMA_ADDRch3", 0x238, 16 },
2040 - { "DMA_COUNTch3", 0x23C, 16 },
2041 + { "DMA_ADDRch3", 0x238, 32 },
2042 + { "DMA_COUNTch3", 0x23C, 32 },
2043 { "DMA_CNTLch4", 0x244, 16 },
2044 - { "DMA_ADDRch4", 0x248, 16 },
2045 - { "DMA_COUNTch4", 0x24C, 16 },
2046 + { "DMA_ADDRch4", 0x248, 32 },
2047 + { "DMA_COUNTch4", 0x24C, 32 },
2048 { "DMA_CNTLch5", 0x254, 16 },
2049 - { "DMA_ADDRch5", 0x258, 16 },
2050 - { "DMA_COUNTch5", 0x25C, 16 },
2051 + { "DMA_ADDRch5", 0x258, 32 },
2052 + { "DMA_COUNTch5", 0x25C, 32 },
2053 { "DMA_CNTLch6", 0x264, 16 },
2054 - { "DMA_ADDRch6", 0x268, 16 },
2055 - { "DMA_COUNTch6", 0x26C, 16 },
2056 + { "DMA_ADDRch6", 0x268, 32 },
2057 + { "DMA_COUNTch6", 0x26C, 32 },
2058 { "DMA_CNTLch7", 0x274, 16 },
2059 - { "DMA_ADDRch7", 0x278, 16 },
2060 - { "DMA_COUNTch7", 0x27C, 16 },
2061 + { "DMA_ADDRch7", 0x278, 32 },
2062 + { "DMA_COUNTch7", 0x27C, 32 },
2063 { } /* Terminating Entry */
2064 };
2065
2066 diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
2067 index 8b8c797..2bef441 100644
2068 --- a/drivers/usb/serial/cp210x.c
2069 +++ b/drivers/usb/serial/cp210x.c
2070 @@ -126,6 +126,10 @@ static const struct usb_device_id id_table[] = {
2071 { USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */
2072 { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */
2073 { USB_DEVICE(0x413C, 0x9500) }, /* DW700 GPS USB interface */
2074 + { USB_DEVICE(0x16DC, 0x0010) }, /* W-IE-NE-R Plein & Baus GmbH PL512 Power Supply */
2075 + { USB_DEVICE(0x16DC, 0x0011) }, /* W-IE-NE-R Plein & Baus GmbH RCM Remote Control for MARATON Power Supply */
2076 + { USB_DEVICE(0x16DC, 0x0012) }, /* W-IE-NE-R Plein & Baus GmbH MPOD Multi Channel Power Supply */
2077 + { USB_DEVICE(0x16DC, 0x0015) }, /* W-IE-NE-R Plein & Baus GmbH CML Control, Monitoring and Data Logger */
2078 { } /* Terminating Entry */
2079 };
2080
2081 diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
2082 index e298dc4..eb12d9b 100644
2083 --- a/drivers/usb/serial/ftdi_sio.c
2084 +++ b/drivers/usb/serial/ftdi_sio.c
2085 @@ -157,6 +157,9 @@ static struct usb_device_id id_table_combined [] = {
2086 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_5_PID) },
2087 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_6_PID) },
2088 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_7_PID) },
2089 + { USB_DEVICE(FTDI_VID, FTDI_USINT_CAT_PID) },
2090 + { USB_DEVICE(FTDI_VID, FTDI_USINT_WKEY_PID) },
2091 + { USB_DEVICE(FTDI_VID, FTDI_USINT_RS232_PID) },
2092 { USB_DEVICE(FTDI_VID, FTDI_ACTZWAVE_PID) },
2093 { USB_DEVICE(FTDI_VID, FTDI_IRTRANS_PID) },
2094 { USB_DEVICE(FTDI_VID, FTDI_IPLUS_PID) },
2095 @@ -746,6 +749,7 @@ static struct usb_device_id id_table_combined [] = {
2096 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
2097 { USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_SH4_PID),
2098 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
2099 + { USB_DEVICE(FTDI_VID, SEGWAY_RMP200_PID) },
2100 { }, /* Optional parameter entry */
2101 { } /* Terminating entry */
2102 };
2103 diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
2104 index d01946d..6e612c5 100644
2105 --- a/drivers/usb/serial/ftdi_sio_ids.h
2106 +++ b/drivers/usb/serial/ftdi_sio_ids.h
2107 @@ -40,6 +40,11 @@
2108
2109 #define FTDI_NXTCAM_PID 0xABB8 /* NXTCam for Mindstorms NXT */
2110
2111 +/* US Interface Navigator (http://www.usinterface.com/) */
2112 +#define FTDI_USINT_CAT_PID 0xb810 /* Navigator CAT and 2nd PTT lines */
2113 +#define FTDI_USINT_WKEY_PID 0xb811 /* Navigator WKEY and FSK lines */
2114 +#define FTDI_USINT_RS232_PID 0xb812 /* Navigator RS232 and CONFIG lines */
2115 +
2116 /* OOCDlink by Joern Kaipf <joernk@web.de>
2117 * (http://www.joernonline.de/dw/doku.php?id=start&idx=projects:oocdlink) */
2118 #define FTDI_OOCDLINK_PID 0xbaf8 /* Amontec JTAGkey */
2119 @@ -1032,3 +1037,8 @@
2120 #define XVERVE_SIGNALYZER_SH2_PID 0xBCA2
2121 #define XVERVE_SIGNALYZER_SH4_PID 0xBCA4
2122
2123 +/*
2124 + * Segway Robotic Mobility Platform USB interface (using VID 0x0403)
2125 + * Submitted by John G. Rogers
2126 + */
2127 +#define SEGWAY_RMP200_PID 0xe729
2128 diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c
2129 index a817ced..ca92f67 100644
2130 --- a/drivers/usb/serial/generic.c
2131 +++ b/drivers/usb/serial/generic.c
2132 @@ -208,18 +208,23 @@ retry:
2133 urb->transfer_buffer_length = count;
2134 usb_serial_debug_data(debug, &port->dev, __func__, count,
2135 urb->transfer_buffer);
2136 + spin_lock_irqsave(&port->lock, flags);
2137 + port->tx_bytes += count;
2138 + spin_unlock_irqrestore(&port->lock, flags);
2139 +
2140 + clear_bit(i, &port->write_urbs_free);
2141 result = usb_submit_urb(urb, GFP_ATOMIC);
2142 if (result) {
2143 dev_err(&port->dev, "%s - error submitting urb: %d\n",
2144 __func__, result);
2145 + set_bit(i, &port->write_urbs_free);
2146 + spin_lock_irqsave(&port->lock, flags);
2147 + port->tx_bytes -= count;
2148 + spin_unlock_irqrestore(&port->lock, flags);
2149 +
2150 clear_bit_unlock(USB_SERIAL_WRITE_BUSY, &port->flags);
2151 return result;
2152 }
2153 - clear_bit(i, &port->write_urbs_free);
2154 -
2155 - spin_lock_irqsave(&port->lock, flags);
2156 - port->tx_bytes += count;
2157 - spin_unlock_irqrestore(&port->lock, flags);
2158
2159 /* Try sending off another urb, unless in irq context (in which case
2160 * there will be no free urb). */
2161 diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
2162 index 5cd30e4..5c35b3a 100644
2163 --- a/drivers/usb/serial/option.c
2164 +++ b/drivers/usb/serial/option.c
2165 @@ -145,7 +145,10 @@ static void option_instat_callback(struct urb *urb);
2166 #define HUAWEI_PRODUCT_E143D 0x143D
2167 #define HUAWEI_PRODUCT_E143E 0x143E
2168 #define HUAWEI_PRODUCT_E143F 0x143F
2169 +#define HUAWEI_PRODUCT_K4505 0x1464
2170 +#define HUAWEI_PRODUCT_K3765 0x1465
2171 #define HUAWEI_PRODUCT_E14AC 0x14AC
2172 +#define HUAWEI_PRODUCT_ETS1220 0x1803
2173
2174 #define QUANTA_VENDOR_ID 0x0408
2175 #define QUANTA_PRODUCT_Q101 0xEA02
2176 @@ -482,6 +485,9 @@ static const struct usb_device_id option_ids[] = {
2177 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143D, 0xff, 0xff, 0xff) },
2178 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143E, 0xff, 0xff, 0xff) },
2179 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143F, 0xff, 0xff, 0xff) },
2180 + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4505, 0xff, 0xff, 0xff) },
2181 + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff) },
2182 + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ETS1220, 0xff, 0xff, 0xff) },
2183 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC) },
2184 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_9508) },
2185 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */
2186 @@ -1017,6 +1023,13 @@ static int option_probe(struct usb_serial *serial,
2187 serial->interface->cur_altsetting->desc.bInterfaceClass != 0xff)
2188 return -ENODEV;
2189
2190 + /* Don't bind network interfaces on Huawei K3765 & K4505 */
2191 + if (serial->dev->descriptor.idVendor == HUAWEI_VENDOR_ID &&
2192 + (serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K3765 ||
2193 + serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K4505) &&
2194 + serial->interface->cur_altsetting->desc.bInterfaceNumber == 1)
2195 + return -ENODEV;
2196 +
2197 data = serial->private = kzalloc(sizeof(struct usb_wwan_intf_private), GFP_KERNEL);
2198
2199 if (!data)
2200 diff --git a/drivers/video/w100fb.c b/drivers/video/w100fb.c
2201 index e66b8b1..d8b12c3 100644
2202 --- a/drivers/video/w100fb.c
2203 +++ b/drivers/video/w100fb.c
2204 @@ -858,9 +858,9 @@ unsigned long w100fb_gpio_read(int port)
2205 void w100fb_gpio_write(int port, unsigned long value)
2206 {
2207 if (port==W100_GPIO_PORT_A)
2208 - value = writel(value, remapped_regs + mmGPIO_DATA);
2209 + writel(value, remapped_regs + mmGPIO_DATA);
2210 else
2211 - value = writel(value, remapped_regs + mmGPIO_DATA2);
2212 + writel(value, remapped_regs + mmGPIO_DATA2);
2213 }
2214 EXPORT_SYMBOL(w100fb_gpio_read);
2215 EXPORT_SYMBOL(w100fb_gpio_write);
2216 diff --git a/drivers/xen/events.c b/drivers/xen/events.c
2217 index db8f506..28f133a 100644
2218 --- a/drivers/xen/events.c
2219 +++ b/drivers/xen/events.c
2220 @@ -536,6 +536,7 @@ int bind_ipi_to_irqhandler(enum ipi_vector ipi,
2221 if (irq < 0)
2222 return irq;
2223
2224 + irqflags |= IRQF_NO_SUSPEND;
2225 retval = request_irq(irq, handler, irqflags, devname, dev_id);
2226 if (retval != 0) {
2227 unbind_from_irq(irq);
2228 diff --git a/fs/block_dev.c b/fs/block_dev.c
2229 index b3171fb..4c54c86 100644
2230 --- a/fs/block_dev.c
2231 +++ b/fs/block_dev.c
2232 @@ -1339,10 +1339,12 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
2233 /*
2234 * hooks: /n/, see "layering violations".
2235 */
2236 - ret = devcgroup_inode_permission(bdev->bd_inode, perm);
2237 - if (ret != 0) {
2238 - bdput(bdev);
2239 - return ret;
2240 + if (!for_part) {
2241 + ret = devcgroup_inode_permission(bdev->bd_inode, perm);
2242 + if (ret != 0) {
2243 + bdput(bdev);
2244 + return ret;
2245 + }
2246 }
2247
2248 lock_kernel();
2249 diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c
2250 index e8fcf4e..622c9514 100644
2251 --- a/fs/ecryptfs/file.c
2252 +++ b/fs/ecryptfs/file.c
2253 @@ -199,7 +199,7 @@ static int ecryptfs_open(struct inode *inode, struct file *file)
2254 "the persistent file for the dentry with name "
2255 "[%s]; rc = [%d]\n", __func__,
2256 ecryptfs_dentry->d_name.name, rc);
2257 - goto out;
2258 + goto out_free;
2259 }
2260 }
2261 if ((ecryptfs_inode_to_private(inode)->lower_file->f_flags & O_RDONLY)
2262 @@ -207,7 +207,7 @@ static int ecryptfs_open(struct inode *inode, struct file *file)
2263 rc = -EPERM;
2264 printk(KERN_WARNING "%s: Lower persistent file is RO; eCryptfs "
2265 "file must hence be opened RO\n", __func__);
2266 - goto out;
2267 + goto out_free;
2268 }
2269 ecryptfs_set_file_lower(
2270 file, ecryptfs_inode_to_private(inode)->lower_file);
2271 @@ -292,12 +292,40 @@ static int ecryptfs_fasync(int fd, struct file *file, int flag)
2272 return rc;
2273 }
2274
2275 -static int ecryptfs_ioctl(struct inode *inode, struct file *file,
2276 - unsigned int cmd, unsigned long arg);
2277 +static long
2278 +ecryptfs_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
2279 +{
2280 + struct file *lower_file = NULL;
2281 + long rc = -ENOTTY;
2282 +
2283 + if (ecryptfs_file_to_private(file))
2284 + lower_file = ecryptfs_file_to_lower(file);
2285 + if (lower_file && lower_file->f_op && lower_file->f_op->unlocked_ioctl)
2286 + rc = lower_file->f_op->unlocked_ioctl(lower_file, cmd, arg);
2287 + return rc;
2288 +}
2289 +
2290 +#ifdef CONFIG_COMPAT
2291 +static long
2292 +ecryptfs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
2293 +{
2294 + struct file *lower_file = NULL;
2295 + long rc = -ENOIOCTLCMD;
2296 +
2297 + if (ecryptfs_file_to_private(file))
2298 + lower_file = ecryptfs_file_to_lower(file);
2299 + if (lower_file && lower_file->f_op && lower_file->f_op->compat_ioctl)
2300 + rc = lower_file->f_op->compat_ioctl(lower_file, cmd, arg);
2301 + return rc;
2302 +}
2303 +#endif
2304
2305 const struct file_operations ecryptfs_dir_fops = {
2306 .readdir = ecryptfs_readdir,
2307 - .ioctl = ecryptfs_ioctl,
2308 + .unlocked_ioctl = ecryptfs_unlocked_ioctl,
2309 +#ifdef CONFIG_COMPAT
2310 + .compat_ioctl = ecryptfs_compat_ioctl,
2311 +#endif
2312 .open = ecryptfs_open,
2313 .flush = ecryptfs_flush,
2314 .release = ecryptfs_release,
2315 @@ -313,7 +341,10 @@ const struct file_operations ecryptfs_main_fops = {
2316 .write = do_sync_write,
2317 .aio_write = generic_file_aio_write,
2318 .readdir = ecryptfs_readdir,
2319 - .ioctl = ecryptfs_ioctl,
2320 + .unlocked_ioctl = ecryptfs_unlocked_ioctl,
2321 +#ifdef CONFIG_COMPAT
2322 + .compat_ioctl = ecryptfs_compat_ioctl,
2323 +#endif
2324 .mmap = generic_file_mmap,
2325 .open = ecryptfs_open,
2326 .flush = ecryptfs_flush,
2327 @@ -322,20 +353,3 @@ const struct file_operations ecryptfs_main_fops = {
2328 .fasync = ecryptfs_fasync,
2329 .splice_read = generic_file_splice_read,
2330 };
2331 -
2332 -static int
2333 -ecryptfs_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
2334 - unsigned long arg)
2335 -{
2336 - int rc = 0;
2337 - struct file *lower_file = NULL;
2338 -
2339 - if (ecryptfs_file_to_private(file))
2340 - lower_file = ecryptfs_file_to_lower(file);
2341 - if (lower_file && lower_file->f_op && lower_file->f_op->ioctl)
2342 - rc = lower_file->f_op->ioctl(ecryptfs_inode_to_lower(inode),
2343 - lower_file, cmd, arg);
2344 - else
2345 - rc = -ENOTTY;
2346 - return rc;
2347 -}
2348 diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
2349 index 31ef525..8cd617b 100644
2350 --- a/fs/ecryptfs/inode.c
2351 +++ b/fs/ecryptfs/inode.c
2352 @@ -264,7 +264,7 @@ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
2353 printk(KERN_ERR "%s: Out of memory whilst attempting "
2354 "to allocate ecryptfs_dentry_info struct\n",
2355 __func__);
2356 - goto out_dput;
2357 + goto out_put;
2358 }
2359 ecryptfs_set_dentry_lower(ecryptfs_dentry, lower_dentry);
2360 ecryptfs_set_dentry_lower_mnt(ecryptfs_dentry, lower_mnt);
2361 @@ -339,8 +339,9 @@ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
2362 out_free_kmem:
2363 kmem_cache_free(ecryptfs_header_cache_2, page_virt);
2364 goto out;
2365 -out_dput:
2366 +out_put:
2367 dput(lower_dentry);
2368 + mntput(lower_mnt);
2369 d_drop(ecryptfs_dentry);
2370 out:
2371 return rc;
2372 diff --git a/fs/ext4/super.c b/fs/ext4/super.c
2373 index 4e8983a..a45ced9 100644
2374 --- a/fs/ext4/super.c
2375 +++ b/fs/ext4/super.c
2376 @@ -241,7 +241,7 @@ handle_t *ext4_journal_start_sb(struct super_block *sb, int nblocks)
2377 if (sb->s_flags & MS_RDONLY)
2378 return ERR_PTR(-EROFS);
2379
2380 - vfs_check_frozen(sb, SB_FREEZE_WRITE);
2381 + vfs_check_frozen(sb, SB_FREEZE_TRANS);
2382 /* Special case here: if the journal has aborted behind our
2383 * backs (eg. EIO in the commit thread), then we still need to
2384 * take the FS itself readonly cleanly. */
2385 @@ -3491,7 +3491,7 @@ int ext4_force_commit(struct super_block *sb)
2386
2387 journal = EXT4_SB(sb)->s_journal;
2388 if (journal) {
2389 - vfs_check_frozen(sb, SB_FREEZE_WRITE);
2390 + vfs_check_frozen(sb, SB_FREEZE_TRANS);
2391 ret = ext4_journal_force_commit(journal);
2392 }
2393
2394 diff --git a/fs/jfs/xattr.c b/fs/jfs/xattr.c
2395 index fa96bbb..2d7f165 100644
2396 --- a/fs/jfs/xattr.c
2397 +++ b/fs/jfs/xattr.c
2398 @@ -86,46 +86,25 @@ struct ea_buffer {
2399 #define EA_MALLOC 0x0008
2400
2401
2402 +static int is_known_namespace(const char *name)
2403 +{
2404 + if (strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN) &&
2405 + strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN) &&
2406 + strncmp(name, XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN) &&
2407 + strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN))
2408 + return false;
2409 +
2410 + return true;
2411 +}
2412 +
2413 /*
2414 * These three routines are used to recognize on-disk extended attributes
2415 * that are in a recognized namespace. If the attribute is not recognized,
2416 * "os2." is prepended to the name
2417 */
2418 -static inline int is_os2_xattr(struct jfs_ea *ea)
2419 +static int is_os2_xattr(struct jfs_ea *ea)
2420 {
2421 - /*
2422 - * Check for "system."
2423 - */
2424 - if ((ea->namelen >= XATTR_SYSTEM_PREFIX_LEN) &&
2425 - !strncmp(ea->name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
2426 - return false;
2427 - /*
2428 - * Check for "user."
2429 - */
2430 - if ((ea->namelen >= XATTR_USER_PREFIX_LEN) &&
2431 - !strncmp(ea->name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN))
2432 - return false;
2433 - /*
2434 - * Check for "security."
2435 - */
2436 - if ((ea->namelen >= XATTR_SECURITY_PREFIX_LEN) &&
2437 - !strncmp(ea->name, XATTR_SECURITY_PREFIX,
2438 - XATTR_SECURITY_PREFIX_LEN))
2439 - return false;
2440 - /*
2441 - * Check for "trusted."
2442 - */
2443 - if ((ea->namelen >= XATTR_TRUSTED_PREFIX_LEN) &&
2444 - !strncmp(ea->name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN))
2445 - return false;
2446 - /*
2447 - * Add any other valid namespace prefixes here
2448 - */
2449 -
2450 - /*
2451 - * We assume it's OS/2's flat namespace
2452 - */
2453 - return true;
2454 + return !is_known_namespace(ea->name);
2455 }
2456
2457 static inline int name_size(struct jfs_ea *ea)
2458 @@ -764,13 +743,23 @@ static int can_set_xattr(struct inode *inode, const char *name,
2459 if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
2460 return can_set_system_xattr(inode, name, value, value_len);
2461
2462 + if (!strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN)) {
2463 + /*
2464 + * This makes sure that we aren't trying to set an
2465 + * attribute in a different namespace by prefixing it
2466 + * with "os2."
2467 + */
2468 + if (is_known_namespace(name + XATTR_OS2_PREFIX_LEN))
2469 + return -EOPNOTSUPP;
2470 + return 0;
2471 + }
2472 +
2473 /*
2474 * Don't allow setting an attribute in an unknown namespace.
2475 */
2476 if (strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN) &&
2477 strncmp(name, XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN) &&
2478 - strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN) &&
2479 - strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN))
2480 + strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN))
2481 return -EOPNOTSUPP;
2482
2483 return 0;
2484 @@ -952,19 +941,8 @@ ssize_t __jfs_getxattr(struct inode *inode, const char *name, void *data,
2485 int xattr_size;
2486 ssize_t size;
2487 int namelen = strlen(name);
2488 - char *os2name = NULL;
2489 char *value;
2490
2491 - if (strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN) == 0) {
2492 - os2name = kmalloc(namelen - XATTR_OS2_PREFIX_LEN + 1,
2493 - GFP_KERNEL);
2494 - if (!os2name)
2495 - return -ENOMEM;
2496 - strcpy(os2name, name + XATTR_OS2_PREFIX_LEN);
2497 - name = os2name;
2498 - namelen -= XATTR_OS2_PREFIX_LEN;
2499 - }
2500 -
2501 down_read(&JFS_IP(inode)->xattr_sem);
2502
2503 xattr_size = ea_get(inode, &ea_buf, 0);
2504 @@ -1002,8 +980,6 @@ ssize_t __jfs_getxattr(struct inode *inode, const char *name, void *data,
2505 out:
2506 up_read(&JFS_IP(inode)->xattr_sem);
2507
2508 - kfree(os2name);
2509 -
2510 return size;
2511 }
2512
2513 @@ -1012,6 +988,19 @@ ssize_t jfs_getxattr(struct dentry *dentry, const char *name, void *data,
2514 {
2515 int err;
2516
2517 + if (strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN) == 0) {
2518 + /*
2519 + * skip past "os2." prefix
2520 + */
2521 + name += XATTR_OS2_PREFIX_LEN;
2522 + /*
2523 + * Don't allow retrieving properly prefixed attributes
2524 + * by prepending them with "os2."
2525 + */
2526 + if (is_known_namespace(name))
2527 + return -EOPNOTSUPP;
2528 + }
2529 +
2530 err = __jfs_getxattr(dentry->d_inode, name, data, buf_size);
2531
2532 return err;
2533 diff --git a/fs/namespace.c b/fs/namespace.c
2534 index 88058de..32dcd24 100644
2535 --- a/fs/namespace.c
2536 +++ b/fs/namespace.c
2537 @@ -1984,7 +1984,7 @@ long do_mount(char *dev_name, char *dir_name, char *type_page,
2538 if (flags & MS_RDONLY)
2539 mnt_flags |= MNT_READONLY;
2540
2541 - flags &= ~(MS_NOSUID | MS_NOEXEC | MS_NODEV | MS_ACTIVE |
2542 + flags &= ~(MS_NOSUID | MS_NOEXEC | MS_NODEV | MS_ACTIVE | MS_BORN |
2543 MS_NOATIME | MS_NODIRATIME | MS_RELATIME| MS_KERNMOUNT |
2544 MS_STRICTATIME);
2545
2546 diff --git a/fs/signalfd.c b/fs/signalfd.c
2547 index f329849c..1c5a6ad 100644
2548 --- a/fs/signalfd.c
2549 +++ b/fs/signalfd.c
2550 @@ -88,6 +88,7 @@ static int signalfd_copyinfo(struct signalfd_siginfo __user *uinfo,
2551 err |= __put_user(kinfo->si_tid, &uinfo->ssi_tid);
2552 err |= __put_user(kinfo->si_overrun, &uinfo->ssi_overrun);
2553 err |= __put_user((long) kinfo->si_ptr, &uinfo->ssi_ptr);
2554 + err |= __put_user(kinfo->si_int, &uinfo->ssi_int);
2555 break;
2556 case __SI_POLL:
2557 err |= __put_user(kinfo->si_band, &uinfo->ssi_band);
2558 @@ -111,6 +112,7 @@ static int signalfd_copyinfo(struct signalfd_siginfo __user *uinfo,
2559 err |= __put_user(kinfo->si_pid, &uinfo->ssi_pid);
2560 err |= __put_user(kinfo->si_uid, &uinfo->ssi_uid);
2561 err |= __put_user((long) kinfo->si_ptr, &uinfo->ssi_ptr);
2562 + err |= __put_user(kinfo->si_int, &uinfo->ssi_int);
2563 break;
2564 default:
2565 /*
2566 diff --git a/fs/super.c b/fs/super.c
2567 index 938119a..c7765bd 100644
2568 --- a/fs/super.c
2569 +++ b/fs/super.c
2570 @@ -305,8 +305,13 @@ retry:
2571 if (s) {
2572 up_write(&s->s_umount);
2573 destroy_super(s);
2574 + s = NULL;
2575 }
2576 down_write(&old->s_umount);
2577 + if (unlikely(!(old->s_flags & MS_BORN))) {
2578 + deactivate_locked_super(old);
2579 + goto retry;
2580 + }
2581 return old;
2582 }
2583 }
2584 @@ -909,6 +914,7 @@ vfs_kern_mount(struct file_system_type *type, int flags, const char *name, void
2585 goto out_free_secdata;
2586 BUG_ON(!mnt->mnt_sb);
2587 WARN_ON(!mnt->mnt_sb->s_bdi);
2588 + mnt->mnt_sb->s_flags |= MS_BORN;
2589
2590 error = security_sb_kern_mount(mnt->mnt_sb, flags, secdata);
2591 if (error)
2592 diff --git a/include/linux/Kbuild b/include/linux/Kbuild
2593 index 2fc8e14..9aa9bca 100644
2594 --- a/include/linux/Kbuild
2595 +++ b/include/linux/Kbuild
2596 @@ -276,6 +276,7 @@ ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/kvm_para.h \
2597 $(srctree)/include/asm-$(SRCARCH)/kvm_para.h),)
2598 unifdef-y += kvm_para.h
2599 endif
2600 +unifdef-y += l2tp.h
2601 unifdef-y += llc.h
2602 unifdef-y += loop.h
2603 unifdef-y += lp.h
2604 diff --git a/include/linux/fs.h b/include/linux/fs.h
2605 index 68ca1b0..f0f447a 100644
2606 --- a/include/linux/fs.h
2607 +++ b/include/linux/fs.h
2608 @@ -145,11 +145,11 @@ struct inodes_stat_t {
2609 *
2610 */
2611 #define RW_MASK 1
2612 -#define RWA_MASK 2
2613 +#define RWA_MASK 16
2614 #define READ 0
2615 #define WRITE 1
2616 -#define READA 2 /* read-ahead - don't block if no resources */
2617 -#define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */
2618 +#define READA 16 /* readahead - don't block if no resources */
2619 +#define SWRITE 17 /* for ll_rw_block(), wait for buffer lock */
2620 #define READ_SYNC (READ | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG))
2621 #define READ_META (READ | (1 << BIO_RW_META))
2622 #define WRITE_SYNC_PLUG (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE))
2623 @@ -209,6 +209,7 @@ struct inodes_stat_t {
2624 #define MS_KERNMOUNT (1<<22) /* this is a kern_mount call */
2625 #define MS_I_VERSION (1<<23) /* Update inode I_version field */
2626 #define MS_STRICTATIME (1<<24) /* Always perform atime updates */
2627 +#define MS_BORN (1<<29)
2628 #define MS_ACTIVE (1<<30)
2629 #define MS_NOUSER (1<<31)
2630
2631 diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
2632 index c233113..a0384a4 100644
2633 --- a/include/linux/interrupt.h
2634 +++ b/include/linux/interrupt.h
2635 @@ -53,16 +53,21 @@
2636 * IRQF_ONESHOT - Interrupt is not reenabled after the hardirq handler finished.
2637 * Used by threaded interrupts which need to keep the
2638 * irq line disabled until the threaded handler has been run.
2639 + * IRQF_NO_SUSPEND - Do not disable this IRQ during suspend
2640 + *
2641 */
2642 #define IRQF_DISABLED 0x00000020
2643 #define IRQF_SAMPLE_RANDOM 0x00000040
2644 #define IRQF_SHARED 0x00000080
2645 #define IRQF_PROBE_SHARED 0x00000100
2646 -#define IRQF_TIMER 0x00000200
2647 +#define __IRQF_TIMER 0x00000200
2648 #define IRQF_PERCPU 0x00000400
2649 #define IRQF_NOBALANCING 0x00000800
2650 #define IRQF_IRQPOLL 0x00001000
2651 #define IRQF_ONESHOT 0x00002000
2652 +#define IRQF_NO_SUSPEND 0x00004000
2653 +
2654 +#define IRQF_TIMER (__IRQF_TIMER | IRQF_NO_SUSPEND)
2655
2656 /*
2657 * Bits used by threaded handlers:
2658 diff --git a/include/linux/notifier.h b/include/linux/notifier.h
2659 index 22c2abb..b2f1a4d 100644
2660 --- a/include/linux/notifier.h
2661 +++ b/include/linux/notifier.h
2662 @@ -210,7 +210,7 @@ static inline int notifier_to_errno(int ret)
2663 #define NETDEV_POST_INIT 0x0010
2664 #define NETDEV_UNREGISTER_BATCH 0x0011
2665 #define NETDEV_BONDING_DESLAVE 0x0012
2666 -#define NETDEV_NOTIFY_PEERS 0x0012
2667 +#define NETDEV_NOTIFY_PEERS 0x0013
2668
2669 #define SYS_DOWN 0x0001 /* Notify of system down */
2670 #define SYS_RESTART SYS_DOWN
2671 diff --git a/include/linux/sched.h b/include/linux/sched.h
2672 index 0478888..5ee397e 100644
2673 --- a/include/linux/sched.h
2674 +++ b/include/linux/sched.h
2675 @@ -274,17 +274,11 @@ extern cpumask_var_t nohz_cpu_mask;
2676 #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ)
2677 extern int select_nohz_load_balancer(int cpu);
2678 extern int get_nohz_load_balancer(void);
2679 -extern int nohz_ratelimit(int cpu);
2680 #else
2681 static inline int select_nohz_load_balancer(int cpu)
2682 {
2683 return 0;
2684 }
2685 -
2686 -static inline int nohz_ratelimit(int cpu)
2687 -{
2688 - return 0;
2689 -}
2690 #endif
2691
2692 /*
2693 diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h
2694 index 16b7f33..3e93de7 100644
2695 --- a/include/linux/usb/quirks.h
2696 +++ b/include/linux/usb/quirks.h
2697 @@ -26,4 +26,8 @@
2698 and can't handle talking to these interfaces */
2699 #define USB_QUIRK_HONOR_BNUMINTERFACES 0x00000020
2700
2701 +/* device needs a pause during initialization, after we read the device
2702 + descriptor */
2703 +#define USB_QUIRK_DELAY_INIT 0x00000040
2704 +
2705 #endif /* __LINUX_USB_QUIRKS_H */
2706 diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
2707 index e149748..c3003e9 100644
2708 --- a/kernel/irq/manage.c
2709 +++ b/kernel/irq/manage.c
2710 @@ -216,7 +216,7 @@ static inline int setup_affinity(unsigned int irq, struct irq_desc *desc)
2711 void __disable_irq(struct irq_desc *desc, unsigned int irq, bool suspend)
2712 {
2713 if (suspend) {
2714 - if (!desc->action || (desc->action->flags & IRQF_TIMER))
2715 + if (!desc->action || (desc->action->flags & IRQF_NO_SUSPEND))
2716 return;
2717 desc->status |= IRQ_SUSPENDED;
2718 }
2719 diff --git a/kernel/sched.c b/kernel/sched.c
2720 index f52a880..63b4a14 100644
2721 --- a/kernel/sched.c
2722 +++ b/kernel/sched.c
2723 @@ -1232,16 +1232,6 @@ void wake_up_idle_cpu(int cpu)
2724 smp_send_reschedule(cpu);
2725 }
2726
2727 -int nohz_ratelimit(int cpu)
2728 -{
2729 - struct rq *rq = cpu_rq(cpu);
2730 - u64 diff = rq->clock - rq->nohz_stamp;
2731 -
2732 - rq->nohz_stamp = rq->clock;
2733 -
2734 - return diff < (NSEC_PER_SEC / HZ) >> 1;
2735 -}
2736 -
2737 #endif /* CONFIG_NO_HZ */
2738
2739 static u64 sched_avg_period(void)
2740 diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
2741 index 813993b..f898af6 100644
2742 --- a/kernel/time/tick-sched.c
2743 +++ b/kernel/time/tick-sched.c
2744 @@ -325,7 +325,7 @@ void tick_nohz_stop_sched_tick(int inidle)
2745 } while (read_seqretry(&xtime_lock, seq));
2746
2747 if (rcu_needs_cpu(cpu) || printk_needs_cpu(cpu) ||
2748 - arch_needs_cpu(cpu) || nohz_ratelimit(cpu)) {
2749 + arch_needs_cpu(cpu)) {
2750 next_jiffies = last_jiffies + 1;
2751 delta_jiffies = 1;
2752 } else {
2753 diff --git a/mm/memory.c b/mm/memory.c
2754 index bde42c6..aaaedbd 100644
2755 --- a/mm/memory.c
2756 +++ b/mm/memory.c
2757 @@ -2760,6 +2760,26 @@ out_release:
2758 }
2759
2760 /*
2761 + * This is like a special single-page "expand_downwards()",
2762 + * except we must first make sure that 'address-PAGE_SIZE'
2763 + * doesn't hit another vma.
2764 + *
2765 + * The "find_vma()" will do the right thing even if we wrap
2766 + */
2767 +static inline int check_stack_guard_page(struct vm_area_struct *vma, unsigned long address)
2768 +{
2769 + address &= PAGE_MASK;
2770 + if ((vma->vm_flags & VM_GROWSDOWN) && address == vma->vm_start) {
2771 + address -= PAGE_SIZE;
2772 + if (find_vma(vma->vm_mm, address) != vma)
2773 + return -ENOMEM;
2774 +
2775 + expand_stack(vma, address);
2776 + }
2777 + return 0;
2778 +}
2779 +
2780 +/*
2781 * We enter with non-exclusive mmap_sem (to exclude vma changes,
2782 * but allow concurrent faults), and pte mapped but not yet locked.
2783 * We return with mmap_sem still held, but pte unmapped and unlocked.
2784 @@ -2772,6 +2792,11 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
2785 spinlock_t *ptl;
2786 pte_t entry;
2787
2788 + if (check_stack_guard_page(vma, address) < 0) {
2789 + pte_unmap(page_table);
2790 + return VM_FAULT_SIGBUS;
2791 + }
2792 +
2793 if (!(flags & FAULT_FLAG_WRITE)) {
2794 entry = pte_mkspecial(pfn_pte(my_zero_pfn(address),
2795 vma->vm_page_prot));
2796 diff --git a/mm/swapfile.c b/mm/swapfile.c
2797 index 03aa2d5..f08d165 100644
2798 --- a/mm/swapfile.c
2799 +++ b/mm/swapfile.c
2800 @@ -318,8 +318,10 @@ checks:
2801 if (offset > si->highest_bit)
2802 scan_base = offset = si->lowest_bit;
2803
2804 - /* reuse swap entry of cache-only swap if not busy. */
2805 - if (vm_swap_full() && si->swap_map[offset] == SWAP_HAS_CACHE) {
2806 + /* reuse swap entry of cache-only swap if not hibernation. */
2807 + if (vm_swap_full()
2808 + && usage == SWAP_HAS_CACHE
2809 + && si->swap_map[offset] == SWAP_HAS_CACHE) {
2810 int swap_was_freed;
2811 spin_unlock(&swap_lock);
2812 swap_was_freed = __try_to_reclaim_swap(si, offset);
2813 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
2814 index 596ea2f..aa7cc51 100644
2815 --- a/sound/pci/hda/patch_realtek.c
2816 +++ b/sound/pci/hda/patch_realtek.c
2817 @@ -5183,6 +5183,7 @@ static void fillup_priv_adc_nids(struct hda_codec *codec, hda_nid_t *nids,
2818
2819 static struct snd_pci_quirk beep_white_list[] = {
2820 SND_PCI_QUIRK(0x1043, 0x829f, "ASUS", 1),
2821 + SND_PCI_QUIRK(0x8086, 0xd613, "Intel", 1),
2822 {}
2823 };
2824