Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1644 - (hide annotations) (download)
Thu Feb 16 12:24:52 2012 UTC (12 years, 3 months ago) by niro
File size: 127825 byte(s)
-3.2.6-magellan-r1
1 niro 1644 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 */