Magellan Linux

Contents of /trunk/kernel-magellan/patches-3.2/0102-3.2.3-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1644 - (show annotations) (download)
Thu Feb 16 12:24:52 2012 UTC (12 years, 2 months ago) by niro
File size: 127825 byte(s)
-3.2.6-magellan-r1
1 diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c
2 index aa64294..f5bbe0ef 100644
3 --- a/arch/arm/mach-at91/setup.c
4 +++ b/arch/arm/mach-at91/setup.c
5 @@ -27,9 +27,12 @@ EXPORT_SYMBOL(at91_soc_initdata);
6 void __init at91rm9200_set_type(int type)
7 {
8 if (type == ARCH_REVISON_9200_PQFP)
9 - at91_soc_initdata.subtype = AT91_SOC_RM9200_BGA;
10 - else
11 at91_soc_initdata.subtype = AT91_SOC_RM9200_PQFP;
12 + else
13 + at91_soc_initdata.subtype = AT91_SOC_RM9200_BGA;
14 +
15 + pr_info("AT91: filled in soc subtype: %s\n",
16 + at91_get_soc_subtype(&at91_soc_initdata));
17 }
18
19 void __init at91_init_irq_default(void)
20 diff --git a/arch/arm/mach-ux500/Kconfig b/arch/arm/mach-ux500/Kconfig
21 index a3e0c86..52af004 100644
22 --- a/arch/arm/mach-ux500/Kconfig
23 +++ b/arch/arm/mach-ux500/Kconfig
24 @@ -7,6 +7,7 @@ config UX500_SOC_COMMON
25 select HAS_MTU
26 select ARM_ERRATA_753970
27 select ARM_ERRATA_754322
28 + select ARM_ERRATA_764369
29
30 menu "Ux500 SoC"
31
32 diff --git a/arch/arm/mach-ux500/board-mop500-sdi.c b/arch/arm/mach-ux500/board-mop500-sdi.c
33 index 6826fae..306cff0 100644
34 --- a/arch/arm/mach-ux500/board-mop500-sdi.c
35 +++ b/arch/arm/mach-ux500/board-mop500-sdi.c
36 @@ -233,6 +233,8 @@ void __init snowball_sdi_init(void)
37 {
38 u32 periphid = 0x10480180;
39
40 + /* On Snowball MMC_CAP_SD_HIGHSPEED isn't supported on sdi0 */
41 + mop500_sdi0_data.capabilities &= ~MMC_CAP_SD_HIGHSPEED;
42 mop500_sdi2_data.capabilities |= MMC_CAP_MMC_HIGHSPEED;
43
44 /* On-board eMMC */
45 diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
46 index e70a737..40cc7aa 100644
47 --- a/arch/arm/mm/proc-v7.S
48 +++ b/arch/arm/mm/proc-v7.S
49 @@ -271,10 +271,6 @@ ENDPROC(cpu_v7_do_resume)
50 * Initialise TLB, Caches, and MMU state ready to switch the MMU
51 * on. Return in r0 the new CP15 C1 control register setting.
52 *
53 - * We automatically detect if we have a Harvard cache, and use the
54 - * Harvard cache control instructions insead of the unified cache
55 - * control instructions.
56 - *
57 * This should be able to cover all ARMv7 cores.
58 *
59 * It is assumed that:
60 @@ -373,9 +369,7 @@ __v7_setup:
61 #endif
62
63 3: mov r10, #0
64 -#ifdef HARVARD_CACHE
65 mcr p15, 0, r10, c7, c5, 0 @ I+BTB cache invalidate
66 -#endif
67 dsb
68 #ifdef CONFIG_MMU
69 mcr p15, 0, r10, c8, c7, 0 @ invalidate I + D TLBs
70 diff --git a/arch/m68k/atari/config.c b/arch/m68k/atari/config.c
71 index 4203d10..c4ac15c 100644
72 --- a/arch/m68k/atari/config.c
73 +++ b/arch/m68k/atari/config.c
74 @@ -414,9 +414,9 @@ void __init config_atari(void)
75 * FDC val = 4 -> Supervisor only */
76 asm volatile ("\n"
77 " .chip 68030\n"
78 - " pmove %0@,%/tt1\n"
79 + " pmove %0,%/tt1\n"
80 " .chip 68k"
81 - : : "a" (&tt1_val));
82 + : : "m" (tt1_val));
83 } else {
84 asm volatile ("\n"
85 " .chip 68040\n"
86 @@ -569,10 +569,10 @@ static void atari_reset(void)
87 : "d0");
88 } else
89 asm volatile ("\n"
90 - " pmove %0@,%%tc\n"
91 + " pmove %0,%%tc\n"
92 " jmp %1@"
93 : /* no outputs */
94 - : "a" (&tc_val), "a" (reset_addr));
95 + : "m" (tc_val), "a" (reset_addr));
96 }
97
98
99 diff --git a/arch/m68k/kernel/process_mm.c b/arch/m68k/kernel/process_mm.c
100 index 1bc223a..aa4ffb8 100644
101 --- a/arch/m68k/kernel/process_mm.c
102 +++ b/arch/m68k/kernel/process_mm.c
103 @@ -189,8 +189,8 @@ void flush_thread(void)
104 current->thread.fs = __USER_DS;
105 if (!FPU_IS_EMU)
106 asm volatile (".chip 68k/68881\n\t"
107 - "frestore %0@\n\t"
108 - ".chip 68k" : : "a" (&zero));
109 + "frestore %0\n\t"
110 + ".chip 68k" : : "m" (zero));
111 }
112
113 /*
114 diff --git a/arch/m68k/kernel/process_no.c b/arch/m68k/kernel/process_no.c
115 index 69c1803..5e1078c 100644
116 --- a/arch/m68k/kernel/process_no.c
117 +++ b/arch/m68k/kernel/process_no.c
118 @@ -163,8 +163,8 @@ void flush_thread(void)
119 #ifdef CONFIG_FPU
120 if (!FPU_IS_EMU)
121 asm volatile (".chip 68k/68881\n\t"
122 - "frestore %0@\n\t"
123 - ".chip 68k" : : "a" (&zero));
124 + "frestore %0\n\t"
125 + ".chip 68k" : : "m" (zero));
126 #endif
127 }
128
129 diff --git a/arch/m68k/kernel/traps.c b/arch/m68k/kernel/traps.c
130 index 89362f2..eb67469 100644
131 --- a/arch/m68k/kernel/traps.c
132 +++ b/arch/m68k/kernel/traps.c
133 @@ -552,13 +552,13 @@ static inline void bus_error030 (struct frame *fp)
134
135 #ifdef DEBUG
136 asm volatile ("ptestr %3,%2@,#7,%0\n\t"
137 - "pmove %%psr,%1@"
138 - : "=a&" (desc)
139 - : "a" (&temp), "a" (addr), "d" (ssw));
140 + "pmove %%psr,%1"
141 + : "=a&" (desc), "=m" (temp)
142 + : "a" (addr), "d" (ssw));
143 #else
144 asm volatile ("ptestr %2,%1@,#7\n\t"
145 - "pmove %%psr,%0@"
146 - : : "a" (&temp), "a" (addr), "d" (ssw));
147 + "pmove %%psr,%0"
148 + : "=m" (temp) : "a" (addr), "d" (ssw));
149 #endif
150 mmusr = temp;
151
152 @@ -605,20 +605,18 @@ static inline void bus_error030 (struct frame *fp)
153 !(ssw & RW) ? "write" : "read", addr,
154 fp->ptregs.pc, ssw);
155 asm volatile ("ptestr #1,%1@,#0\n\t"
156 - "pmove %%psr,%0@"
157 - : /* no outputs */
158 - : "a" (&temp), "a" (addr));
159 + "pmove %%psr,%0"
160 + : "=m" (temp)
161 + : "a" (addr));
162 mmusr = temp;
163
164 printk ("level 0 mmusr is %#x\n", mmusr);
165 #if 0
166 - asm volatile ("pmove %%tt0,%0@"
167 - : /* no outputs */
168 - : "a" (&tlong));
169 + asm volatile ("pmove %%tt0,%0"
170 + : "=m" (tlong));
171 printk("tt0 is %#lx, ", tlong);
172 - asm volatile ("pmove %%tt1,%0@"
173 - : /* no outputs */
174 - : "a" (&tlong));
175 + asm volatile ("pmove %%tt1,%0"
176 + : "=m" (tlong));
177 printk("tt1 is %#lx\n", tlong);
178 #endif
179 #ifdef DEBUG
180 @@ -668,13 +666,13 @@ static inline void bus_error030 (struct frame *fp)
181
182 #ifdef DEBUG
183 asm volatile ("ptestr #1,%2@,#7,%0\n\t"
184 - "pmove %%psr,%1@"
185 - : "=a&" (desc)
186 - : "a" (&temp), "a" (addr));
187 + "pmove %%psr,%1"
188 + : "=a&" (desc), "=m" (temp)
189 + : "a" (addr));
190 #else
191 asm volatile ("ptestr #1,%1@,#7\n\t"
192 - "pmove %%psr,%0@"
193 - : : "a" (&temp), "a" (addr));
194 + "pmove %%psr,%0"
195 + : "=m" (temp) : "a" (addr));
196 #endif
197 mmusr = temp;
198
199 diff --git a/arch/m68k/mm/cache.c b/arch/m68k/mm/cache.c
200 index 5437fff..5550aa4 100644
201 --- a/arch/m68k/mm/cache.c
202 +++ b/arch/m68k/mm/cache.c
203 @@ -52,9 +52,9 @@ static unsigned long virt_to_phys_slow(unsigned long vaddr)
204 unsigned long *descaddr;
205
206 asm volatile ("ptestr %3,%2@,#7,%0\n\t"
207 - "pmove %%psr,%1@"
208 - : "=a&" (descaddr)
209 - : "a" (&mmusr), "a" (vaddr), "d" (get_fs().seg));
210 + "pmove %%psr,%1"
211 + : "=a&" (descaddr), "=m" (mmusr)
212 + : "a" (vaddr), "d" (get_fs().seg));
213 if (mmusr & (MMU_I|MMU_B|MMU_L))
214 return 0;
215 descaddr = phys_to_virt((unsigned long)descaddr);
216 diff --git a/arch/x86/include/asm/uv/uv_hub.h b/arch/x86/include/asm/uv/uv_hub.h
217 index 54a13aa..21f7385 100644
218 --- a/arch/x86/include/asm/uv/uv_hub.h
219 +++ b/arch/x86/include/asm/uv/uv_hub.h
220 @@ -318,13 +318,13 @@ uv_gpa_in_mmr_space(unsigned long gpa)
221 /* UV global physical address --> socket phys RAM */
222 static inline unsigned long uv_gpa_to_soc_phys_ram(unsigned long gpa)
223 {
224 - unsigned long paddr = gpa & uv_hub_info->gpa_mask;
225 + unsigned long paddr;
226 unsigned long remap_base = uv_hub_info->lowmem_remap_base;
227 unsigned long remap_top = uv_hub_info->lowmem_remap_top;
228
229 gpa = ((gpa << uv_hub_info->m_shift) >> uv_hub_info->m_shift) |
230 ((gpa >> uv_hub_info->n_lshift) << uv_hub_info->m_val);
231 - gpa = gpa & uv_hub_info->gpa_mask;
232 + paddr = gpa & uv_hub_info->gpa_mask;
233 if (paddr >= remap_base && paddr < remap_base + remap_top)
234 paddr -= remap_base;
235 return paddr;
236 diff --git a/arch/x86/kernel/microcode_amd.c b/arch/x86/kernel/microcode_amd.c
237 index d494799..ac52c15 100644
238 --- a/arch/x86/kernel/microcode_amd.c
239 +++ b/arch/x86/kernel/microcode_amd.c
240 @@ -300,13 +300,33 @@ free_table:
241 return state;
242 }
243
244 +/*
245 + * AMD microcode firmware naming convention, up to family 15h they are in
246 + * the legacy file:
247 + *
248 + * amd-ucode/microcode_amd.bin
249 + *
250 + * This legacy file is always smaller than 2K in size.
251 + *
252 + * Starting at family 15h they are in family specific firmware files:
253 + *
254 + * amd-ucode/microcode_amd_fam15h.bin
255 + * amd-ucode/microcode_amd_fam16h.bin
256 + * ...
257 + *
258 + * These might be larger than 2K.
259 + */
260 static enum ucode_state request_microcode_amd(int cpu, struct device *device)
261 {
262 - const char *fw_name = "amd-ucode/microcode_amd.bin";
263 + char fw_name[36] = "amd-ucode/microcode_amd.bin";
264 const struct firmware *fw;
265 enum ucode_state ret = UCODE_NFOUND;
266 + struct cpuinfo_x86 *c = &cpu_data(cpu);
267 +
268 + if (c->x86 >= 0x15)
269 + snprintf(fw_name, sizeof(fw_name), "amd-ucode/microcode_amd_fam%.2xh.bin", c->x86);
270
271 - if (request_firmware(&fw, fw_name, device)) {
272 + if (request_firmware(&fw, (const char *)fw_name, device)) {
273 pr_err("failed to load file %s\n", fw_name);
274 goto out;
275 }
276 diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
277 index 7b65f75..7c1b765 100644
278 --- a/arch/x86/net/bpf_jit_comp.c
279 +++ b/arch/x86/net/bpf_jit_comp.c
280 @@ -151,17 +151,18 @@ void bpf_jit_compile(struct sk_filter *fp)
281 cleanup_addr = proglen; /* epilogue address */
282
283 for (pass = 0; pass < 10; pass++) {
284 + u8 seen_or_pass0 = (pass == 0) ? (SEEN_XREG | SEEN_DATAREF | SEEN_MEM) : seen;
285 /* no prologue/epilogue for trivial filters (RET something) */
286 proglen = 0;
287 prog = temp;
288
289 - if (seen) {
290 + if (seen_or_pass0) {
291 EMIT4(0x55, 0x48, 0x89, 0xe5); /* push %rbp; mov %rsp,%rbp */
292 EMIT4(0x48, 0x83, 0xec, 96); /* subq $96,%rsp */
293 /* note : must save %rbx in case bpf_error is hit */
294 - if (seen & (SEEN_XREG | SEEN_DATAREF))
295 + if (seen_or_pass0 & (SEEN_XREG | SEEN_DATAREF))
296 EMIT4(0x48, 0x89, 0x5d, 0xf8); /* mov %rbx, -8(%rbp) */
297 - if (seen & SEEN_XREG)
298 + if (seen_or_pass0 & SEEN_XREG)
299 CLEAR_X(); /* make sure we dont leek kernel memory */
300
301 /*
302 @@ -170,7 +171,7 @@ void bpf_jit_compile(struct sk_filter *fp)
303 * r9 = skb->len - skb->data_len
304 * r8 = skb->data
305 */
306 - if (seen & SEEN_DATAREF) {
307 + if (seen_or_pass0 & SEEN_DATAREF) {
308 if (offsetof(struct sk_buff, len) <= 127)
309 /* mov off8(%rdi),%r9d */
310 EMIT4(0x44, 0x8b, 0x4f, offsetof(struct sk_buff, len));
311 @@ -260,9 +261,14 @@ void bpf_jit_compile(struct sk_filter *fp)
312 case BPF_S_ALU_DIV_X: /* A /= X; */
313 seen |= SEEN_XREG;
314 EMIT2(0x85, 0xdb); /* test %ebx,%ebx */
315 - if (pc_ret0 != -1)
316 - EMIT_COND_JMP(X86_JE, addrs[pc_ret0] - (addrs[i] - 4));
317 - else {
318 + if (pc_ret0 > 0) {
319 + /* addrs[pc_ret0 - 1] is start address of target
320 + * (addrs[i] - 4) is the address following this jmp
321 + * ("xor %edx,%edx; div %ebx" being 4 bytes long)
322 + */
323 + EMIT_COND_JMP(X86_JE, addrs[pc_ret0 - 1] -
324 + (addrs[i] - 4));
325 + } else {
326 EMIT_COND_JMP(X86_JNE, 2 + 5);
327 CLEAR_A();
328 EMIT1_off32(0xe9, cleanup_addr - (addrs[i] - 4)); /* jmp .+off32 */
329 @@ -335,12 +341,12 @@ void bpf_jit_compile(struct sk_filter *fp)
330 }
331 /* fallinto */
332 case BPF_S_RET_A:
333 - if (seen) {
334 + if (seen_or_pass0) {
335 if (i != flen - 1) {
336 EMIT_JMP(cleanup_addr - addrs[i]);
337 break;
338 }
339 - if (seen & SEEN_XREG)
340 + if (seen_or_pass0 & SEEN_XREG)
341 EMIT4(0x48, 0x8b, 0x5d, 0xf8); /* mov -8(%rbp),%rbx */
342 EMIT1(0xc9); /* leaveq */
343 }
344 @@ -483,8 +489,9 @@ common_load: seen |= SEEN_DATAREF;
345 goto common_load;
346 case BPF_S_LDX_B_MSH:
347 if ((int)K < 0) {
348 - if (pc_ret0 != -1) {
349 - EMIT_JMP(addrs[pc_ret0] - addrs[i]);
350 + if (pc_ret0 > 0) {
351 + /* addrs[pc_ret0 - 1] is the start address */
352 + EMIT_JMP(addrs[pc_ret0 - 1] - addrs[i]);
353 break;
354 }
355 CLEAR_A();
356 @@ -599,13 +606,14 @@ cond_branch: f_offset = addrs[i + filter[i].jf] - addrs[i];
357 * use it to give the cleanup instruction(s) addr
358 */
359 cleanup_addr = proglen - 1; /* ret */
360 - if (seen)
361 + if (seen_or_pass0)
362 cleanup_addr -= 1; /* leaveq */
363 - if (seen & SEEN_XREG)
364 + if (seen_or_pass0 & SEEN_XREG)
365 cleanup_addr -= 4; /* mov -8(%rbp),%rbx */
366
367 if (image) {
368 - WARN_ON(proglen != oldproglen);
369 + if (proglen != oldproglen)
370 + pr_err("bpb_jit_compile proglen=%u != oldproglen=%u\n", proglen, oldproglen);
371 break;
372 }
373 if (proglen == oldproglen) {
374 diff --git a/arch/x86/platform/uv/tlb_uv.c b/arch/x86/platform/uv/tlb_uv.c
375 index 9010ca7..81aee5a 100644
376 --- a/arch/x86/platform/uv/tlb_uv.c
377 +++ b/arch/x86/platform/uv/tlb_uv.c
378 @@ -1860,6 +1860,8 @@ static void __init init_per_cpu_tunables(void)
379 bcp->cong_reps = congested_reps;
380 bcp->cong_period = congested_period;
381 bcp->clocks_per_100_usec = usec_2_cycles(100);
382 + spin_lock_init(&bcp->queue_lock);
383 + spin_lock_init(&bcp->uvhub_lock);
384 }
385 }
386
387 diff --git a/arch/x86/platform/uv/uv_irq.c b/arch/x86/platform/uv/uv_irq.c
388 index 374a05d..f25c276 100644
389 --- a/arch/x86/platform/uv/uv_irq.c
390 +++ b/arch/x86/platform/uv/uv_irq.c
391 @@ -25,7 +25,7 @@ struct uv_irq_2_mmr_pnode{
392 int irq;
393 };
394
395 -static spinlock_t uv_irq_lock;
396 +static DEFINE_SPINLOCK(uv_irq_lock);
397 static struct rb_root uv_irq_root;
398
399 static int uv_set_irq_affinity(struct irq_data *, const struct cpumask *, bool);
400 diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
401 index cc9b1e1..d69cc6c 100644
402 --- a/arch/x86/xen/spinlock.c
403 +++ b/arch/x86/xen/spinlock.c
404 @@ -116,9 +116,26 @@ static inline void spin_time_accum_blocked(u64 start)
405 }
406 #endif /* CONFIG_XEN_DEBUG_FS */
407
408 +/*
409 + * Size struct xen_spinlock so it's the same as arch_spinlock_t.
410 + */
411 +#if NR_CPUS < 256
412 +typedef u8 xen_spinners_t;
413 +# define inc_spinners(xl) \
414 + asm(LOCK_PREFIX " incb %0" : "+m" ((xl)->spinners) : : "memory");
415 +# define dec_spinners(xl) \
416 + asm(LOCK_PREFIX " decb %0" : "+m" ((xl)->spinners) : : "memory");
417 +#else
418 +typedef u16 xen_spinners_t;
419 +# define inc_spinners(xl) \
420 + asm(LOCK_PREFIX " incw %0" : "+m" ((xl)->spinners) : : "memory");
421 +# define dec_spinners(xl) \
422 + asm(LOCK_PREFIX " decw %0" : "+m" ((xl)->spinners) : : "memory");
423 +#endif
424 +
425 struct xen_spinlock {
426 unsigned char lock; /* 0 -> free; 1 -> locked */
427 - unsigned short spinners; /* count of waiting cpus */
428 + xen_spinners_t spinners; /* count of waiting cpus */
429 };
430
431 static int xen_spin_is_locked(struct arch_spinlock *lock)
432 @@ -164,8 +181,7 @@ static inline struct xen_spinlock *spinning_lock(struct xen_spinlock *xl)
433
434 wmb(); /* set lock of interest before count */
435
436 - asm(LOCK_PREFIX " incw %0"
437 - : "+m" (xl->spinners) : : "memory");
438 + inc_spinners(xl);
439
440 return prev;
441 }
442 @@ -176,8 +192,7 @@ static inline struct xen_spinlock *spinning_lock(struct xen_spinlock *xl)
443 */
444 static inline void unspinning_lock(struct xen_spinlock *xl, struct xen_spinlock *prev)
445 {
446 - asm(LOCK_PREFIX " decw %0"
447 - : "+m" (xl->spinners) : : "memory");
448 + dec_spinners(xl);
449 wmb(); /* decrement count before restoring lock */
450 __this_cpu_write(lock_spinners, prev);
451 }
452 @@ -373,6 +388,8 @@ void xen_uninit_lock_cpu(int cpu)
453
454 void __init xen_init_spinlocks(void)
455 {
456 + BUILD_BUG_ON(sizeof(struct xen_spinlock) > sizeof(arch_spinlock_t));
457 +
458 pv_lock_ops.spin_is_locked = xen_spin_is_locked;
459 pv_lock_ops.spin_is_contended = xen_spin_is_contended;
460 pv_lock_ops.spin_lock = xen_spin_lock;
461 diff --git a/crypto/sha512_generic.c b/crypto/sha512_generic.c
462 index 9ed9f60..88f160b 100644
463 --- a/crypto/sha512_generic.c
464 +++ b/crypto/sha512_generic.c
465 @@ -21,8 +21,6 @@
466 #include <linux/percpu.h>
467 #include <asm/byteorder.h>
468
469 -static DEFINE_PER_CPU(u64[80], msg_schedule);
470 -
471 static inline u64 Ch(u64 x, u64 y, u64 z)
472 {
473 return z ^ (x & (y ^ z));
474 @@ -80,7 +78,7 @@ static inline void LOAD_OP(int I, u64 *W, const u8 *input)
475
476 static inline void BLEND_OP(int I, u64 *W)
477 {
478 - W[I] = s1(W[I-2]) + W[I-7] + s0(W[I-15]) + W[I-16];
479 + W[I % 16] += s1(W[(I-2) % 16]) + W[(I-7) % 16] + s0(W[(I-15) % 16]);
480 }
481
482 static void
483 @@ -89,38 +87,48 @@ sha512_transform(u64 *state, const u8 *input)
484 u64 a, b, c, d, e, f, g, h, t1, t2;
485
486 int i;
487 - u64 *W = get_cpu_var(msg_schedule);
488 + u64 W[16];
489
490 /* load the input */
491 for (i = 0; i < 16; i++)
492 LOAD_OP(i, W, input);
493
494 - for (i = 16; i < 80; i++) {
495 - BLEND_OP(i, W);
496 - }
497 -
498 /* load the state into our registers */
499 a=state[0]; b=state[1]; c=state[2]; d=state[3];
500 e=state[4]; f=state[5]; g=state[6]; h=state[7];
501
502 - /* now iterate */
503 - for (i=0; i<80; i+=8) {
504 - t1 = h + e1(e) + Ch(e,f,g) + sha512_K[i ] + W[i ];
505 - t2 = e0(a) + Maj(a,b,c); d+=t1; h=t1+t2;
506 - t1 = g + e1(d) + Ch(d,e,f) + sha512_K[i+1] + W[i+1];
507 - t2 = e0(h) + Maj(h,a,b); c+=t1; g=t1+t2;
508 - t1 = f + e1(c) + Ch(c,d,e) + sha512_K[i+2] + W[i+2];
509 - t2 = e0(g) + Maj(g,h,a); b+=t1; f=t1+t2;
510 - t1 = e + e1(b) + Ch(b,c,d) + sha512_K[i+3] + W[i+3];
511 - t2 = e0(f) + Maj(f,g,h); a+=t1; e=t1+t2;
512 - t1 = d + e1(a) + Ch(a,b,c) + sha512_K[i+4] + W[i+4];
513 - t2 = e0(e) + Maj(e,f,g); h+=t1; d=t1+t2;
514 - t1 = c + e1(h) + Ch(h,a,b) + sha512_K[i+5] + W[i+5];
515 - t2 = e0(d) + Maj(d,e,f); g+=t1; c=t1+t2;
516 - t1 = b + e1(g) + Ch(g,h,a) + sha512_K[i+6] + W[i+6];
517 - t2 = e0(c) + Maj(c,d,e); f+=t1; b=t1+t2;
518 - t1 = a + e1(f) + Ch(f,g,h) + sha512_K[i+7] + W[i+7];
519 - t2 = e0(b) + Maj(b,c,d); e+=t1; a=t1+t2;
520 +#define SHA512_0_15(i, a, b, c, d, e, f, g, h) \
521 + t1 = h + e1(e) + Ch(e, f, g) + sha512_K[i] + W[i]; \
522 + t2 = e0(a) + Maj(a, b, c); \
523 + d += t1; \
524 + h = t1 + t2
525 +
526 +#define SHA512_16_79(i, a, b, c, d, e, f, g, h) \
527 + BLEND_OP(i, W); \
528 + t1 = h + e1(e) + Ch(e, f, g) + sha512_K[i] + W[(i)%16]; \
529 + t2 = e0(a) + Maj(a, b, c); \
530 + d += t1; \
531 + h = t1 + t2
532 +
533 + for (i = 0; i < 16; i += 8) {
534 + SHA512_0_15(i, a, b, c, d, e, f, g, h);
535 + SHA512_0_15(i + 1, h, a, b, c, d, e, f, g);
536 + SHA512_0_15(i + 2, g, h, a, b, c, d, e, f);
537 + SHA512_0_15(i + 3, f, g, h, a, b, c, d, e);
538 + SHA512_0_15(i + 4, e, f, g, h, a, b, c, d);
539 + SHA512_0_15(i + 5, d, e, f, g, h, a, b, c);
540 + SHA512_0_15(i + 6, c, d, e, f, g, h, a, b);
541 + SHA512_0_15(i + 7, b, c, d, e, f, g, h, a);
542 + }
543 + for (i = 16; i < 80; i += 8) {
544 + SHA512_16_79(i, a, b, c, d, e, f, g, h);
545 + SHA512_16_79(i + 1, h, a, b, c, d, e, f, g);
546 + SHA512_16_79(i + 2, g, h, a, b, c, d, e, f);
547 + SHA512_16_79(i + 3, f, g, h, a, b, c, d, e);
548 + SHA512_16_79(i + 4, e, f, g, h, a, b, c, d);
549 + SHA512_16_79(i + 5, d, e, f, g, h, a, b, c);
550 + SHA512_16_79(i + 6, c, d, e, f, g, h, a, b);
551 + SHA512_16_79(i + 7, b, c, d, e, f, g, h, a);
552 }
553
554 state[0] += a; state[1] += b; state[2] += c; state[3] += d;
555 @@ -128,8 +136,6 @@ sha512_transform(u64 *state, const u8 *input)
556
557 /* erase our data */
558 a = b = c = d = e = f = g = h = t1 = t2 = 0;
559 - memset(W, 0, sizeof(__get_cpu_var(msg_schedule)));
560 - put_cpu_var(msg_schedule);
561 }
562
563 static int
564 diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
565 index 3f4051a..c7e5282 100644
566 --- a/drivers/char/tpm/tpm_tis.c
567 +++ b/drivers/char/tpm/tpm_tis.c
568 @@ -432,6 +432,9 @@ static int probe_itpm(struct tpm_chip *chip)
569 out:
570 itpm = rem_itpm;
571 tpm_tis_ready(chip);
572 + /* some TPMs need a break here otherwise they will not work
573 + * correctly on the immediately subsequent command */
574 + msleep(chip->vendor.timeout_b);
575 release_locality(chip, chip->vendor.locality, 0);
576
577 return rc;
578 diff --git a/drivers/gpu/drm/drm_auth.c b/drivers/gpu/drm/drm_auth.c
579 index 3f46772..ba23790 100644
580 --- a/drivers/gpu/drm/drm_auth.c
581 +++ b/drivers/gpu/drm/drm_auth.c
582 @@ -101,7 +101,7 @@ static int drm_add_magic(struct drm_master *master, struct drm_file *priv,
583 * Searches and unlinks the entry in drm_device::magiclist with the magic
584 * number hash key, while holding the drm_device::struct_mutex lock.
585 */
586 -static int drm_remove_magic(struct drm_master *master, drm_magic_t magic)
587 +int drm_remove_magic(struct drm_master *master, drm_magic_t magic)
588 {
589 struct drm_magic_entry *pt;
590 struct drm_hash_item *hash;
591 @@ -136,6 +136,8 @@ static int drm_remove_magic(struct drm_master *master, drm_magic_t magic)
592 * If there is a magic number in drm_file::magic then use it, otherwise
593 * searches an unique non-zero magic number and add it associating it with \p
594 * file_priv.
595 + * This ioctl needs protection by the drm_global_mutex, which protects
596 + * struct drm_file::magic and struct drm_magic_entry::priv.
597 */
598 int drm_getmagic(struct drm_device *dev, void *data, struct drm_file *file_priv)
599 {
600 @@ -173,6 +175,8 @@ int drm_getmagic(struct drm_device *dev, void *data, struct drm_file *file_priv)
601 * \return zero if authentication successed, or a negative number otherwise.
602 *
603 * Checks if \p file_priv is associated with the magic number passed in \arg.
604 + * This ioctl needs protection by the drm_global_mutex, which protects
605 + * struct drm_file::magic and struct drm_magic_entry::priv.
606 */
607 int drm_authmagic(struct drm_device *dev, void *data,
608 struct drm_file *file_priv)
609 diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
610 index 4911e1d..828bf65 100644
611 --- a/drivers/gpu/drm/drm_fops.c
612 +++ b/drivers/gpu/drm/drm_fops.c
613 @@ -487,6 +487,11 @@ int drm_release(struct inode *inode, struct file *filp)
614 (long)old_encode_dev(file_priv->minor->device),
615 dev->open_count);
616
617 + /* Release any auth tokens that might point to this file_priv,
618 + (do that under the drm_global_mutex) */
619 + if (file_priv->magic)
620 + (void) drm_remove_magic(file_priv->master, file_priv->magic);
621 +
622 /* if the master has gone away we can't do anything with the lock */
623 if (file_priv->minor->master)
624 drm_master_release(dev, filp);
625 diff --git a/drivers/gpu/drm/i915/i915_suspend.c b/drivers/gpu/drm/i915/i915_suspend.c
626 index 7886e4f..43cbafe 100644
627 --- a/drivers/gpu/drm/i915/i915_suspend.c
628 +++ b/drivers/gpu/drm/i915/i915_suspend.c
629 @@ -822,7 +822,7 @@ int i915_save_state(struct drm_device *dev)
630
631 if (IS_IRONLAKE_M(dev))
632 ironlake_disable_drps(dev);
633 - if (IS_GEN6(dev))
634 + if (INTEL_INFO(dev)->gen >= 6)
635 gen6_disable_rps(dev);
636
637 /* Cache mode state */
638 @@ -881,7 +881,7 @@ int i915_restore_state(struct drm_device *dev)
639 intel_init_emon(dev);
640 }
641
642 - if (IS_GEN6(dev)) {
643 + if (INTEL_INFO(dev)->gen >= 6) {
644 gen6_enable_rps(dev_priv);
645 gen6_update_ring_freq(dev_priv);
646 }
647 diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
648 index ca70e2f..30a9af9 100644
649 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
650 +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
651 @@ -631,6 +631,19 @@ render_ring_add_request(struct intel_ring_buffer *ring,
652 }
653
654 static u32
655 +gen6_ring_get_seqno(struct intel_ring_buffer *ring)
656 +{
657 + struct drm_device *dev = ring->dev;
658 +
659 + /* Workaround to force correct ordering between irq and seqno writes on
660 + * ivb (and maybe also on snb) by reading from a CS register (like
661 + * ACTHD) before reading the status page. */
662 + if (IS_GEN7(dev))
663 + intel_ring_get_active_head(ring);
664 + return intel_read_status_page(ring, I915_GEM_HWS_INDEX);
665 +}
666 +
667 +static u32
668 ring_get_seqno(struct intel_ring_buffer *ring)
669 {
670 return intel_read_status_page(ring, I915_GEM_HWS_INDEX);
671 @@ -795,6 +808,12 @@ gen6_ring_get_irq(struct intel_ring_buffer *ring, u32 gflag, u32 rflag)
672 if (!dev->irq_enabled)
673 return false;
674
675 + /* It looks like we need to prevent the gt from suspending while waiting
676 + * for an notifiy irq, otherwise irqs seem to get lost on at least the
677 + * blt/bsd rings on ivb. */
678 + if (IS_GEN7(dev))
679 + gen6_gt_force_wake_get(dev_priv);
680 +
681 spin_lock(&ring->irq_lock);
682 if (ring->irq_refcount++ == 0) {
683 ring->irq_mask &= ~rflag;
684 @@ -819,6 +838,9 @@ gen6_ring_put_irq(struct intel_ring_buffer *ring, u32 gflag, u32 rflag)
685 ironlake_disable_irq(dev_priv, gflag);
686 }
687 spin_unlock(&ring->irq_lock);
688 +
689 + if (IS_GEN7(dev))
690 + gen6_gt_force_wake_put(dev_priv);
691 }
692
693 static bool
694 @@ -1316,7 +1338,7 @@ static const struct intel_ring_buffer gen6_bsd_ring = {
695 .write_tail = gen6_bsd_ring_write_tail,
696 .flush = gen6_ring_flush,
697 .add_request = gen6_add_request,
698 - .get_seqno = ring_get_seqno,
699 + .get_seqno = gen6_ring_get_seqno,
700 .irq_get = gen6_bsd_ring_get_irq,
701 .irq_put = gen6_bsd_ring_put_irq,
702 .dispatch_execbuffer = gen6_ring_dispatch_execbuffer,
703 @@ -1451,7 +1473,7 @@ static const struct intel_ring_buffer gen6_blt_ring = {
704 .write_tail = ring_write_tail,
705 .flush = blt_ring_flush,
706 .add_request = gen6_add_request,
707 - .get_seqno = ring_get_seqno,
708 + .get_seqno = gen6_ring_get_seqno,
709 .irq_get = blt_ring_get_irq,
710 .irq_put = blt_ring_put_irq,
711 .dispatch_execbuffer = gen6_ring_dispatch_execbuffer,
712 @@ -1474,6 +1496,7 @@ int intel_init_render_ring_buffer(struct drm_device *dev)
713 ring->flush = gen6_render_ring_flush;
714 ring->irq_get = gen6_render_ring_get_irq;
715 ring->irq_put = gen6_render_ring_put_irq;
716 + ring->get_seqno = gen6_ring_get_seqno;
717 } else if (IS_GEN5(dev)) {
718 ring->add_request = pc_render_add_request;
719 ring->get_seqno = pc_render_get_seqno;
720 diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
721 index f7b9268..e334ec3 100644
722 --- a/drivers/gpu/drm/i915/intel_sdvo.c
723 +++ b/drivers/gpu/drm/i915/intel_sdvo.c
724 @@ -1066,15 +1066,13 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder,
725
726 /* Set the SDVO control regs. */
727 if (INTEL_INFO(dev)->gen >= 4) {
728 - sdvox = 0;
729 + /* The real mode polarity is set by the SDVO commands, using
730 + * struct intel_sdvo_dtd. */
731 + sdvox = SDVO_VSYNC_ACTIVE_HIGH | SDVO_HSYNC_ACTIVE_HIGH;
732 if (intel_sdvo->is_hdmi)
733 sdvox |= intel_sdvo->color_range;
734 if (INTEL_INFO(dev)->gen < 5)
735 sdvox |= SDVO_BORDER_ENABLE;
736 - if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
737 - sdvox |= SDVO_VSYNC_ACTIVE_HIGH;
738 - if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
739 - sdvox |= SDVO_HSYNC_ACTIVE_HIGH;
740 } else {
741 sdvox = I915_READ(intel_sdvo->sdvo_reg);
742 switch (intel_sdvo->sdvo_reg) {
743 diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c
744 index 6fb335a..a71557c 100644
745 --- a/drivers/gpu/drm/radeon/atombios_dp.c
746 +++ b/drivers/gpu/drm/radeon/atombios_dp.c
747 @@ -549,8 +549,8 @@ bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector)
748 return false;
749 }
750
751 -static void radeon_dp_set_panel_mode(struct drm_encoder *encoder,
752 - struct drm_connector *connector)
753 +int radeon_dp_get_panel_mode(struct drm_encoder *encoder,
754 + struct drm_connector *connector)
755 {
756 struct drm_device *dev = encoder->dev;
757 struct radeon_device *rdev = dev->dev_private;
758 @@ -558,7 +558,7 @@ static void radeon_dp_set_panel_mode(struct drm_encoder *encoder,
759 int panel_mode = DP_PANEL_MODE_EXTERNAL_DP_MODE;
760
761 if (!ASIC_IS_DCE4(rdev))
762 - return;
763 + return panel_mode;
764
765 if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) ==
766 ENCODER_OBJECT_ID_NUTMEG)
767 @@ -572,14 +572,7 @@ static void radeon_dp_set_panel_mode(struct drm_encoder *encoder,
768 panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE;
769 }
770
771 - atombios_dig_encoder_setup(encoder,
772 - ATOM_ENCODER_CMD_SETUP_PANEL_MODE,
773 - panel_mode);
774 -
775 - if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) &&
776 - (panel_mode == DP_PANEL_MODE_INTERNAL_DP2_MODE)) {
777 - radeon_write_dpcd_reg(radeon_connector, DP_EDP_CONFIGURATION_SET, 1);
778 - }
779 + return panel_mode;
780 }
781
782 void radeon_dp_set_link_config(struct drm_connector *connector,
783 @@ -717,6 +710,8 @@ static void radeon_dp_set_tp(struct radeon_dp_link_train_info *dp_info, int tp)
784
785 static int radeon_dp_link_train_init(struct radeon_dp_link_train_info *dp_info)
786 {
787 + struct radeon_encoder *radeon_encoder = to_radeon_encoder(dp_info->encoder);
788 + struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
789 u8 tmp;
790
791 /* power up the sink */
792 @@ -732,7 +727,10 @@ static int radeon_dp_link_train_init(struct radeon_dp_link_train_info *dp_info)
793 radeon_write_dpcd_reg(dp_info->radeon_connector,
794 DP_DOWNSPREAD_CTRL, 0);
795
796 - radeon_dp_set_panel_mode(dp_info->encoder, dp_info->connector);
797 + if ((dp_info->connector->connector_type == DRM_MODE_CONNECTOR_eDP) &&
798 + (dig->panel_mode == DP_PANEL_MODE_INTERNAL_DP2_MODE)) {
799 + radeon_write_dpcd_reg(dp_info->radeon_connector, DP_EDP_CONFIGURATION_SET, 1);
800 + }
801
802 /* set the lane count on the sink */
803 tmp = dp_info->dp_lane_count;
804 diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
805 index 39c04c1..0f8eb48 100644
806 --- a/drivers/gpu/drm/radeon/atombios_encoders.c
807 +++ b/drivers/gpu/drm/radeon/atombios_encoders.c
808 @@ -1352,7 +1352,8 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode)
809 switch (mode) {
810 case DRM_MODE_DPMS_ON:
811 /* some early dce3.2 boards have a bug in their transmitter control table */
812 - if ((rdev->family == CHIP_RV710) || (rdev->family == CHIP_RV730))
813 + if ((rdev->family == CHIP_RV710) || (rdev->family == CHIP_RV730) ||
814 + ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev))
815 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0);
816 else
817 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
818 @@ -1362,8 +1363,6 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode)
819 ATOM_TRANSMITTER_ACTION_POWER_ON);
820 radeon_dig_connector->edp_on = true;
821 }
822 - if (ASIC_IS_DCE4(rdev))
823 - atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_DP_VIDEO_OFF, 0);
824 radeon_dp_link_train(encoder, connector);
825 if (ASIC_IS_DCE4(rdev))
826 atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_DP_VIDEO_ON, 0);
827 @@ -1374,7 +1373,10 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode)
828 case DRM_MODE_DPMS_STANDBY:
829 case DRM_MODE_DPMS_SUSPEND:
830 case DRM_MODE_DPMS_OFF:
831 - atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT, 0, 0);
832 + if (ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev))
833 + atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE, 0, 0);
834 + else
835 + atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT, 0, 0);
836 if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) {
837 if (ASIC_IS_DCE4(rdev))
838 atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_DP_VIDEO_OFF, 0);
839 @@ -1821,7 +1823,21 @@ radeon_atom_encoder_mode_set(struct drm_encoder *encoder,
840 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:
841 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
842 case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
843 - if (ASIC_IS_DCE4(rdev)) {
844 + if (ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev)) {
845 + struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
846 + struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
847 +
848 + if (!connector)
849 + dig->panel_mode = DP_PANEL_MODE_EXTERNAL_DP_MODE;
850 + else
851 + dig->panel_mode = radeon_dp_get_panel_mode(encoder, connector);
852 +
853 + /* setup and enable the encoder */
854 + atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_SETUP, 0);
855 + atombios_dig_encoder_setup(encoder,
856 + ATOM_ENCODER_CMD_SETUP_PANEL_MODE,
857 + dig->panel_mode);
858 + } else if (ASIC_IS_DCE4(rdev)) {
859 /* disable the transmitter */
860 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE, 0, 0);
861 /* setup and enable the encoder */
862 diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c
863 index 8f86aeb..e7ddb49 100644
864 --- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
865 +++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
866 @@ -134,6 +134,12 @@ static bool radeon_msi_ok(struct radeon_device *rdev)
867 /* Dell RS690 only seems to work with MSIs. */
868 if ((rdev->pdev->device == 0x791f) &&
869 (rdev->pdev->subsystem_vendor == 0x1028) &&
870 + (rdev->pdev->subsystem_device == 0x01fc))
871 + return true;
872 +
873 + /* Dell RS690 only seems to work with MSIs. */
874 + if ((rdev->pdev->device == 0x791f) &&
875 + (rdev->pdev->subsystem_vendor == 0x1028) &&
876 (rdev->pdev->subsystem_device == 0x01fd))
877 return true;
878
879 diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h
880 index 2c2e75e..8254d5a 100644
881 --- a/drivers/gpu/drm/radeon/radeon_mode.h
882 +++ b/drivers/gpu/drm/radeon/radeon_mode.h
883 @@ -362,6 +362,7 @@ struct radeon_encoder_atom_dig {
884 struct backlight_device *bl_dev;
885 int dpms_mode;
886 uint8_t backlight_level;
887 + int panel_mode;
888 };
889
890 struct radeon_encoder_atom_dac {
891 @@ -482,6 +483,8 @@ extern void radeon_dp_link_train(struct drm_encoder *encoder,
892 extern bool radeon_dp_needs_link_train(struct radeon_connector *radeon_connector);
893 extern u8 radeon_dp_getsinktype(struct radeon_connector *radeon_connector);
894 extern bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector);
895 +extern int radeon_dp_get_panel_mode(struct drm_encoder *encoder,
896 + struct drm_connector *connector);
897 extern void atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mode);
898 extern void radeon_atom_encoder_init(struct radeon_device *rdev);
899 extern void atombios_dig_transmitter_setup(struct drm_encoder *encoder,
900 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
901 index f94b33a..7c88f1f 100644
902 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
903 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
904 @@ -378,7 +378,7 @@ int vmw_framebuffer_create_handle(struct drm_framebuffer *fb,
905 unsigned int *handle)
906 {
907 if (handle)
908 - handle = 0;
909 + *handle = 0;
910
911 return 0;
912 }
913 diff --git a/drivers/hwmon/f71805f.c b/drivers/hwmon/f71805f.c
914 index 92f9497..6dbfd3e 100644
915 --- a/drivers/hwmon/f71805f.c
916 +++ b/drivers/hwmon/f71805f.c
917 @@ -283,11 +283,11 @@ static inline long temp_from_reg(u8 reg)
918
919 static inline u8 temp_to_reg(long val)
920 {
921 - if (val < 0)
922 - val = 0;
923 - else if (val > 1000 * 0xff)
924 - val = 0xff;
925 - return ((val + 500) / 1000);
926 + if (val <= 0)
927 + return 0;
928 + if (val >= 1000 * 0xff)
929 + return 0xff;
930 + return (val + 500) / 1000;
931 }
932
933 /*
934 diff --git a/drivers/hwmon/sht15.c b/drivers/hwmon/sht15.c
935 index fe4104c..5357925 100644
936 --- a/drivers/hwmon/sht15.c
937 +++ b/drivers/hwmon/sht15.c
938 @@ -883,7 +883,7 @@ static int sht15_invalidate_voltage(struct notifier_block *nb,
939
940 static int __devinit sht15_probe(struct platform_device *pdev)
941 {
942 - int ret = 0;
943 + int ret;
944 struct sht15_data *data = kzalloc(sizeof(*data), GFP_KERNEL);
945 u8 status = 0;
946
947 @@ -901,6 +901,7 @@ static int __devinit sht15_probe(struct platform_device *pdev)
948 init_waitqueue_head(&data->wait_queue);
949
950 if (pdev->dev.platform_data == NULL) {
951 + ret = -EINVAL;
952 dev_err(&pdev->dev, "no platform data supplied\n");
953 goto err_free_data;
954 }
955 diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c
956 index 93f5fc7..4b57ab6 100644
957 --- a/drivers/hwmon/w83627ehf.c
958 +++ b/drivers/hwmon/w83627ehf.c
959 @@ -1319,6 +1319,7 @@ store_pwm_mode(struct device *dev, struct device_attribute *attr,
960 {
961 struct w83627ehf_data *data = dev_get_drvdata(dev);
962 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
963 + struct w83627ehf_sio_data *sio_data = dev->platform_data;
964 int nr = sensor_attr->index;
965 unsigned long val;
966 int err;
967 @@ -1330,6 +1331,11 @@ store_pwm_mode(struct device *dev, struct device_attribute *attr,
968
969 if (val > 1)
970 return -EINVAL;
971 +
972 + /* On NCT67766F, DC mode is only supported for pwm1 */
973 + if (sio_data->kind == nct6776 && nr && val != 1)
974 + return -EINVAL;
975 +
976 mutex_lock(&data->update_lock);
977 reg = w83627ehf_read_value(data, W83627EHF_REG_PWM_ENABLE[nr]);
978 data->pwm_mode[nr] = val;
979 diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
980 index 106b88a..30431d8 100644
981 --- a/drivers/net/bonding/bond_alb.c
982 +++ b/drivers/net/bonding/bond_alb.c
983 @@ -871,16 +871,12 @@ static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[])
984 }
985 }
986
987 -/* hw is a boolean parameter that determines whether we should try and
988 - * set the hw address of the device as well as the hw address of the
989 - * net_device
990 - */
991 -static int alb_set_slave_mac_addr(struct slave *slave, u8 addr[], int hw)
992 +static int alb_set_slave_mac_addr(struct slave *slave, u8 addr[])
993 {
994 struct net_device *dev = slave->dev;
995 struct sockaddr s_addr;
996
997 - if (!hw) {
998 + if (slave->bond->params.mode == BOND_MODE_TLB) {
999 memcpy(dev->dev_addr, addr, dev->addr_len);
1000 return 0;
1001 }
1002 @@ -910,8 +906,8 @@ static void alb_swap_mac_addr(struct bonding *bond, struct slave *slave1, struct
1003 u8 tmp_mac_addr[ETH_ALEN];
1004
1005 memcpy(tmp_mac_addr, slave1->dev->dev_addr, ETH_ALEN);
1006 - alb_set_slave_mac_addr(slave1, slave2->dev->dev_addr, bond->alb_info.rlb_enabled);
1007 - alb_set_slave_mac_addr(slave2, tmp_mac_addr, bond->alb_info.rlb_enabled);
1008 + alb_set_slave_mac_addr(slave1, slave2->dev->dev_addr);
1009 + alb_set_slave_mac_addr(slave2, tmp_mac_addr);
1010
1011 }
1012
1013 @@ -1058,8 +1054,7 @@ static int alb_handle_addr_collision_on_attach(struct bonding *bond, struct slav
1014
1015 /* Try setting slave mac to bond address and fall-through
1016 to code handling that situation below... */
1017 - alb_set_slave_mac_addr(slave, bond->dev->dev_addr,
1018 - bond->alb_info.rlb_enabled);
1019 + alb_set_slave_mac_addr(slave, bond->dev->dev_addr);
1020 }
1021
1022 /* The slave's address is equal to the address of the bond.
1023 @@ -1095,8 +1090,7 @@ static int alb_handle_addr_collision_on_attach(struct bonding *bond, struct slav
1024 }
1025
1026 if (free_mac_slave) {
1027 - alb_set_slave_mac_addr(slave, free_mac_slave->perm_hwaddr,
1028 - bond->alb_info.rlb_enabled);
1029 + alb_set_slave_mac_addr(slave, free_mac_slave->perm_hwaddr);
1030
1031 pr_warning("%s: Warning: the hw address of slave %s is in use by the bond; giving it the hw address of %s\n",
1032 bond->dev->name, slave->dev->name,
1033 @@ -1451,8 +1445,7 @@ int bond_alb_init_slave(struct bonding *bond, struct slave *slave)
1034 {
1035 int res;
1036
1037 - res = alb_set_slave_mac_addr(slave, slave->perm_hwaddr,
1038 - bond->alb_info.rlb_enabled);
1039 + res = alb_set_slave_mac_addr(slave, slave->perm_hwaddr);
1040 if (res) {
1041 return res;
1042 }
1043 @@ -1603,8 +1596,7 @@ void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave
1044 alb_swap_mac_addr(bond, swap_slave, new_slave);
1045 } else {
1046 /* set the new_slave to the bond mac address */
1047 - alb_set_slave_mac_addr(new_slave, bond->dev->dev_addr,
1048 - bond->alb_info.rlb_enabled);
1049 + alb_set_slave_mac_addr(new_slave, bond->dev->dev_addr);
1050 }
1051
1052 if (swap_slave) {
1053 @@ -1664,8 +1656,7 @@ int bond_alb_set_mac_address(struct net_device *bond_dev, void *addr)
1054 alb_swap_mac_addr(bond, swap_slave, bond->curr_active_slave);
1055 alb_fasten_mac_swap(bond, swap_slave, bond->curr_active_slave);
1056 } else {
1057 - alb_set_slave_mac_addr(bond->curr_active_slave, bond_dev->dev_addr,
1058 - bond->alb_info.rlb_enabled);
1059 + alb_set_slave_mac_addr(bond->curr_active_slave, bond_dev->dev_addr);
1060
1061 read_lock(&bond->lock);
1062 alb_send_learning_packets(bond->curr_active_slave, bond_dev->dev_addr);
1063 diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
1064 index 7413497..959d448 100644
1065 --- a/drivers/net/macvlan.c
1066 +++ b/drivers/net/macvlan.c
1067 @@ -172,6 +172,7 @@ static rx_handler_result_t macvlan_handle_frame(struct sk_buff **pskb)
1068 skb = ip_check_defrag(skb, IP_DEFRAG_MACVLAN);
1069 if (!skb)
1070 return RX_HANDLER_CONSUMED;
1071 + eth = eth_hdr(skb);
1072 src = macvlan_hash_lookup(port, eth->h_source);
1073 if (!src)
1074 /* frame comes from an external address */
1075 diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
1076 index 510e9bb..453f58e 100644
1077 --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
1078 +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
1079 @@ -8217,13 +8217,21 @@ int brcms_c_get_curband(struct brcms_c_info *wlc)
1080
1081 void brcms_c_wait_for_tx_completion(struct brcms_c_info *wlc, bool drop)
1082 {
1083 + int timeout = 20;
1084 +
1085 /* flush packet queue when requested */
1086 if (drop)
1087 brcmu_pktq_flush(&wlc->pkt_queue->q, false, NULL, NULL);
1088
1089 /* wait for queue and DMA fifos to run dry */
1090 - while (!pktq_empty(&wlc->pkt_queue->q) || brcms_txpktpendtot(wlc) > 0)
1091 + while (!pktq_empty(&wlc->pkt_queue->q) || brcms_txpktpendtot(wlc) > 0) {
1092 brcms_msleep(wlc->wl, 1);
1093 +
1094 + if (--timeout == 0)
1095 + break;
1096 + }
1097 +
1098 + WARN_ON_ONCE(timeout == 0);
1099 }
1100
1101 void brcms_c_set_beacon_listen_interval(struct brcms_c_info *wlc, u8 interval)
1102 diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c
1103 index 1920237..1daf01e 100644
1104 --- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c
1105 +++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c
1106 @@ -957,11 +957,11 @@ void iwl_irq_tasklet(struct iwl_trans *trans)
1107 }
1108 #endif
1109
1110 - spin_unlock_irqrestore(&trans->shrd->lock, flags);
1111 -
1112 /* saved interrupt in inta variable now we can reset trans_pcie->inta */
1113 trans_pcie->inta = 0;
1114
1115 + spin_unlock_irqrestore(&trans->shrd->lock, flags);
1116 +
1117 /* Now service all interrupt bits discovered above. */
1118 if (inta & CSR_INT_BIT_HW_ERR) {
1119 IWL_ERR(trans, "Hardware error detected. Restarting.\n");
1120 diff --git a/drivers/scsi/mpt2sas/mpt2sas_base.c b/drivers/scsi/mpt2sas/mpt2sas_base.c
1121 index 0794c72..b1ddfef 100644
1122 --- a/drivers/scsi/mpt2sas/mpt2sas_base.c
1123 +++ b/drivers/scsi/mpt2sas/mpt2sas_base.c
1124 @@ -4033,7 +4033,8 @@ _base_make_ioc_operational(struct MPT2SAS_ADAPTER *ioc, int sleep_flag)
1125 ioc->reply_free[i] = cpu_to_le32(reply_address);
1126
1127 /* initialize reply queues */
1128 - _base_assign_reply_queues(ioc);
1129 + if (ioc->is_driver_loading)
1130 + _base_assign_reply_queues(ioc);
1131
1132 /* initialize Reply Post Free Queue */
1133 reply_post_free = (long)ioc->reply_post_free;
1134 @@ -4081,24 +4082,17 @@ _base_make_ioc_operational(struct MPT2SAS_ADAPTER *ioc, int sleep_flag)
1135
1136
1137 if (ioc->is_driver_loading) {
1138 -
1139 -
1140 -
1141 - ioc->wait_for_discovery_to_complete =
1142 - _base_determine_wait_on_discovery(ioc);
1143 - return r; /* scan_start and scan_finished support */
1144 - }
1145 -
1146 -
1147 - if (ioc->wait_for_discovery_to_complete && ioc->is_warpdrive) {
1148 - if (ioc->manu_pg10.OEMIdentifier == 0x80) {
1149 + if (ioc->is_warpdrive && ioc->manu_pg10.OEMIdentifier
1150 + == 0x80) {
1151 hide_flag = (u8) (ioc->manu_pg10.OEMSpecificFlags0 &
1152 MFG_PAGE10_HIDE_SSDS_MASK);
1153 if (hide_flag != MFG_PAGE10_HIDE_SSDS_MASK)
1154 ioc->mfg_pg10_hide_flag = hide_flag;
1155 }
1156 + ioc->wait_for_discovery_to_complete =
1157 + _base_determine_wait_on_discovery(ioc);
1158 + return r; /* scan_start and scan_finished support */
1159 }
1160 -
1161 r = _base_send_port_enable(ioc, sleep_flag);
1162 if (r)
1163 return r;
1164 diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
1165 index 9bc6fb2..2824a90 100644
1166 --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
1167 +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
1168 @@ -8001,7 +8001,6 @@ _scsih_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1169 goto out_attach_fail;
1170 }
1171
1172 - scsi_scan_host(shost);
1173 if (ioc->is_warpdrive) {
1174 if (ioc->mfg_pg10_hide_flag == MFG_PAGE10_EXPOSE_ALL_DISKS)
1175 ioc->hide_drives = 0;
1176 @@ -8015,8 +8014,8 @@ _scsih_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1177 }
1178 } else
1179 ioc->hide_drives = 0;
1180 + scsi_scan_host(shost);
1181
1182 - _scsih_probe_devices(ioc);
1183 return 0;
1184
1185 out_attach_fail:
1186 diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
1187 index 00233af..8e00926 100644
1188 --- a/drivers/tty/serial/amba-pl011.c
1189 +++ b/drivers/tty/serial/amba-pl011.c
1190 @@ -1740,9 +1740,19 @@ pl011_console_write(struct console *co, const char *s, unsigned int count)
1191 {
1192 struct uart_amba_port *uap = amba_ports[co->index];
1193 unsigned int status, old_cr, new_cr;
1194 + unsigned long flags;
1195 + int locked = 1;
1196
1197 clk_enable(uap->clk);
1198
1199 + local_irq_save(flags);
1200 + if (uap->port.sysrq)
1201 + locked = 0;
1202 + else if (oops_in_progress)
1203 + locked = spin_trylock(&uap->port.lock);
1204 + else
1205 + spin_lock(&uap->port.lock);
1206 +
1207 /*
1208 * First save the CR then disable the interrupts
1209 */
1210 @@ -1762,6 +1772,10 @@ pl011_console_write(struct console *co, const char *s, unsigned int count)
1211 } while (status & UART01x_FR_BUSY);
1212 writew(old_cr, uap->port.membase + UART011_CR);
1213
1214 + if (locked)
1215 + spin_unlock(&uap->port.lock);
1216 + local_irq_restore(flags);
1217 +
1218 clk_disable(uap->clk);
1219 }
1220
1221 diff --git a/drivers/tty/serial/jsm/jsm_driver.c b/drivers/tty/serial/jsm/jsm_driver.c
1222 index 7c867a0..7545fe1 100644
1223 --- a/drivers/tty/serial/jsm/jsm_driver.c
1224 +++ b/drivers/tty/serial/jsm/jsm_driver.c
1225 @@ -251,6 +251,7 @@ static void jsm_io_resume(struct pci_dev *pdev)
1226 struct jsm_board *brd = pci_get_drvdata(pdev);
1227
1228 pci_restore_state(pdev);
1229 + pci_save_state(pdev);
1230
1231 jsm_uart_port_init(brd);
1232 }
1233 diff --git a/drivers/tty/tty_port.c b/drivers/tty/tty_port.c
1234 index ef9dd62..bf6e238 100644
1235 --- a/drivers/tty/tty_port.c
1236 +++ b/drivers/tty/tty_port.c
1237 @@ -227,7 +227,6 @@ int tty_port_block_til_ready(struct tty_port *port,
1238 int do_clocal = 0, retval;
1239 unsigned long flags;
1240 DEFINE_WAIT(wait);
1241 - int cd;
1242
1243 /* block if port is in the process of being closed */
1244 if (tty_hung_up_p(filp) || port->flags & ASYNC_CLOSING) {
1245 @@ -284,11 +283,14 @@ int tty_port_block_til_ready(struct tty_port *port,
1246 retval = -ERESTARTSYS;
1247 break;
1248 }
1249 - /* Probe the carrier. For devices with no carrier detect this
1250 - will always return true */
1251 - cd = tty_port_carrier_raised(port);
1252 + /*
1253 + * Probe the carrier. For devices with no carrier detect
1254 + * tty_port_carrier_raised will always return true.
1255 + * Never ask drivers if CLOCAL is set, this causes troubles
1256 + * on some hardware.
1257 + */
1258 if (!(port->flags & ASYNC_CLOSING) &&
1259 - (do_clocal || cd))
1260 + (do_clocal || tty_port_carrier_raised(port)))
1261 break;
1262 if (signal_pending(current)) {
1263 retval = -ERESTARTSYS;
1264 diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
1265 index efe6849..fd4aee1 100644
1266 --- a/drivers/usb/class/cdc-wdm.c
1267 +++ b/drivers/usb/class/cdc-wdm.c
1268 @@ -57,6 +57,8 @@ MODULE_DEVICE_TABLE (usb, wdm_ids);
1269
1270 #define WDM_MAX 16
1271
1272 +/* CDC-WMC r1.1 requires wMaxCommand to be "at least 256 decimal (0x100)" */
1273 +#define WDM_DEFAULT_BUFSIZE 256
1274
1275 static DEFINE_MUTEX(wdm_mutex);
1276
1277 @@ -88,7 +90,8 @@ struct wdm_device {
1278 int count;
1279 dma_addr_t shandle;
1280 dma_addr_t ihandle;
1281 - struct mutex lock;
1282 + struct mutex wlock;
1283 + struct mutex rlock;
1284 wait_queue_head_t wait;
1285 struct work_struct rxwork;
1286 int werr;
1287 @@ -323,7 +326,7 @@ static ssize_t wdm_write
1288 }
1289
1290 /* concurrent writes and disconnect */
1291 - r = mutex_lock_interruptible(&desc->lock);
1292 + r = mutex_lock_interruptible(&desc->wlock);
1293 rv = -ERESTARTSYS;
1294 if (r) {
1295 kfree(buf);
1296 @@ -386,7 +389,7 @@ static ssize_t wdm_write
1297 out:
1298 usb_autopm_put_interface(desc->intf);
1299 outnp:
1300 - mutex_unlock(&desc->lock);
1301 + mutex_unlock(&desc->wlock);
1302 outnl:
1303 return rv < 0 ? rv : count;
1304 }
1305 @@ -399,7 +402,7 @@ static ssize_t wdm_read
1306 struct wdm_device *desc = file->private_data;
1307
1308
1309 - rv = mutex_lock_interruptible(&desc->lock); /*concurrent reads */
1310 + rv = mutex_lock_interruptible(&desc->rlock); /*concurrent reads */
1311 if (rv < 0)
1312 return -ERESTARTSYS;
1313
1314 @@ -467,14 +470,16 @@ retry:
1315 for (i = 0; i < desc->length - cntr; i++)
1316 desc->ubuf[i] = desc->ubuf[i + cntr];
1317
1318 + spin_lock_irq(&desc->iuspin);
1319 desc->length -= cntr;
1320 + spin_unlock_irq(&desc->iuspin);
1321 /* in case we had outstanding data */
1322 if (!desc->length)
1323 clear_bit(WDM_READ, &desc->flags);
1324 rv = cntr;
1325
1326 err:
1327 - mutex_unlock(&desc->lock);
1328 + mutex_unlock(&desc->rlock);
1329 return rv;
1330 }
1331
1332 @@ -540,7 +545,8 @@ static int wdm_open(struct inode *inode, struct file *file)
1333 }
1334 intf->needs_remote_wakeup = 1;
1335
1336 - mutex_lock(&desc->lock);
1337 + /* using write lock to protect desc->count */
1338 + mutex_lock(&desc->wlock);
1339 if (!desc->count++) {
1340 desc->werr = 0;
1341 desc->rerr = 0;
1342 @@ -553,7 +559,7 @@ static int wdm_open(struct inode *inode, struct file *file)
1343 } else {
1344 rv = 0;
1345 }
1346 - mutex_unlock(&desc->lock);
1347 + mutex_unlock(&desc->wlock);
1348 usb_autopm_put_interface(desc->intf);
1349 out:
1350 mutex_unlock(&wdm_mutex);
1351 @@ -565,9 +571,11 @@ static int wdm_release(struct inode *inode, struct file *file)
1352 struct wdm_device *desc = file->private_data;
1353
1354 mutex_lock(&wdm_mutex);
1355 - mutex_lock(&desc->lock);
1356 +
1357 + /* using write lock to protect desc->count */
1358 + mutex_lock(&desc->wlock);
1359 desc->count--;
1360 - mutex_unlock(&desc->lock);
1361 + mutex_unlock(&desc->wlock);
1362
1363 if (!desc->count) {
1364 dev_dbg(&desc->intf->dev, "wdm_release: cleanup");
1365 @@ -630,7 +638,7 @@ static int wdm_probe(struct usb_interface *intf, const struct usb_device_id *id)
1366 struct usb_cdc_dmm_desc *dmhd;
1367 u8 *buffer = intf->altsetting->extra;
1368 int buflen = intf->altsetting->extralen;
1369 - u16 maxcom = 0;
1370 + u16 maxcom = WDM_DEFAULT_BUFSIZE;
1371
1372 if (!buffer)
1373 goto out;
1374 @@ -665,7 +673,8 @@ next_desc:
1375 desc = kzalloc(sizeof(struct wdm_device), GFP_KERNEL);
1376 if (!desc)
1377 goto out;
1378 - mutex_init(&desc->lock);
1379 + mutex_init(&desc->rlock);
1380 + mutex_init(&desc->wlock);
1381 spin_lock_init(&desc->iuspin);
1382 init_waitqueue_head(&desc->wait);
1383 desc->wMaxCommand = maxcom;
1384 @@ -716,7 +725,7 @@ next_desc:
1385 goto err;
1386
1387 desc->inbuf = usb_alloc_coherent(interface_to_usbdev(intf),
1388 - desc->bMaxPacketSize0,
1389 + desc->wMaxCommand,
1390 GFP_KERNEL,
1391 &desc->response->transfer_dma);
1392 if (!desc->inbuf)
1393 @@ -779,11 +788,13 @@ static void wdm_disconnect(struct usb_interface *intf)
1394 /* to terminate pending flushes */
1395 clear_bit(WDM_IN_USE, &desc->flags);
1396 spin_unlock_irqrestore(&desc->iuspin, flags);
1397 - mutex_lock(&desc->lock);
1398 + wake_up_all(&desc->wait);
1399 + mutex_lock(&desc->rlock);
1400 + mutex_lock(&desc->wlock);
1401 kill_urbs(desc);
1402 cancel_work_sync(&desc->rxwork);
1403 - mutex_unlock(&desc->lock);
1404 - wake_up_all(&desc->wait);
1405 + mutex_unlock(&desc->wlock);
1406 + mutex_unlock(&desc->rlock);
1407 if (!desc->count)
1408 cleanup(desc);
1409 mutex_unlock(&wdm_mutex);
1410 @@ -798,8 +809,10 @@ static int wdm_suspend(struct usb_interface *intf, pm_message_t message)
1411 dev_dbg(&desc->intf->dev, "wdm%d_suspend\n", intf->minor);
1412
1413 /* if this is an autosuspend the caller does the locking */
1414 - if (!PMSG_IS_AUTO(message))
1415 - mutex_lock(&desc->lock);
1416 + if (!PMSG_IS_AUTO(message)) {
1417 + mutex_lock(&desc->rlock);
1418 + mutex_lock(&desc->wlock);
1419 + }
1420 spin_lock_irq(&desc->iuspin);
1421
1422 if (PMSG_IS_AUTO(message) &&
1423 @@ -815,8 +828,10 @@ static int wdm_suspend(struct usb_interface *intf, pm_message_t message)
1424 kill_urbs(desc);
1425 cancel_work_sync(&desc->rxwork);
1426 }
1427 - if (!PMSG_IS_AUTO(message))
1428 - mutex_unlock(&desc->lock);
1429 + if (!PMSG_IS_AUTO(message)) {
1430 + mutex_unlock(&desc->wlock);
1431 + mutex_unlock(&desc->rlock);
1432 + }
1433
1434 return rv;
1435 }
1436 @@ -854,7 +869,8 @@ static int wdm_pre_reset(struct usb_interface *intf)
1437 {
1438 struct wdm_device *desc = usb_get_intfdata(intf);
1439
1440 - mutex_lock(&desc->lock);
1441 + mutex_lock(&desc->rlock);
1442 + mutex_lock(&desc->wlock);
1443 kill_urbs(desc);
1444
1445 /*
1446 @@ -876,7 +892,8 @@ static int wdm_post_reset(struct usb_interface *intf)
1447 int rv;
1448
1449 rv = recover_from_urb_loss(desc);
1450 - mutex_unlock(&desc->lock);
1451 + mutex_unlock(&desc->wlock);
1452 + mutex_unlock(&desc->rlock);
1453 return 0;
1454 }
1455
1456 diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
1457 index 69a4e43..27bd50a 100644
1458 --- a/drivers/usb/dwc3/ep0.c
1459 +++ b/drivers/usb/dwc3/ep0.c
1460 @@ -149,20 +149,14 @@ static int __dwc3_gadget_ep0_queue(struct dwc3_ep *dep,
1461
1462 direction = !!(dep->flags & DWC3_EP0_DIR_IN);
1463
1464 - if (dwc->ep0state == EP0_STATUS_PHASE) {
1465 - type = dwc->three_stage_setup
1466 - ? DWC3_TRBCTL_CONTROL_STATUS3
1467 - : DWC3_TRBCTL_CONTROL_STATUS2;
1468 - } else if (dwc->ep0state == EP0_DATA_PHASE) {
1469 - type = DWC3_TRBCTL_CONTROL_DATA;
1470 - } else {
1471 - /* should never happen */
1472 - WARN_ON(1);
1473 + if (dwc->ep0state != EP0_DATA_PHASE) {
1474 + dev_WARN(dwc->dev, "Unexpected pending request\n");
1475 return 0;
1476 }
1477
1478 ret = dwc3_ep0_start_trans(dwc, direction,
1479 - req->request.dma, req->request.length, type);
1480 + req->request.dma, req->request.length,
1481 + DWC3_TRBCTL_CONTROL_DATA);
1482 dep->flags &= ~(DWC3_EP_PENDING_REQUEST |
1483 DWC3_EP0_DIR_IN);
1484 }
1485 diff --git a/drivers/usb/gadget/langwell_udc.c b/drivers/usb/gadget/langwell_udc.c
1486 index c9fa3bf..6ad0ad6 100644
1487 --- a/drivers/usb/gadget/langwell_udc.c
1488 +++ b/drivers/usb/gadget/langwell_udc.c
1489 @@ -1522,8 +1522,7 @@ static void langwell_udc_stop(struct langwell_udc *dev)
1490
1491
1492 /* stop all USB activities */
1493 -static void stop_activity(struct langwell_udc *dev,
1494 - struct usb_gadget_driver *driver)
1495 +static void stop_activity(struct langwell_udc *dev)
1496 {
1497 struct langwell_ep *ep;
1498 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
1499 @@ -1535,9 +1534,9 @@ static void stop_activity(struct langwell_udc *dev,
1500 }
1501
1502 /* report disconnect; the driver is already quiesced */
1503 - if (driver) {
1504 + if (dev->driver) {
1505 spin_unlock(&dev->lock);
1506 - driver->disconnect(&dev->gadget);
1507 + dev->driver->disconnect(&dev->gadget);
1508 spin_lock(&dev->lock);
1509 }
1510
1511 @@ -1925,11 +1924,10 @@ static int langwell_stop(struct usb_gadget *g,
1512
1513 /* stop all usb activities */
1514 dev->gadget.speed = USB_SPEED_UNKNOWN;
1515 - stop_activity(dev, driver);
1516 - spin_unlock_irqrestore(&dev->lock, flags);
1517 -
1518 dev->gadget.dev.driver = NULL;
1519 dev->driver = NULL;
1520 + stop_activity(dev);
1521 + spin_unlock_irqrestore(&dev->lock, flags);
1522
1523 device_remove_file(&dev->pdev->dev, &dev_attr_function);
1524
1525 @@ -2733,7 +2731,7 @@ static void handle_usb_reset(struct langwell_udc *dev)
1526 dev->bus_reset = 1;
1527
1528 /* reset all the queues, stop all USB activities */
1529 - stop_activity(dev, dev->driver);
1530 + stop_activity(dev);
1531 dev->usb_state = USB_STATE_DEFAULT;
1532 } else {
1533 dev_vdbg(&dev->pdev->dev, "device controller reset\n");
1534 @@ -2741,7 +2739,7 @@ static void handle_usb_reset(struct langwell_udc *dev)
1535 langwell_udc_reset(dev);
1536
1537 /* reset all the queues, stop all USB activities */
1538 - stop_activity(dev, dev->driver);
1539 + stop_activity(dev);
1540
1541 /* reset ep0 dQH and endptctrl */
1542 ep0_reset(dev);
1543 @@ -3367,7 +3365,7 @@ static int langwell_udc_suspend(struct pci_dev *pdev, pm_message_t state)
1544
1545 spin_lock_irq(&dev->lock);
1546 /* stop all usb activities */
1547 - stop_activity(dev, dev->driver);
1548 + stop_activity(dev);
1549 spin_unlock_irq(&dev->lock);
1550
1551 /* free dTD dma_pool and dQH */
1552 diff --git a/drivers/usb/gadget/storage_common.c b/drivers/usb/gadget/storage_common.c
1553 index c7f291a..85ea14e 100644
1554 --- a/drivers/usb/gadget/storage_common.c
1555 +++ b/drivers/usb/gadget/storage_common.c
1556 @@ -598,16 +598,16 @@ static __maybe_unused struct usb_ss_cap_descriptor fsg_ss_cap_desc = {
1557 | USB_5GBPS_OPERATION),
1558 .bFunctionalitySupport = USB_LOW_SPEED_OPERATION,
1559 .bU1devExitLat = USB_DEFAULT_U1_DEV_EXIT_LAT,
1560 - .bU2DevExitLat = USB_DEFAULT_U2_DEV_EXIT_LAT,
1561 + .bU2DevExitLat = cpu_to_le16(USB_DEFAULT_U2_DEV_EXIT_LAT),
1562 };
1563
1564 static __maybe_unused struct usb_bos_descriptor fsg_bos_desc = {
1565 .bLength = USB_DT_BOS_SIZE,
1566 .bDescriptorType = USB_DT_BOS,
1567
1568 - .wTotalLength = USB_DT_BOS_SIZE
1569 + .wTotalLength = cpu_to_le16(USB_DT_BOS_SIZE
1570 + USB_DT_USB_EXT_CAP_SIZE
1571 - + USB_DT_USB_SS_CAP_SIZE,
1572 + + USB_DT_USB_SS_CAP_SIZE),
1573
1574 .bNumDeviceCaps = 2,
1575 };
1576 diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c
1577 index e90344a..b556a72 100644
1578 --- a/drivers/usb/host/ehci-fsl.c
1579 +++ b/drivers/usb/host/ehci-fsl.c
1580 @@ -125,7 +125,7 @@ static int usb_hcd_fsl_probe(const struct hc_driver *driver,
1581 */
1582 if (pdata->init && pdata->init(pdev)) {
1583 retval = -ENODEV;
1584 - goto err3;
1585 + goto err4;
1586 }
1587
1588 /* Enable USB controller, 83xx or 8536 */
1589 diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
1590 index d28c586..ae92dc4 100644
1591 --- a/drivers/usb/host/xhci-ring.c
1592 +++ b/drivers/usb/host/xhci-ring.c
1593 @@ -1215,6 +1215,7 @@ static void handle_vendor_event(struct xhci_hcd *xhci,
1594 *
1595 * Returns a zero-based port number, which is suitable for indexing into each of
1596 * the split roothubs' port arrays and bus state arrays.
1597 + * Add one to it in order to call xhci_find_slot_id_by_port.
1598 */
1599 static unsigned int find_faked_portnum_from_hw_portnum(struct usb_hcd *hcd,
1600 struct xhci_hcd *xhci, u32 port_id)
1601 @@ -1335,7 +1336,7 @@ static void handle_port_status(struct xhci_hcd *xhci,
1602 xhci_set_link_state(xhci, port_array, faked_port_index,
1603 XDEV_U0);
1604 slot_id = xhci_find_slot_id_by_port(hcd, xhci,
1605 - faked_port_index);
1606 + faked_port_index + 1);
1607 if (!slot_id) {
1608 xhci_dbg(xhci, "slot_id is zero\n");
1609 goto cleanup;
1610 @@ -3372,7 +3373,8 @@ static int xhci_queue_isoc_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
1611 /* Check TD length */
1612 if (running_total != td_len) {
1613 xhci_err(xhci, "ISOC TD length unmatch\n");
1614 - return -EINVAL;
1615 + ret = -EINVAL;
1616 + goto cleanup;
1617 }
1618 }
1619
1620 diff --git a/drivers/usb/misc/usbsevseg.c b/drivers/usb/misc/usbsevseg.c
1621 index 417b8f2..59689fa 100644
1622 --- a/drivers/usb/misc/usbsevseg.c
1623 +++ b/drivers/usb/misc/usbsevseg.c
1624 @@ -24,7 +24,7 @@
1625
1626 #define VENDOR_ID 0x0fc5
1627 #define PRODUCT_ID 0x1227
1628 -#define MAXLEN 6
1629 +#define MAXLEN 8
1630
1631 /* table of devices that work with this driver */
1632 static const struct usb_device_id id_table[] = {
1633 diff --git a/drivers/usb/musb/davinci.c b/drivers/usb/musb/davinci.c
1634 index f9a3f62..7c569f5 100644
1635 --- a/drivers/usb/musb/davinci.c
1636 +++ b/drivers/usb/musb/davinci.c
1637 @@ -33,9 +33,6 @@
1638 #include <linux/platform_device.h>
1639 #include <linux/dma-mapping.h>
1640
1641 -#include <mach/hardware.h>
1642 -#include <mach/memory.h>
1643 -#include <asm/gpio.h>
1644 #include <mach/cputype.h>
1645
1646 #include <asm/mach-types.h>
1647 diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
1648 index a1a324b..a515237 100644
1649 --- a/drivers/usb/serial/cp210x.c
1650 +++ b/drivers/usb/serial/cp210x.c
1651 @@ -39,6 +39,8 @@ static void cp210x_get_termios(struct tty_struct *,
1652 struct usb_serial_port *port);
1653 static void cp210x_get_termios_port(struct usb_serial_port *port,
1654 unsigned int *cflagp, unsigned int *baudp);
1655 +static void cp210x_change_speed(struct tty_struct *, struct usb_serial_port *,
1656 + struct ktermios *);
1657 static void cp210x_set_termios(struct tty_struct *, struct usb_serial_port *,
1658 struct ktermios*);
1659 static int cp210x_tiocmget(struct tty_struct *);
1660 @@ -138,6 +140,7 @@ static const struct usb_device_id id_table[] = {
1661 { USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */
1662 { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */
1663 { USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */
1664 + { USB_DEVICE(0x3195, 0xF190) }, /* Link Instruments MSO-19 */
1665 { USB_DEVICE(0x413C, 0x9500) }, /* DW700 GPS USB interface */
1666 { } /* Terminating Entry */
1667 };
1668 @@ -201,6 +204,8 @@ static struct usb_serial_driver cp210x_device = {
1669 #define CP210X_EMBED_EVENTS 0x15
1670 #define CP210X_GET_EVENTSTATE 0x16
1671 #define CP210X_SET_CHARS 0x19
1672 +#define CP210X_GET_BAUDRATE 0x1D
1673 +#define CP210X_SET_BAUDRATE 0x1E
1674
1675 /* CP210X_IFC_ENABLE */
1676 #define UART_ENABLE 0x0001
1677 @@ -354,8 +359,8 @@ static inline int cp210x_set_config_single(struct usb_serial_port *port,
1678 * Quantises the baud rate as per AN205 Table 1
1679 */
1680 static unsigned int cp210x_quantise_baudrate(unsigned int baud) {
1681 - if (baud <= 56) baud = 0;
1682 - else if (baud <= 300) baud = 300;
1683 + if (baud <= 300)
1684 + baud = 300;
1685 else if (baud <= 600) baud = 600;
1686 else if (baud <= 1200) baud = 1200;
1687 else if (baud <= 1800) baud = 1800;
1688 @@ -383,17 +388,15 @@ static unsigned int cp210x_quantise_baudrate(unsigned int baud) {
1689 else if (baud <= 491520) baud = 460800;
1690 else if (baud <= 567138) baud = 500000;
1691 else if (baud <= 670254) baud = 576000;
1692 - else if (baud <= 1053257) baud = 921600;
1693 - else if (baud <= 1474560) baud = 1228800;
1694 - else if (baud <= 2457600) baud = 1843200;
1695 - else baud = 3686400;
1696 + else if (baud < 1000000)
1697 + baud = 921600;
1698 + else if (baud > 2000000)
1699 + baud = 2000000;
1700 return baud;
1701 }
1702
1703 static int cp210x_open(struct tty_struct *tty, struct usb_serial_port *port)
1704 {
1705 - int result;
1706 -
1707 dbg("%s - port %d", __func__, port->number);
1708
1709 if (cp210x_set_config_single(port, CP210X_IFC_ENABLE, UART_ENABLE)) {
1710 @@ -402,13 +405,14 @@ static int cp210x_open(struct tty_struct *tty, struct usb_serial_port *port)
1711 return -EPROTO;
1712 }
1713
1714 - result = usb_serial_generic_open(tty, port);
1715 - if (result)
1716 - return result;
1717 -
1718 /* Configure the termios structure */
1719 cp210x_get_termios(tty, port);
1720 - return 0;
1721 +
1722 + /* The baud rate must be initialised on cp2104 */
1723 + if (tty)
1724 + cp210x_change_speed(tty, port, NULL);
1725 +
1726 + return usb_serial_generic_open(tty, port);
1727 }
1728
1729 static void cp210x_close(struct usb_serial_port *port)
1730 @@ -460,10 +464,7 @@ static void cp210x_get_termios_port(struct usb_serial_port *port,
1731
1732 dbg("%s - port %d", __func__, port->number);
1733
1734 - cp210x_get_config(port, CP210X_GET_BAUDDIV, &baud, 2);
1735 - /* Convert to baudrate */
1736 - if (baud)
1737 - baud = cp210x_quantise_baudrate((BAUD_RATE_GEN_FREQ + baud/2)/ baud);
1738 + cp210x_get_config(port, CP210X_GET_BAUDRATE, &baud, 4);
1739
1740 dbg("%s - baud rate = %d", __func__, baud);
1741 *baudp = baud;
1742 @@ -577,11 +578,64 @@ static void cp210x_get_termios_port(struct usb_serial_port *port,
1743 *cflagp = cflag;
1744 }
1745
1746 +/*
1747 + * CP2101 supports the following baud rates:
1748 + *
1749 + * 300, 600, 1200, 1800, 2400, 4800, 7200, 9600, 14400, 19200, 28800,
1750 + * 38400, 56000, 57600, 115200, 128000, 230400, 460800, 921600
1751 + *
1752 + * CP2102 and CP2103 support the following additional rates:
1753 + *
1754 + * 4000, 16000, 51200, 64000, 76800, 153600, 250000, 256000, 500000,
1755 + * 576000
1756 + *
1757 + * The device will map a requested rate to a supported one, but the result
1758 + * of requests for rates greater than 1053257 is undefined (see AN205).
1759 + *
1760 + * CP2104, CP2105 and CP2110 support most rates up to 2M, 921k and 1M baud,
1761 + * respectively, with an error less than 1%. The actual rates are determined
1762 + * by
1763 + *
1764 + * div = round(freq / (2 x prescale x request))
1765 + * actual = freq / (2 x prescale x div)
1766 + *
1767 + * For CP2104 and CP2105 freq is 48Mhz and prescale is 4 for request <= 365bps
1768 + * or 1 otherwise.
1769 + * For CP2110 freq is 24Mhz and prescale is 4 for request <= 300bps or 1
1770 + * otherwise.
1771 + */
1772 +static void cp210x_change_speed(struct tty_struct *tty,
1773 + struct usb_serial_port *port, struct ktermios *old_termios)
1774 +{
1775 + u32 baud;
1776 +
1777 + baud = tty->termios->c_ospeed;
1778 +
1779 + /* This maps the requested rate to a rate valid on cp2102 or cp2103,
1780 + * or to an arbitrary rate in [1M,2M].
1781 + *
1782 + * NOTE: B0 is not implemented.
1783 + */
1784 + baud = cp210x_quantise_baudrate(baud);
1785 +
1786 + dbg("%s - setting baud rate to %u", __func__, baud);
1787 + if (cp210x_set_config(port, CP210X_SET_BAUDRATE, &baud,
1788 + sizeof(baud))) {
1789 + dev_warn(&port->dev, "failed to set baud rate to %u\n", baud);
1790 + if (old_termios)
1791 + baud = old_termios->c_ospeed;
1792 + else
1793 + baud = 9600;
1794 + }
1795 +
1796 + tty_encode_baud_rate(tty, baud, baud);
1797 +}
1798 +
1799 static void cp210x_set_termios(struct tty_struct *tty,
1800 struct usb_serial_port *port, struct ktermios *old_termios)
1801 {
1802 unsigned int cflag, old_cflag;
1803 - unsigned int baud = 0, bits;
1804 + unsigned int bits;
1805 unsigned int modem_ctl[4];
1806
1807 dbg("%s - port %d", __func__, port->number);
1808 @@ -592,20 +646,9 @@ static void cp210x_set_termios(struct tty_struct *tty,
1809 tty->termios->c_cflag &= ~CMSPAR;
1810 cflag = tty->termios->c_cflag;
1811 old_cflag = old_termios->c_cflag;
1812 - baud = cp210x_quantise_baudrate(tty_get_baud_rate(tty));
1813 -
1814 - /* If the baud rate is to be updated*/
1815 - if (baud != tty_termios_baud_rate(old_termios) && baud != 0) {
1816 - dbg("%s - Setting baud rate to %d baud", __func__,
1817 - baud);
1818 - if (cp210x_set_config_single(port, CP210X_SET_BAUDDIV,
1819 - ((BAUD_RATE_GEN_FREQ + baud/2) / baud))) {
1820 - dbg("Baud rate requested not supported by device");
1821 - baud = tty_termios_baud_rate(old_termios);
1822 - }
1823 - }
1824 - /* Report back the resulting baud rate */
1825 - tty_encode_baud_rate(tty, baud, baud);
1826 +
1827 + if (tty->termios->c_ospeed != old_termios->c_ospeed)
1828 + cp210x_change_speed(tty, port, old_termios);
1829
1830 /* If the number of data bits is to be updated */
1831 if ((cflag & CSIZE) != (old_cflag & CSIZE)) {
1832 diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
1833 index ff3db5d..058b92c 100644
1834 --- a/drivers/usb/serial/ftdi_sio.c
1835 +++ b/drivers/usb/serial/ftdi_sio.c
1836 @@ -797,6 +797,7 @@ static struct usb_device_id id_table_combined [] = {
1837 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
1838 { USB_DEVICE(ADI_VID, ADI_GNICEPLUS_PID),
1839 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
1840 + { USB_DEVICE(HORNBY_VID, HORNBY_ELITE_PID) },
1841 { USB_DEVICE(JETI_VID, JETI_SPC1201_PID) },
1842 { USB_DEVICE(MARVELL_VID, MARVELL_SHEEVAPLUG_PID),
1843 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
1844 @@ -805,6 +806,8 @@ static struct usb_device_id id_table_combined [] = {
1845 { USB_DEVICE(BAYER_VID, BAYER_CONTOUR_CABLE_PID) },
1846 { USB_DEVICE(FTDI_VID, MARVELL_OPENRD_PID),
1847 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
1848 + { USB_DEVICE(FTDI_VID, TI_XDS100V2_PID),
1849 + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
1850 { USB_DEVICE(FTDI_VID, HAMEG_HO820_PID) },
1851 { USB_DEVICE(FTDI_VID, HAMEG_HO720_PID) },
1852 { USB_DEVICE(FTDI_VID, HAMEG_HO730_PID) },
1853 @@ -841,6 +844,7 @@ static struct usb_device_id id_table_combined [] = {
1854 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
1855 { USB_DEVICE(ST_VID, ST_STMCLT1030_PID),
1856 .driver_info = (kernel_ulong_t)&ftdi_stmclite_quirk },
1857 + { USB_DEVICE(FTDI_VID, FTDI_RF_R106) },
1858 { }, /* Optional parameter entry */
1859 { } /* Terminating entry */
1860 };
1861 @@ -1333,8 +1337,7 @@ static int set_serial_info(struct tty_struct *tty,
1862 goto check_and_exit;
1863 }
1864
1865 - if ((new_serial.baud_base != priv->baud_base) &&
1866 - (new_serial.baud_base < 9600)) {
1867 + if (new_serial.baud_base != priv->baud_base) {
1868 mutex_unlock(&priv->cfg_lock);
1869 return -EINVAL;
1870 }
1871 @@ -1824,6 +1827,7 @@ static int ftdi_sio_port_remove(struct usb_serial_port *port)
1872
1873 static int ftdi_open(struct tty_struct *tty, struct usb_serial_port *port)
1874 {
1875 + struct ktermios dummy;
1876 struct usb_device *dev = port->serial->dev;
1877 struct ftdi_private *priv = usb_get_serial_port_data(port);
1878 int result;
1879 @@ -1842,8 +1846,10 @@ static int ftdi_open(struct tty_struct *tty, struct usb_serial_port *port)
1880 This is same behaviour as serial.c/rs_open() - Kuba */
1881
1882 /* ftdi_set_termios will send usb control messages */
1883 - if (tty)
1884 - ftdi_set_termios(tty, port, tty->termios);
1885 + if (tty) {
1886 + memset(&dummy, 0, sizeof(dummy));
1887 + ftdi_set_termios(tty, port, &dummy);
1888 + }
1889
1890 /* Start reading from the device */
1891 result = usb_serial_generic_open(tty, port);
1892 diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
1893 index 055b64e..76d4f31 100644
1894 --- a/drivers/usb/serial/ftdi_sio_ids.h
1895 +++ b/drivers/usb/serial/ftdi_sio_ids.h
1896 @@ -39,6 +39,13 @@
1897 /* www.candapter.com Ewert Energy Systems CANdapter device */
1898 #define FTDI_CANDAPTER_PID 0x9F80 /* Product Id */
1899
1900 +/*
1901 + * Texas Instruments XDS100v2 JTAG / BeagleBone A3
1902 + * http://processors.wiki.ti.com/index.php/XDS100
1903 + * http://beagleboard.org/bone
1904 + */
1905 +#define TI_XDS100V2_PID 0xa6d0
1906 +
1907 #define FTDI_NXTCAM_PID 0xABB8 /* NXTCam for Mindstorms NXT */
1908
1909 /* US Interface Navigator (http://www.usinterface.com/) */
1910 @@ -525,6 +532,12 @@
1911 #define ADI_GNICEPLUS_PID 0xF001
1912
1913 /*
1914 + * Hornby Elite
1915 + */
1916 +#define HORNBY_VID 0x04D8
1917 +#define HORNBY_ELITE_PID 0x000A
1918 +
1919 +/*
1920 * RATOC REX-USB60F
1921 */
1922 #define RATOC_VENDOR_ID 0x0584
1923 @@ -1168,3 +1181,9 @@
1924 */
1925 /* TagTracer MIFARE*/
1926 #define FTDI_ZEITCONTROL_TAGTRACE_MIFARE_PID 0xF7C0
1927 +
1928 +/*
1929 + * Rainforest Automation
1930 + */
1931 +/* ZigBee controller */
1932 +#define FTDI_RF_R106 0x8A28
1933 diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c
1934 index 0aac00a..8a90d58 100644
1935 --- a/drivers/usb/serial/io_ti.c
1936 +++ b/drivers/usb/serial/io_ti.c
1937 @@ -2677,15 +2677,7 @@ cleanup:
1938
1939 static void edge_disconnect(struct usb_serial *serial)
1940 {
1941 - int i;
1942 - struct edgeport_port *edge_port;
1943 -
1944 dbg("%s", __func__);
1945 -
1946 - for (i = 0; i < serial->num_ports; ++i) {
1947 - edge_port = usb_get_serial_port_data(serial->port[i]);
1948 - edge_remove_sysfs_attrs(edge_port->port);
1949 - }
1950 }
1951
1952 static void edge_release(struct usb_serial *serial)
1953 @@ -2764,6 +2756,7 @@ static struct usb_serial_driver edgeport_1port_device = {
1954 .disconnect = edge_disconnect,
1955 .release = edge_release,
1956 .port_probe = edge_create_sysfs_attrs,
1957 + .port_remove = edge_remove_sysfs_attrs,
1958 .ioctl = edge_ioctl,
1959 .set_termios = edge_set_termios,
1960 .tiocmget = edge_tiocmget,
1961 @@ -2795,6 +2788,7 @@ static struct usb_serial_driver edgeport_2port_device = {
1962 .disconnect = edge_disconnect,
1963 .release = edge_release,
1964 .port_probe = edge_create_sysfs_attrs,
1965 + .port_remove = edge_remove_sysfs_attrs,
1966 .ioctl = edge_ioctl,
1967 .set_termios = edge_set_termios,
1968 .tiocmget = edge_tiocmget,
1969 diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
1970 index c96b6b6..2a9ed6e 100644
1971 --- a/drivers/usb/serial/option.c
1972 +++ b/drivers/usb/serial/option.c
1973 @@ -480,6 +480,10 @@ static void option_instat_callback(struct urb *urb);
1974 #define ZD_VENDOR_ID 0x0685
1975 #define ZD_PRODUCT_7000 0x7000
1976
1977 +/* LG products */
1978 +#define LG_VENDOR_ID 0x1004
1979 +#define LG_PRODUCT_L02C 0x618f
1980 +
1981 /* some devices interfaces need special handling due to a number of reasons */
1982 enum option_blacklist_reason {
1983 OPTION_BLACKLIST_NONE = 0,
1984 @@ -1183,6 +1187,7 @@ static const struct usb_device_id option_ids[] = {
1985 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU526) },
1986 { USB_DEVICE_AND_INTERFACE_INFO(VIETTEL_VENDOR_ID, VIETTEL_PRODUCT_VT1000, 0xff, 0xff, 0xff) },
1987 { USB_DEVICE_AND_INTERFACE_INFO(ZD_VENDOR_ID, ZD_PRODUCT_7000, 0xff, 0xff, 0xff) },
1988 + { USB_DEVICE(LG_VENDOR_ID, LG_PRODUCT_L02C) }, /* docomo L-02C modem */
1989 { } /* Terminating entry */
1990 };
1991 MODULE_DEVICE_TABLE(usb, option_ids);
1992 diff --git a/drivers/usb/serial/qcaux.c b/drivers/usb/serial/qcaux.c
1993 index 30b73e6..a348198 100644
1994 --- a/drivers/usb/serial/qcaux.c
1995 +++ b/drivers/usb/serial/qcaux.c
1996 @@ -36,6 +36,7 @@
1997 #define UTSTARCOM_PRODUCT_UM175_V1 0x3712
1998 #define UTSTARCOM_PRODUCT_UM175_V2 0x3714
1999 #define UTSTARCOM_PRODUCT_UM175_ALLTEL 0x3715
2000 +#define PANTECH_PRODUCT_UML190_VZW 0x3716
2001 #define PANTECH_PRODUCT_UML290_VZW 0x3718
2002
2003 /* CMOTECH devices */
2004 @@ -67,7 +68,11 @@ static struct usb_device_id id_table[] = {
2005 { USB_DEVICE_AND_INTERFACE_INFO(LG_VENDOR_ID, LG_PRODUCT_VX4400_6000, 0xff, 0xff, 0x00) },
2006 { USB_DEVICE_AND_INTERFACE_INFO(SANYO_VENDOR_ID, SANYO_PRODUCT_KATANA_LX, 0xff, 0xff, 0x00) },
2007 { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_U520, 0xff, 0x00, 0x00) },
2008 - { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, PANTECH_PRODUCT_UML290_VZW, 0xff, 0xff, 0xff) },
2009 + { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, PANTECH_PRODUCT_UML190_VZW, 0xff, 0xff, 0xff) },
2010 + { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, PANTECH_PRODUCT_UML190_VZW, 0xff, 0xfe, 0xff) },
2011 + { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, PANTECH_PRODUCT_UML290_VZW, 0xff, 0xfd, 0xff) }, /* NMEA */
2012 + { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, PANTECH_PRODUCT_UML290_VZW, 0xff, 0xfe, 0xff) }, /* WMC */
2013 + { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, PANTECH_PRODUCT_UML290_VZW, 0xff, 0xff, 0xff) }, /* DIAG */
2014 { },
2015 };
2016 MODULE_DEVICE_TABLE(usb, id_table);
2017 diff --git a/drivers/usb/storage/realtek_cr.c b/drivers/usb/storage/realtek_cr.c
2018 index 0ce5f79..32c93d7 100644
2019 --- a/drivers/usb/storage/realtek_cr.c
2020 +++ b/drivers/usb/storage/realtek_cr.c
2021 @@ -791,7 +791,7 @@ static void rts51x_suspend_timer_fn(unsigned long data)
2022 rts51x_set_stat(chip, RTS51X_STAT_SS);
2023 /* ignore mass storage interface's children */
2024 pm_suspend_ignore_children(&us->pusb_intf->dev, true);
2025 - usb_autopm_put_interface(us->pusb_intf);
2026 + usb_autopm_put_interface_async(us->pusb_intf);
2027 US_DEBUGP("%s: RTS51X_STAT_SS 01,"
2028 "intf->pm_usage_cnt:%d, power.usage:%d\n",
2029 __func__,
2030 diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c
2031 index 2a83425..68b19ab 100644
2032 --- a/fs/ecryptfs/crypto.c
2033 +++ b/fs/ecryptfs/crypto.c
2034 @@ -417,17 +417,6 @@ static int ecryptfs_encrypt_extent(struct page *enc_extent_page,
2035 (unsigned long long)(extent_base + extent_offset), rc);
2036 goto out;
2037 }
2038 - if (unlikely(ecryptfs_verbosity > 0)) {
2039 - ecryptfs_printk(KERN_DEBUG, "Encrypting extent "
2040 - "with iv:\n");
2041 - ecryptfs_dump_hex(extent_iv, crypt_stat->iv_bytes);
2042 - ecryptfs_printk(KERN_DEBUG, "First 8 bytes before "
2043 - "encryption:\n");
2044 - ecryptfs_dump_hex((char *)
2045 - (page_address(page)
2046 - + (extent_offset * crypt_stat->extent_size)),
2047 - 8);
2048 - }
2049 rc = ecryptfs_encrypt_page_offset(crypt_stat, enc_extent_page, 0,
2050 page, (extent_offset
2051 * crypt_stat->extent_size),
2052 @@ -440,14 +429,6 @@ static int ecryptfs_encrypt_extent(struct page *enc_extent_page,
2053 goto out;
2054 }
2055 rc = 0;
2056 - if (unlikely(ecryptfs_verbosity > 0)) {
2057 - ecryptfs_printk(KERN_DEBUG, "Encrypt extent [0x%.16llx]; "
2058 - "rc = [%d]\n",
2059 - (unsigned long long)(extent_base + extent_offset), rc);
2060 - ecryptfs_printk(KERN_DEBUG, "First 8 bytes after "
2061 - "encryption:\n");
2062 - ecryptfs_dump_hex((char *)(page_address(enc_extent_page)), 8);
2063 - }
2064 out:
2065 return rc;
2066 }
2067 @@ -543,17 +524,6 @@ static int ecryptfs_decrypt_extent(struct page *page,
2068 (unsigned long long)(extent_base + extent_offset), rc);
2069 goto out;
2070 }
2071 - if (unlikely(ecryptfs_verbosity > 0)) {
2072 - ecryptfs_printk(KERN_DEBUG, "Decrypting extent "
2073 - "with iv:\n");
2074 - ecryptfs_dump_hex(extent_iv, crypt_stat->iv_bytes);
2075 - ecryptfs_printk(KERN_DEBUG, "First 8 bytes before "
2076 - "decryption:\n");
2077 - ecryptfs_dump_hex((char *)
2078 - (page_address(enc_extent_page)
2079 - + (extent_offset * crypt_stat->extent_size)),
2080 - 8);
2081 - }
2082 rc = ecryptfs_decrypt_page_offset(crypt_stat, page,
2083 (extent_offset
2084 * crypt_stat->extent_size),
2085 @@ -567,16 +537,6 @@ static int ecryptfs_decrypt_extent(struct page *page,
2086 goto out;
2087 }
2088 rc = 0;
2089 - if (unlikely(ecryptfs_verbosity > 0)) {
2090 - ecryptfs_printk(KERN_DEBUG, "Decrypt extent [0x%.16llx]; "
2091 - "rc = [%d]\n",
2092 - (unsigned long long)(extent_base + extent_offset), rc);
2093 - ecryptfs_printk(KERN_DEBUG, "First 8 bytes after "
2094 - "decryption:\n");
2095 - ecryptfs_dump_hex((char *)(page_address(page)
2096 - + (extent_offset
2097 - * crypt_stat->extent_size)), 8);
2098 - }
2099 out:
2100 return rc;
2101 }
2102 @@ -1620,7 +1580,8 @@ int ecryptfs_read_metadata(struct dentry *ecryptfs_dentry)
2103 rc = ecryptfs_read_xattr_region(page_virt, ecryptfs_inode);
2104 if (rc) {
2105 printk(KERN_DEBUG "Valid eCryptfs headers not found in "
2106 - "file header region or xattr region\n");
2107 + "file header region or xattr region, inode %lu\n",
2108 + ecryptfs_inode->i_ino);
2109 rc = -EINVAL;
2110 goto out;
2111 }
2112 @@ -1629,7 +1590,8 @@ int ecryptfs_read_metadata(struct dentry *ecryptfs_dentry)
2113 ECRYPTFS_DONT_VALIDATE_HEADER_SIZE);
2114 if (rc) {
2115 printk(KERN_DEBUG "Valid eCryptfs headers not found in "
2116 - "file xattr region either\n");
2117 + "file xattr region either, inode %lu\n",
2118 + ecryptfs_inode->i_ino);
2119 rc = -EINVAL;
2120 }
2121 if (crypt_stat->mount_crypt_stat->flags
2122 @@ -1640,7 +1602,8 @@ int ecryptfs_read_metadata(struct dentry *ecryptfs_dentry)
2123 "crypto metadata only in the extended attribute "
2124 "region, but eCryptfs was mounted without "
2125 "xattr support enabled. eCryptfs will not treat "
2126 - "this like an encrypted file.\n");
2127 + "this like an encrypted file, inode %lu\n",
2128 + ecryptfs_inode->i_ino);
2129 rc = -EINVAL;
2130 }
2131 }
2132 diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
2133 index 32f90a3..d2039ca 100644
2134 --- a/fs/ecryptfs/inode.c
2135 +++ b/fs/ecryptfs/inode.c
2136 @@ -841,18 +841,6 @@ static int truncate_upper(struct dentry *dentry, struct iattr *ia,
2137 size_t num_zeros = (PAGE_CACHE_SIZE
2138 - (ia->ia_size & ~PAGE_CACHE_MASK));
2139
2140 -
2141 - /*
2142 - * XXX(truncate) this should really happen at the begginning
2143 - * of ->setattr. But the code is too messy to that as part
2144 - * of a larger patch. ecryptfs is also totally missing out
2145 - * on the inode_change_ok check at the beginning of
2146 - * ->setattr while would include this.
2147 - */
2148 - rc = inode_newsize_ok(inode, ia->ia_size);
2149 - if (rc)
2150 - goto out;
2151 -
2152 if (!(crypt_stat->flags & ECRYPTFS_ENCRYPTED)) {
2153 truncate_setsize(inode, ia->ia_size);
2154 lower_ia->ia_size = ia->ia_size;
2155 @@ -902,6 +890,28 @@ out:
2156 return rc;
2157 }
2158
2159 +static int ecryptfs_inode_newsize_ok(struct inode *inode, loff_t offset)
2160 +{
2161 + struct ecryptfs_crypt_stat *crypt_stat;
2162 + loff_t lower_oldsize, lower_newsize;
2163 +
2164 + crypt_stat = &ecryptfs_inode_to_private(inode)->crypt_stat;
2165 + lower_oldsize = upper_size_to_lower_size(crypt_stat,
2166 + i_size_read(inode));
2167 + lower_newsize = upper_size_to_lower_size(crypt_stat, offset);
2168 + if (lower_newsize > lower_oldsize) {
2169 + /*
2170 + * The eCryptfs inode and the new *lower* size are mixed here
2171 + * because we may not have the lower i_mutex held and/or it may
2172 + * not be appropriate to call inode_newsize_ok() with inodes
2173 + * from other filesystems.
2174 + */
2175 + return inode_newsize_ok(inode, lower_newsize);
2176 + }
2177 +
2178 + return 0;
2179 +}
2180 +
2181 /**
2182 * ecryptfs_truncate
2183 * @dentry: The ecryptfs layer dentry
2184 @@ -918,6 +928,10 @@ int ecryptfs_truncate(struct dentry *dentry, loff_t new_length)
2185 struct iattr lower_ia = { .ia_valid = 0 };
2186 int rc;
2187
2188 + rc = ecryptfs_inode_newsize_ok(dentry->d_inode, new_length);
2189 + if (rc)
2190 + return rc;
2191 +
2192 rc = truncate_upper(dentry, &ia, &lower_ia);
2193 if (!rc && lower_ia.ia_valid & ATTR_SIZE) {
2194 struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry);
2195 @@ -997,6 +1011,16 @@ static int ecryptfs_setattr(struct dentry *dentry, struct iattr *ia)
2196 }
2197 }
2198 mutex_unlock(&crypt_stat->cs_mutex);
2199 +
2200 + rc = inode_change_ok(inode, ia);
2201 + if (rc)
2202 + goto out;
2203 + if (ia->ia_valid & ATTR_SIZE) {
2204 + rc = ecryptfs_inode_newsize_ok(inode, ia->ia_size);
2205 + if (rc)
2206 + goto out;
2207 + }
2208 +
2209 if (S_ISREG(inode->i_mode)) {
2210 rc = filemap_write_and_wait(inode->i_mapping);
2211 if (rc)
2212 diff --git a/fs/ecryptfs/miscdev.c b/fs/ecryptfs/miscdev.c
2213 index 940a82e..0dc5a3d 100644
2214 --- a/fs/ecryptfs/miscdev.c
2215 +++ b/fs/ecryptfs/miscdev.c
2216 @@ -409,11 +409,47 @@ ecryptfs_miscdev_write(struct file *file, const char __user *buf,
2217 ssize_t sz = 0;
2218 char *data;
2219 uid_t euid = current_euid();
2220 + unsigned char packet_size_peek[3];
2221 int rc;
2222
2223 - if (count == 0)
2224 + if (count == 0) {
2225 goto out;
2226 + } else if (count == (1 + 4)) {
2227 + /* Likely a harmless MSG_HELO or MSG_QUIT - no packet length */
2228 + goto memdup;
2229 + } else if (count < (1 + 4 + 1)
2230 + || count > (1 + 4 + 2 + sizeof(struct ecryptfs_message) + 4
2231 + + ECRYPTFS_MAX_ENCRYPTED_KEY_BYTES)) {
2232 + printk(KERN_WARNING "%s: Acceptable packet size range is "
2233 + "[%d-%lu], but amount of data written is [%zu].",
2234 + __func__, (1 + 4 + 1),
2235 + (1 + 4 + 2 + sizeof(struct ecryptfs_message) + 4
2236 + + ECRYPTFS_MAX_ENCRYPTED_KEY_BYTES), count);
2237 + return -EINVAL;
2238 + }
2239 +
2240 + if (copy_from_user(packet_size_peek, (buf + 1 + 4),
2241 + sizeof(packet_size_peek))) {
2242 + printk(KERN_WARNING "%s: Error while inspecting packet size\n",
2243 + __func__);
2244 + return -EFAULT;
2245 + }
2246 +
2247 + rc = ecryptfs_parse_packet_length(packet_size_peek, &packet_size,
2248 + &packet_size_length);
2249 + if (rc) {
2250 + printk(KERN_WARNING "%s: Error parsing packet length; "
2251 + "rc = [%d]\n", __func__, rc);
2252 + return rc;
2253 + }
2254 +
2255 + if ((1 + 4 + packet_size_length + packet_size) != count) {
2256 + printk(KERN_WARNING "%s: Invalid packet size [%zu]\n", __func__,
2257 + packet_size);
2258 + return -EINVAL;
2259 + }
2260
2261 +memdup:
2262 data = memdup_user(buf, count);
2263 if (IS_ERR(data)) {
2264 printk(KERN_ERR "%s: memdup_user returned error [%ld]\n",
2265 @@ -435,23 +471,7 @@ ecryptfs_miscdev_write(struct file *file, const char __user *buf,
2266 }
2267 memcpy(&counter_nbo, &data[i], 4);
2268 seq = be32_to_cpu(counter_nbo);
2269 - i += 4;
2270 - rc = ecryptfs_parse_packet_length(&data[i], &packet_size,
2271 - &packet_size_length);
2272 - if (rc) {
2273 - printk(KERN_WARNING "%s: Error parsing packet length; "
2274 - "rc = [%d]\n", __func__, rc);
2275 - goto out_free;
2276 - }
2277 - i += packet_size_length;
2278 - if ((1 + 4 + packet_size_length + packet_size) != count) {
2279 - printk(KERN_WARNING "%s: (1 + packet_size_length([%zd])"
2280 - " + packet_size([%zd]))([%zd]) != "
2281 - "count([%zd]). Invalid packet format.\n",
2282 - __func__, packet_size_length, packet_size,
2283 - (1 + packet_size_length + packet_size), count);
2284 - goto out_free;
2285 - }
2286 + i += 4 + packet_size_length;
2287 rc = ecryptfs_miscdev_response(&data[i], packet_size,
2288 euid, current_user_ns(),
2289 task_pid(current), seq);
2290 diff --git a/fs/ecryptfs/read_write.c b/fs/ecryptfs/read_write.c
2291 index 3745f7c..54eb14c 100644
2292 --- a/fs/ecryptfs/read_write.c
2293 +++ b/fs/ecryptfs/read_write.c
2294 @@ -132,6 +132,11 @@ int ecryptfs_write(struct inode *ecryptfs_inode, char *data, loff_t offset,
2295 size_t num_bytes = (PAGE_CACHE_SIZE - start_offset_in_page);
2296 size_t total_remaining_bytes = ((offset + size) - pos);
2297
2298 + if (fatal_signal_pending(current)) {
2299 + rc = -EINTR;
2300 + break;
2301 + }
2302 +
2303 if (num_bytes > total_remaining_bytes)
2304 num_bytes = total_remaining_bytes;
2305 if (pos < offset) {
2306 @@ -193,15 +198,19 @@ int ecryptfs_write(struct inode *ecryptfs_inode, char *data, loff_t offset,
2307 }
2308 pos += num_bytes;
2309 }
2310 - if ((offset + size) > ecryptfs_file_size) {
2311 - i_size_write(ecryptfs_inode, (offset + size));
2312 + if (pos > ecryptfs_file_size) {
2313 + i_size_write(ecryptfs_inode, pos);
2314 if (crypt_stat->flags & ECRYPTFS_ENCRYPTED) {
2315 - rc = ecryptfs_write_inode_size_to_metadata(
2316 + int rc2;
2317 +
2318 + rc2 = ecryptfs_write_inode_size_to_metadata(
2319 ecryptfs_inode);
2320 - if (rc) {
2321 + if (rc2) {
2322 printk(KERN_ERR "Problem with "
2323 "ecryptfs_write_inode_size_to_metadata; "
2324 - "rc = [%d]\n", rc);
2325 + "rc = [%d]\n", rc2);
2326 + if (!rc)
2327 + rc = rc2;
2328 goto out;
2329 }
2330 }
2331 diff --git a/fs/jbd/checkpoint.c b/fs/jbd/checkpoint.c
2332 index f94fc48..5c93ffc 100644
2333 --- a/fs/jbd/checkpoint.c
2334 +++ b/fs/jbd/checkpoint.c
2335 @@ -453,8 +453,6 @@ out:
2336 *
2337 * Return <0 on error, 0 on success, 1 if there was nothing to clean up.
2338 *
2339 - * Called with the journal lock held.
2340 - *
2341 * This is the only part of the journaling code which really needs to be
2342 * aware of transaction aborts. Checkpointing involves writing to the
2343 * main filesystem area rather than to the journal, so it can proceed
2344 @@ -472,13 +470,14 @@ int cleanup_journal_tail(journal_t *journal)
2345 if (is_journal_aborted(journal))
2346 return 1;
2347
2348 - /* OK, work out the oldest transaction remaining in the log, and
2349 + /*
2350 + * OK, work out the oldest transaction remaining in the log, and
2351 * the log block it starts at.
2352 *
2353 * If the log is now empty, we need to work out which is the
2354 * next transaction ID we will write, and where it will
2355 - * start. */
2356 -
2357 + * start.
2358 + */
2359 spin_lock(&journal->j_state_lock);
2360 spin_lock(&journal->j_list_lock);
2361 transaction = journal->j_checkpoint_transactions;
2362 @@ -504,7 +503,25 @@ int cleanup_journal_tail(journal_t *journal)
2363 spin_unlock(&journal->j_state_lock);
2364 return 1;
2365 }
2366 + spin_unlock(&journal->j_state_lock);
2367 +
2368 + /*
2369 + * We need to make sure that any blocks that were recently written out
2370 + * --- perhaps by log_do_checkpoint() --- are flushed out before we
2371 + * drop the transactions from the journal. It's unlikely this will be
2372 + * necessary, especially with an appropriately sized journal, but we
2373 + * need this to guarantee correctness. Fortunately
2374 + * cleanup_journal_tail() doesn't get called all that often.
2375 + */
2376 + if (journal->j_flags & JFS_BARRIER)
2377 + blkdev_issue_flush(journal->j_fs_dev, GFP_KERNEL, NULL);
2378
2379 + spin_lock(&journal->j_state_lock);
2380 + if (!tid_gt(first_tid, journal->j_tail_sequence)) {
2381 + spin_unlock(&journal->j_state_lock);
2382 + /* Someone else cleaned up journal so return 0 */
2383 + return 0;
2384 + }
2385 /* OK, update the superblock to recover the freed space.
2386 * Physical blocks come first: have we wrapped beyond the end of
2387 * the log? */
2388 diff --git a/fs/jbd/recovery.c b/fs/jbd/recovery.c
2389 index 5b43e96..008bf06 100644
2390 --- a/fs/jbd/recovery.c
2391 +++ b/fs/jbd/recovery.c
2392 @@ -20,6 +20,7 @@
2393 #include <linux/fs.h>
2394 #include <linux/jbd.h>
2395 #include <linux/errno.h>
2396 +#include <linux/blkdev.h>
2397 #endif
2398
2399 /*
2400 @@ -263,6 +264,9 @@ int journal_recover(journal_t *journal)
2401 err2 = sync_blockdev(journal->j_fs_dev);
2402 if (!err)
2403 err = err2;
2404 + /* Flush disk caches to get replayed data on the permanent storage */
2405 + if (journal->j_flags & JFS_BARRIER)
2406 + blkdev_issue_flush(journal->j_fs_dev, GFP_KERNEL, NULL);
2407
2408 return err;
2409 }
2410 diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c
2411 index d4e6080b..779789a 100644
2412 --- a/fs/sysfs/file.c
2413 +++ b/fs/sysfs/file.c
2414 @@ -493,6 +493,12 @@ int sysfs_attr_ns(struct kobject *kobj, const struct attribute *attr,
2415 const void *ns = NULL;
2416 int err;
2417
2418 + if (!dir_sd) {
2419 + WARN(1, KERN_ERR "sysfs: kobject %s without dirent\n",
2420 + kobject_name(kobj));
2421 + return -ENOENT;
2422 + }
2423 +
2424 err = 0;
2425 if (!sysfs_ns_type(dir_sd))
2426 goto out;
2427 diff --git a/fs/sysfs/inode.c b/fs/sysfs/inode.c
2428 index c81b22f..deb804b 100644
2429 --- a/fs/sysfs/inode.c
2430 +++ b/fs/sysfs/inode.c
2431 @@ -318,8 +318,11 @@ int sysfs_hash_and_remove(struct sysfs_dirent *dir_sd, const void *ns, const cha
2432 struct sysfs_addrm_cxt acxt;
2433 struct sysfs_dirent *sd;
2434
2435 - if (!dir_sd)
2436 + if (!dir_sd) {
2437 + WARN(1, KERN_WARNING "sysfs: can not remove '%s', no directory\n",
2438 + name);
2439 return -ENOENT;
2440 + }
2441
2442 sysfs_addrm_start(&acxt, dir_sd);
2443
2444 diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c
2445 index ce9268a..ee98d0b 100644
2446 --- a/fs/xfs/xfs_vnodeops.c
2447 +++ b/fs/xfs/xfs_vnodeops.c
2448 @@ -131,7 +131,8 @@ xfs_readlink(
2449 __func__, (unsigned long long) ip->i_ino,
2450 (long long) pathlen);
2451 ASSERT(0);
2452 - return XFS_ERROR(EFSCORRUPTED);
2453 + error = XFS_ERROR(EFSCORRUPTED);
2454 + goto out;
2455 }
2456
2457
2458 diff --git a/include/drm/drmP.h b/include/drm/drmP.h
2459 index 1f9e951..bf4b2dc 100644
2460 --- a/include/drm/drmP.h
2461 +++ b/include/drm/drmP.h
2462 @@ -1328,6 +1328,7 @@ extern int drm_getmagic(struct drm_device *dev, void *data,
2463 struct drm_file *file_priv);
2464 extern int drm_authmagic(struct drm_device *dev, void *data,
2465 struct drm_file *file_priv);
2466 +extern int drm_remove_magic(struct drm_master *master, drm_magic_t magic);
2467
2468 /* Cache management (drm_cache.c) */
2469 void drm_clflush_pages(struct page *pages[], unsigned long num_pages);
2470 diff --git a/include/net/netns/generic.h b/include/net/netns/generic.h
2471 index 3419bf5..d55f434 100644
2472 --- a/include/net/netns/generic.h
2473 +++ b/include/net/netns/generic.h
2474 @@ -41,6 +41,7 @@ static inline void *net_generic(const struct net *net, int id)
2475 ptr = ng->ptr[id - 1];
2476 rcu_read_unlock();
2477
2478 + BUG_ON(!ptr);
2479 return ptr;
2480 }
2481 #endif
2482 diff --git a/net/caif/caif_dev.c b/net/caif/caif_dev.c
2483 index f1fa1f6..68223e4 100644
2484 --- a/net/caif/caif_dev.c
2485 +++ b/net/caif/caif_dev.c
2486 @@ -53,7 +53,6 @@ struct cfcnfg *get_cfcnfg(struct net *net)
2487 struct caif_net *caifn;
2488 BUG_ON(!net);
2489 caifn = net_generic(net, caif_net_id);
2490 - BUG_ON(!caifn);
2491 return caifn->cfg;
2492 }
2493 EXPORT_SYMBOL(get_cfcnfg);
2494 @@ -63,7 +62,6 @@ static struct caif_device_entry_list *caif_device_list(struct net *net)
2495 struct caif_net *caifn;
2496 BUG_ON(!net);
2497 caifn = net_generic(net, caif_net_id);
2498 - BUG_ON(!caifn);
2499 return &caifn->caifdevs;
2500 }
2501
2502 @@ -92,7 +90,6 @@ static struct caif_device_entry *caif_device_alloc(struct net_device *dev)
2503 struct caif_device_entry *caifd;
2504
2505 caifdevs = caif_device_list(dev_net(dev));
2506 - BUG_ON(!caifdevs);
2507
2508 caifd = kzalloc(sizeof(*caifd), GFP_KERNEL);
2509 if (!caifd)
2510 @@ -112,7 +109,7 @@ static struct caif_device_entry *caif_get(struct net_device *dev)
2511 struct caif_device_entry_list *caifdevs =
2512 caif_device_list(dev_net(dev));
2513 struct caif_device_entry *caifd;
2514 - BUG_ON(!caifdevs);
2515 +
2516 list_for_each_entry_rcu(caifd, &caifdevs->list, list) {
2517 if (caifd->netdev == dev)
2518 return caifd;
2519 @@ -353,7 +350,7 @@ static struct notifier_block caif_device_notifier = {
2520 static int caif_init_net(struct net *net)
2521 {
2522 struct caif_net *caifn = net_generic(net, caif_net_id);
2523 - BUG_ON(!caifn);
2524 +
2525 INIT_LIST_HEAD(&caifn->caifdevs.list);
2526 mutex_init(&caifn->caifdevs.lock);
2527
2528 @@ -418,7 +415,7 @@ static int __init caif_device_init(void)
2529 {
2530 int result;
2531
2532 - result = register_pernet_device(&caif_net_ops);
2533 + result = register_pernet_subsys(&caif_net_ops);
2534
2535 if (result)
2536 return result;
2537 @@ -431,7 +428,7 @@ static int __init caif_device_init(void)
2538
2539 static void __exit caif_device_exit(void)
2540 {
2541 - unregister_pernet_device(&caif_net_ops);
2542 + unregister_pernet_subsys(&caif_net_ops);
2543 unregister_netdevice_notifier(&caif_device_notifier);
2544 dev_remove_pack(&caif_packet_type);
2545 }
2546 diff --git a/net/caif/cfcnfg.c b/net/caif/cfcnfg.c
2547 index 00523ec..86ff37c 100644
2548 --- a/net/caif/cfcnfg.c
2549 +++ b/net/caif/cfcnfg.c
2550 @@ -309,7 +309,6 @@ int caif_connect_client(struct net *net, struct caif_connect_request *conn_req,
2551 int err;
2552 struct cfctrl_link_param param;
2553 struct cfcnfg *cfg = get_cfcnfg(net);
2554 - caif_assert(cfg != NULL);
2555
2556 rcu_read_lock();
2557 err = caif_connect_req_to_link_param(cfg, conn_req, &param);
2558 diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
2559 index 385aefe..0329404 100644
2560 --- a/net/core/net-sysfs.c
2561 +++ b/net/core/net-sysfs.c
2562 @@ -990,9 +990,9 @@ static ssize_t store_xps_map(struct netdev_queue *queue,
2563 nonempty = 1;
2564 }
2565
2566 - if (nonempty)
2567 - RCU_INIT_POINTER(dev->xps_maps, new_dev_maps);
2568 - else {
2569 + if (nonempty) {
2570 + rcu_assign_pointer(dev->xps_maps, new_dev_maps);
2571 + } else {
2572 kfree(new_dev_maps);
2573 RCU_INIT_POINTER(dev->xps_maps, NULL);
2574 }
2575 diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
2576 index aefcd7a..0e950fd 100644
2577 --- a/net/core/net_namespace.c
2578 +++ b/net/core/net_namespace.c
2579 @@ -30,6 +30,20 @@ EXPORT_SYMBOL(init_net);
2580
2581 #define INITIAL_NET_GEN_PTRS 13 /* +1 for len +2 for rcu_head */
2582
2583 +static unsigned int max_gen_ptrs = INITIAL_NET_GEN_PTRS;
2584 +
2585 +static struct net_generic *net_alloc_generic(void)
2586 +{
2587 + struct net_generic *ng;
2588 + size_t generic_size = offsetof(struct net_generic, ptr[max_gen_ptrs]);
2589 +
2590 + ng = kzalloc(generic_size, GFP_KERNEL);
2591 + if (ng)
2592 + ng->len = max_gen_ptrs;
2593 +
2594 + return ng;
2595 +}
2596 +
2597 static int net_assign_generic(struct net *net, int id, void *data)
2598 {
2599 struct net_generic *ng, *old_ng;
2600 @@ -43,8 +57,7 @@ static int net_assign_generic(struct net *net, int id, void *data)
2601 if (old_ng->len >= id)
2602 goto assign;
2603
2604 - ng = kzalloc(sizeof(struct net_generic) +
2605 - id * sizeof(void *), GFP_KERNEL);
2606 + ng = net_alloc_generic();
2607 if (ng == NULL)
2608 return -ENOMEM;
2609
2610 @@ -59,7 +72,6 @@ static int net_assign_generic(struct net *net, int id, void *data)
2611 * the old copy for kfree after a grace period.
2612 */
2613
2614 - ng->len = id;
2615 memcpy(&ng->ptr, &old_ng->ptr, old_ng->len * sizeof(void*));
2616
2617 rcu_assign_pointer(net->gen, ng);
2618 @@ -161,18 +173,6 @@ out_undo:
2619 goto out;
2620 }
2621
2622 -static struct net_generic *net_alloc_generic(void)
2623 -{
2624 - struct net_generic *ng;
2625 - size_t generic_size = sizeof(struct net_generic) +
2626 - INITIAL_NET_GEN_PTRS * sizeof(void *);
2627 -
2628 - ng = kzalloc(generic_size, GFP_KERNEL);
2629 - if (ng)
2630 - ng->len = INITIAL_NET_GEN_PTRS;
2631 -
2632 - return ng;
2633 -}
2634
2635 #ifdef CONFIG_NET_NS
2636 static struct kmem_cache *net_cachep;
2637 @@ -483,6 +483,7 @@ again:
2638 }
2639 return error;
2640 }
2641 + max_gen_ptrs = max_t(unsigned int, max_gen_ptrs, *ops->id);
2642 }
2643 error = __register_pernet_operations(list, ops);
2644 if (error) {
2645 diff --git a/net/core/netpoll.c b/net/core/netpoll.c
2646 index cf64c1f..5d4d896 100644
2647 --- a/net/core/netpoll.c
2648 +++ b/net/core/netpoll.c
2649 @@ -763,7 +763,7 @@ int __netpoll_setup(struct netpoll *np)
2650 }
2651
2652 /* last thing to do is link it to the net device structure */
2653 - RCU_INIT_POINTER(ndev->npinfo, npinfo);
2654 + rcu_assign_pointer(ndev->npinfo, npinfo);
2655
2656 return 0;
2657
2658 diff --git a/net/decnet/dn_dev.c b/net/decnet/dn_dev.c
2659 index 2ab16e1..74d321a 100644
2660 --- a/net/decnet/dn_dev.c
2661 +++ b/net/decnet/dn_dev.c
2662 @@ -388,7 +388,7 @@ static int dn_dev_insert_ifa(struct dn_dev *dn_db, struct dn_ifaddr *ifa)
2663 }
2664
2665 ifa->ifa_next = dn_db->ifa_list;
2666 - RCU_INIT_POINTER(dn_db->ifa_list, ifa);
2667 + rcu_assign_pointer(dn_db->ifa_list, ifa);
2668
2669 dn_ifaddr_notify(RTM_NEWADDR, ifa);
2670 blocking_notifier_call_chain(&dnaddr_chain, NETDEV_UP, ifa);
2671 @@ -1093,7 +1093,7 @@ static struct dn_dev *dn_dev_create(struct net_device *dev, int *err)
2672
2673 memcpy(&dn_db->parms, p, sizeof(struct dn_dev_parms));
2674
2675 - RCU_INIT_POINTER(dev->dn_ptr, dn_db);
2676 + rcu_assign_pointer(dev->dn_ptr, dn_db);
2677 dn_db->dev = dev;
2678 init_timer(&dn_db->timer);
2679
2680 diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
2681 index 65f01dc..e41c40f 100644
2682 --- a/net/ipv4/devinet.c
2683 +++ b/net/ipv4/devinet.c
2684 @@ -258,7 +258,7 @@ static struct in_device *inetdev_init(struct net_device *dev)
2685 ip_mc_up(in_dev);
2686
2687 /* we can receive as soon as ip_ptr is set -- do this last */
2688 - RCU_INIT_POINTER(dev->ip_ptr, in_dev);
2689 + rcu_assign_pointer(dev->ip_ptr, in_dev);
2690 out:
2691 return in_dev;
2692 out_kfree:
2693 diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
2694 index 37b6711..3ce23f9 100644
2695 --- a/net/ipv4/fib_trie.c
2696 +++ b/net/ipv4/fib_trie.c
2697 @@ -205,7 +205,7 @@ static inline struct tnode *node_parent_rcu(const struct rt_trie_node *node)
2698 return (struct tnode *)(parent & ~NODE_TYPE_MASK);
2699 }
2700
2701 -/* Same as RCU_INIT_POINTER
2702 +/* Same as rcu_assign_pointer
2703 * but that macro() assumes that value is a pointer.
2704 */
2705 static inline void node_set_parent(struct rt_trie_node *node, struct tnode *ptr)
2706 @@ -529,7 +529,7 @@ static void tnode_put_child_reorg(struct tnode *tn, int i, struct rt_trie_node *
2707 if (n)
2708 node_set_parent(n, tn);
2709
2710 - RCU_INIT_POINTER(tn->child[i], n);
2711 + rcu_assign_pointer(tn->child[i], n);
2712 }
2713
2714 #define MAX_WORK 10
2715 @@ -1015,7 +1015,7 @@ static void trie_rebalance(struct trie *t, struct tnode *tn)
2716
2717 tp = node_parent((struct rt_trie_node *) tn);
2718 if (!tp)
2719 - RCU_INIT_POINTER(t->trie, (struct rt_trie_node *)tn);
2720 + rcu_assign_pointer(t->trie, (struct rt_trie_node *)tn);
2721
2722 tnode_free_flush();
2723 if (!tp)
2724 @@ -1027,7 +1027,7 @@ static void trie_rebalance(struct trie *t, struct tnode *tn)
2725 if (IS_TNODE(tn))
2726 tn = (struct tnode *)resize(t, (struct tnode *)tn);
2727
2728 - RCU_INIT_POINTER(t->trie, (struct rt_trie_node *)tn);
2729 + rcu_assign_pointer(t->trie, (struct rt_trie_node *)tn);
2730 tnode_free_flush();
2731 }
2732
2733 @@ -1164,7 +1164,7 @@ static struct list_head *fib_insert_node(struct trie *t, u32 key, int plen)
2734 put_child(t, (struct tnode *)tp, cindex,
2735 (struct rt_trie_node *)tn);
2736 } else {
2737 - RCU_INIT_POINTER(t->trie, (struct rt_trie_node *)tn);
2738 + rcu_assign_pointer(t->trie, (struct rt_trie_node *)tn);
2739 tp = tn;
2740 }
2741 }
2742 diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
2743 index c3cc64c..c8989a7 100644
2744 --- a/net/ipv4/igmp.c
2745 +++ b/net/ipv4/igmp.c
2746 @@ -1244,7 +1244,7 @@ void ip_mc_inc_group(struct in_device *in_dev, __be32 addr)
2747
2748 im->next_rcu = in_dev->mc_list;
2749 in_dev->mc_count++;
2750 - RCU_INIT_POINTER(in_dev->mc_list, im);
2751 + rcu_assign_pointer(in_dev->mc_list, im);
2752
2753 #ifdef CONFIG_IP_MULTICAST
2754 igmpv3_del_delrec(in_dev, im->multiaddr);
2755 @@ -1816,7 +1816,7 @@ int ip_mc_join_group(struct sock *sk , struct ip_mreqn *imr)
2756 iml->next_rcu = inet->mc_list;
2757 iml->sflist = NULL;
2758 iml->sfmode = MCAST_EXCLUDE;
2759 - RCU_INIT_POINTER(inet->mc_list, iml);
2760 + rcu_assign_pointer(inet->mc_list, iml);
2761 ip_mc_inc_group(in_dev, addr);
2762 err = 0;
2763 done:
2764 @@ -2003,7 +2003,7 @@ int ip_mc_source(int add, int omode, struct sock *sk, struct
2765 atomic_sub(IP_SFLSIZE(psl->sl_max), &sk->sk_omem_alloc);
2766 kfree_rcu(psl, rcu);
2767 }
2768 - RCU_INIT_POINTER(pmc->sflist, newpsl);
2769 + rcu_assign_pointer(pmc->sflist, newpsl);
2770 psl = newpsl;
2771 }
2772 rv = 1; /* > 0 for insert logic below if sl_count is 0 */
2773 @@ -2106,7 +2106,7 @@ int ip_mc_msfilter(struct sock *sk, struct ip_msfilter *msf, int ifindex)
2774 } else
2775 (void) ip_mc_del_src(in_dev, &msf->imsf_multiaddr, pmc->sfmode,
2776 0, NULL, 0);
2777 - RCU_INIT_POINTER(pmc->sflist, newpsl);
2778 + rcu_assign_pointer(pmc->sflist, newpsl);
2779 pmc->sfmode = msf->imsf_fmode;
2780 err = 0;
2781 done:
2782 diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c
2783 index 0b2e732..17ad951 100644
2784 --- a/net/ipv4/ipip.c
2785 +++ b/net/ipv4/ipip.c
2786 @@ -231,7 +231,7 @@ static void ipip_tunnel_unlink(struct ipip_net *ipn, struct ip_tunnel *t)
2787 (iter = rtnl_dereference(*tp)) != NULL;
2788 tp = &iter->next) {
2789 if (t == iter) {
2790 - RCU_INIT_POINTER(*tp, t->next);
2791 + rcu_assign_pointer(*tp, t->next);
2792 break;
2793 }
2794 }
2795 @@ -241,8 +241,8 @@ static void ipip_tunnel_link(struct ipip_net *ipn, struct ip_tunnel *t)
2796 {
2797 struct ip_tunnel __rcu **tp = ipip_bucket(ipn, t);
2798
2799 - RCU_INIT_POINTER(t->next, rtnl_dereference(*tp));
2800 - RCU_INIT_POINTER(*tp, t);
2801 + rcu_assign_pointer(t->next, rtnl_dereference(*tp));
2802 + rcu_assign_pointer(*tp, t);
2803 }
2804
2805 static struct ip_tunnel * ipip_tunnel_locate(struct net *net,
2806 @@ -792,7 +792,7 @@ static int __net_init ipip_fb_tunnel_init(struct net_device *dev)
2807 return -ENOMEM;
2808
2809 dev_hold(dev);
2810 - RCU_INIT_POINTER(ipn->tunnels_wc[0], tunnel);
2811 + rcu_assign_pointer(ipn->tunnels_wc[0], tunnel);
2812 return 0;
2813 }
2814
2815 diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c
2816 index 76a7f07..d2aae27 100644
2817 --- a/net/ipv4/ipmr.c
2818 +++ b/net/ipv4/ipmr.c
2819 @@ -1225,7 +1225,7 @@ int ip_mroute_setsockopt(struct sock *sk, int optname, char __user *optval, unsi
2820
2821 ret = ip_ra_control(sk, 1, mrtsock_destruct);
2822 if (ret == 0) {
2823 - RCU_INIT_POINTER(mrt->mroute_sk, sk);
2824 + rcu_assign_pointer(mrt->mroute_sk, sk);
2825 IPV4_DEVCONF_ALL(net, MC_FORWARDING)++;
2826 }
2827 rtnl_unlock();
2828 diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
2829 index a9db4b1..c89e354 100644
2830 --- a/net/ipv4/tcp_ipv4.c
2831 +++ b/net/ipv4/tcp_ipv4.c
2832 @@ -630,7 +630,7 @@ static void tcp_v4_send_reset(struct sock *sk, struct sk_buff *skb)
2833 arg.iov[0].iov_len = sizeof(rep.th);
2834
2835 #ifdef CONFIG_TCP_MD5SIG
2836 - key = sk ? tcp_v4_md5_do_lookup(sk, ip_hdr(skb)->daddr) : NULL;
2837 + key = sk ? tcp_v4_md5_do_lookup(sk, ip_hdr(skb)->saddr) : NULL;
2838 if (key) {
2839 rep.opt[0] = htonl((TCPOPT_NOP << 24) |
2840 (TCPOPT_NOP << 16) |
2841 diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
2842 index 63170e2..097e0c7 100644
2843 --- a/net/ipv4/tcp_output.c
2844 +++ b/net/ipv4/tcp_output.c
2845 @@ -1138,11 +1138,9 @@ int tcp_trim_head(struct sock *sk, struct sk_buff *skb, u32 len)
2846 sk_mem_uncharge(sk, len);
2847 sock_set_flag(sk, SOCK_QUEUE_SHRUNK);
2848
2849 - /* Any change of skb->len requires recalculation of tso
2850 - * factor and mss.
2851 - */
2852 + /* Any change of skb->len requires recalculation of tso factor. */
2853 if (tcp_skb_pcount(skb) > 1)
2854 - tcp_set_skb_tso_segs(sk, skb, tcp_current_mss(sk));
2855 + tcp_set_skb_tso_segs(sk, skb, tcp_skb_mss(skb));
2856
2857 return 0;
2858 }
2859 diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
2860 index 36806de..836c4ea 100644
2861 --- a/net/ipv6/addrconf.c
2862 +++ b/net/ipv6/addrconf.c
2863 @@ -429,7 +429,7 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
2864 ndev->tstamp = jiffies;
2865 addrconf_sysctl_register(ndev);
2866 /* protected by rtnl_lock */
2867 - RCU_INIT_POINTER(dev->ip6_ptr, ndev);
2868 + rcu_assign_pointer(dev->ip6_ptr, ndev);
2869
2870 /* Join all-node multicast group */
2871 ipv6_dev_mc_inc(dev, &in6addr_linklocal_allnodes);
2872 diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
2873 index 4e2e9ff..d19f499 100644
2874 --- a/net/ipv6/ip6_tunnel.c
2875 +++ b/net/ipv6/ip6_tunnel.c
2876 @@ -218,8 +218,8 @@ ip6_tnl_link(struct ip6_tnl_net *ip6n, struct ip6_tnl *t)
2877 {
2878 struct ip6_tnl __rcu **tp = ip6_tnl_bucket(ip6n, &t->parms);
2879
2880 - RCU_INIT_POINTER(t->next , rtnl_dereference(*tp));
2881 - RCU_INIT_POINTER(*tp, t);
2882 + rcu_assign_pointer(t->next , rtnl_dereference(*tp));
2883 + rcu_assign_pointer(*tp, t);
2884 }
2885
2886 /**
2887 @@ -237,7 +237,7 @@ ip6_tnl_unlink(struct ip6_tnl_net *ip6n, struct ip6_tnl *t)
2888 (iter = rtnl_dereference(*tp)) != NULL;
2889 tp = &iter->next) {
2890 if (t == iter) {
2891 - RCU_INIT_POINTER(*tp, t->next);
2892 + rcu_assign_pointer(*tp, t->next);
2893 break;
2894 }
2895 }
2896 @@ -1450,7 +1450,7 @@ static int __net_init ip6_fb_tnl_dev_init(struct net_device *dev)
2897
2898 t->parms.proto = IPPROTO_IPV6;
2899 dev_hold(dev);
2900 - RCU_INIT_POINTER(ip6n->tnls_wc[0], t);
2901 + rcu_assign_pointer(ip6n->tnls_wc[0], t);
2902 return 0;
2903 }
2904
2905 diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
2906 index 331af3b..361ebf3 100644
2907 --- a/net/ipv6/raw.c
2908 +++ b/net/ipv6/raw.c
2909 @@ -131,7 +131,7 @@ static mh_filter_t __rcu *mh_filter __read_mostly;
2910
2911 int rawv6_mh_filter_register(mh_filter_t filter)
2912 {
2913 - RCU_INIT_POINTER(mh_filter, filter);
2914 + rcu_assign_pointer(mh_filter, filter);
2915 return 0;
2916 }
2917 EXPORT_SYMBOL(rawv6_mh_filter_register);
2918 diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
2919 index 96f3623..72a939d 100644
2920 --- a/net/ipv6/sit.c
2921 +++ b/net/ipv6/sit.c
2922 @@ -182,7 +182,7 @@ static void ipip6_tunnel_unlink(struct sit_net *sitn, struct ip_tunnel *t)
2923 (iter = rtnl_dereference(*tp)) != NULL;
2924 tp = &iter->next) {
2925 if (t == iter) {
2926 - RCU_INIT_POINTER(*tp, t->next);
2927 + rcu_assign_pointer(*tp, t->next);
2928 break;
2929 }
2930 }
2931 @@ -192,8 +192,8 @@ static void ipip6_tunnel_link(struct sit_net *sitn, struct ip_tunnel *t)
2932 {
2933 struct ip_tunnel __rcu **tp = ipip6_bucket(sitn, t);
2934
2935 - RCU_INIT_POINTER(t->next, rtnl_dereference(*tp));
2936 - RCU_INIT_POINTER(*tp, t);
2937 + rcu_assign_pointer(t->next, rtnl_dereference(*tp));
2938 + rcu_assign_pointer(*tp, t);
2939 }
2940
2941 static void ipip6_tunnel_clone_6rd(struct net_device *dev, struct sit_net *sitn)
2942 @@ -393,7 +393,7 @@ ipip6_tunnel_add_prl(struct ip_tunnel *t, struct ip_tunnel_prl *a, int chg)
2943 p->addr = a->addr;
2944 p->flags = a->flags;
2945 t->prl_count++;
2946 - RCU_INIT_POINTER(t->prl, p);
2947 + rcu_assign_pointer(t->prl, p);
2948 out:
2949 return err;
2950 }
2951 @@ -1177,7 +1177,7 @@ static int __net_init ipip6_fb_tunnel_init(struct net_device *dev)
2952 if (!dev->tstats)
2953 return -ENOMEM;
2954 dev_hold(dev);
2955 - RCU_INIT_POINTER(sitn->tunnels_wc[0], tunnel);
2956 + rcu_assign_pointer(sitn->tunnels_wc[0], tunnel);
2957 return 0;
2958 }
2959
2960 diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
2961 index 2dea4bb..b859e4a 100644
2962 --- a/net/ipv6/tcp_ipv6.c
2963 +++ b/net/ipv6/tcp_ipv6.c
2964 @@ -1084,7 +1084,7 @@ static void tcp_v6_send_reset(struct sock *sk, struct sk_buff *skb)
2965
2966 #ifdef CONFIG_TCP_MD5SIG
2967 if (sk)
2968 - key = tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->daddr);
2969 + key = tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->saddr);
2970 #endif
2971
2972 if (th->ack)
2973 diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
2974 index d21e7eb..55670ec 100644
2975 --- a/net/l2tp/l2tp_ip.c
2976 +++ b/net/l2tp/l2tp_ip.c
2977 @@ -393,11 +393,6 @@ static int l2tp_ip_backlog_recv(struct sock *sk, struct sk_buff *skb)
2978 {
2979 int rc;
2980
2981 - if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb))
2982 - goto drop;
2983 -
2984 - nf_reset(skb);
2985 -
2986 /* Charge it to the socket, dropping if the queue is full. */
2987 rc = sock_queue_rcv_skb(sk, skb);
2988 if (rc < 0)
2989 diff --git a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c
2990 index 93b2434..41c2310 100644
2991 --- a/net/mac80211/agg-rx.c
2992 +++ b/net/mac80211/agg-rx.c
2993 @@ -326,7 +326,7 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,
2994 status = WLAN_STATUS_SUCCESS;
2995
2996 /* activate it for RX */
2997 - RCU_INIT_POINTER(sta->ampdu_mlme.tid_rx[tid], tid_agg_rx);
2998 + rcu_assign_pointer(sta->ampdu_mlme.tid_rx[tid], tid_agg_rx);
2999
3000 if (timeout)
3001 mod_timer(&tid_agg_rx->session_timer, TU_TO_EXP_TIME(timeout));
3002 diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
3003 index d06c65f..11cee76 100644
3004 --- a/net/mac80211/cfg.c
3005 +++ b/net/mac80211/cfg.c
3006 @@ -575,7 +575,7 @@ static int ieee80211_config_beacon(struct ieee80211_sub_if_data *sdata,
3007
3008 sdata->vif.bss_conf.dtim_period = new->dtim_period;
3009
3010 - RCU_INIT_POINTER(sdata->u.ap.beacon, new);
3011 + rcu_assign_pointer(sdata->u.ap.beacon, new);
3012
3013 synchronize_rcu();
3014
3015 @@ -922,7 +922,7 @@ static int ieee80211_change_station(struct wiphy *wiphy,
3016 return -EBUSY;
3017 }
3018
3019 - RCU_INIT_POINTER(vlansdata->u.vlan.sta, sta);
3020 + rcu_assign_pointer(vlansdata->u.vlan.sta, sta);
3021 }
3022
3023 sta->sdata = vlansdata;
3024 diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
3025 index ede9a8b..3ece106 100644
3026 --- a/net/mac80211/ibss.c
3027 +++ b/net/mac80211/ibss.c
3028 @@ -184,7 +184,7 @@ static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
3029 *pos++ = 0; /* U-APSD no in use */
3030 }
3031
3032 - RCU_INIT_POINTER(ifibss->presp, skb);
3033 + rcu_assign_pointer(ifibss->presp, skb);
3034
3035 sdata->vif.bss_conf.beacon_int = beacon_int;
3036 sdata->vif.bss_conf.basic_rates = basic_rates;
3037 diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
3038 index b1b1bb3..9da8626 100644
3039 --- a/net/mac80211/mlme.c
3040 +++ b/net/mac80211/mlme.c
3041 @@ -2719,7 +2719,6 @@ int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata,
3042 {
3043 struct ieee80211_local *local = sdata->local;
3044 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
3045 - struct ieee80211_work *wk;
3046 u8 bssid[ETH_ALEN];
3047 bool assoc_bss = false;
3048
3049 @@ -2732,30 +2731,47 @@ int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata,
3050 assoc_bss = true;
3051 } else {
3052 bool not_auth_yet = false;
3053 + struct ieee80211_work *tmp, *wk = NULL;
3054
3055 mutex_unlock(&ifmgd->mtx);
3056
3057 mutex_lock(&local->mtx);
3058 - list_for_each_entry(wk, &local->work_list, list) {
3059 - if (wk->sdata != sdata)
3060 + list_for_each_entry(tmp, &local->work_list, list) {
3061 + if (tmp->sdata != sdata)
3062 continue;
3063
3064 - if (wk->type != IEEE80211_WORK_DIRECT_PROBE &&
3065 - wk->type != IEEE80211_WORK_AUTH &&
3066 - wk->type != IEEE80211_WORK_ASSOC &&
3067 - wk->type != IEEE80211_WORK_ASSOC_BEACON_WAIT)
3068 + if (tmp->type != IEEE80211_WORK_DIRECT_PROBE &&
3069 + tmp->type != IEEE80211_WORK_AUTH &&
3070 + tmp->type != IEEE80211_WORK_ASSOC &&
3071 + tmp->type != IEEE80211_WORK_ASSOC_BEACON_WAIT)
3072 continue;
3073
3074 - if (memcmp(req->bss->bssid, wk->filter_ta, ETH_ALEN))
3075 + if (memcmp(req->bss->bssid, tmp->filter_ta, ETH_ALEN))
3076 continue;
3077
3078 - not_auth_yet = wk->type == IEEE80211_WORK_DIRECT_PROBE;
3079 - list_del_rcu(&wk->list);
3080 - free_work(wk);
3081 + not_auth_yet = tmp->type == IEEE80211_WORK_DIRECT_PROBE;
3082 + list_del_rcu(&tmp->list);
3083 + synchronize_rcu();
3084 + wk = tmp;
3085 break;
3086 }
3087 mutex_unlock(&local->mtx);
3088
3089 + if (wk && wk->type == IEEE80211_WORK_ASSOC) {
3090 + /* clean up dummy sta & TX sync */
3091 + sta_info_destroy_addr(wk->sdata, wk->filter_ta);
3092 + if (wk->assoc.synced)
3093 + drv_finish_tx_sync(local, wk->sdata,
3094 + wk->filter_ta,
3095 + IEEE80211_TX_SYNC_ASSOC);
3096 + } else if (wk && wk->type == IEEE80211_WORK_AUTH) {
3097 + if (wk->probe_auth.synced)
3098 + drv_finish_tx_sync(local, wk->sdata,
3099 + wk->filter_ta,
3100 + IEEE80211_TX_SYNC_AUTH);
3101 + }
3102 + kfree(wk);
3103 +
3104 /*
3105 * If somebody requests authentication and we haven't
3106 * sent out an auth frame yet there's no need to send
3107 diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
3108 index 8eaa746..1fdd8ff 100644
3109 --- a/net/mac80211/sta_info.c
3110 +++ b/net/mac80211/sta_info.c
3111 @@ -73,7 +73,7 @@ static int sta_info_hash_del(struct ieee80211_local *local,
3112 if (!s)
3113 return -ENOENT;
3114 if (s == sta) {
3115 - RCU_INIT_POINTER(local->sta_hash[STA_HASH(sta->sta.addr)],
3116 + rcu_assign_pointer(local->sta_hash[STA_HASH(sta->sta.addr)],
3117 s->hnext);
3118 return 0;
3119 }
3120 @@ -83,7 +83,7 @@ static int sta_info_hash_del(struct ieee80211_local *local,
3121 s = rcu_dereference_protected(s->hnext,
3122 lockdep_is_held(&local->sta_lock));
3123 if (rcu_access_pointer(s->hnext)) {
3124 - RCU_INIT_POINTER(s->hnext, sta->hnext);
3125 + rcu_assign_pointer(s->hnext, sta->hnext);
3126 return 0;
3127 }
3128
3129 @@ -232,7 +232,7 @@ static void sta_info_hash_add(struct ieee80211_local *local,
3130 struct sta_info *sta)
3131 {
3132 sta->hnext = local->sta_hash[STA_HASH(sta->sta.addr)];
3133 - RCU_INIT_POINTER(local->sta_hash[STA_HASH(sta->sta.addr)], sta);
3134 + rcu_assign_pointer(local->sta_hash[STA_HASH(sta->sta.addr)], sta);
3135 }
3136
3137 static void sta_unblock(struct work_struct *wk)
3138 diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
3139 index 7202b06..1d15193 100644
3140 --- a/net/netfilter/nf_conntrack_core.c
3141 +++ b/net/netfilter/nf_conntrack_core.c
3142 @@ -776,7 +776,7 @@ init_conntrack(struct net *net, struct nf_conn *tmpl,
3143 if (exp->helper) {
3144 help = nf_ct_helper_ext_add(ct, GFP_ATOMIC);
3145 if (help)
3146 - RCU_INIT_POINTER(help->helper, exp->helper);
3147 + rcu_assign_pointer(help->helper, exp->helper);
3148 }
3149
3150 #ifdef CONFIG_NF_CONNTRACK_MARK
3151 diff --git a/net/netfilter/nf_conntrack_ecache.c b/net/netfilter/nf_conntrack_ecache.c
3152 index b62c414..14af632 100644
3153 --- a/net/netfilter/nf_conntrack_ecache.c
3154 +++ b/net/netfilter/nf_conntrack_ecache.c
3155 @@ -91,7 +91,7 @@ int nf_conntrack_register_notifier(struct net *net,
3156 ret = -EBUSY;
3157 goto out_unlock;
3158 }
3159 - RCU_INIT_POINTER(net->ct.nf_conntrack_event_cb, new);
3160 + rcu_assign_pointer(net->ct.nf_conntrack_event_cb, new);
3161 mutex_unlock(&nf_ct_ecache_mutex);
3162 return ret;
3163
3164 @@ -128,7 +128,7 @@ int nf_ct_expect_register_notifier(struct net *net,
3165 ret = -EBUSY;
3166 goto out_unlock;
3167 }
3168 - RCU_INIT_POINTER(net->ct.nf_expect_event_cb, new);
3169 + rcu_assign_pointer(net->ct.nf_expect_event_cb, new);
3170 mutex_unlock(&nf_ct_ecache_mutex);
3171 return ret;
3172
3173 diff --git a/net/netfilter/nf_conntrack_extend.c b/net/netfilter/nf_conntrack_extend.c
3174 index 4605c94..641ff5f 100644
3175 --- a/net/netfilter/nf_conntrack_extend.c
3176 +++ b/net/netfilter/nf_conntrack_extend.c
3177 @@ -169,7 +169,7 @@ int nf_ct_extend_register(struct nf_ct_ext_type *type)
3178 before updating alloc_size */
3179 type->alloc_size = ALIGN(sizeof(struct nf_ct_ext), type->align)
3180 + type->len;
3181 - RCU_INIT_POINTER(nf_ct_ext_types[type->id], type);
3182 + rcu_assign_pointer(nf_ct_ext_types[type->id], type);
3183 update_alloc_size(type);
3184 out:
3185 mutex_unlock(&nf_ct_ext_type_mutex);
3186 diff --git a/net/netfilter/nf_conntrack_helper.c b/net/netfilter/nf_conntrack_helper.c
3187 index 93c4bdb..bbe23ba 100644
3188 --- a/net/netfilter/nf_conntrack_helper.c
3189 +++ b/net/netfilter/nf_conntrack_helper.c
3190 @@ -145,7 +145,7 @@ int __nf_ct_try_assign_helper(struct nf_conn *ct, struct nf_conn *tmpl,
3191 memset(&help->help, 0, sizeof(help->help));
3192 }
3193
3194 - RCU_INIT_POINTER(help->helper, helper);
3195 + rcu_assign_pointer(help->helper, helper);
3196 out:
3197 return ret;
3198 }
3199 diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
3200 index 257e772..782cdcd 100644
3201 --- a/net/netfilter/nf_conntrack_netlink.c
3202 +++ b/net/netfilter/nf_conntrack_netlink.c
3203 @@ -1163,7 +1163,7 @@ ctnetlink_change_helper(struct nf_conn *ct, const struct nlattr * const cda[])
3204 return -EOPNOTSUPP;
3205 }
3206
3207 - RCU_INIT_POINTER(help->helper, helper);
3208 + rcu_assign_pointer(help->helper, helper);
3209
3210 return 0;
3211 }
3212 diff --git a/net/netfilter/nf_log.c b/net/netfilter/nf_log.c
3213 index ce0c406..957374a 100644
3214 --- a/net/netfilter/nf_log.c
3215 +++ b/net/netfilter/nf_log.c
3216 @@ -55,7 +55,7 @@ int nf_log_register(u_int8_t pf, struct nf_logger *logger)
3217 llog = rcu_dereference_protected(nf_loggers[pf],
3218 lockdep_is_held(&nf_log_mutex));
3219 if (llog == NULL)
3220 - RCU_INIT_POINTER(nf_loggers[pf], logger);
3221 + rcu_assign_pointer(nf_loggers[pf], logger);
3222 }
3223
3224 mutex_unlock(&nf_log_mutex);
3225 @@ -92,7 +92,7 @@ int nf_log_bind_pf(u_int8_t pf, const struct nf_logger *logger)
3226 mutex_unlock(&nf_log_mutex);
3227 return -ENOENT;
3228 }
3229 - RCU_INIT_POINTER(nf_loggers[pf], logger);
3230 + rcu_assign_pointer(nf_loggers[pf], logger);
3231 mutex_unlock(&nf_log_mutex);
3232 return 0;
3233 }
3234 @@ -250,7 +250,7 @@ static int nf_log_proc_dostring(ctl_table *table, int write,
3235 mutex_unlock(&nf_log_mutex);
3236 return -ENOENT;
3237 }
3238 - RCU_INIT_POINTER(nf_loggers[tindex], logger);
3239 + rcu_assign_pointer(nf_loggers[tindex], logger);
3240 mutex_unlock(&nf_log_mutex);
3241 } else {
3242 mutex_lock(&nf_log_mutex);
3243 diff --git a/net/netfilter/nf_queue.c b/net/netfilter/nf_queue.c
3244 index 99ffd28..b3a7db6 100644
3245 --- a/net/netfilter/nf_queue.c
3246 +++ b/net/netfilter/nf_queue.c
3247 @@ -40,7 +40,7 @@ int nf_register_queue_handler(u_int8_t pf, const struct nf_queue_handler *qh)
3248 else if (old)
3249 ret = -EBUSY;
3250 else {
3251 - RCU_INIT_POINTER(queue_handler[pf], qh);
3252 + rcu_assign_pointer(queue_handler[pf], qh);
3253 ret = 0;
3254 }
3255 mutex_unlock(&queue_handler_mutex);
3256 diff --git a/net/netfilter/nfnetlink.c b/net/netfilter/nfnetlink.c
3257 index c879c1a..b4f8d84 100644
3258 --- a/net/netfilter/nfnetlink.c
3259 +++ b/net/netfilter/nfnetlink.c
3260 @@ -59,7 +59,7 @@ int nfnetlink_subsys_register(const struct nfnetlink_subsystem *n)
3261 nfnl_unlock();
3262 return -EBUSY;
3263 }
3264 - RCU_INIT_POINTER(subsys_table[n->subsys_id], n);
3265 + rcu_assign_pointer(subsys_table[n->subsys_id], n);
3266 nfnl_unlock();
3267
3268 return 0;
3269 @@ -210,7 +210,7 @@ static int __net_init nfnetlink_net_init(struct net *net)
3270 if (!nfnl)
3271 return -ENOMEM;
3272 net->nfnl_stash = nfnl;
3273 - RCU_INIT_POINTER(net->nfnl, nfnl);
3274 + rcu_assign_pointer(net->nfnl, nfnl);
3275 return 0;
3276 }
3277
3278 diff --git a/net/netlabel/netlabel_domainhash.c b/net/netlabel/netlabel_domainhash.c
3279 index 3f905e5..e5330ed 100644
3280 --- a/net/netlabel/netlabel_domainhash.c
3281 +++ b/net/netlabel/netlabel_domainhash.c
3282 @@ -282,7 +282,7 @@ int __init netlbl_domhsh_init(u32 size)
3283 INIT_LIST_HEAD(&hsh_tbl->tbl[iter]);
3284
3285 spin_lock(&netlbl_domhsh_lock);
3286 - RCU_INIT_POINTER(netlbl_domhsh, hsh_tbl);
3287 + rcu_assign_pointer(netlbl_domhsh, hsh_tbl);
3288 spin_unlock(&netlbl_domhsh_lock);
3289
3290 return 0;
3291 @@ -330,7 +330,7 @@ int netlbl_domhsh_add(struct netlbl_dom_map *entry,
3292 &rcu_dereference(netlbl_domhsh)->tbl[bkt]);
3293 } else {
3294 INIT_LIST_HEAD(&entry->list);
3295 - RCU_INIT_POINTER(netlbl_domhsh_def, entry);
3296 + rcu_assign_pointer(netlbl_domhsh_def, entry);
3297 }
3298
3299 if (entry->type == NETLBL_NLTYPE_ADDRSELECT) {
3300 diff --git a/net/netlabel/netlabel_unlabeled.c b/net/netlabel/netlabel_unlabeled.c
3301 index e251c2c..d463f5a 100644
3302 --- a/net/netlabel/netlabel_unlabeled.c
3303 +++ b/net/netlabel/netlabel_unlabeled.c
3304 @@ -354,7 +354,7 @@ static struct netlbl_unlhsh_iface *netlbl_unlhsh_add_iface(int ifindex)
3305 INIT_LIST_HEAD(&iface->list);
3306 if (netlbl_unlhsh_rcu_deref(netlbl_unlhsh_def) != NULL)
3307 goto add_iface_failure;
3308 - RCU_INIT_POINTER(netlbl_unlhsh_def, iface);
3309 + rcu_assign_pointer(netlbl_unlhsh_def, iface);
3310 }
3311 spin_unlock(&netlbl_unlhsh_lock);
3312
3313 @@ -1447,11 +1447,9 @@ int __init netlbl_unlabel_init(u32 size)
3314 for (iter = 0; iter < hsh_tbl->size; iter++)
3315 INIT_LIST_HEAD(&hsh_tbl->tbl[iter]);
3316
3317 - rcu_read_lock();
3318 spin_lock(&netlbl_unlhsh_lock);
3319 - RCU_INIT_POINTER(netlbl_unlhsh, hsh_tbl);
3320 + rcu_assign_pointer(netlbl_unlhsh, hsh_tbl);
3321 spin_unlock(&netlbl_unlhsh_lock);
3322 - rcu_read_unlock();
3323
3324 register_netdevice_notifier(&netlbl_unlhsh_netdev_notifier);
3325
3326 diff --git a/net/phonet/af_phonet.c b/net/phonet/af_phonet.c
3327 index bf10ea8..d65f699 100644
3328 --- a/net/phonet/af_phonet.c
3329 +++ b/net/phonet/af_phonet.c
3330 @@ -480,7 +480,7 @@ int __init_or_module phonet_proto_register(unsigned int protocol,
3331 if (proto_tab[protocol])
3332 err = -EBUSY;
3333 else
3334 - RCU_INIT_POINTER(proto_tab[protocol], pp);
3335 + rcu_assign_pointer(proto_tab[protocol], pp);
3336 mutex_unlock(&proto_tab_lock);
3337
3338 return err;
3339 diff --git a/net/phonet/pn_dev.c b/net/phonet/pn_dev.c
3340 index c582761..9b9a85e 100644
3341 --- a/net/phonet/pn_dev.c
3342 +++ b/net/phonet/pn_dev.c
3343 @@ -390,7 +390,7 @@ int phonet_route_add(struct net_device *dev, u8 daddr)
3344 daddr = daddr >> 2;
3345 mutex_lock(&routes->lock);
3346 if (routes->table[daddr] == NULL) {
3347 - RCU_INIT_POINTER(routes->table[daddr], dev);
3348 + rcu_assign_pointer(routes->table[daddr], dev);
3349 dev_hold(dev);
3350 err = 0;
3351 }
3352 diff --git a/net/phonet/socket.c b/net/phonet/socket.c
3353 index 3f8d0b1..4c7eff3 100644
3354 --- a/net/phonet/socket.c
3355 +++ b/net/phonet/socket.c
3356 @@ -680,7 +680,7 @@ int pn_sock_bind_res(struct sock *sk, u8 res)
3357 mutex_lock(&resource_mutex);
3358 if (pnres.sk[res] == NULL) {
3359 sock_hold(sk);
3360 - RCU_INIT_POINTER(pnres.sk[res], sk);
3361 + rcu_assign_pointer(pnres.sk[res], sk);
3362 ret = 0;
3363 }
3364 mutex_unlock(&resource_mutex);
3365 diff --git a/net/rds/af_rds.c b/net/rds/af_rds.c
3366 index bb6ad81..424ff62 100644
3367 --- a/net/rds/af_rds.c
3368 +++ b/net/rds/af_rds.c
3369 @@ -68,7 +68,6 @@ static int rds_release(struct socket *sock)
3370 {
3371 struct sock *sk = sock->sk;
3372 struct rds_sock *rs;
3373 - unsigned long flags;
3374
3375 if (!sk)
3376 goto out;
3377 @@ -94,10 +93,10 @@ static int rds_release(struct socket *sock)
3378 rds_rdma_drop_keys(rs);
3379 rds_notify_queue_get(rs, NULL);
3380
3381 - spin_lock_irqsave(&rds_sock_lock, flags);
3382 + spin_lock_bh(&rds_sock_lock);
3383 list_del_init(&rs->rs_item);
3384 rds_sock_count--;
3385 - spin_unlock_irqrestore(&rds_sock_lock, flags);
3386 + spin_unlock_bh(&rds_sock_lock);
3387
3388 rds_trans_put(rs->rs_transport);
3389
3390 @@ -409,7 +408,6 @@ static const struct proto_ops rds_proto_ops = {
3391
3392 static int __rds_create(struct socket *sock, struct sock *sk, int protocol)
3393 {
3394 - unsigned long flags;
3395 struct rds_sock *rs;
3396
3397 sock_init_data(sock, sk);
3398 @@ -426,10 +424,10 @@ static int __rds_create(struct socket *sock, struct sock *sk, int protocol)
3399 spin_lock_init(&rs->rs_rdma_lock);
3400 rs->rs_rdma_keys = RB_ROOT;
3401
3402 - spin_lock_irqsave(&rds_sock_lock, flags);
3403 + spin_lock_bh(&rds_sock_lock);
3404 list_add_tail(&rs->rs_item, &rds_sock_list);
3405 rds_sock_count++;
3406 - spin_unlock_irqrestore(&rds_sock_lock, flags);
3407 + spin_unlock_bh(&rds_sock_lock);
3408
3409 return 0;
3410 }
3411 @@ -471,12 +469,11 @@ static void rds_sock_inc_info(struct socket *sock, unsigned int len,
3412 {
3413 struct rds_sock *rs;
3414 struct rds_incoming *inc;
3415 - unsigned long flags;
3416 unsigned int total = 0;
3417
3418 len /= sizeof(struct rds_info_message);
3419
3420 - spin_lock_irqsave(&rds_sock_lock, flags);
3421 + spin_lock_bh(&rds_sock_lock);
3422
3423 list_for_each_entry(rs, &rds_sock_list, rs_item) {
3424 read_lock(&rs->rs_recv_lock);
3425 @@ -492,7 +489,7 @@ static void rds_sock_inc_info(struct socket *sock, unsigned int len,
3426 read_unlock(&rs->rs_recv_lock);
3427 }
3428
3429 - spin_unlock_irqrestore(&rds_sock_lock, flags);
3430 + spin_unlock_bh(&rds_sock_lock);
3431
3432 lens->nr = total;
3433 lens->each = sizeof(struct rds_info_message);
3434 @@ -504,11 +501,10 @@ static void rds_sock_info(struct socket *sock, unsigned int len,
3435 {
3436 struct rds_info_socket sinfo;
3437 struct rds_sock *rs;
3438 - unsigned long flags;
3439
3440 len /= sizeof(struct rds_info_socket);
3441
3442 - spin_lock_irqsave(&rds_sock_lock, flags);
3443 + spin_lock_bh(&rds_sock_lock);
3444
3445 if (len < rds_sock_count)
3446 goto out;
3447 @@ -529,7 +525,7 @@ out:
3448 lens->nr = rds_sock_count;
3449 lens->each = sizeof(struct rds_info_socket);
3450
3451 - spin_unlock_irqrestore(&rds_sock_lock, flags);
3452 + spin_unlock_bh(&rds_sock_lock);
3453 }
3454
3455 static void rds_exit(void)
3456 diff --git a/net/socket.c b/net/socket.c
3457 index 2877647..2dce67a 100644
3458 --- a/net/socket.c
3459 +++ b/net/socket.c
3460 @@ -2472,7 +2472,7 @@ int sock_register(const struct net_proto_family *ops)
3461 lockdep_is_held(&net_family_lock)))
3462 err = -EEXIST;
3463 else {
3464 - RCU_INIT_POINTER(net_families[ops->family], ops);
3465 + rcu_assign_pointer(net_families[ops->family], ops);
3466 err = 0;
3467 }
3468 spin_unlock(&net_family_lock);
3469 diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c
3470 index afb5655..db0efde 100644
3471 --- a/net/sunrpc/auth_gss/auth_gss.c
3472 +++ b/net/sunrpc/auth_gss/auth_gss.c
3473 @@ -122,7 +122,7 @@ gss_cred_set_ctx(struct rpc_cred *cred, struct gss_cl_ctx *ctx)
3474 if (!test_bit(RPCAUTH_CRED_NEW, &cred->cr_flags))
3475 return;
3476 gss_get_ctx(ctx);
3477 - RCU_INIT_POINTER(gss_cred->gc_ctx, ctx);
3478 + rcu_assign_pointer(gss_cred->gc_ctx, ctx);
3479 set_bit(RPCAUTH_CRED_UPTODATE, &cred->cr_flags);
3480 smp_mb__before_clear_bit();
3481 clear_bit(RPCAUTH_CRED_NEW, &cred->cr_flags);
3482 diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
3483 index b595a3d..d99678a 100644
3484 --- a/net/unix/af_unix.c
3485 +++ b/net/unix/af_unix.c
3486 @@ -1915,7 +1915,7 @@ static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
3487 struct sk_buff *skb;
3488
3489 unix_state_lock(sk);
3490 - skb = skb_dequeue(&sk->sk_receive_queue);
3491 + skb = skb_peek(&sk->sk_receive_queue);
3492 if (skb == NULL) {
3493 unix_sk(sk)->recursion_level = 0;
3494 if (copied >= target)
3495 @@ -1955,11 +1955,8 @@ static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
3496 if (check_creds) {
3497 /* Never glue messages from different writers */
3498 if ((UNIXCB(skb).pid != siocb->scm->pid) ||
3499 - (UNIXCB(skb).cred != siocb->scm->cred)) {
3500 - skb_queue_head(&sk->sk_receive_queue, skb);
3501 - sk->sk_data_ready(sk, skb->len);
3502 + (UNIXCB(skb).cred != siocb->scm->cred))
3503 break;
3504 - }
3505 } else {
3506 /* Copy credentials */
3507 scm_set_cred(siocb->scm, UNIXCB(skb).pid, UNIXCB(skb).cred);
3508 @@ -1974,8 +1971,6 @@ static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
3509
3510 chunk = min_t(unsigned int, skb->len, size);
3511 if (memcpy_toiovec(msg->msg_iov, skb->data, chunk)) {
3512 - skb_queue_head(&sk->sk_receive_queue, skb);
3513 - sk->sk_data_ready(sk, skb->len);
3514 if (copied == 0)
3515 copied = -EFAULT;
3516 break;
3517 @@ -1990,13 +1985,10 @@ static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
3518 if (UNIXCB(skb).fp)
3519 unix_detach_fds(siocb->scm, skb);
3520
3521 - /* put the skb back if we didn't use it up.. */
3522 - if (skb->len) {
3523 - skb_queue_head(&sk->sk_receive_queue, skb);
3524 - sk->sk_data_ready(sk, skb->len);
3525 + if (skb->len)
3526 break;
3527 - }
3528
3529 + skb_unlink(skb, &sk->sk_receive_queue);
3530 consume_skb(skb);
3531
3532 if (siocb->scm->fp)
3533 @@ -2007,9 +1999,6 @@ static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
3534 if (UNIXCB(skb).fp)
3535 siocb->scm->fp = scm_fp_dup(UNIXCB(skb).fp);
3536
3537 - /* put message back and return */
3538 - skb_queue_head(&sk->sk_receive_queue, skb);
3539 - sk->sk_data_ready(sk, skb->len);
3540 break;
3541 }
3542 } while (size);
3543 diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
3544 index d0a42df..7cae73e 100644
3545 --- a/net/xfrm/xfrm_user.c
3546 +++ b/net/xfrm/xfrm_user.c
3547 @@ -2927,7 +2927,7 @@ static int __net_init xfrm_user_net_init(struct net *net)
3548 if (nlsk == NULL)
3549 return -ENOMEM;
3550 net->xfrm.nlsk_stash = nlsk; /* Don't set to NULL */
3551 - RCU_INIT_POINTER(net->xfrm.nlsk, nlsk);
3552 + rcu_assign_pointer(net->xfrm.nlsk, nlsk);
3553 return 0;
3554 }
3555
3556 diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
3557 index 5b2b75b..192e6c0 100644
3558 --- a/sound/pci/hda/hda_intel.c
3559 +++ b/sound/pci/hda/hda_intel.c
3560 @@ -461,6 +461,7 @@ struct azx {
3561 unsigned int irq_pending_warned :1;
3562 unsigned int probing :1; /* codec probing phase */
3563 unsigned int snoop:1;
3564 + unsigned int align_buffer_size:1;
3565
3566 /* for debugging */
3567 unsigned int last_cmd[AZX_MAX_CODECS];
3568 @@ -1697,7 +1698,7 @@ static int azx_pcm_open(struct snd_pcm_substream *substream)
3569 runtime->hw.rates = hinfo->rates;
3570 snd_pcm_limit_hw_rates(runtime);
3571 snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
3572 - if (align_buffer_size)
3573 + if (chip->align_buffer_size)
3574 /* constrain buffer sizes to be multiple of 128
3575 bytes. This is more efficient in terms of memory
3576 access but isn't required by the HDA spec and
3577 @@ -2753,8 +2754,9 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci,
3578 }
3579
3580 /* disable buffer size rounding to 128-byte multiples if supported */
3581 + chip->align_buffer_size = align_buffer_size;
3582 if (chip->driver_caps & AZX_DCAPS_BUFSIZE)
3583 - align_buffer_size = 0;
3584 + chip->align_buffer_size = 0;
3585
3586 /* allow 64bit DMA address if supported by H/W */
3587 if ((gcap & ICH6_GCAP_64OK) && !pci_set_dma_mask(pci, DMA_BIT_MASK(64)))
3588 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
3589 index 1d07e8f..5f03c40 100644
3590 --- a/sound/pci/hda/patch_realtek.c
3591 +++ b/sound/pci/hda/patch_realtek.c
3592 @@ -5223,6 +5223,7 @@ static const struct hda_amp_list alc861_loopbacks[] = {
3593 /* Pin config fixes */
3594 enum {
3595 PINFIX_FSC_AMILO_PI1505,
3596 + PINFIX_ASUS_A6RP,
3597 };
3598
3599 static const struct alc_fixup alc861_fixups[] = {
3600 @@ -5234,9 +5235,19 @@ static const struct alc_fixup alc861_fixups[] = {
3601 { }
3602 }
3603 },
3604 + [PINFIX_ASUS_A6RP] = {
3605 + .type = ALC_FIXUP_VERBS,
3606 + .v.verbs = (const struct hda_verb[]) {
3607 + /* node 0x0f VREF seems controlling the master output */
3608 + { 0x0f, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF50 },
3609 + { }
3610 + },
3611 + },
3612 };
3613
3614 static const struct snd_pci_quirk alc861_fixup_tbl[] = {
3615 + SND_PCI_QUIRK(0x1043, 0x1393, "ASUS A6Rp", PINFIX_ASUS_A6RP),
3616 + SND_PCI_QUIRK(0x1584, 0x2b01, "Haier W18", PINFIX_ASUS_A6RP),
3617 SND_PCI_QUIRK(0x1734, 0x10c7, "FSC Amilo Pi1505", PINFIX_FSC_AMILO_PI1505),
3618 {}
3619 };
3620 diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
3621 index f3c73a9..ccdac27 100644
3622 --- a/sound/pci/hda/patch_sigmatel.c
3623 +++ b/sound/pci/hda/patch_sigmatel.c
3624 @@ -4253,13 +4253,15 @@ static int enable_pin_detect(struct hda_codec *codec, hda_nid_t nid,
3625 return 1;
3626 }
3627
3628 -static int is_nid_hp_pin(struct auto_pin_cfg *cfg, hda_nid_t nid)
3629 +static int is_nid_out_jack_pin(struct auto_pin_cfg *cfg, hda_nid_t nid)
3630 {
3631 int i;
3632 for (i = 0; i < cfg->hp_outs; i++)
3633 if (cfg->hp_pins[i] == nid)
3634 return 1; /* nid is a HP-Out */
3635 -
3636 + for (i = 0; i < cfg->line_outs; i++)
3637 + if (cfg->line_out_pins[i] == nid)
3638 + return 1; /* nid is a line-Out */
3639 return 0; /* nid is not a HP-Out */
3640 };
3641
3642 @@ -4465,7 +4467,7 @@ static int stac92xx_init(struct hda_codec *codec)
3643 continue;
3644 }
3645
3646 - if (is_nid_hp_pin(cfg, nid))
3647 + if (is_nid_out_jack_pin(cfg, nid))
3648 continue; /* already has an unsol event */
3649
3650 pinctl = snd_hda_codec_read(codec, nid, 0,
3651 @@ -4950,7 +4952,14 @@ static int find_mute_led_gpio(struct hda_codec *codec, int default_polarity)
3652 /* BIOS bug: unfilled OEM string */
3653 if (strstr(dev->name, "HP_Mute_LED_P_G")) {
3654 set_hp_led_gpio(codec);
3655 - spec->gpio_led_polarity = 1;
3656 + switch (codec->subsystem_id) {
3657 + case 0x103c148a:
3658 + spec->gpio_led_polarity = 0;
3659 + break;
3660 + default:
3661 + spec->gpio_led_polarity = 1;
3662 + break;
3663 + }
3664 return 1;
3665 }
3666 }
3667 diff --git a/sound/soc/codecs/wm5100.c b/sound/soc/codecs/wm5100.c
3668 index 42d9039..d0beeec 100644
3669 --- a/sound/soc/codecs/wm5100.c
3670 +++ b/sound/soc/codecs/wm5100.c
3671 @@ -1379,6 +1379,7 @@ static int wm5100_set_bias_level(struct snd_soc_codec *codec,
3672
3673 switch (wm5100->rev) {
3674 case 0:
3675 + regcache_cache_bypass(wm5100->regmap, true);
3676 snd_soc_write(codec, 0x11, 0x3);
3677 snd_soc_write(codec, 0x203, 0xc);
3678 snd_soc_write(codec, 0x206, 0);
3679 @@ -1394,6 +1395,7 @@ static int wm5100_set_bias_level(struct snd_soc_codec *codec,
3680 snd_soc_write(codec,
3681 wm5100_reva_patches[i].reg,
3682 wm5100_reva_patches[i].val);
3683 + regcache_cache_bypass(wm5100->regmap, false);
3684 break;
3685 default:
3686 break;
3687 @@ -1404,6 +1406,7 @@ static int wm5100_set_bias_level(struct snd_soc_codec *codec,
3688 break;
3689
3690 case SND_SOC_BIAS_OFF:
3691 + regcache_cache_only(wm5100->regmap, true);
3692 if (wm5100->pdata.ldo_ena)
3693 gpio_set_value_cansleep(wm5100->pdata.ldo_ena, 0);
3694 regulator_bulk_disable(ARRAY_SIZE(wm5100->core_supplies),
3695 diff --git a/sound/soc/codecs/wm8996.c b/sound/soc/codecs/wm8996.c
3696 index a33b04d..6d98a57 100644
3697 --- a/sound/soc/codecs/wm8996.c
3698 +++ b/sound/soc/codecs/wm8996.c
3699 @@ -1049,7 +1049,8 @@ SND_SOC_DAPM_SUPPLY_S("SYSCLK", 1, WM8996_AIF_CLOCKING_1, 0, 0, NULL, 0),
3700 SND_SOC_DAPM_SUPPLY_S("SYSDSPCLK", 2, WM8996_CLOCKING_1, 1, 0, NULL, 0),
3701 SND_SOC_DAPM_SUPPLY_S("AIFCLK", 2, WM8996_CLOCKING_1, 2, 0, NULL, 0),
3702 SND_SOC_DAPM_SUPPLY_S("Charge Pump", 2, WM8996_CHARGE_PUMP_1, 15, 0, cp_event,
3703 - SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
3704 + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
3705 + SND_SOC_DAPM_POST_PMD),
3706 SND_SOC_DAPM_SUPPLY("Bandgap", SND_SOC_NOPM, 0, 0, bg_event,
3707 SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
3708 SND_SOC_DAPM_SUPPLY("LDO2", WM8996_POWER_MANAGEMENT_2, 1, 0, NULL, 0),
3709 @@ -1932,6 +1933,7 @@ static int wm8996_set_sysclk(struct snd_soc_dai *dai,
3710 struct wm8996_priv *wm8996 = snd_soc_codec_get_drvdata(codec);
3711 int lfclk = 0;
3712 int ratediv = 0;
3713 + int sync = WM8996_REG_SYNC;
3714 int src;
3715 int old;
3716
3717 @@ -1976,6 +1978,7 @@ static int wm8996_set_sysclk(struct snd_soc_dai *dai,
3718 case 32000:
3719 case 32768:
3720 lfclk = WM8996_LFCLK_ENA;
3721 + sync = 0;
3722 break;
3723 default:
3724 dev_warn(codec->dev, "Unsupported clock rate %dHz\n",
3725 @@ -1989,6 +1992,8 @@ static int wm8996_set_sysclk(struct snd_soc_dai *dai,
3726 WM8996_SYSCLK_SRC_MASK | WM8996_SYSCLK_DIV_MASK,
3727 src << WM8996_SYSCLK_SRC_SHIFT | ratediv);
3728 snd_soc_update_bits(codec, WM8996_CLOCKING_1, WM8996_LFCLK_ENA, lfclk);
3729 + snd_soc_update_bits(codec, WM8996_CONTROL_INTERFACE_1,
3730 + WM8996_REG_SYNC, sync);
3731 snd_soc_update_bits(codec, WM8996_AIF_CLOCKING_1,
3732 WM8996_SYSCLK_ENA, old);
3733
3734 diff --git a/sound/soc/codecs/wm8996.h b/sound/soc/codecs/wm8996.h
3735 index 0fde643..de9ac3e 100644
3736 --- a/sound/soc/codecs/wm8996.h
3737 +++ b/sound/soc/codecs/wm8996.h
3738 @@ -1567,6 +1567,10 @@ int wm8996_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack,
3739 /*
3740 * R257 (0x101) - Control Interface (1)
3741 */
3742 +#define WM8996_REG_SYNC 0x8000 /* REG_SYNC */
3743 +#define WM8996_REG_SYNC_MASK 0x8000 /* REG_SYNC */
3744 +#define WM8996_REG_SYNC_SHIFT 15 /* REG_SYNC */
3745 +#define WM8996_REG_SYNC_WIDTH 1 /* REG_SYNC */
3746 #define WM8996_AUTO_INC 0x0004 /* AUTO_INC */
3747 #define WM8996_AUTO_INC_MASK 0x0004 /* AUTO_INC */
3748 #define WM8996_AUTO_INC_SHIFT 2 /* AUTO_INC */