Magellan Linux

Contents of /trunk/kernel-magellan/patches-3.7/0101-3.7.2-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2038 - (show annotations) (download)
Mon Jan 28 08:11:12 2013 UTC (11 years, 3 months ago) by niro
File size: 160240 byte(s)
linux-3.7.2
1 diff --git a/arch/arm/kernel/swp_emulate.c b/arch/arm/kernel/swp_emulate.c
2 index df74518..ab1017b 100644
3 --- a/arch/arm/kernel/swp_emulate.c
4 +++ b/arch/arm/kernel/swp_emulate.c
5 @@ -109,10 +109,12 @@ static void set_segfault(struct pt_regs *regs, unsigned long addr)
6 {
7 siginfo_t info;
8
9 + down_read(&current->mm->mmap_sem);
10 if (find_vma(current->mm, addr) == NULL)
11 info.si_code = SEGV_MAPERR;
12 else
13 info.si_code = SEGV_ACCERR;
14 + up_read(&current->mm->mmap_sem);
15
16 info.si_signo = SIGSEGV;
17 info.si_errno = 0;
18 diff --git a/arch/arm/mach-realview/include/mach/board-eb.h b/arch/arm/mach-realview/include/mach/board-eb.h
19 index 124bce6..a301e61 100644
20 --- a/arch/arm/mach-realview/include/mach/board-eb.h
21 +++ b/arch/arm/mach-realview/include/mach/board-eb.h
22 @@ -47,7 +47,7 @@
23 #define REALVIEW_EB_USB_BASE 0x4F000000 /* USB */
24
25 #ifdef CONFIG_REALVIEW_EB_ARM11MP_REVB
26 -#define REALVIEW_EB11MP_PRIV_MEM_BASE 0x1F000000
27 +#define REALVIEW_EB11MP_PRIV_MEM_BASE 0x10100000
28 #define REALVIEW_EB11MP_L220_BASE 0x10102000 /* L220 registers */
29 #define REALVIEW_EB11MP_SYS_PLD_CTRL1 0xD8 /* Register offset for MPCore sysctl */
30 #else
31 diff --git a/arch/arm/mm/cache-v7.S b/arch/arm/mm/cache-v7.S
32 index cd95664..7539ec2 100644
33 --- a/arch/arm/mm/cache-v7.S
34 +++ b/arch/arm/mm/cache-v7.S
35 @@ -44,8 +44,10 @@ ENDPROC(v7_flush_icache_all)
36 ENTRY(v7_flush_dcache_louis)
37 dmb @ ensure ordering with previous memory accesses
38 mrc p15, 1, r0, c0, c0, 1 @ read clidr, r0 = clidr
39 - ands r3, r0, #0xe00000 @ extract LoUIS from clidr
40 - mov r3, r3, lsr #20 @ r3 = LoUIS * 2
41 + ALT_SMP(ands r3, r0, #(7 << 21)) @ extract LoUIS from clidr
42 + ALT_UP(ands r3, r0, #(7 << 27)) @ extract LoUU from clidr
43 + ALT_SMP(mov r3, r3, lsr #20) @ r3 = LoUIS * 2
44 + ALT_UP(mov r3, r3, lsr #26) @ r3 = LoUU * 2
45 moveq pc, lr @ return if level == 0
46 mov r10, #0 @ r10 (starting level) = 0
47 b flush_levels @ start flushing cache levels
48 diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
49 index 941dfb9..99b47b9 100644
50 --- a/arch/arm/mm/mmu.c
51 +++ b/arch/arm/mm/mmu.c
52 @@ -488,7 +488,7 @@ static void __init build_mem_type_table(void)
53 #endif
54
55 for (i = 0; i < 16; i++) {
56 - unsigned long v = pgprot_val(protection_map[i]);
57 + pteval_t v = pgprot_val(protection_map[i]);
58 protection_map[i] = __pgprot(v | user_pgprot);
59 }
60
61 diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
62 index 14aba2d..64b1339 100644
63 --- a/arch/arm64/include/asm/pgtable.h
64 +++ b/arch/arm64/include/asm/pgtable.h
65 @@ -159,6 +159,8 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
66 {
67 if (pte_present_exec_user(pte))
68 __sync_icache_dcache(pte, addr);
69 + if (!pte_dirty(pte))
70 + pte = pte_wrprotect(pte);
71 set_pte(ptep, pte);
72 }
73
74 diff --git a/arch/arm64/include/asm/unistd32.h b/arch/arm64/include/asm/unistd32.h
75 index 656a6f2..660f210 100644
76 --- a/arch/arm64/include/asm/unistd32.h
77 +++ b/arch/arm64/include/asm/unistd32.h
78 @@ -393,7 +393,7 @@ __SYSCALL(368, compat_sys_fanotify_mark_wrapper)
79 __SYSCALL(369, sys_prlimit64)
80 __SYSCALL(370, sys_name_to_handle_at)
81 __SYSCALL(371, compat_sys_open_by_handle_at)
82 -__SYSCALL(372, sys_clock_adjtime)
83 +__SYSCALL(372, compat_sys_clock_adjtime)
84 __SYSCALL(373, sys_syncfs)
85
86 #define __NR_compat_syscalls 374
87 diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c
88 index 8807ba2..051bb52 100644
89 --- a/arch/arm64/kernel/signal.c
90 +++ b/arch/arm64/kernel/signal.c
91 @@ -41,6 +41,8 @@
92 struct rt_sigframe {
93 struct siginfo info;
94 struct ucontext uc;
95 + u64 fp;
96 + u64 lr;
97 };
98
99 static int preserve_fpsimd_context(struct fpsimd_context __user *ctx)
100 @@ -175,6 +177,10 @@ static int setup_sigframe(struct rt_sigframe __user *sf,
101 struct aux_context __user *aux =
102 (struct aux_context __user *)sf->uc.uc_mcontext.__reserved;
103
104 + /* set up the stack frame for unwinding */
105 + __put_user_error(regs->regs[29], &sf->fp, err);
106 + __put_user_error(regs->regs[30], &sf->lr, err);
107 +
108 for (i = 0; i < 31; i++)
109 __put_user_error(regs->regs[i], &sf->uc.uc_mcontext.regs[i],
110 err);
111 @@ -210,9 +216,6 @@ static void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
112 if ((ka->sa.sa_flags & SA_ONSTACK) && !sas_ss_flags(sp))
113 sp = sp_top = current->sas_ss_sp + current->sas_ss_size;
114
115 - /* room for stack frame (FP, LR) */
116 - sp -= 16;
117 -
118 sp = (sp - framesize) & ~15;
119 frame = (void __user *)sp;
120
121 @@ -225,20 +228,14 @@ static void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
122 return frame;
123 }
124
125 -static int setup_return(struct pt_regs *regs, struct k_sigaction *ka,
126 - void __user *frame, int usig)
127 +static void setup_return(struct pt_regs *regs, struct k_sigaction *ka,
128 + void __user *frame, int usig)
129 {
130 - int err = 0;
131 __sigrestore_t sigtramp;
132 - unsigned long __user *sp = (unsigned long __user *)regs->sp;
133 -
134 - /* set up the stack frame */
135 - __put_user_error(regs->regs[29], sp - 2, err);
136 - __put_user_error(regs->regs[30], sp - 1, err);
137
138 regs->regs[0] = usig;
139 - regs->regs[29] = regs->sp - 16;
140 regs->sp = (unsigned long)frame;
141 + regs->regs[29] = regs->sp + offsetof(struct rt_sigframe, fp);
142 regs->pc = (unsigned long)ka->sa.sa_handler;
143
144 if (ka->sa.sa_flags & SA_RESTORER)
145 @@ -247,8 +244,6 @@ static int setup_return(struct pt_regs *regs, struct k_sigaction *ka,
146 sigtramp = VDSO_SYMBOL(current->mm->context.vdso, sigtramp);
147
148 regs->regs[30] = (unsigned long)sigtramp;
149 -
150 - return err;
151 }
152
153 static int setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info,
154 @@ -272,13 +267,13 @@ static int setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info,
155 err |= __copy_to_user(&frame->uc.uc_stack, &stack, sizeof(stack));
156
157 err |= setup_sigframe(frame, regs, set);
158 - if (err == 0)
159 - err = setup_return(regs, ka, frame, usig);
160 -
161 - if (err == 0 && ka->sa.sa_flags & SA_SIGINFO) {
162 - err |= copy_siginfo_to_user(&frame->info, info);
163 - regs->regs[1] = (unsigned long)&frame->info;
164 - regs->regs[2] = (unsigned long)&frame->uc;
165 + if (err == 0) {
166 + setup_return(regs, ka, frame, usig);
167 + if (ka->sa.sa_flags & SA_SIGINFO) {
168 + err |= copy_siginfo_to_user(&frame->info, info);
169 + regs->regs[1] = (unsigned long)&frame->info;
170 + regs->regs[2] = (unsigned long)&frame->uc;
171 + }
172 }
173
174 return err;
175 diff --git a/arch/cris/include/asm/io.h b/arch/cris/include/asm/io.h
176 index 32567bc..ac12ae2 100644
177 --- a/arch/cris/include/asm/io.h
178 +++ b/arch/cris/include/asm/io.h
179 @@ -133,12 +133,39 @@ static inline void writel(unsigned int b, volatile void __iomem *addr)
180 #define insb(port,addr,count) (cris_iops ? cris_iops->read_io(port,addr,1,count) : 0)
181 #define insw(port,addr,count) (cris_iops ? cris_iops->read_io(port,addr,2,count) : 0)
182 #define insl(port,addr,count) (cris_iops ? cris_iops->read_io(port,addr,4,count) : 0)
183 -#define outb(data,port) if (cris_iops) cris_iops->write_io(port,(void*)(unsigned)data,1,1)
184 -#define outw(data,port) if (cris_iops) cris_iops->write_io(port,(void*)(unsigned)data,2,1)
185 -#define outl(data,port) if (cris_iops) cris_iops->write_io(port,(void*)(unsigned)data,4,1)
186 -#define outsb(port,addr,count) if(cris_iops) cris_iops->write_io(port,(void*)addr,1,count)
187 -#define outsw(port,addr,count) if(cris_iops) cris_iops->write_io(port,(void*)addr,2,count)
188 -#define outsl(port,addr,count) if(cris_iops) cris_iops->write_io(port,(void*)addr,3,count)
189 +static inline void outb(unsigned char data, unsigned int port)
190 +{
191 + if (cris_iops)
192 + cris_iops->write_io(port, (void *) &data, 1, 1);
193 +}
194 +static inline void outw(unsigned short data, unsigned int port)
195 +{
196 + if (cris_iops)
197 + cris_iops->write_io(port, (void *) &data, 2, 1);
198 +}
199 +static inline void outl(unsigned int data, unsigned int port)
200 +{
201 + if (cris_iops)
202 + cris_iops->write_io(port, (void *) &data, 4, 1);
203 +}
204 +static inline void outsb(unsigned int port, const void *addr,
205 + unsigned long count)
206 +{
207 + if (cris_iops)
208 + cris_iops->write_io(port, (void *)addr, 1, count);
209 +}
210 +static inline void outsw(unsigned int port, const void *addr,
211 + unsigned long count)
212 +{
213 + if (cris_iops)
214 + cris_iops->write_io(port, (void *)addr, 2, count);
215 +}
216 +static inline void outsl(unsigned int port, const void *addr,
217 + unsigned long count)
218 +{
219 + if (cris_iops)
220 + cris_iops->write_io(port, (void *)addr, 4, count);
221 +}
222
223 /*
224 * Convert a physical pointer to a virtual kernel pointer for /dev/mem
225 diff --git a/arch/sparc/crypto/aes_asm.S b/arch/sparc/crypto/aes_asm.S
226 index 23f6cbb..1cda8aa 100644
227 --- a/arch/sparc/crypto/aes_asm.S
228 +++ b/arch/sparc/crypto/aes_asm.S
229 @@ -1024,7 +1024,11 @@ ENTRY(aes_sparc64_ecb_encrypt_256)
230 add %o2, 0x20, %o2
231 brlz,pt %o3, 11f
232 nop
233 -10: ldx [%o1 + 0x00], %g3
234 +10: ldd [%o0 + 0xd0], %f56
235 + ldd [%o0 + 0xd8], %f58
236 + ldd [%o0 + 0xe0], %f60
237 + ldd [%o0 + 0xe8], %f62
238 + ldx [%o1 + 0x00], %g3
239 ldx [%o1 + 0x08], %g7
240 xor %g1, %g3, %g3
241 xor %g2, %g7, %g7
242 @@ -1128,9 +1132,9 @@ ENTRY(aes_sparc64_ecb_decrypt_256)
243 /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len */
244 ldx [%o0 - 0x10], %g1
245 subcc %o3, 0x10, %o3
246 + ldx [%o0 - 0x08], %g2
247 be 10f
248 - ldx [%o0 - 0x08], %g2
249 - sub %o0, 0xf0, %o0
250 + sub %o0, 0xf0, %o0
251 1: ldx [%o1 + 0x00], %g3
252 ldx [%o1 + 0x08], %g7
253 ldx [%o1 + 0x10], %o4
254 @@ -1154,7 +1158,11 @@ ENTRY(aes_sparc64_ecb_decrypt_256)
255 add %o2, 0x20, %o2
256 brlz,pt %o3, 11f
257 nop
258 -10: ldx [%o1 + 0x00], %g3
259 +10: ldd [%o0 + 0x18], %f56
260 + ldd [%o0 + 0x10], %f58
261 + ldd [%o0 + 0x08], %f60
262 + ldd [%o0 + 0x00], %f62
263 + ldx [%o1 + 0x00], %g3
264 ldx [%o1 + 0x08], %g7
265 xor %g1, %g3, %g3
266 xor %g2, %g7, %g7
267 @@ -1511,11 +1519,11 @@ ENTRY(aes_sparc64_ctr_crypt_256)
268 add %o2, 0x20, %o2
269 brlz,pt %o3, 11f
270 nop
271 - ldd [%o0 + 0xd0], %f56
272 +10: ldd [%o0 + 0xd0], %f56
273 ldd [%o0 + 0xd8], %f58
274 ldd [%o0 + 0xe0], %f60
275 ldd [%o0 + 0xe8], %f62
276 -10: xor %g1, %g3, %o5
277 + xor %g1, %g3, %o5
278 MOVXTOD_O5_F0
279 xor %g2, %g7, %o5
280 MOVXTOD_O5_F2
281 diff --git a/arch/sparc/crypto/aes_glue.c b/arch/sparc/crypto/aes_glue.c
282 index 3965d1d..503e6d9 100644
283 --- a/arch/sparc/crypto/aes_glue.c
284 +++ b/arch/sparc/crypto/aes_glue.c
285 @@ -222,6 +222,7 @@ static int ecb_encrypt(struct blkcipher_desc *desc,
286
287 blkcipher_walk_init(&walk, dst, src, nbytes);
288 err = blkcipher_walk_virt(desc, &walk);
289 + desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
290
291 ctx->ops->load_encrypt_keys(&ctx->key[0]);
292 while ((nbytes = walk.nbytes)) {
293 @@ -251,6 +252,7 @@ static int ecb_decrypt(struct blkcipher_desc *desc,
294
295 blkcipher_walk_init(&walk, dst, src, nbytes);
296 err = blkcipher_walk_virt(desc, &walk);
297 + desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
298
299 ctx->ops->load_decrypt_keys(&ctx->key[0]);
300 key_end = &ctx->key[ctx->expanded_key_length / sizeof(u64)];
301 @@ -280,6 +282,7 @@ static int cbc_encrypt(struct blkcipher_desc *desc,
302
303 blkcipher_walk_init(&walk, dst, src, nbytes);
304 err = blkcipher_walk_virt(desc, &walk);
305 + desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
306
307 ctx->ops->load_encrypt_keys(&ctx->key[0]);
308 while ((nbytes = walk.nbytes)) {
309 @@ -309,6 +312,7 @@ static int cbc_decrypt(struct blkcipher_desc *desc,
310
311 blkcipher_walk_init(&walk, dst, src, nbytes);
312 err = blkcipher_walk_virt(desc, &walk);
313 + desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
314
315 ctx->ops->load_decrypt_keys(&ctx->key[0]);
316 key_end = &ctx->key[ctx->expanded_key_length / sizeof(u64)];
317 @@ -329,6 +333,22 @@ static int cbc_decrypt(struct blkcipher_desc *desc,
318 return err;
319 }
320
321 +static void ctr_crypt_final(struct crypto_sparc64_aes_ctx *ctx,
322 + struct blkcipher_walk *walk)
323 +{
324 + u8 *ctrblk = walk->iv;
325 + u64 keystream[AES_BLOCK_SIZE / sizeof(u64)];
326 + u8 *src = walk->src.virt.addr;
327 + u8 *dst = walk->dst.virt.addr;
328 + unsigned int nbytes = walk->nbytes;
329 +
330 + ctx->ops->ecb_encrypt(&ctx->key[0], (const u64 *)ctrblk,
331 + keystream, AES_BLOCK_SIZE);
332 + crypto_xor((u8 *) keystream, src, nbytes);
333 + memcpy(dst, keystream, nbytes);
334 + crypto_inc(ctrblk, AES_BLOCK_SIZE);
335 +}
336 +
337 static int ctr_crypt(struct blkcipher_desc *desc,
338 struct scatterlist *dst, struct scatterlist *src,
339 unsigned int nbytes)
340 @@ -338,10 +358,11 @@ static int ctr_crypt(struct blkcipher_desc *desc,
341 int err;
342
343 blkcipher_walk_init(&walk, dst, src, nbytes);
344 - err = blkcipher_walk_virt(desc, &walk);
345 + err = blkcipher_walk_virt_block(desc, &walk, AES_BLOCK_SIZE);
346 + desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
347
348 ctx->ops->load_encrypt_keys(&ctx->key[0]);
349 - while ((nbytes = walk.nbytes)) {
350 + while ((nbytes = walk.nbytes) >= AES_BLOCK_SIZE) {
351 unsigned int block_len = nbytes & AES_BLOCK_MASK;
352
353 if (likely(block_len)) {
354 @@ -353,6 +374,10 @@ static int ctr_crypt(struct blkcipher_desc *desc,
355 nbytes &= AES_BLOCK_SIZE - 1;
356 err = blkcipher_walk_done(desc, &walk, nbytes);
357 }
358 + if (walk.nbytes) {
359 + ctr_crypt_final(ctx, &walk);
360 + err = blkcipher_walk_done(desc, &walk, 0);
361 + }
362 fprs_write(0);
363 return err;
364 }
365 @@ -418,7 +443,7 @@ static struct crypto_alg algs[] = { {
366 .cra_driver_name = "ctr-aes-sparc64",
367 .cra_priority = SPARC_CR_OPCODE_PRIORITY,
368 .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER,
369 - .cra_blocksize = AES_BLOCK_SIZE,
370 + .cra_blocksize = 1,
371 .cra_ctxsize = sizeof(struct crypto_sparc64_aes_ctx),
372 .cra_alignmask = 7,
373 .cra_type = &crypto_blkcipher_type,
374 diff --git a/arch/sparc/crypto/camellia_glue.c b/arch/sparc/crypto/camellia_glue.c
375 index 62c89af..888f626 100644
376 --- a/arch/sparc/crypto/camellia_glue.c
377 +++ b/arch/sparc/crypto/camellia_glue.c
378 @@ -98,6 +98,7 @@ static int __ecb_crypt(struct blkcipher_desc *desc,
379
380 blkcipher_walk_init(&walk, dst, src, nbytes);
381 err = blkcipher_walk_virt(desc, &walk);
382 + desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
383
384 if (encrypt)
385 key = &ctx->encrypt_key[0];
386 @@ -160,6 +161,7 @@ static int cbc_encrypt(struct blkcipher_desc *desc,
387
388 blkcipher_walk_init(&walk, dst, src, nbytes);
389 err = blkcipher_walk_virt(desc, &walk);
390 + desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
391
392 key = &ctx->encrypt_key[0];
393 camellia_sparc64_load_keys(key, ctx->key_len);
394 @@ -198,6 +200,7 @@ static int cbc_decrypt(struct blkcipher_desc *desc,
395
396 blkcipher_walk_init(&walk, dst, src, nbytes);
397 err = blkcipher_walk_virt(desc, &walk);
398 + desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
399
400 key = &ctx->decrypt_key[0];
401 camellia_sparc64_load_keys(key, ctx->key_len);
402 diff --git a/arch/sparc/crypto/des_asm.S b/arch/sparc/crypto/des_asm.S
403 index 30b6e90..b5c8fc2 100644
404 --- a/arch/sparc/crypto/des_asm.S
405 +++ b/arch/sparc/crypto/des_asm.S
406 @@ -376,6 +376,7 @@ ENTRY(des3_ede_sparc64_ecb_crypt)
407 1: ldd [%o1 + 0x00], %f60
408 DES3_LOOP_BODY(60)
409 std %f60, [%o2 + 0x00]
410 + add %o1, 0x08, %o1
411 subcc %o3, 0x08, %o3
412 bne,pt %icc, 1b
413 add %o2, 0x08, %o2
414 diff --git a/arch/sparc/crypto/des_glue.c b/arch/sparc/crypto/des_glue.c
415 index 41524ce..3065bc6 100644
416 --- a/arch/sparc/crypto/des_glue.c
417 +++ b/arch/sparc/crypto/des_glue.c
418 @@ -100,6 +100,7 @@ static int __ecb_crypt(struct blkcipher_desc *desc,
419
420 blkcipher_walk_init(&walk, dst, src, nbytes);
421 err = blkcipher_walk_virt(desc, &walk);
422 + desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
423
424 if (encrypt)
425 des_sparc64_load_keys(&ctx->encrypt_expkey[0]);
426 @@ -147,6 +148,7 @@ static int cbc_encrypt(struct blkcipher_desc *desc,
427
428 blkcipher_walk_init(&walk, dst, src, nbytes);
429 err = blkcipher_walk_virt(desc, &walk);
430 + desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
431
432 des_sparc64_load_keys(&ctx->encrypt_expkey[0]);
433 while ((nbytes = walk.nbytes)) {
434 @@ -177,6 +179,7 @@ static int cbc_decrypt(struct blkcipher_desc *desc,
435
436 blkcipher_walk_init(&walk, dst, src, nbytes);
437 err = blkcipher_walk_virt(desc, &walk);
438 + desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
439
440 des_sparc64_load_keys(&ctx->decrypt_expkey[0]);
441 while ((nbytes = walk.nbytes)) {
442 @@ -266,6 +269,7 @@ static int __ecb3_crypt(struct blkcipher_desc *desc,
443
444 blkcipher_walk_init(&walk, dst, src, nbytes);
445 err = blkcipher_walk_virt(desc, &walk);
446 + desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
447
448 if (encrypt)
449 K = &ctx->encrypt_expkey[0];
450 @@ -317,6 +321,7 @@ static int cbc3_encrypt(struct blkcipher_desc *desc,
451
452 blkcipher_walk_init(&walk, dst, src, nbytes);
453 err = blkcipher_walk_virt(desc, &walk);
454 + desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
455
456 K = &ctx->encrypt_expkey[0];
457 des3_ede_sparc64_load_keys(K);
458 @@ -352,6 +357,7 @@ static int cbc3_decrypt(struct blkcipher_desc *desc,
459
460 blkcipher_walk_init(&walk, dst, src, nbytes);
461 err = blkcipher_walk_virt(desc, &walk);
462 + desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
463
464 K = &ctx->decrypt_expkey[0];
465 des3_ede_sparc64_load_keys(K);
466 diff --git a/arch/sparc/include/asm/hugetlb.h b/arch/sparc/include/asm/hugetlb.h
467 index 8c5eed6..9661e9b 100644
468 --- a/arch/sparc/include/asm/hugetlb.h
469 +++ b/arch/sparc/include/asm/hugetlb.h
470 @@ -61,14 +61,20 @@ static inline pte_t huge_pte_wrprotect(pte_t pte)
471 static inline void huge_ptep_set_wrprotect(struct mm_struct *mm,
472 unsigned long addr, pte_t *ptep)
473 {
474 - ptep_set_wrprotect(mm, addr, ptep);
475 + pte_t old_pte = *ptep;
476 + set_huge_pte_at(mm, addr, ptep, pte_wrprotect(old_pte));
477 }
478
479 static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma,
480 unsigned long addr, pte_t *ptep,
481 pte_t pte, int dirty)
482 {
483 - return ptep_set_access_flags(vma, addr, ptep, pte, dirty);
484 + int changed = !pte_same(*ptep, pte);
485 + if (changed) {
486 + set_huge_pte_at(vma->vm_mm, addr, ptep, pte);
487 + flush_tlb_page(vma, addr);
488 + }
489 + return changed;
490 }
491
492 static inline pte_t huge_ptep_get(pte_t *ptep)
493 diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
494 index 720e973f..487d9f3 100644
495 --- a/arch/x86/pci/common.c
496 +++ b/arch/x86/pci/common.c
497 @@ -433,7 +433,8 @@ static const struct dmi_system_id __devinitconst pciprobe_dmi_table[] = {
498 .callback = set_scan_all,
499 .ident = "Stratus/NEC ftServer",
500 .matches = {
501 - DMI_MATCH(DMI_SYS_VENDOR, "ftServer"),
502 + DMI_MATCH(DMI_SYS_VENDOR, "Stratus"),
503 + DMI_MATCH(DMI_PRODUCT_NAME, "ftServer"),
504 },
505 },
506 {}
507 diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
508 index 1fcb867..c441834 100644
509 --- a/drivers/acpi/scan.c
510 +++ b/drivers/acpi/scan.c
511 @@ -1227,7 +1227,7 @@ static void acpi_device_set_id(struct acpi_device *device)
512 acpi_add_id(device, ACPI_DOCK_HID);
513 else if (!acpi_ibm_smbus_match(device))
514 acpi_add_id(device, ACPI_SMBUS_IBM_HID);
515 - else if (!acpi_device_hid(device) &&
516 + else if (list_empty(&device->pnp.ids) &&
517 ACPI_IS_ROOT_DEVICE(device->parent)) {
518 acpi_add_id(device, ACPI_BUS_HID); /* \_SB, LNXSYBUS */
519 strcpy(device->pnp.device_name, ACPI_BUS_DEVICE_NAME);
520 diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
521 index 847ed55..813aa38 100644
522 --- a/drivers/acpi/sleep.c
523 +++ b/drivers/acpi/sleep.c
524 @@ -109,6 +109,180 @@ void __init acpi_old_suspend_ordering(void)
525 old_suspend_ordering = true;
526 }
527
528 +static int __init init_old_suspend_ordering(const struct dmi_system_id *d)
529 +{
530 + acpi_old_suspend_ordering();
531 + return 0;
532 +}
533 +
534 +static int __init init_nvs_nosave(const struct dmi_system_id *d)
535 +{
536 + acpi_nvs_nosave();
537 + return 0;
538 +}
539 +
540 +static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
541 + {
542 + .callback = init_old_suspend_ordering,
543 + .ident = "Abit KN9 (nForce4 variant)",
544 + .matches = {
545 + DMI_MATCH(DMI_BOARD_VENDOR, "http://www.abit.com.tw/"),
546 + DMI_MATCH(DMI_BOARD_NAME, "KN9 Series(NF-CK804)"),
547 + },
548 + },
549 + {
550 + .callback = init_old_suspend_ordering,
551 + .ident = "HP xw4600 Workstation",
552 + .matches = {
553 + DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
554 + DMI_MATCH(DMI_PRODUCT_NAME, "HP xw4600 Workstation"),
555 + },
556 + },
557 + {
558 + .callback = init_old_suspend_ordering,
559 + .ident = "Asus Pundit P1-AH2 (M2N8L motherboard)",
560 + .matches = {
561 + DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTek Computer INC."),
562 + DMI_MATCH(DMI_BOARD_NAME, "M2N8L"),
563 + },
564 + },
565 + {
566 + .callback = init_old_suspend_ordering,
567 + .ident = "Panasonic CF51-2L",
568 + .matches = {
569 + DMI_MATCH(DMI_BOARD_VENDOR,
570 + "Matsushita Electric Industrial Co.,Ltd."),
571 + DMI_MATCH(DMI_BOARD_NAME, "CF51-2L"),
572 + },
573 + },
574 + {
575 + .callback = init_nvs_nosave,
576 + .ident = "Sony Vaio VGN-FW21E",
577 + .matches = {
578 + DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
579 + DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FW21E"),
580 + },
581 + },
582 + {
583 + .callback = init_nvs_nosave,
584 + .ident = "Sony Vaio VPCEB17FX",
585 + .matches = {
586 + DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
587 + DMI_MATCH(DMI_PRODUCT_NAME, "VPCEB17FX"),
588 + },
589 + },
590 + {
591 + .callback = init_nvs_nosave,
592 + .ident = "Sony Vaio VGN-SR11M",
593 + .matches = {
594 + DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
595 + DMI_MATCH(DMI_PRODUCT_NAME, "VGN-SR11M"),
596 + },
597 + },
598 + {
599 + .callback = init_nvs_nosave,
600 + .ident = "Everex StepNote Series",
601 + .matches = {
602 + DMI_MATCH(DMI_SYS_VENDOR, "Everex Systems, Inc."),
603 + DMI_MATCH(DMI_PRODUCT_NAME, "Everex StepNote Series"),
604 + },
605 + },
606 + {
607 + .callback = init_nvs_nosave,
608 + .ident = "Sony Vaio VPCEB1Z1E",
609 + .matches = {
610 + DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
611 + DMI_MATCH(DMI_PRODUCT_NAME, "VPCEB1Z1E"),
612 + },
613 + },
614 + {
615 + .callback = init_nvs_nosave,
616 + .ident = "Sony Vaio VGN-NW130D",
617 + .matches = {
618 + DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
619 + DMI_MATCH(DMI_PRODUCT_NAME, "VGN-NW130D"),
620 + },
621 + },
622 + {
623 + .callback = init_nvs_nosave,
624 + .ident = "Sony Vaio VPCCW29FX",
625 + .matches = {
626 + DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
627 + DMI_MATCH(DMI_PRODUCT_NAME, "VPCCW29FX"),
628 + },
629 + },
630 + {
631 + .callback = init_nvs_nosave,
632 + .ident = "Averatec AV1020-ED2",
633 + .matches = {
634 + DMI_MATCH(DMI_SYS_VENDOR, "AVERATEC"),
635 + DMI_MATCH(DMI_PRODUCT_NAME, "1000 Series"),
636 + },
637 + },
638 + {
639 + .callback = init_old_suspend_ordering,
640 + .ident = "Asus A8N-SLI DELUXE",
641 + .matches = {
642 + DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
643 + DMI_MATCH(DMI_BOARD_NAME, "A8N-SLI DELUXE"),
644 + },
645 + },
646 + {
647 + .callback = init_old_suspend_ordering,
648 + .ident = "Asus A8N-SLI Premium",
649 + .matches = {
650 + DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
651 + DMI_MATCH(DMI_BOARD_NAME, "A8N-SLI Premium"),
652 + },
653 + },
654 + {
655 + .callback = init_nvs_nosave,
656 + .ident = "Sony Vaio VGN-SR26GN_P",
657 + .matches = {
658 + DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
659 + DMI_MATCH(DMI_PRODUCT_NAME, "VGN-SR26GN_P"),
660 + },
661 + },
662 + {
663 + .callback = init_nvs_nosave,
664 + .ident = "Sony Vaio VPCEB1S1E",
665 + .matches = {
666 + DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
667 + DMI_MATCH(DMI_PRODUCT_NAME, "VPCEB1S1E"),
668 + },
669 + },
670 + {
671 + .callback = init_nvs_nosave,
672 + .ident = "Sony Vaio VGN-FW520F",
673 + .matches = {
674 + DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
675 + DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FW520F"),
676 + },
677 + },
678 + {
679 + .callback = init_nvs_nosave,
680 + .ident = "Asus K54C",
681 + .matches = {
682 + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."),
683 + DMI_MATCH(DMI_PRODUCT_NAME, "K54C"),
684 + },
685 + },
686 + {
687 + .callback = init_nvs_nosave,
688 + .ident = "Asus K54HR",
689 + .matches = {
690 + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."),
691 + DMI_MATCH(DMI_PRODUCT_NAME, "K54HR"),
692 + },
693 + },
694 + {},
695 +};
696 +
697 +static void acpi_sleep_dmi_check(void)
698 +{
699 + dmi_check_system(acpisleep_dmi_table);
700 +}
701 +
702 /**
703 * acpi_pm_freeze - Disable the GPEs and suspend EC transactions.
704 */
705 @@ -224,6 +398,7 @@ static void acpi_pm_end(void)
706 }
707 #else /* !CONFIG_ACPI_SLEEP */
708 #define acpi_target_sleep_state ACPI_STATE_S0
709 +static inline void acpi_sleep_dmi_check(void) {}
710 #endif /* CONFIG_ACPI_SLEEP */
711
712 #ifdef CONFIG_SUSPEND
713 @@ -382,175 +557,6 @@ static const struct platform_suspend_ops acpi_suspend_ops_old = {
714 .end = acpi_pm_end,
715 .recover = acpi_pm_finish,
716 };
717 -
718 -static int __init init_old_suspend_ordering(const struct dmi_system_id *d)
719 -{
720 - old_suspend_ordering = true;
721 - return 0;
722 -}
723 -
724 -static int __init init_nvs_nosave(const struct dmi_system_id *d)
725 -{
726 - acpi_nvs_nosave();
727 - return 0;
728 -}
729 -
730 -static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
731 - {
732 - .callback = init_old_suspend_ordering,
733 - .ident = "Abit KN9 (nForce4 variant)",
734 - .matches = {
735 - DMI_MATCH(DMI_BOARD_VENDOR, "http://www.abit.com.tw/"),
736 - DMI_MATCH(DMI_BOARD_NAME, "KN9 Series(NF-CK804)"),
737 - },
738 - },
739 - {
740 - .callback = init_old_suspend_ordering,
741 - .ident = "HP xw4600 Workstation",
742 - .matches = {
743 - DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
744 - DMI_MATCH(DMI_PRODUCT_NAME, "HP xw4600 Workstation"),
745 - },
746 - },
747 - {
748 - .callback = init_old_suspend_ordering,
749 - .ident = "Asus Pundit P1-AH2 (M2N8L motherboard)",
750 - .matches = {
751 - DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTek Computer INC."),
752 - DMI_MATCH(DMI_BOARD_NAME, "M2N8L"),
753 - },
754 - },
755 - {
756 - .callback = init_old_suspend_ordering,
757 - .ident = "Panasonic CF51-2L",
758 - .matches = {
759 - DMI_MATCH(DMI_BOARD_VENDOR,
760 - "Matsushita Electric Industrial Co.,Ltd."),
761 - DMI_MATCH(DMI_BOARD_NAME, "CF51-2L"),
762 - },
763 - },
764 - {
765 - .callback = init_nvs_nosave,
766 - .ident = "Sony Vaio VGN-FW21E",
767 - .matches = {
768 - DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
769 - DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FW21E"),
770 - },
771 - },
772 - {
773 - .callback = init_nvs_nosave,
774 - .ident = "Sony Vaio VPCEB17FX",
775 - .matches = {
776 - DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
777 - DMI_MATCH(DMI_PRODUCT_NAME, "VPCEB17FX"),
778 - },
779 - },
780 - {
781 - .callback = init_nvs_nosave,
782 - .ident = "Sony Vaio VGN-SR11M",
783 - .matches = {
784 - DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
785 - DMI_MATCH(DMI_PRODUCT_NAME, "VGN-SR11M"),
786 - },
787 - },
788 - {
789 - .callback = init_nvs_nosave,
790 - .ident = "Everex StepNote Series",
791 - .matches = {
792 - DMI_MATCH(DMI_SYS_VENDOR, "Everex Systems, Inc."),
793 - DMI_MATCH(DMI_PRODUCT_NAME, "Everex StepNote Series"),
794 - },
795 - },
796 - {
797 - .callback = init_nvs_nosave,
798 - .ident = "Sony Vaio VPCEB1Z1E",
799 - .matches = {
800 - DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
801 - DMI_MATCH(DMI_PRODUCT_NAME, "VPCEB1Z1E"),
802 - },
803 - },
804 - {
805 - .callback = init_nvs_nosave,
806 - .ident = "Sony Vaio VGN-NW130D",
807 - .matches = {
808 - DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
809 - DMI_MATCH(DMI_PRODUCT_NAME, "VGN-NW130D"),
810 - },
811 - },
812 - {
813 - .callback = init_nvs_nosave,
814 - .ident = "Sony Vaio VPCCW29FX",
815 - .matches = {
816 - DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
817 - DMI_MATCH(DMI_PRODUCT_NAME, "VPCCW29FX"),
818 - },
819 - },
820 - {
821 - .callback = init_nvs_nosave,
822 - .ident = "Averatec AV1020-ED2",
823 - .matches = {
824 - DMI_MATCH(DMI_SYS_VENDOR, "AVERATEC"),
825 - DMI_MATCH(DMI_PRODUCT_NAME, "1000 Series"),
826 - },
827 - },
828 - {
829 - .callback = init_old_suspend_ordering,
830 - .ident = "Asus A8N-SLI DELUXE",
831 - .matches = {
832 - DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
833 - DMI_MATCH(DMI_BOARD_NAME, "A8N-SLI DELUXE"),
834 - },
835 - },
836 - {
837 - .callback = init_old_suspend_ordering,
838 - .ident = "Asus A8N-SLI Premium",
839 - .matches = {
840 - DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
841 - DMI_MATCH(DMI_BOARD_NAME, "A8N-SLI Premium"),
842 - },
843 - },
844 - {
845 - .callback = init_nvs_nosave,
846 - .ident = "Sony Vaio VGN-SR26GN_P",
847 - .matches = {
848 - DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
849 - DMI_MATCH(DMI_PRODUCT_NAME, "VGN-SR26GN_P"),
850 - },
851 - },
852 - {
853 - .callback = init_nvs_nosave,
854 - .ident = "Sony Vaio VPCEB1S1E",
855 - .matches = {
856 - DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
857 - DMI_MATCH(DMI_PRODUCT_NAME, "VPCEB1S1E"),
858 - },
859 - },
860 - {
861 - .callback = init_nvs_nosave,
862 - .ident = "Sony Vaio VGN-FW520F",
863 - .matches = {
864 - DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
865 - DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FW520F"),
866 - },
867 - },
868 - {
869 - .callback = init_nvs_nosave,
870 - .ident = "Asus K54C",
871 - .matches = {
872 - DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."),
873 - DMI_MATCH(DMI_PRODUCT_NAME, "K54C"),
874 - },
875 - },
876 - {
877 - .callback = init_nvs_nosave,
878 - .ident = "Asus K54HR",
879 - .matches = {
880 - DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."),
881 - DMI_MATCH(DMI_PRODUCT_NAME, "K54HR"),
882 - },
883 - },
884 - {},
885 -};
886 #endif /* CONFIG_SUSPEND */
887
888 #ifdef CONFIG_HIBERNATION
889 @@ -881,13 +887,13 @@ int __init acpi_sleep_init(void)
890 u8 type_a, type_b;
891 #ifdef CONFIG_SUSPEND
892 int i = 0;
893 -
894 - dmi_check_system(acpisleep_dmi_table);
895 #endif
896
897 if (acpi_disabled)
898 return 0;
899
900 + acpi_sleep_dmi_check();
901 +
902 sleep_states[ACPI_STATE_S0] = 1;
903 printk(KERN_INFO PREFIX "(supports S0");
904
905 diff --git a/drivers/ata/libata-acpi.c b/drivers/ata/libata-acpi.c
906 index 5b0ba3f..ef01ac0 100644
907 --- a/drivers/ata/libata-acpi.c
908 +++ b/drivers/ata/libata-acpi.c
909 @@ -76,6 +76,9 @@ acpi_handle ata_dev_acpi_handle(struct ata_device *dev)
910 acpi_integer adr;
911 struct ata_port *ap = dev->link->ap;
912
913 + if (dev->flags & ATA_DFLAG_ACPI_DISABLED)
914 + return NULL;
915 +
916 if (ap->flags & ATA_FLAG_ACPI_SATA) {
917 if (!sata_pmp_attached(ap))
918 adr = SATA_ADR(ap->port_no, NO_PORT_MULT);
919 @@ -945,6 +948,7 @@ int ata_acpi_on_devcfg(struct ata_device *dev)
920 return rc;
921 }
922
923 + dev->flags |= ATA_DFLAG_ACPI_DISABLED;
924 ata_dev_warn(dev, "ACPI: failed the second time, disabled\n");
925
926 /* We can safely continue if no _GTF command has been executed
927 diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c
928 index 9851093..1853a45 100644
929 --- a/drivers/atm/solos-pci.c
930 +++ b/drivers/atm/solos-pci.c
931 @@ -967,10 +967,11 @@ static uint32_t fpga_tx(struct solos_card *card)
932 for (port = 0; tx_pending; tx_pending >>= 1, port++) {
933 if (tx_pending & 1) {
934 struct sk_buff *oldskb = card->tx_skb[port];
935 - if (oldskb)
936 + if (oldskb) {
937 pci_unmap_single(card->dev, SKB_CB(oldskb)->dma_addr,
938 oldskb->len, PCI_DMA_TODEVICE);
939 -
940 + card->tx_skb[port] = NULL;
941 + }
942 spin_lock(&card->tx_queue_lock);
943 skb = skb_dequeue(&card->tx_queue[port]);
944 if (!skb)
945 diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
946 index 8945f4e..be5f7aa 100644
947 --- a/drivers/base/firmware_class.c
948 +++ b/drivers/base/firmware_class.c
949 @@ -143,7 +143,7 @@ struct fw_cache_entry {
950 };
951
952 struct firmware_priv {
953 - struct timer_list timeout;
954 + struct delayed_work timeout_work;
955 bool nowait;
956 struct device dev;
957 struct firmware_buf *buf;
958 @@ -246,7 +246,6 @@ static void __fw_free_buf(struct kref *ref)
959 __func__, buf->fw_id, buf, buf->data,
960 (unsigned int)buf->size);
961
962 - spin_lock(&fwc->lock);
963 list_del(&buf->list);
964 spin_unlock(&fwc->lock);
965
966 @@ -263,7 +262,10 @@ static void __fw_free_buf(struct kref *ref)
967
968 static void fw_free_buf(struct firmware_buf *buf)
969 {
970 - kref_put(&buf->ref, __fw_free_buf);
971 + struct firmware_cache *fwc = buf->fwc;
972 + spin_lock(&fwc->lock);
973 + if (!kref_put(&buf->ref, __fw_free_buf))
974 + spin_unlock(&fwc->lock);
975 }
976
977 /* direct firmware loading support */
978 @@ -667,11 +669,18 @@ static struct bin_attribute firmware_attr_data = {
979 .write = firmware_data_write,
980 };
981
982 -static void firmware_class_timeout(u_long data)
983 +static void firmware_class_timeout_work(struct work_struct *work)
984 {
985 - struct firmware_priv *fw_priv = (struct firmware_priv *) data;
986 + struct firmware_priv *fw_priv = container_of(work,
987 + struct firmware_priv, timeout_work.work);
988
989 + mutex_lock(&fw_lock);
990 + if (test_bit(FW_STATUS_DONE, &(fw_priv->buf->status))) {
991 + mutex_unlock(&fw_lock);
992 + return;
993 + }
994 fw_load_abort(fw_priv);
995 + mutex_unlock(&fw_lock);
996 }
997
998 static struct firmware_priv *
999 @@ -690,8 +699,8 @@ fw_create_instance(struct firmware *firmware, const char *fw_name,
1000
1001 fw_priv->nowait = nowait;
1002 fw_priv->fw = firmware;
1003 - setup_timer(&fw_priv->timeout,
1004 - firmware_class_timeout, (u_long) fw_priv);
1005 + INIT_DELAYED_WORK(&fw_priv->timeout_work,
1006 + firmware_class_timeout_work);
1007
1008 f_dev = &fw_priv->dev;
1009
1010 @@ -858,7 +867,9 @@ static int _request_firmware_load(struct firmware_priv *fw_priv, bool uevent,
1011 dev_dbg(f_dev->parent, "firmware: direct-loading"
1012 " firmware %s\n", buf->fw_id);
1013
1014 + mutex_lock(&fw_lock);
1015 set_bit(FW_STATUS_DONE, &buf->status);
1016 + mutex_unlock(&fw_lock);
1017 complete_all(&buf->completion);
1018 direct_load = 1;
1019 goto handle_fw;
1020 @@ -894,15 +905,14 @@ static int _request_firmware_load(struct firmware_priv *fw_priv, bool uevent,
1021 dev_set_uevent_suppress(f_dev, false);
1022 dev_dbg(f_dev, "firmware: requesting %s\n", buf->fw_id);
1023 if (timeout != MAX_SCHEDULE_TIMEOUT)
1024 - mod_timer(&fw_priv->timeout,
1025 - round_jiffies_up(jiffies + timeout));
1026 + schedule_delayed_work(&fw_priv->timeout_work, timeout);
1027
1028 kobject_uevent(&fw_priv->dev.kobj, KOBJ_ADD);
1029 }
1030
1031 wait_for_completion(&buf->completion);
1032
1033 - del_timer_sync(&fw_priv->timeout);
1034 + cancel_delayed_work_sync(&fw_priv->timeout_work);
1035
1036 handle_fw:
1037 mutex_lock(&fw_lock);
1038 diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
1039 index ee82f2f..a1d4ede 100644
1040 --- a/drivers/bluetooth/btusb.c
1041 +++ b/drivers/bluetooth/btusb.c
1042 @@ -96,6 +96,7 @@ static struct usb_device_id btusb_table[] = {
1043 { USB_DEVICE(0x0c10, 0x0000) },
1044
1045 /* Broadcom BCM20702A0 */
1046 + { USB_DEVICE(0x0b05, 0x17b5) },
1047 { USB_DEVICE(0x04ca, 0x2003) },
1048 { USB_DEVICE(0x0489, 0xe042) },
1049 { USB_DEVICE(0x413c, 0x8197) },
1050 diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
1051 index f4109fd..52146db 100644
1052 --- a/drivers/hid/hid-core.c
1053 +++ b/drivers/hid/hid-core.c
1054 @@ -1538,6 +1538,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
1055 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) },
1056 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) },
1057 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) },
1058 + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ANSI) },
1059 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ISO) },
1060 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
1061 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
1062 diff --git a/drivers/input/joystick/walkera0701.c b/drivers/input/joystick/walkera0701.c
1063 index 4dfa1ee..f8f892b 100644
1064 --- a/drivers/input/joystick/walkera0701.c
1065 +++ b/drivers/input/joystick/walkera0701.c
1066 @@ -196,6 +196,7 @@ static void walkera0701_close(struct input_dev *dev)
1067 struct walkera_dev *w = input_get_drvdata(dev);
1068
1069 parport_disable_irq(w->parport);
1070 + hrtimer_cancel(&w->timer);
1071 }
1072
1073 static int walkera0701_connect(struct walkera_dev *w, int parport)
1074 @@ -224,6 +225,9 @@ static int walkera0701_connect(struct walkera_dev *w, int parport)
1075 if (parport_claim(w->pardevice))
1076 goto init_err1;
1077
1078 + hrtimer_init(&w->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
1079 + w->timer.function = timer_handler;
1080 +
1081 w->input_dev = input_allocate_device();
1082 if (!w->input_dev)
1083 goto init_err2;
1084 @@ -254,8 +258,6 @@ static int walkera0701_connect(struct walkera_dev *w, int parport)
1085 if (err)
1086 goto init_err3;
1087
1088 - hrtimer_init(&w->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
1089 - w->timer.function = timer_handler;
1090 return 0;
1091
1092 init_err3:
1093 @@ -271,7 +273,6 @@ static int walkera0701_connect(struct walkera_dev *w, int parport)
1094
1095 static void walkera0701_disconnect(struct walkera_dev *w)
1096 {
1097 - hrtimer_cancel(&w->timer);
1098 input_unregister_device(w->input_dev);
1099 parport_release(w->pardevice);
1100 parport_unregister_device(w->pardevice);
1101 diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
1102 index 6a68041..59347d0 100644
1103 --- a/drivers/input/keyboard/gpio_keys.c
1104 +++ b/drivers/input/keyboard/gpio_keys.c
1105 @@ -587,6 +587,7 @@ gpio_keys_get_devtree_pdata(struct device *dev)
1106
1107 i = 0;
1108 for_each_child_of_node(node, pp) {
1109 + int gpio;
1110 enum of_gpio_flags flags;
1111
1112 if (!of_find_property(pp, "gpios", NULL)) {
1113 @@ -595,9 +596,19 @@ gpio_keys_get_devtree_pdata(struct device *dev)
1114 continue;
1115 }
1116
1117 + gpio = of_get_gpio_flags(pp, 0, &flags);
1118 + if (gpio < 0) {
1119 + error = gpio;
1120 + if (error != -EPROBE_DEFER)
1121 + dev_err(dev,
1122 + "Failed to get gpio flags, error: %d\n",
1123 + error);
1124 + goto err_free_pdata;
1125 + }
1126 +
1127 button = &pdata->buttons[i++];
1128
1129 - button->gpio = of_get_gpio_flags(pp, 0, &flags);
1130 + button->gpio = gpio;
1131 button->active_low = flags & OF_GPIO_ACTIVE_LOW;
1132
1133 if (of_property_read_u32(pp, "linux,code", &button->code)) {
1134 diff --git a/drivers/input/keyboard/gpio_keys_polled.c b/drivers/input/keyboard/gpio_keys_polled.c
1135 index f2142de..8490930 100644
1136 --- a/drivers/input/keyboard/gpio_keys_polled.c
1137 +++ b/drivers/input/keyboard/gpio_keys_polled.c
1138 @@ -136,6 +136,7 @@ gpio_keys_polled_get_devtree_pdata(struct device *dev)
1139
1140 i = 0;
1141 for_each_child_of_node(node, pp) {
1142 + int gpio;
1143 enum of_gpio_flags flags;
1144
1145 if (!of_find_property(pp, "gpios", NULL)) {
1146 @@ -144,9 +145,19 @@ gpio_keys_polled_get_devtree_pdata(struct device *dev)
1147 continue;
1148 }
1149
1150 + gpio = of_get_gpio_flags(pp, 0, &flags);
1151 + if (gpio < 0) {
1152 + error = gpio;
1153 + if (error != -EPROBE_DEFER)
1154 + dev_err(dev,
1155 + "Failed to get gpio flags, error: %d\n",
1156 + error);
1157 + goto err_free_pdata;
1158 + }
1159 +
1160 button = &pdata->buttons[i++];
1161
1162 - button->gpio = of_get_gpio_flags(pp, 0, &flags);
1163 + button->gpio = gpio;
1164 button->active_low = flags & OF_GPIO_ACTIVE_LOW;
1165
1166 if (of_property_read_u32(pp, "linux,code", &button->code)) {
1167 diff --git a/drivers/input/mouse/sentelic.c b/drivers/input/mouse/sentelic.c
1168 index e582922..cc7e0d4 100644
1169 --- a/drivers/input/mouse/sentelic.c
1170 +++ b/drivers/input/mouse/sentelic.c
1171 @@ -791,7 +791,7 @@ static psmouse_ret_t fsp_process_byte(struct psmouse *psmouse)
1172 fsp_set_slot(dev, 0, fgrs > 0, abs_x, abs_y);
1173 fsp_set_slot(dev, 1, false, 0, 0);
1174 }
1175 - if (fgrs > 0) {
1176 + if (fgrs == 1 || (fgrs == 2 && !(packet[0] & FSP_PB0_MFMC_FGR2))) {
1177 input_report_abs(dev, ABS_X, abs_x);
1178 input_report_abs(dev, ABS_Y, abs_y);
1179 }
1180 diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
1181 index d6cc77a..5f306f7 100644
1182 --- a/drivers/input/serio/i8042-x86ia64io.h
1183 +++ b/drivers/input/serio/i8042-x86ia64io.h
1184 @@ -921,6 +921,7 @@ static int __init i8042_platform_init(void)
1185 int retval;
1186
1187 #ifdef CONFIG_X86
1188 + u8 a20_on = 0xdf;
1189 /* Just return if pre-detection shows no i8042 controller exist */
1190 if (!x86_platform.i8042_detect())
1191 return -ENODEV;
1192 @@ -960,6 +961,14 @@ static int __init i8042_platform_init(void)
1193
1194 if (dmi_check_system(i8042_dmi_dritek_table))
1195 i8042_dritek = true;
1196 +
1197 + /*
1198 + * A20 was already enabled during early kernel init. But some buggy
1199 + * BIOSes (in MSI Laptops) require A20 to be enabled using 8042 to
1200 + * resume from S3. So we do it here and hope that nothing breaks.
1201 + */
1202 + i8042_command(&a20_on, 0x10d1);
1203 + i8042_command(NULL, 0x00ff); /* Null command for SMM firmware */
1204 #endif /* CONFIG_X86 */
1205
1206 return retval;
1207 diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
1208 index 0a67031..c2bfe92 100644
1209 --- a/drivers/input/tablet/wacom_wac.c
1210 +++ b/drivers/input/tablet/wacom_wac.c
1211 @@ -2034,7 +2034,8 @@ static const struct wacom_features wacom_features_0xD1 =
1212 .touch_max = 2 };
1213 static const struct wacom_features wacom_features_0xD2 =
1214 { "Wacom Bamboo Craft", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023,
1215 - 31, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1216 + 31, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES,
1217 + .touch_max = 2 };
1218 static const struct wacom_features wacom_features_0xD3 =
1219 { "Wacom Bamboo 2FG 6x8", WACOM_PKGLEN_BBFUN, 21648, 13700, 1023,
1220 31, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES,
1221 diff --git a/drivers/misc/sgi-xp/xpc_main.c b/drivers/misc/sgi-xp/xpc_main.c
1222 index 8d082b4..d971817 100644
1223 --- a/drivers/misc/sgi-xp/xpc_main.c
1224 +++ b/drivers/misc/sgi-xp/xpc_main.c
1225 @@ -53,6 +53,10 @@
1226 #include <linux/kthread.h>
1227 #include "xpc.h"
1228
1229 +#ifdef CONFIG_X86_64
1230 +#include <asm/traps.h>
1231 +#endif
1232 +
1233 /* define two XPC debug device structures to be used with dev_dbg() et al */
1234
1235 struct device_driver xpc_dbg_name = {
1236 @@ -1079,6 +1083,9 @@ xpc_system_reboot(struct notifier_block *nb, unsigned long event, void *unused)
1237 return NOTIFY_DONE;
1238 }
1239
1240 +/* Used to only allow one cpu to complete disconnect */
1241 +static unsigned int xpc_die_disconnecting;
1242 +
1243 /*
1244 * Notify other partitions to deactivate from us by first disengaging from all
1245 * references to our memory.
1246 @@ -1092,6 +1099,9 @@ xpc_die_deactivate(void)
1247 long keep_waiting;
1248 long wait_to_print;
1249
1250 + if (cmpxchg(&xpc_die_disconnecting, 0, 1))
1251 + return;
1252 +
1253 /* keep xpc_hb_checker thread from doing anything (just in case) */
1254 xpc_exiting = 1;
1255
1256 @@ -1159,7 +1169,7 @@ xpc_die_deactivate(void)
1257 * about the lack of a heartbeat.
1258 */
1259 static int
1260 -xpc_system_die(struct notifier_block *nb, unsigned long event, void *unused)
1261 +xpc_system_die(struct notifier_block *nb, unsigned long event, void *_die_args)
1262 {
1263 #ifdef CONFIG_IA64 /* !!! temporary kludge */
1264 switch (event) {
1265 @@ -1191,7 +1201,27 @@ xpc_system_die(struct notifier_block *nb, unsigned long event, void *unused)
1266 break;
1267 }
1268 #else
1269 - xpc_die_deactivate();
1270 + struct die_args *die_args = _die_args;
1271 +
1272 + switch (event) {
1273 + case DIE_TRAP:
1274 + if (die_args->trapnr == X86_TRAP_DF)
1275 + xpc_die_deactivate();
1276 +
1277 + if (((die_args->trapnr == X86_TRAP_MF) ||
1278 + (die_args->trapnr == X86_TRAP_XF)) &&
1279 + !user_mode_vm(die_args->regs))
1280 + xpc_die_deactivate();
1281 +
1282 + break;
1283 + case DIE_INT3:
1284 + case DIE_DEBUG:
1285 + break;
1286 + case DIE_OOPS:
1287 + case DIE_GPF:
1288 + default:
1289 + xpc_die_deactivate();
1290 + }
1291 #endif
1292
1293 return NOTIFY_DONE;
1294 diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
1295 index 963e2cc..8233e5e 100644
1296 --- a/drivers/net/can/dev.c
1297 +++ b/drivers/net/can/dev.c
1298 @@ -609,8 +609,7 @@ void close_candev(struct net_device *dev)
1299 {
1300 struct can_priv *priv = netdev_priv(dev);
1301
1302 - if (del_timer_sync(&priv->restart_timer))
1303 - dev_put(dev);
1304 + del_timer_sync(&priv->restart_timer);
1305 can_flush_echo_skb(dev);
1306 }
1307 EXPORT_SYMBOL_GPL(close_candev);
1308 diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c
1309 index d012982..c4c593d 100644
1310 --- a/drivers/net/usb/cdc_ether.c
1311 +++ b/drivers/net/usb/cdc_ether.c
1312 @@ -487,6 +487,7 @@ static const struct driver_info wwan_info = {
1313 #define HUAWEI_VENDOR_ID 0x12D1
1314 #define NOVATEL_VENDOR_ID 0x1410
1315 #define ZTE_VENDOR_ID 0x19D2
1316 +#define DELL_VENDOR_ID 0x413C
1317
1318 static const struct usb_device_id products [] = {
1319 /*
1320 @@ -618,6 +619,20 @@ static const struct usb_device_id products [] = {
1321 .driver_info = 0,
1322 },
1323
1324 +/* Dell Wireless 5800 (Novatel E362) - handled by qmi_wwan */
1325 +{
1326 + USB_DEVICE_AND_INTERFACE_INFO(DELL_VENDOR_ID, 0x8195, USB_CLASS_COMM,
1327 + USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE),
1328 + .driver_info = 0,
1329 +},
1330 +
1331 +/* Dell Wireless 5800 (Novatel E362) - handled by qmi_wwan */
1332 +{
1333 + USB_DEVICE_AND_INTERFACE_INFO(DELL_VENDOR_ID, 0x8196, USB_CLASS_COMM,
1334 + USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE),
1335 + .driver_info = 0,
1336 +},
1337 +
1338 /*
1339 * WHITELIST!!!
1340 *
1341 diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
1342 index 1ea91f4..9b950f5 100644
1343 --- a/drivers/net/usb/qmi_wwan.c
1344 +++ b/drivers/net/usb/qmi_wwan.c
1345 @@ -383,6 +383,20 @@ static const struct usb_device_id products[] = {
1346 USB_CDC_PROTO_NONE),
1347 .driver_info = (unsigned long)&qmi_wwan_info,
1348 },
1349 + { /* Dell Wireless 5800 (Novatel E362) */
1350 + USB_DEVICE_AND_INTERFACE_INFO(0x413C, 0x8195,
1351 + USB_CLASS_COMM,
1352 + USB_CDC_SUBCLASS_ETHERNET,
1353 + USB_CDC_PROTO_NONE),
1354 + .driver_info = (unsigned long)&qmi_wwan_info,
1355 + },
1356 + { /* Dell Wireless 5800 V2 (Novatel E362) */
1357 + USB_DEVICE_AND_INTERFACE_INFO(0x413C, 0x8196,
1358 + USB_CLASS_COMM,
1359 + USB_CDC_SUBCLASS_ETHERNET,
1360 + USB_CDC_PROTO_NONE),
1361 + .driver_info = (unsigned long)&qmi_wwan_info,
1362 + },
1363
1364 /* 3. Combined interface devices matching on interface number */
1365 {QMI_FIXED_INTF(0x12d1, 0x140c, 1)}, /* Huawei E173 */
1366 diff --git a/drivers/net/wireless/b43/dma.c b/drivers/net/wireless/b43/dma.c
1367 index 777cd74..38bc5a7 100644
1368 --- a/drivers/net/wireless/b43/dma.c
1369 +++ b/drivers/net/wireless/b43/dma.c
1370 @@ -409,7 +409,10 @@ static inline
1371 struct b43_dmadesc_meta *meta)
1372 {
1373 if (meta->skb) {
1374 - dev_kfree_skb_any(meta->skb);
1375 + if (ring->tx)
1376 + ieee80211_free_txskb(ring->dev->wl->hw, meta->skb);
1377 + else
1378 + dev_kfree_skb_any(meta->skb);
1379 meta->skb = NULL;
1380 }
1381 }
1382 @@ -1454,7 +1457,7 @@ int b43_dma_tx(struct b43_wldev *dev, struct sk_buff *skb)
1383 if (unlikely(err == -ENOKEY)) {
1384 /* Drop this packet, as we don't have the encryption key
1385 * anymore and must not transmit it unencrypted. */
1386 - dev_kfree_skb_any(skb);
1387 + ieee80211_free_txskb(dev->wl->hw, skb);
1388 err = 0;
1389 goto out;
1390 }
1391 diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
1392 index c5a99c8..2911e20 100644
1393 --- a/drivers/net/wireless/b43/main.c
1394 +++ b/drivers/net/wireless/b43/main.c
1395 @@ -3397,7 +3397,7 @@ static void b43_tx_work(struct work_struct *work)
1396 break;
1397 }
1398 if (unlikely(err))
1399 - dev_kfree_skb(skb); /* Drop it */
1400 + ieee80211_free_txskb(wl->hw, skb);
1401 err = 0;
1402 }
1403
1404 @@ -3419,7 +3419,7 @@ static void b43_op_tx(struct ieee80211_hw *hw,
1405
1406 if (unlikely(skb->len < 2 + 2 + 6)) {
1407 /* Too short, this can't be a valid frame. */
1408 - dev_kfree_skb_any(skb);
1409 + ieee80211_free_txskb(hw, skb);
1410 return;
1411 }
1412 B43_WARN_ON(skb_shinfo(skb)->nr_frags);
1413 @@ -4229,8 +4229,12 @@ redo:
1414
1415 /* Drain all TX queues. */
1416 for (queue_num = 0; queue_num < B43_QOS_QUEUE_NUM; queue_num++) {
1417 - while (skb_queue_len(&wl->tx_queue[queue_num]))
1418 - dev_kfree_skb(skb_dequeue(&wl->tx_queue[queue_num]));
1419 + while (skb_queue_len(&wl->tx_queue[queue_num])) {
1420 + struct sk_buff *skb;
1421 +
1422 + skb = skb_dequeue(&wl->tx_queue[queue_num]);
1423 + ieee80211_free_txskb(wl->hw, skb);
1424 + }
1425 }
1426
1427 b43_mac_suspend(dev);
1428 diff --git a/drivers/net/wireless/b43/pio.c b/drivers/net/wireless/b43/pio.c
1429 index 3533ab8..a73ff8c 100644
1430 --- a/drivers/net/wireless/b43/pio.c
1431 +++ b/drivers/net/wireless/b43/pio.c
1432 @@ -196,7 +196,7 @@ static void b43_pio_cancel_tx_packets(struct b43_pio_txqueue *q)
1433 for (i = 0; i < ARRAY_SIZE(q->packets); i++) {
1434 pack = &(q->packets[i]);
1435 if (pack->skb) {
1436 - dev_kfree_skb_any(pack->skb);
1437 + ieee80211_free_txskb(q->dev->wl->hw, pack->skb);
1438 pack->skb = NULL;
1439 }
1440 }
1441 @@ -552,7 +552,7 @@ int b43_pio_tx(struct b43_wldev *dev, struct sk_buff *skb)
1442 if (unlikely(err == -ENOKEY)) {
1443 /* Drop this packet, as we don't have the encryption key
1444 * anymore and must not transmit it unencrypted. */
1445 - dev_kfree_skb_any(skb);
1446 + ieee80211_free_txskb(dev->wl->hw, skb);
1447 err = 0;
1448 goto out;
1449 }
1450 diff --git a/drivers/net/wireless/b43legacy/b43legacy.h b/drivers/net/wireless/b43legacy/b43legacy.h
1451 index a29da67..482476f 100644
1452 --- a/drivers/net/wireless/b43legacy/b43legacy.h
1453 +++ b/drivers/net/wireless/b43legacy/b43legacy.h
1454 @@ -13,6 +13,7 @@
1455
1456 #include <linux/ssb/ssb.h>
1457 #include <linux/ssb/ssb_driver_chipcommon.h>
1458 +#include <linux/completion.h>
1459
1460 #include <net/mac80211.h>
1461
1462 @@ -733,6 +734,10 @@ struct b43legacy_wldev {
1463
1464 /* Firmware data */
1465 struct b43legacy_firmware fw;
1466 + const struct firmware *fwp; /* needed to pass fw pointer */
1467 +
1468 + /* completion struct for firmware loading */
1469 + struct completion fw_load_complete;
1470
1471 /* Devicelist in struct b43legacy_wl (all 802.11 cores) */
1472 struct list_head list;
1473 diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c
1474 index 18e208e..8c3f70e 100644
1475 --- a/drivers/net/wireless/b43legacy/main.c
1476 +++ b/drivers/net/wireless/b43legacy/main.c
1477 @@ -1513,9 +1513,17 @@ static void b43legacy_print_fw_helptext(struct b43legacy_wl *wl)
1478 "and download the correct firmware (version 3).\n");
1479 }
1480
1481 +static void b43legacy_fw_cb(const struct firmware *firmware, void *context)
1482 +{
1483 + struct b43legacy_wldev *dev = context;
1484 +
1485 + dev->fwp = firmware;
1486 + complete(&dev->fw_load_complete);
1487 +}
1488 +
1489 static int do_request_fw(struct b43legacy_wldev *dev,
1490 const char *name,
1491 - const struct firmware **fw)
1492 + const struct firmware **fw, bool async)
1493 {
1494 char path[sizeof(modparam_fwpostfix) + 32];
1495 struct b43legacy_fw_header *hdr;
1496 @@ -1528,7 +1536,24 @@ static int do_request_fw(struct b43legacy_wldev *dev,
1497 snprintf(path, ARRAY_SIZE(path),
1498 "b43legacy%s/%s.fw",
1499 modparam_fwpostfix, name);
1500 - err = request_firmware(fw, path, dev->dev->dev);
1501 + b43legacyinfo(dev->wl, "Loading firmware %s\n", path);
1502 + if (async) {
1503 + init_completion(&dev->fw_load_complete);
1504 + err = request_firmware_nowait(THIS_MODULE, 1, path,
1505 + dev->dev->dev, GFP_KERNEL,
1506 + dev, b43legacy_fw_cb);
1507 + if (err) {
1508 + b43legacyerr(dev->wl, "Unable to load firmware\n");
1509 + return err;
1510 + }
1511 + /* stall here until fw ready */
1512 + wait_for_completion(&dev->fw_load_complete);
1513 + if (!dev->fwp)
1514 + err = -EINVAL;
1515 + *fw = dev->fwp;
1516 + } else {
1517 + err = request_firmware(fw, path, dev->dev->dev);
1518 + }
1519 if (err) {
1520 b43legacyerr(dev->wl, "Firmware file \"%s\" not found "
1521 "or load failed.\n", path);
1522 @@ -1580,7 +1605,7 @@ static void b43legacy_request_firmware(struct work_struct *work)
1523 filename = "ucode4";
1524 else
1525 filename = "ucode5";
1526 - err = do_request_fw(dev, filename, &fw->ucode);
1527 + err = do_request_fw(dev, filename, &fw->ucode, true);
1528 if (err)
1529 goto err_load;
1530 }
1531 @@ -1589,7 +1614,7 @@ static void b43legacy_request_firmware(struct work_struct *work)
1532 filename = "pcm4";
1533 else
1534 filename = "pcm5";
1535 - err = do_request_fw(dev, filename, &fw->pcm);
1536 + err = do_request_fw(dev, filename, &fw->pcm, false);
1537 if (err)
1538 goto err_load;
1539 }
1540 @@ -1607,7 +1632,7 @@ static void b43legacy_request_firmware(struct work_struct *work)
1541 default:
1542 goto err_no_initvals;
1543 }
1544 - err = do_request_fw(dev, filename, &fw->initvals);
1545 + err = do_request_fw(dev, filename, &fw->initvals, false);
1546 if (err)
1547 goto err_load;
1548 }
1549 @@ -1627,7 +1652,7 @@ static void b43legacy_request_firmware(struct work_struct *work)
1550 default:
1551 goto err_no_initvals;
1552 }
1553 - err = do_request_fw(dev, filename, &fw->initvals_band);
1554 + err = do_request_fw(dev, filename, &fw->initvals_band, false);
1555 if (err)
1556 goto err_load;
1557 }
1558 diff --git a/drivers/net/wireless/p54/p54usb.c b/drivers/net/wireless/p54/p54usb.c
1559 index effb044..4191294 100644
1560 --- a/drivers/net/wireless/p54/p54usb.c
1561 +++ b/drivers/net/wireless/p54/p54usb.c
1562 @@ -47,6 +47,7 @@ static struct usb_device_id p54u_table[] = {
1563 {USB_DEVICE(0x0411, 0x0050)}, /* Buffalo WLI2-USB2-G54 */
1564 {USB_DEVICE(0x045e, 0x00c2)}, /* Microsoft MN-710 */
1565 {USB_DEVICE(0x0506, 0x0a11)}, /* 3COM 3CRWE254G72 */
1566 + {USB_DEVICE(0x0675, 0x0530)}, /* DrayTek Vigor 530 */
1567 {USB_DEVICE(0x06b9, 0x0120)}, /* Thomson SpeedTouch 120g */
1568 {USB_DEVICE(0x0707, 0xee06)}, /* SMC 2862W-G */
1569 {USB_DEVICE(0x07aa, 0x001c)}, /* Corega CG-WLUSB2GT */
1570 @@ -82,6 +83,8 @@ static struct usb_device_id p54u_table[] = {
1571 {USB_DEVICE(0x06a9, 0x000e)}, /* Westell 802.11g USB (A90-211WG-01) */
1572 {USB_DEVICE(0x06b9, 0x0121)}, /* Thomson SpeedTouch 121g */
1573 {USB_DEVICE(0x0707, 0xee13)}, /* SMC 2862W-G version 2 */
1574 + {USB_DEVICE(0x0803, 0x4310)}, /* Zoom 4410a */
1575 + {USB_DEVICE(0x083a, 0x4503)}, /* T-Com Sinus 154 data II */
1576 {USB_DEVICE(0x083a, 0x4521)}, /* Siemens Gigaset USB Adapter 54 version 2 */
1577 {USB_DEVICE(0x083a, 0xc501)}, /* Zoom Wireless-G 4410 */
1578 {USB_DEVICE(0x083a, 0xf503)}, /* Accton FD7050E ver 1010ec */
1579 @@ -101,6 +104,7 @@ static struct usb_device_id p54u_table[] = {
1580 {USB_DEVICE(0x13B1, 0x000C)}, /* Linksys WUSB54AG */
1581 {USB_DEVICE(0x1413, 0x5400)}, /* Telsey 802.11g USB2.0 Adapter */
1582 {USB_DEVICE(0x1435, 0x0427)}, /* Inventel UR054G */
1583 + /* {USB_DEVICE(0x15a9, 0x0002)}, * Also SparkLAN WL-682 with 3887 */
1584 {USB_DEVICE(0x1668, 0x1050)}, /* Actiontec 802UIG-1 */
1585 {USB_DEVICE(0x1740, 0x1000)}, /* Senao NUB-350 */
1586 {USB_DEVICE(0x2001, 0x3704)}, /* DLink DWL-G122 rev A2 */
1587 diff --git a/drivers/net/wireless/rtlwifi/usb.c b/drivers/net/wireless/rtlwifi/usb.c
1588 index e3ea4b3..46ccbf7 100644
1589 --- a/drivers/net/wireless/rtlwifi/usb.c
1590 +++ b/drivers/net/wireless/rtlwifi/usb.c
1591 @@ -210,17 +210,16 @@ static void _usb_writeN_sync(struct rtl_priv *rtlpriv, u32 addr, void *data,
1592 u16 index = REALTEK_USB_VENQT_CMD_IDX;
1593 int pipe = usb_sndctrlpipe(udev, 0); /* write_out */
1594 u8 *buffer;
1595 - dma_addr_t dma_addr;
1596
1597 - wvalue = (u16)(addr&0x0000ffff);
1598 - buffer = usb_alloc_coherent(udev, (size_t)len, GFP_ATOMIC, &dma_addr);
1599 + wvalue = (u16)(addr & 0x0000ffff);
1600 + buffer = kmalloc(len, GFP_ATOMIC);
1601 if (!buffer)
1602 return;
1603 memcpy(buffer, data, len);
1604 usb_control_msg(udev, pipe, request, reqtype, wvalue,
1605 index, buffer, len, 50);
1606
1607 - usb_free_coherent(udev, (size_t)len, buffer, dma_addr);
1608 + kfree(buffer);
1609 }
1610
1611 static void _rtl_usb_io_handler_init(struct device *dev,
1612 diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
1613 index 6c94fc9..6c66c5b 100644
1614 --- a/drivers/pci/pci-driver.c
1615 +++ b/drivers/pci/pci-driver.c
1616 @@ -256,31 +256,26 @@ struct drv_dev_and_id {
1617 static long local_pci_probe(void *_ddi)
1618 {
1619 struct drv_dev_and_id *ddi = _ddi;
1620 - struct device *dev = &ddi->dev->dev;
1621 - struct device *parent = dev->parent;
1622 + struct pci_dev *pci_dev = ddi->dev;
1623 + struct pci_driver *pci_drv = ddi->drv;
1624 + struct device *dev = &pci_dev->dev;
1625 int rc;
1626
1627 - /* The parent bridge must be in active state when probing */
1628 - if (parent)
1629 - pm_runtime_get_sync(parent);
1630 - /* Unbound PCI devices are always set to disabled and suspended.
1631 - * During probe, the device is set to enabled and active and the
1632 - * usage count is incremented. If the driver supports runtime PM,
1633 - * it should call pm_runtime_put_noidle() in its probe routine and
1634 - * pm_runtime_get_noresume() in its remove routine.
1635 + /*
1636 + * Unbound PCI devices are always put in D0, regardless of
1637 + * runtime PM status. During probe, the device is set to
1638 + * active and the usage count is incremented. If the driver
1639 + * supports runtime PM, it should call pm_runtime_put_noidle()
1640 + * in its probe routine and pm_runtime_get_noresume() in its
1641 + * remove routine.
1642 */
1643 - pm_runtime_get_noresume(dev);
1644 - pm_runtime_set_active(dev);
1645 - pm_runtime_enable(dev);
1646 -
1647 - rc = ddi->drv->probe(ddi->dev, ddi->id);
1648 + pm_runtime_get_sync(dev);
1649 + pci_dev->driver = pci_drv;
1650 + rc = pci_drv->probe(pci_dev, ddi->id);
1651 if (rc) {
1652 - pm_runtime_disable(dev);
1653 - pm_runtime_set_suspended(dev);
1654 - pm_runtime_put_noidle(dev);
1655 + pci_dev->driver = NULL;
1656 + pm_runtime_put_sync(dev);
1657 }
1658 - if (parent)
1659 - pm_runtime_put(parent);
1660 return rc;
1661 }
1662
1663 @@ -330,10 +325,8 @@ __pci_device_probe(struct pci_driver *drv, struct pci_dev *pci_dev)
1664 id = pci_match_device(drv, pci_dev);
1665 if (id)
1666 error = pci_call_probe(drv, pci_dev, id);
1667 - if (error >= 0) {
1668 - pci_dev->driver = drv;
1669 + if (error >= 0)
1670 error = 0;
1671 - }
1672 }
1673 return error;
1674 }
1675 @@ -369,9 +362,7 @@ static int pci_device_remove(struct device * dev)
1676 }
1677
1678 /* Undo the runtime PM settings in local_pci_probe() */
1679 - pm_runtime_disable(dev);
1680 - pm_runtime_set_suspended(dev);
1681 - pm_runtime_put_noidle(dev);
1682 + pm_runtime_put_sync(dev);
1683
1684 /*
1685 * If the device is still on, set the power state as "unknown",
1686 @@ -994,6 +985,13 @@ static int pci_pm_runtime_suspend(struct device *dev)
1687 pci_power_t prev = pci_dev->current_state;
1688 int error;
1689
1690 + /*
1691 + * If pci_dev->driver is not set (unbound), the device should
1692 + * always remain in D0 regardless of the runtime PM status
1693 + */
1694 + if (!pci_dev->driver)
1695 + return 0;
1696 +
1697 if (!pm || !pm->runtime_suspend)
1698 return -ENOSYS;
1699
1700 @@ -1029,6 +1027,13 @@ static int pci_pm_runtime_resume(struct device *dev)
1701 struct pci_dev *pci_dev = to_pci_dev(dev);
1702 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1703
1704 + /*
1705 + * If pci_dev->driver is not set (unbound), the device should
1706 + * always remain in D0 regardless of the runtime PM status
1707 + */
1708 + if (!pci_dev->driver)
1709 + return 0;
1710 +
1711 if (!pm || !pm->runtime_resume)
1712 return -ENOSYS;
1713
1714 @@ -1046,8 +1051,16 @@ static int pci_pm_runtime_resume(struct device *dev)
1715
1716 static int pci_pm_runtime_idle(struct device *dev)
1717 {
1718 + struct pci_dev *pci_dev = to_pci_dev(dev);
1719 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1720
1721 + /*
1722 + * If pci_dev->driver is not set (unbound), the device should
1723 + * always remain in D0 regardless of the runtime PM status
1724 + */
1725 + if (!pci_dev->driver)
1726 + goto out;
1727 +
1728 if (!pm)
1729 return -ENOSYS;
1730
1731 @@ -1057,8 +1070,8 @@ static int pci_pm_runtime_idle(struct device *dev)
1732 return ret;
1733 }
1734
1735 +out:
1736 pm_runtime_suspend(dev);
1737 -
1738 return 0;
1739 }
1740
1741 diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
1742 index aabf647..8e06adb 100644
1743 --- a/drivers/pci/pci.c
1744 +++ b/drivers/pci/pci.c
1745 @@ -1900,6 +1900,8 @@ void pci_pm_init(struct pci_dev *dev)
1746 u16 pmc;
1747
1748 pm_runtime_forbid(&dev->dev);
1749 + pm_runtime_set_active(&dev->dev);
1750 + pm_runtime_enable(&dev->dev);
1751 device_enable_async_suspend(&dev->dev);
1752 dev->wakeup_prepared = false;
1753
1754 diff --git a/drivers/pci/pcie/portdrv_pci.c b/drivers/pci/pcie/portdrv_pci.c
1755 index 0761d90..ebb3e5f 100644
1756 --- a/drivers/pci/pcie/portdrv_pci.c
1757 +++ b/drivers/pci/pcie/portdrv_pci.c
1758 @@ -134,10 +134,28 @@ static int pcie_port_runtime_resume(struct device *dev)
1759 return 0;
1760 }
1761
1762 +static int pci_dev_pme_poll(struct pci_dev *pdev, void *data)
1763 +{
1764 + bool *pme_poll = data;
1765 +
1766 + if (pdev->pme_poll)
1767 + *pme_poll = true;
1768 + return 0;
1769 +}
1770 +
1771 static int pcie_port_runtime_idle(struct device *dev)
1772 {
1773 + struct pci_dev *pdev = to_pci_dev(dev);
1774 + bool pme_poll = false;
1775 +
1776 + /*
1777 + * If any subordinate device needs pme poll, we should keep
1778 + * the port in D0, because we need port in D0 to poll it.
1779 + */
1780 + pci_walk_bus(pdev->subordinate, pci_dev_pme_poll, &pme_poll);
1781 /* Delay for a short while to prevent too frequent suspend/resume */
1782 - pm_schedule_suspend(dev, 10);
1783 + if (!pme_poll)
1784 + pm_schedule_suspend(dev, 10);
1785 return -EBUSY;
1786 }
1787 #else
1788 diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
1789 index 7a451ff..7eb4d16 100644
1790 --- a/drivers/pci/quirks.c
1791 +++ b/drivers/pci/quirks.c
1792 @@ -2686,7 +2686,7 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)
1793 if (PCI_FUNC(dev->devfn))
1794 return;
1795 /*
1796 - * RICOH 0xe823 SD/MMC card reader fails to recognize
1797 + * RICOH 0xe822 and 0xe823 SD/MMC card readers fail to recognize
1798 * certain types of SD/MMC cards. Lowering the SD base
1799 * clock frequency from 200Mhz to 50Mhz fixes this issue.
1800 *
1801 @@ -2697,7 +2697,8 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)
1802 * 0xf9 - Key register for 0x150
1803 * 0xfc - key register for 0xe1
1804 */
1805 - if (dev->device == PCI_DEVICE_ID_RICOH_R5CE823) {
1806 + if (dev->device == PCI_DEVICE_ID_RICOH_R5CE822 ||
1807 + dev->device == PCI_DEVICE_ID_RICOH_R5CE823) {
1808 pci_write_config_byte(dev, 0xf9, 0xfc);
1809 pci_write_config_byte(dev, 0x150, 0x10);
1810 pci_write_config_byte(dev, 0xf9, 0x00);
1811 @@ -2724,6 +2725,8 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)
1812 }
1813 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
1814 DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
1815 +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE822, ricoh_mmc_fixup_r5c832);
1816 +DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE822, ricoh_mmc_fixup_r5c832);
1817 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE823, ricoh_mmc_fixup_r5c832);
1818 DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE823, ricoh_mmc_fixup_r5c832);
1819 #endif /*CONFIG_MMC_RICOH_MMC*/
1820 diff --git a/drivers/pnp/pnpacpi/core.c b/drivers/pnp/pnpacpi/core.c
1821 index ec8e914..767f526 100644
1822 --- a/drivers/pnp/pnpacpi/core.c
1823 +++ b/drivers/pnp/pnpacpi/core.c
1824 @@ -58,7 +58,7 @@ static inline int __init is_exclusive_device(struct acpi_device *dev)
1825 if (!(('0' <= (c) && (c) <= '9') || ('A' <= (c) && (c) <= 'F'))) \
1826 return 0
1827 #define TEST_ALPHA(c) \
1828 - if (!('@' <= (c) || (c) <= 'Z')) \
1829 + if (!('A' <= (c) && (c) <= 'Z')) \
1830 return 0
1831 static int __init ispnpidacpi(const char *id)
1832 {
1833 diff --git a/drivers/rtc/class.c b/drivers/rtc/class.c
1834 index f8a0aab..5143629 100644
1835 --- a/drivers/rtc/class.c
1836 +++ b/drivers/rtc/class.c
1837 @@ -244,7 +244,6 @@ void rtc_device_unregister(struct rtc_device *rtc)
1838 rtc_proc_del_device(rtc);
1839 device_unregister(&rtc->dev);
1840 rtc->ops = NULL;
1841 - ida_simple_remove(&rtc_ida, rtc->id);
1842 mutex_unlock(&rtc->ops_lock);
1843 put_device(&rtc->dev);
1844 }
1845 diff --git a/drivers/rtc/rtc-vt8500.c b/drivers/rtc/rtc-vt8500.c
1846 index 07bf193..75485c4 100644
1847 --- a/drivers/rtc/rtc-vt8500.c
1848 +++ b/drivers/rtc/rtc-vt8500.c
1849 @@ -70,7 +70,7 @@
1850 | ALARM_SEC_BIT)
1851
1852 #define VT8500_RTC_CR_ENABLE (1 << 0) /* Enable RTC */
1853 -#define VT8500_RTC_CR_24H (1 << 1) /* 24h time format */
1854 +#define VT8500_RTC_CR_12H (1 << 1) /* 12h time format */
1855 #define VT8500_RTC_CR_SM_ENABLE (1 << 2) /* Enable periodic irqs */
1856 #define VT8500_RTC_CR_SM_SEC (1 << 3) /* 0: 1Hz/60, 1: 1Hz */
1857 #define VT8500_RTC_CR_CALIB (1 << 4) /* Enable calibration */
1858 @@ -119,7 +119,7 @@ static int vt8500_rtc_read_time(struct device *dev, struct rtc_time *tm)
1859 tm->tm_min = bcd2bin((time & TIME_MIN_MASK) >> TIME_MIN_S);
1860 tm->tm_hour = bcd2bin((time & TIME_HOUR_MASK) >> TIME_HOUR_S);
1861 tm->tm_mday = bcd2bin(date & DATE_DAY_MASK);
1862 - tm->tm_mon = bcd2bin((date & DATE_MONTH_MASK) >> DATE_MONTH_S);
1863 + tm->tm_mon = bcd2bin((date & DATE_MONTH_MASK) >> DATE_MONTH_S) - 1;
1864 tm->tm_year = bcd2bin((date & DATE_YEAR_MASK) >> DATE_YEAR_S)
1865 + ((date >> DATE_CENTURY_S) & 1 ? 200 : 100);
1866 tm->tm_wday = (time & TIME_DOW_MASK) >> TIME_DOW_S;
1867 @@ -138,8 +138,9 @@ static int vt8500_rtc_set_time(struct device *dev, struct rtc_time *tm)
1868 }
1869
1870 writel((bin2bcd(tm->tm_year - 100) << DATE_YEAR_S)
1871 - | (bin2bcd(tm->tm_mon) << DATE_MONTH_S)
1872 - | (bin2bcd(tm->tm_mday)),
1873 + | (bin2bcd(tm->tm_mon + 1) << DATE_MONTH_S)
1874 + | (bin2bcd(tm->tm_mday))
1875 + | ((tm->tm_year >= 200) << DATE_CENTURY_S),
1876 vt8500_rtc->regbase + VT8500_RTC_DS);
1877 writel((bin2bcd(tm->tm_wday) << TIME_DOW_S)
1878 | (bin2bcd(tm->tm_hour) << TIME_HOUR_S)
1879 @@ -249,7 +250,7 @@ static int __devinit vt8500_rtc_probe(struct platform_device *pdev)
1880 }
1881
1882 /* Enable RTC and set it to 24-hour mode */
1883 - writel(VT8500_RTC_CR_ENABLE | VT8500_RTC_CR_24H,
1884 + writel(VT8500_RTC_CR_ENABLE,
1885 vt8500_rtc->regbase + VT8500_RTC_CR);
1886
1887 vt8500_rtc->rtc = rtc_device_register("vt8500-rtc", &pdev->dev,
1888 diff --git a/drivers/staging/omapdrm/omap_crtc.c b/drivers/staging/omapdrm/omap_crtc.c
1889 index 732f2ad..5249223 100644
1890 --- a/drivers/staging/omapdrm/omap_crtc.c
1891 +++ b/drivers/staging/omapdrm/omap_crtc.c
1892 @@ -19,7 +19,7 @@
1893
1894 #include "omap_drv.h"
1895
1896 -#include "drm_mode.h"
1897 +#include <drm/drm_mode.h>
1898 #include "drm_crtc.h"
1899 #include "drm_crtc_helper.h"
1900
1901 diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
1902 index f69d029..b726c49 100644
1903 --- a/drivers/usb/chipidea/core.c
1904 +++ b/drivers/usb/chipidea/core.c
1905 @@ -385,8 +385,9 @@ EXPORT_SYMBOL_GPL(ci13xxx_add_device);
1906
1907 void ci13xxx_remove_device(struct platform_device *pdev)
1908 {
1909 + int id = pdev->id;
1910 platform_device_unregister(pdev);
1911 - ida_simple_remove(&ci_ida, pdev->id);
1912 + ida_simple_remove(&ci_ida, id);
1913 }
1914 EXPORT_SYMBOL_GPL(ci13xxx_remove_device);
1915
1916 diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
1917 index 1ed5afd..a557658 100644
1918 --- a/drivers/usb/core/message.c
1919 +++ b/drivers/usb/core/message.c
1920 @@ -1806,29 +1806,8 @@ free_interfaces:
1921 goto free_interfaces;
1922 }
1923
1924 - ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1925 - USB_REQ_SET_CONFIGURATION, 0, configuration, 0,
1926 - NULL, 0, USB_CTRL_SET_TIMEOUT);
1927 - if (ret < 0) {
1928 - /* All the old state is gone, so what else can we do?
1929 - * The device is probably useless now anyway.
1930 - */
1931 - cp = NULL;
1932 - }
1933 -
1934 - dev->actconfig = cp;
1935 - if (!cp) {
1936 - usb_set_device_state(dev, USB_STATE_ADDRESS);
1937 - usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
1938 - /* Leave LPM disabled while the device is unconfigured. */
1939 - mutex_unlock(hcd->bandwidth_mutex);
1940 - usb_autosuspend_device(dev);
1941 - goto free_interfaces;
1942 - }
1943 - mutex_unlock(hcd->bandwidth_mutex);
1944 - usb_set_device_state(dev, USB_STATE_CONFIGURED);
1945 -
1946 - /* Initialize the new interface structures and the
1947 + /*
1948 + * Initialize the new interface structures and the
1949 * hc/hcd/usbcore interface/endpoint state.
1950 */
1951 for (i = 0; i < nintf; ++i) {
1952 @@ -1872,6 +1851,35 @@ free_interfaces:
1953 }
1954 kfree(new_interfaces);
1955
1956 + ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1957 + USB_REQ_SET_CONFIGURATION, 0, configuration, 0,
1958 + NULL, 0, USB_CTRL_SET_TIMEOUT);
1959 + if (ret < 0 && cp) {
1960 + /*
1961 + * All the old state is gone, so what else can we do?
1962 + * The device is probably useless now anyway.
1963 + */
1964 + usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
1965 + for (i = 0; i < nintf; ++i) {
1966 + usb_disable_interface(dev, cp->interface[i], true);
1967 + put_device(&cp->interface[i]->dev);
1968 + cp->interface[i] = NULL;
1969 + }
1970 + cp = NULL;
1971 + }
1972 +
1973 + dev->actconfig = cp;
1974 + mutex_unlock(hcd->bandwidth_mutex);
1975 +
1976 + if (!cp) {
1977 + usb_set_device_state(dev, USB_STATE_ADDRESS);
1978 +
1979 + /* Leave LPM disabled while the device is unconfigured. */
1980 + usb_autosuspend_device(dev);
1981 + return ret;
1982 + }
1983 + usb_set_device_state(dev, USB_STATE_CONFIGURED);
1984 +
1985 if (cp->string == NULL &&
1986 !(dev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
1987 cp->string = usb_cache_string(dev, cp->desc.iConfiguration);
1988 diff --git a/drivers/usb/gadget/f_ecm.c b/drivers/usb/gadget/f_ecm.c
1989 index 95bc94f..2dc0f07 100644
1990 --- a/drivers/usb/gadget/f_ecm.c
1991 +++ b/drivers/usb/gadget/f_ecm.c
1992 @@ -808,9 +808,9 @@ fail:
1993 /* we might as well release our claims on endpoints */
1994 if (ecm->notify)
1995 ecm->notify->driver_data = NULL;
1996 - if (ecm->port.out_ep->desc)
1997 + if (ecm->port.out_ep)
1998 ecm->port.out_ep->driver_data = NULL;
1999 - if (ecm->port.in_ep->desc)
2000 + if (ecm->port.in_ep)
2001 ecm->port.in_ep->driver_data = NULL;
2002
2003 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status);
2004 diff --git a/drivers/usb/gadget/f_eem.c b/drivers/usb/gadget/f_eem.c
2005 index 1a7b2dd..a9cf2052 100644
2006 --- a/drivers/usb/gadget/f_eem.c
2007 +++ b/drivers/usb/gadget/f_eem.c
2008 @@ -319,10 +319,9 @@ fail:
2009 if (f->hs_descriptors)
2010 usb_free_descriptors(f->hs_descriptors);
2011
2012 - /* we might as well release our claims on endpoints */
2013 - if (eem->port.out_ep->desc)
2014 + if (eem->port.out_ep)
2015 eem->port.out_ep->driver_data = NULL;
2016 - if (eem->port.in_ep->desc)
2017 + if (eem->port.in_ep)
2018 eem->port.in_ep->driver_data = NULL;
2019
2020 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status);
2021 diff --git a/drivers/usb/gadget/f_midi.c b/drivers/usb/gadget/f_midi.c
2022 index 8ed1259..b2accca 100644
2023 --- a/drivers/usb/gadget/f_midi.c
2024 +++ b/drivers/usb/gadget/f_midi.c
2025 @@ -415,6 +415,7 @@ static void f_midi_unbind(struct usb_configuration *c, struct usb_function *f)
2026 midi->id = NULL;
2027
2028 usb_free_descriptors(f->descriptors);
2029 + usb_free_descriptors(f->hs_descriptors);
2030 kfree(midi);
2031 }
2032
2033 diff --git a/drivers/usb/gadget/f_ncm.c b/drivers/usb/gadget/f_ncm.c
2034 index b651b52..5e04e93 100644
2035 --- a/drivers/usb/gadget/f_ncm.c
2036 +++ b/drivers/usb/gadget/f_ncm.c
2037 @@ -1259,9 +1259,9 @@ fail:
2038 /* we might as well release our claims on endpoints */
2039 if (ncm->notify)
2040 ncm->notify->driver_data = NULL;
2041 - if (ncm->port.out_ep->desc)
2042 + if (ncm->port.out_ep)
2043 ncm->port.out_ep->driver_data = NULL;
2044 - if (ncm->port.in_ep->desc)
2045 + if (ncm->port.in_ep)
2046 ncm->port.in_ep->driver_data = NULL;
2047
2048 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status);
2049 diff --git a/drivers/usb/gadget/f_phonet.c b/drivers/usb/gadget/f_phonet.c
2050 index 8ee9268..a6c19a4 100644
2051 --- a/drivers/usb/gadget/f_phonet.c
2052 +++ b/drivers/usb/gadget/f_phonet.c
2053 @@ -531,7 +531,7 @@ int pn_bind(struct usb_configuration *c, struct usb_function *f)
2054
2055 req = usb_ep_alloc_request(fp->out_ep, GFP_KERNEL);
2056 if (!req)
2057 - goto err;
2058 + goto err_req;
2059
2060 req->complete = pn_rx_complete;
2061 fp->out_reqv[i] = req;
2062 @@ -540,14 +540,18 @@ int pn_bind(struct usb_configuration *c, struct usb_function *f)
2063 /* Outgoing USB requests */
2064 fp->in_req = usb_ep_alloc_request(fp->in_ep, GFP_KERNEL);
2065 if (!fp->in_req)
2066 - goto err;
2067 + goto err_req;
2068
2069 INFO(cdev, "USB CDC Phonet function\n");
2070 INFO(cdev, "using %s, OUT %s, IN %s\n", cdev->gadget->name,
2071 fp->out_ep->name, fp->in_ep->name);
2072 return 0;
2073
2074 +err_req:
2075 + for (i = 0; i < phonet_rxq_size && fp->out_reqv[i]; i++)
2076 + usb_ep_free_request(fp->out_ep, fp->out_reqv[i]);
2077 err:
2078 +
2079 if (fp->out_ep)
2080 fp->out_ep->driver_data = NULL;
2081 if (fp->in_ep)
2082 diff --git a/drivers/usb/gadget/f_rndis.c b/drivers/usb/gadget/f_rndis.c
2083 index b1681e4..47953fe 100644
2084 --- a/drivers/usb/gadget/f_rndis.c
2085 +++ b/drivers/usb/gadget/f_rndis.c
2086 @@ -803,9 +803,9 @@ fail:
2087 /* we might as well release our claims on endpoints */
2088 if (rndis->notify)
2089 rndis->notify->driver_data = NULL;
2090 - if (rndis->port.out_ep->desc)
2091 + if (rndis->port.out_ep)
2092 rndis->port.out_ep->driver_data = NULL;
2093 - if (rndis->port.in_ep->desc)
2094 + if (rndis->port.in_ep)
2095 rndis->port.in_ep->driver_data = NULL;
2096
2097 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status);
2098 diff --git a/drivers/usb/gadget/f_subset.c b/drivers/usb/gadget/f_subset.c
2099 index 4060c0b..deb437c 100644
2100 --- a/drivers/usb/gadget/f_subset.c
2101 +++ b/drivers/usb/gadget/f_subset.c
2102 @@ -370,9 +370,9 @@ fail:
2103 usb_free_descriptors(f->hs_descriptors);
2104
2105 /* we might as well release our claims on endpoints */
2106 - if (geth->port.out_ep->desc)
2107 + if (geth->port.out_ep)
2108 geth->port.out_ep->driver_data = NULL;
2109 - if (geth->port.in_ep->desc)
2110 + if (geth->port.in_ep)
2111 geth->port.in_ep->driver_data = NULL;
2112
2113 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status);
2114 diff --git a/drivers/usb/gadget/f_uvc.c b/drivers/usb/gadget/f_uvc.c
2115 index 2a8bf06..10f13c1 100644
2116 --- a/drivers/usb/gadget/f_uvc.c
2117 +++ b/drivers/usb/gadget/f_uvc.c
2118 @@ -417,7 +417,6 @@ uvc_register_video(struct uvc_device *uvc)
2119 return -ENOMEM;
2120
2121 video->parent = &cdev->gadget->dev;
2122 - video->minor = -1;
2123 video->fops = &uvc_v4l2_fops;
2124 video->release = video_device_release;
2125 strncpy(video->name, cdev->gadget->name, sizeof(video->name));
2126 @@ -577,23 +576,12 @@ uvc_function_unbind(struct usb_configuration *c, struct usb_function *f)
2127
2128 INFO(cdev, "uvc_function_unbind\n");
2129
2130 - if (uvc->vdev) {
2131 - if (uvc->vdev->minor == -1)
2132 - video_device_release(uvc->vdev);
2133 - else
2134 - video_unregister_device(uvc->vdev);
2135 - uvc->vdev = NULL;
2136 - }
2137 -
2138 - if (uvc->control_ep)
2139 - uvc->control_ep->driver_data = NULL;
2140 - if (uvc->video.ep)
2141 - uvc->video.ep->driver_data = NULL;
2142 + video_unregister_device(uvc->vdev);
2143 + uvc->control_ep->driver_data = NULL;
2144 + uvc->video.ep->driver_data = NULL;
2145
2146 - if (uvc->control_req) {
2147 - usb_ep_free_request(cdev->gadget->ep0, uvc->control_req);
2148 - kfree(uvc->control_buf);
2149 - }
2150 + usb_ep_free_request(cdev->gadget->ep0, uvc->control_req);
2151 + kfree(uvc->control_buf);
2152
2153 kfree(f->descriptors);
2154 kfree(f->hs_descriptors);
2155 @@ -740,7 +728,22 @@ uvc_function_bind(struct usb_configuration *c, struct usb_function *f)
2156 return 0;
2157
2158 error:
2159 - uvc_function_unbind(c, f);
2160 + if (uvc->vdev)
2161 + video_device_release(uvc->vdev);
2162 +
2163 + if (uvc->control_ep)
2164 + uvc->control_ep->driver_data = NULL;
2165 + if (uvc->video.ep)
2166 + uvc->video.ep->driver_data = NULL;
2167 +
2168 + if (uvc->control_req) {
2169 + usb_ep_free_request(cdev->gadget->ep0, uvc->control_req);
2170 + kfree(uvc->control_buf);
2171 + }
2172 +
2173 + kfree(f->descriptors);
2174 + kfree(f->hs_descriptors);
2175 + kfree(f->ss_descriptors);
2176 return ret;
2177 }
2178
2179 diff --git a/drivers/usb/gadget/tcm_usb_gadget.c b/drivers/usb/gadget/tcm_usb_gadget.c
2180 index 97e68b3..4959609 100644
2181 --- a/drivers/usb/gadget/tcm_usb_gadget.c
2182 +++ b/drivers/usb/gadget/tcm_usb_gadget.c
2183 @@ -2139,6 +2139,7 @@ static struct usb_descriptor_header *uasp_fs_function_desc[] = {
2184 (struct usb_descriptor_header *) &uasp_status_pipe_desc,
2185 (struct usb_descriptor_header *) &uasp_fs_cmd_desc,
2186 (struct usb_descriptor_header *) &uasp_cmd_pipe_desc,
2187 + NULL,
2188 };
2189
2190 static struct usb_descriptor_header *uasp_hs_function_desc[] = {
2191 diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
2192 index 2cb7d37..f42b68e 100644
2193 --- a/drivers/usb/host/ehci-pci.c
2194 +++ b/drivers/usb/host/ehci-pci.c
2195 @@ -334,7 +334,8 @@ static bool usb_is_intel_switchable_ehci(struct pci_dev *pdev)
2196 pdev->vendor == PCI_VENDOR_ID_INTEL &&
2197 (pdev->device == 0x1E26 ||
2198 pdev->device == 0x8C2D ||
2199 - pdev->device == 0x8C26);
2200 + pdev->device == 0x8C26 ||
2201 + pdev->device == 0x9C26);
2202 }
2203
2204 static void ehci_enable_xhci_companion(void)
2205 diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
2206 index 39f9e4a..eb5563a 100644
2207 --- a/drivers/usb/host/pci-quirks.c
2208 +++ b/drivers/usb/host/pci-quirks.c
2209 @@ -723,6 +723,7 @@ static int handshake(void __iomem *ptr, u32 mask, u32 done,
2210 }
2211
2212 #define PCI_DEVICE_ID_INTEL_LYNX_POINT_XHCI 0x8C31
2213 +#define PCI_DEVICE_ID_INTEL_LYNX_POINT_LP_XHCI 0x9C31
2214
2215 bool usb_is_intel_ppt_switchable_xhci(struct pci_dev *pdev)
2216 {
2217 @@ -736,7 +737,8 @@ bool usb_is_intel_lpt_switchable_xhci(struct pci_dev *pdev)
2218 {
2219 return pdev->class == PCI_CLASS_SERIAL_USB_XHCI &&
2220 pdev->vendor == PCI_VENDOR_ID_INTEL &&
2221 - pdev->device == PCI_DEVICE_ID_INTEL_LYNX_POINT_XHCI;
2222 + (pdev->device == PCI_DEVICE_ID_INTEL_LYNX_POINT_XHCI ||
2223 + pdev->device == PCI_DEVICE_ID_INTEL_LYNX_POINT_LP_XHCI);
2224 }
2225
2226 bool usb_is_intel_switchable_xhci(struct pci_dev *pdev)
2227 diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
2228 index 487bc08..fb51c70 100644
2229 --- a/drivers/usb/host/xhci-mem.c
2230 +++ b/drivers/usb/host/xhci-mem.c
2231 @@ -205,7 +205,12 @@ static int xhci_alloc_segments_for_ring(struct xhci_hcd *xhci,
2232
2233 next = xhci_segment_alloc(xhci, cycle_state, flags);
2234 if (!next) {
2235 - xhci_free_segments_for_ring(xhci, *first);
2236 + prev = *first;
2237 + while (prev) {
2238 + next = prev->next;
2239 + xhci_segment_free(xhci, prev);
2240 + prev = next;
2241 + }
2242 return -ENOMEM;
2243 }
2244 xhci_link_segments(xhci, prev, next, type);
2245 @@ -258,7 +263,7 @@ static struct xhci_ring *xhci_ring_alloc(struct xhci_hcd *xhci,
2246 return ring;
2247
2248 fail:
2249 - xhci_ring_free(xhci, ring);
2250 + kfree(ring);
2251 return NULL;
2252 }
2253
2254 diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
2255 index 4e1a894..1189cf3 100644
2256 --- a/drivers/usb/host/xhci-ring.c
2257 +++ b/drivers/usb/host/xhci-ring.c
2258 @@ -3071,11 +3071,11 @@ static u32 xhci_td_remainder(unsigned int remainder)
2259 }
2260
2261 /*
2262 - * For xHCI 1.0 host controllers, TD size is the number of packets remaining in
2263 - * the TD (*not* including this TRB).
2264 + * For xHCI 1.0 host controllers, TD size is the number of max packet sized
2265 + * packets remaining in the TD (*not* including this TRB).
2266 *
2267 * Total TD packet count = total_packet_count =
2268 - * roundup(TD size in bytes / wMaxPacketSize)
2269 + * DIV_ROUND_UP(TD size in bytes / wMaxPacketSize)
2270 *
2271 * Packets transferred up to and including this TRB = packets_transferred =
2272 * rounddown(total bytes transferred including this TRB / wMaxPacketSize)
2273 @@ -3083,15 +3083,16 @@ static u32 xhci_td_remainder(unsigned int remainder)
2274 * TD size = total_packet_count - packets_transferred
2275 *
2276 * It must fit in bits 21:17, so it can't be bigger than 31.
2277 + * The last TRB in a TD must have the TD size set to zero.
2278 */
2279 -
2280 static u32 xhci_v1_0_td_remainder(int running_total, int trb_buff_len,
2281 - unsigned int total_packet_count, struct urb *urb)
2282 + unsigned int total_packet_count, struct urb *urb,
2283 + unsigned int num_trbs_left)
2284 {
2285 int packets_transferred;
2286
2287 /* One TRB with a zero-length data packet. */
2288 - if (running_total == 0 && trb_buff_len == 0)
2289 + if (num_trbs_left == 0 || (running_total == 0 && trb_buff_len == 0))
2290 return 0;
2291
2292 /* All the TRB queueing functions don't count the current TRB in
2293 @@ -3100,7 +3101,9 @@ static u32 xhci_v1_0_td_remainder(int running_total, int trb_buff_len,
2294 packets_transferred = (running_total + trb_buff_len) /
2295 usb_endpoint_maxp(&urb->ep->desc);
2296
2297 - return xhci_td_remainder(total_packet_count - packets_transferred);
2298 + if ((total_packet_count - packets_transferred) > 31)
2299 + return 31 << 17;
2300 + return (total_packet_count - packets_transferred) << 17;
2301 }
2302
2303 static int queue_bulk_sg_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
2304 @@ -3127,7 +3130,7 @@ static int queue_bulk_sg_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
2305
2306 num_trbs = count_sg_trbs_needed(xhci, urb);
2307 num_sgs = urb->num_mapped_sgs;
2308 - total_packet_count = roundup(urb->transfer_buffer_length,
2309 + total_packet_count = DIV_ROUND_UP(urb->transfer_buffer_length,
2310 usb_endpoint_maxp(&urb->ep->desc));
2311
2312 trb_buff_len = prepare_transfer(xhci, xhci->devs[slot_id],
2313 @@ -3210,7 +3213,8 @@ static int queue_bulk_sg_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
2314 running_total);
2315 } else {
2316 remainder = xhci_v1_0_td_remainder(running_total,
2317 - trb_buff_len, total_packet_count, urb);
2318 + trb_buff_len, total_packet_count, urb,
2319 + num_trbs - 1);
2320 }
2321 length_field = TRB_LEN(trb_buff_len) |
2322 remainder |
2323 @@ -3318,7 +3322,7 @@ int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
2324 start_cycle = ep_ring->cycle_state;
2325
2326 running_total = 0;
2327 - total_packet_count = roundup(urb->transfer_buffer_length,
2328 + total_packet_count = DIV_ROUND_UP(urb->transfer_buffer_length,
2329 usb_endpoint_maxp(&urb->ep->desc));
2330 /* How much data is in the first TRB? */
2331 addr = (u64) urb->transfer_dma;
2332 @@ -3364,7 +3368,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
2333 running_total);
2334 } else {
2335 remainder = xhci_v1_0_td_remainder(running_total,
2336 - trb_buff_len, total_packet_count, urb);
2337 + trb_buff_len, total_packet_count, urb,
2338 + num_trbs - 1);
2339 }
2340 length_field = TRB_LEN(trb_buff_len) |
2341 remainder |
2342 @@ -3627,7 +3632,7 @@ static int xhci_queue_isoc_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
2343 addr = start_addr + urb->iso_frame_desc[i].offset;
2344 td_len = urb->iso_frame_desc[i].length;
2345 td_remain_len = td_len;
2346 - total_packet_count = roundup(td_len,
2347 + total_packet_count = DIV_ROUND_UP(td_len,
2348 usb_endpoint_maxp(&urb->ep->desc));
2349 /* A zero-length transfer still involves at least one packet. */
2350 if (total_packet_count == 0)
2351 @@ -3706,7 +3711,8 @@ static int xhci_queue_isoc_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
2352 } else {
2353 remainder = xhci_v1_0_td_remainder(
2354 running_total, trb_buff_len,
2355 - total_packet_count, urb);
2356 + total_packet_count, urb,
2357 + (trbs_per_td - j - 1));
2358 }
2359 length_field = TRB_LEN(trb_buff_len) |
2360 remainder |
2361 diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
2362 index c9e419f..389829e 100644
2363 --- a/drivers/usb/host/xhci.c
2364 +++ b/drivers/usb/host/xhci.c
2365 @@ -480,7 +480,7 @@ static bool compliance_mode_recovery_timer_quirk_check(void)
2366 if (strstr(dmi_product_name, "Z420") ||
2367 strstr(dmi_product_name, "Z620") ||
2368 strstr(dmi_product_name, "Z820") ||
2369 - strstr(dmi_product_name, "Z1"))
2370 + strstr(dmi_product_name, "Z1 Workstation"))
2371 return true;
2372
2373 return false;
2374 @@ -2254,7 +2254,7 @@ static bool xhci_is_async_ep(unsigned int ep_type)
2375
2376 static bool xhci_is_sync_in_ep(unsigned int ep_type)
2377 {
2378 - return (ep_type == ISOC_IN_EP || ep_type != INT_IN_EP);
2379 + return (ep_type == ISOC_IN_EP || ep_type == INT_IN_EP);
2380 }
2381
2382 static unsigned int xhci_get_ss_bw_consumed(struct xhci_bw_info *ep_bw)
2383 diff --git a/drivers/usb/musb/cppi_dma.c b/drivers/usb/musb/cppi_dma.c
2384 index e19da82..3a6c2fd 100644
2385 --- a/drivers/usb/musb/cppi_dma.c
2386 +++ b/drivers/usb/musb/cppi_dma.c
2387 @@ -1314,6 +1314,7 @@ irqreturn_t cppi_interrupt(int irq, void *dev_id)
2388
2389 return IRQ_HANDLED;
2390 }
2391 +EXPORT_SYMBOL_GPL(cppi_interrupt);
2392
2393 /* Instantiate a software object representing a DMA controller. */
2394 struct dma_controller *__devinit
2395 diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
2396 index ff5f112..72b9239 100644
2397 --- a/drivers/usb/musb/musb_dsps.c
2398 +++ b/drivers/usb/musb/musb_dsps.c
2399 @@ -377,7 +377,8 @@ static int dsps_musb_init(struct musb *musb)
2400 /* mentor core register starts at offset of 0x400 from musb base */
2401 musb->mregs += wrp->musb_core_offset;
2402
2403 - /* Get the NOP PHY */
2404 + /* NOP driver needs change if supporting dual instance */
2405 + usb_nop_xceiv_register();
2406 musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
2407 if (IS_ERR_OR_NULL(musb->xceiv))
2408 return -ENODEV;
2409 diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
2410 index e639584..286c30c 100644
2411 --- a/drivers/virtio/virtio_ring.c
2412 +++ b/drivers/virtio/virtio_ring.c
2413 @@ -135,6 +135,13 @@ static int vring_add_indirect(struct vring_virtqueue *vq,
2414 unsigned head;
2415 int i;
2416
2417 + /*
2418 + * We require lowmem mappings for the descriptors because
2419 + * otherwise virt_to_phys will give us bogus addresses in the
2420 + * virtqueue.
2421 + */
2422 + gfp &= ~(__GFP_HIGHMEM | __GFP_HIGH);
2423 +
2424 desc = kmalloc((out + in) * sizeof(struct vring_desc), gfp);
2425 if (!desc)
2426 return -ENOMEM;
2427 diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c
2428 index 790b3cd..772428d 100644
2429 --- a/fs/binfmt_misc.c
2430 +++ b/fs/binfmt_misc.c
2431 @@ -176,7 +176,10 @@ static int load_misc_binary(struct linux_binprm *bprm, struct pt_regs *regs)
2432 goto _error;
2433 bprm->argc ++;
2434
2435 - bprm->interp = iname; /* for binfmt_script */
2436 + /* Update interp in case binfmt_script needs it. */
2437 + retval = bprm_change_interp(iname, bprm);
2438 + if (retval < 0)
2439 + goto _error;
2440
2441 interp_file = open_exec (iname);
2442 retval = PTR_ERR (interp_file);
2443 diff --git a/fs/binfmt_script.c b/fs/binfmt_script.c
2444 index d3b8c1f..df49d48 100644
2445 --- a/fs/binfmt_script.c
2446 +++ b/fs/binfmt_script.c
2447 @@ -82,7 +82,9 @@ static int load_script(struct linux_binprm *bprm,struct pt_regs *regs)
2448 retval = copy_strings_kernel(1, &i_name, bprm);
2449 if (retval) return retval;
2450 bprm->argc++;
2451 - bprm->interp = interp;
2452 + retval = bprm_change_interp(interp, bprm);
2453 + if (retval < 0)
2454 + return retval;
2455
2456 /*
2457 * OK, now restart the process with the interpreter's dentry.
2458 diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
2459 index 1c576e8..dd538b4 100644
2460 --- a/fs/cifs/readdir.c
2461 +++ b/fs/cifs/readdir.c
2462 @@ -66,18 +66,21 @@ static inline void dump_cifs_file_struct(struct file *file, char *label)
2463 #endif /* DEBUG2 */
2464
2465 /*
2466 + * Attempt to preload the dcache with the results from the FIND_FIRST/NEXT
2467 + *
2468 * Find the dentry that matches "name". If there isn't one, create one. If it's
2469 * a negative dentry or the uniqueid changed, then drop it and recreate it.
2470 */
2471 -static struct dentry *
2472 -cifs_readdir_lookup(struct dentry *parent, struct qstr *name,
2473 +static void
2474 +cifs_prime_dcache(struct dentry *parent, struct qstr *name,
2475 struct cifs_fattr *fattr)
2476 {
2477 struct dentry *dentry, *alias;
2478 struct inode *inode;
2479 struct super_block *sb = parent->d_inode->i_sb;
2480 + struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
2481
2482 - cFYI(1, "For %s", name->name);
2483 + cFYI(1, "%s: for %s", __func__, name->name);
2484
2485 if (parent->d_op && parent->d_op->d_hash)
2486 parent->d_op->d_hash(parent, parent->d_inode, name);
2487 @@ -87,37 +90,42 @@ cifs_readdir_lookup(struct dentry *parent, struct qstr *name,
2488 dentry = d_lookup(parent, name);
2489 if (dentry) {
2490 int err;
2491 +
2492 inode = dentry->d_inode;
2493 - /* update inode in place if i_ino didn't change */
2494 - if (inode && CIFS_I(inode)->uniqueid == fattr->cf_uniqueid) {
2495 - cifs_fattr_to_inode(inode, fattr);
2496 - return dentry;
2497 + if (inode) {
2498 + /*
2499 + * If we're generating inode numbers, then we don't
2500 + * want to clobber the existing one with the one that
2501 + * the readdir code created.
2502 + */
2503 + if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM))
2504 + fattr->cf_uniqueid = CIFS_I(inode)->uniqueid;
2505 +
2506 + /* update inode in place if i_ino didn't change */
2507 + if (CIFS_I(inode)->uniqueid == fattr->cf_uniqueid) {
2508 + cifs_fattr_to_inode(inode, fattr);
2509 + goto out;
2510 + }
2511 }
2512 err = d_invalidate(dentry);
2513 dput(dentry);
2514 if (err)
2515 - return NULL;
2516 + return;
2517 }
2518
2519 dentry = d_alloc(parent, name);
2520 - if (dentry == NULL)
2521 - return NULL;
2522 + if (!dentry)
2523 + return;
2524
2525 inode = cifs_iget(sb, fattr);
2526 - if (!inode) {
2527 - dput(dentry);
2528 - return NULL;
2529 - }
2530 + if (!inode)
2531 + goto out;
2532
2533 alias = d_materialise_unique(dentry, inode);
2534 - if (alias != NULL) {
2535 - dput(dentry);
2536 - if (IS_ERR(alias))
2537 - return NULL;
2538 - dentry = alias;
2539 - }
2540 -
2541 - return dentry;
2542 + if (alias && !IS_ERR(alias))
2543 + dput(alias);
2544 +out:
2545 + dput(dentry);
2546 }
2547
2548 static void
2549 @@ -652,7 +660,6 @@ static int cifs_filldir(char *find_entry, struct file *file, filldir_t filldir,
2550 struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
2551 struct cifs_dirent de = { NULL, };
2552 struct cifs_fattr fattr;
2553 - struct dentry *dentry;
2554 struct qstr name;
2555 int rc = 0;
2556 ino_t ino;
2557 @@ -723,13 +730,11 @@ static int cifs_filldir(char *find_entry, struct file *file, filldir_t filldir,
2558 */
2559 fattr.cf_flags |= CIFS_FATTR_NEED_REVAL;
2560
2561 - ino = cifs_uniqueid_to_ino_t(fattr.cf_uniqueid);
2562 - dentry = cifs_readdir_lookup(file->f_dentry, &name, &fattr);
2563 + cifs_prime_dcache(file->f_dentry, &name, &fattr);
2564
2565 + ino = cifs_uniqueid_to_ino_t(fattr.cf_uniqueid);
2566 rc = filldir(dirent, name.name, name.len, file->f_pos, ino,
2567 fattr.cf_dtype);
2568 -
2569 - dput(dentry);
2570 return rc;
2571 }
2572
2573 diff --git a/fs/cifs/smb1ops.c b/fs/cifs/smb1ops.c
2574 index 34cea27..591bf19 100644
2575 --- a/fs/cifs/smb1ops.c
2576 +++ b/fs/cifs/smb1ops.c
2577 @@ -53,6 +53,13 @@ send_nt_cancel(struct TCP_Server_Info *server, void *buf,
2578 mutex_unlock(&server->srv_mutex);
2579 return rc;
2580 }
2581 +
2582 + /*
2583 + * The response to this call was already factored into the sequence
2584 + * number when the call went out, so we must adjust it back downward
2585 + * after signing here.
2586 + */
2587 + --server->sequence_number;
2588 rc = smb_send(server, in_buf, be32_to_cpu(in_buf->smb_buf_length));
2589 mutex_unlock(&server->srv_mutex);
2590
2591 diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
2592 index cf33622..e7f9dbc 100644
2593 --- a/fs/cifs/smb2pdu.c
2594 +++ b/fs/cifs/smb2pdu.c
2595 @@ -425,7 +425,7 @@ SMB2_negotiate(const unsigned int xid, struct cifs_ses *ses)
2596 }
2597
2598 cFYI(1, "sec_flags 0x%x", sec_flags);
2599 - if (sec_flags & CIFSSEC_MUST_SIGN) {
2600 + if ((sec_flags & CIFSSEC_MUST_SIGN) == CIFSSEC_MUST_SIGN) {
2601 cFYI(1, "Signing required");
2602 if (!(server->sec_mode & (SMB2_NEGOTIATE_SIGNING_REQUIRED |
2603 SMB2_NEGOTIATE_SIGNING_ENABLED))) {
2604 diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
2605 index 76d974c..1a52868 100644
2606 --- a/fs/cifs/transport.c
2607 +++ b/fs/cifs/transport.c
2608 @@ -144,9 +144,6 @@ smb_send_kvec(struct TCP_Server_Info *server, struct kvec *iov, size_t n_vec,
2609
2610 *sent = 0;
2611
2612 - if (ssocket == NULL)
2613 - return -ENOTSOCK; /* BB eventually add reconnect code here */
2614 -
2615 smb_msg.msg_name = (struct sockaddr *) &server->dstaddr;
2616 smb_msg.msg_namelen = sizeof(struct sockaddr);
2617 smb_msg.msg_control = NULL;
2618 @@ -291,6 +288,9 @@ smb_send_rqst(struct TCP_Server_Info *server, struct smb_rqst *rqst)
2619 struct socket *ssocket = server->ssocket;
2620 int val = 1;
2621
2622 + if (ssocket == NULL)
2623 + return -ENOTSOCK;
2624 +
2625 cFYI(1, "Sending smb: smb_len=%u", smb_buf_length);
2626 dump_smb(iov[0].iov_base, iov[0].iov_len);
2627
2628 diff --git a/fs/dcache.c b/fs/dcache.c
2629 index 3a463d0..0d0adb6 100644
2630 --- a/fs/dcache.c
2631 +++ b/fs/dcache.c
2632 @@ -1583,7 +1583,7 @@ EXPORT_SYMBOL(d_find_any_alias);
2633 */
2634 struct dentry *d_obtain_alias(struct inode *inode)
2635 {
2636 - static const struct qstr anonstring = { .name = "" };
2637 + static const struct qstr anonstring = QSTR_INIT("/", 1);
2638 struct dentry *tmp;
2639 struct dentry *res;
2640
2641 diff --git a/fs/exec.c b/fs/exec.c
2642 index 0039055..c6e6de4 100644
2643 --- a/fs/exec.c
2644 +++ b/fs/exec.c
2645 @@ -1175,9 +1175,24 @@ void free_bprm(struct linux_binprm *bprm)
2646 mutex_unlock(&current->signal->cred_guard_mutex);
2647 abort_creds(bprm->cred);
2648 }
2649 + /* If a binfmt changed the interp, free it. */
2650 + if (bprm->interp != bprm->filename)
2651 + kfree(bprm->interp);
2652 kfree(bprm);
2653 }
2654
2655 +int bprm_change_interp(char *interp, struct linux_binprm *bprm)
2656 +{
2657 + /* If a binfmt changed the interp, free it first. */
2658 + if (bprm->interp != bprm->filename)
2659 + kfree(bprm->interp);
2660 + bprm->interp = kstrdup(interp, GFP_KERNEL);
2661 + if (!bprm->interp)
2662 + return -ENOMEM;
2663 + return 0;
2664 +}
2665 +EXPORT_SYMBOL(bprm_change_interp);
2666 +
2667 /*
2668 * install the new credentials for this executable
2669 */
2670 diff --git a/fs/file_table.c b/fs/file_table.c
2671 index a72bf9d..de9e965 100644
2672 --- a/fs/file_table.c
2673 +++ b/fs/file_table.c
2674 @@ -458,8 +458,8 @@ void mark_files_ro(struct super_block *sb)
2675 spin_unlock(&f->f_lock);
2676 if (file_check_writeable(f) != 0)
2677 continue;
2678 + __mnt_drop_write(f->f_path.mnt);
2679 file_release_write(f);
2680 - mnt_drop_write_file(f);
2681 } while_file_list_for_each_entry;
2682 lg_global_unlock(&files_lglock);
2683 }
2684 diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c
2685 index 76b4a7a..36b2e7a 100644
2686 --- a/fs/nfs/callback_proc.c
2687 +++ b/fs/nfs/callback_proc.c
2688 @@ -205,7 +205,7 @@ static u32 initiate_bulk_draining(struct nfs_client *clp,
2689
2690 list_for_each_entry(lo, &server->layouts, plh_layouts) {
2691 ino = igrab(lo->plh_inode);
2692 - if (ino)
2693 + if (!ino)
2694 continue;
2695 spin_lock(&ino->i_lock);
2696 /* Is this layout in the process of being freed? */
2697 diff --git a/fs/nfs/client.c b/fs/nfs/client.c
2698 index 8b39a42..5e8d24d 100644
2699 --- a/fs/nfs/client.c
2700 +++ b/fs/nfs/client.c
2701 @@ -615,8 +615,7 @@ EXPORT_SYMBOL_GPL(nfs_create_rpc_client);
2702 */
2703 static void nfs_destroy_server(struct nfs_server *server)
2704 {
2705 - if (!(server->flags & NFS_MOUNT_LOCAL_FLOCK) ||
2706 - !(server->flags & NFS_MOUNT_LOCAL_FCNTL))
2707 + if (server->nlm_host)
2708 nlmclnt_done(server->nlm_host);
2709 }
2710
2711 diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
2712 index b9e66b7..c99f07e 100644
2713 --- a/fs/nfs/dir.c
2714 +++ b/fs/nfs/dir.c
2715 @@ -1156,11 +1156,14 @@ static int nfs_dentry_delete(const struct dentry *dentry)
2716
2717 }
2718
2719 +/* Ensure that we revalidate inode->i_nlink */
2720 static void nfs_drop_nlink(struct inode *inode)
2721 {
2722 spin_lock(&inode->i_lock);
2723 - if (inode->i_nlink > 0)
2724 - drop_nlink(inode);
2725 + /* drop the inode if we're reasonably sure this is the last link */
2726 + if (inode->i_nlink == 1)
2727 + clear_nlink(inode);
2728 + NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ATTR;
2729 spin_unlock(&inode->i_lock);
2730 }
2731
2732 @@ -1175,8 +1178,8 @@ static void nfs_dentry_iput(struct dentry *dentry, struct inode *inode)
2733 NFS_I(inode)->cache_validity |= NFS_INO_INVALID_DATA;
2734
2735 if (dentry->d_flags & DCACHE_NFSFS_RENAMED) {
2736 - drop_nlink(inode);
2737 nfs_complete_unlink(dentry, inode);
2738 + nfs_drop_nlink(inode);
2739 }
2740 iput(inode);
2741 }
2742 @@ -1647,10 +1650,8 @@ static int nfs_safe_remove(struct dentry *dentry)
2743 if (inode != NULL) {
2744 NFS_PROTO(inode)->return_delegation(inode);
2745 error = NFS_PROTO(dir)->remove(dir, &dentry->d_name);
2746 - /* The VFS may want to delete this inode */
2747 if (error == 0)
2748 nfs_drop_nlink(inode);
2749 - nfs_mark_for_revalidate(inode);
2750 } else
2751 error = NFS_PROTO(dir)->remove(dir, &dentry->d_name);
2752 if (error == -ENOENT)
2753 @@ -2147,12 +2148,16 @@ static int nfs_open_permission_mask(int openflags)
2754 {
2755 int mask = 0;
2756
2757 - if ((openflags & O_ACCMODE) != O_WRONLY)
2758 - mask |= MAY_READ;
2759 - if ((openflags & O_ACCMODE) != O_RDONLY)
2760 - mask |= MAY_WRITE;
2761 - if (openflags & __FMODE_EXEC)
2762 - mask |= MAY_EXEC;
2763 + if (openflags & __FMODE_EXEC) {
2764 + /* ONLY check exec rights */
2765 + mask = MAY_EXEC;
2766 + } else {
2767 + if ((openflags & O_ACCMODE) != O_WRONLY)
2768 + mask |= MAY_READ;
2769 + if ((openflags & O_ACCMODE) != O_RDONLY)
2770 + mask |= MAY_WRITE;
2771 + }
2772 +
2773 return mask;
2774 }
2775
2776 diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
2777 index cae26cb..594f4e7 100644
2778 --- a/fs/nfs/direct.c
2779 +++ b/fs/nfs/direct.c
2780 @@ -266,14 +266,6 @@ static void nfs_direct_read_completion(struct nfs_pgio_header *hdr)
2781 struct nfs_page *req = nfs_list_entry(hdr->pages.next);
2782 struct page *page = req->wb_page;
2783
2784 - if (test_bit(NFS_IOHDR_EOF, &hdr->flags)) {
2785 - if (bytes > hdr->good_bytes)
2786 - zero_user(page, 0, PAGE_SIZE);
2787 - else if (hdr->good_bytes - bytes < PAGE_SIZE)
2788 - zero_user_segment(page,
2789 - hdr->good_bytes & ~PAGE_MASK,
2790 - PAGE_SIZE);
2791 - }
2792 if (!PageCompound(page)) {
2793 if (test_bit(NFS_IOHDR_ERROR, &hdr->flags)) {
2794 if (bytes < hdr->good_bytes)
2795 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
2796 index 5eec442..4432b2f 100644
2797 --- a/fs/nfs/nfs4proc.c
2798 +++ b/fs/nfs/nfs4proc.c
2799 @@ -1721,7 +1721,8 @@ static int _nfs4_recover_proc_open(struct nfs4_opendata *data)
2800
2801 static int nfs4_opendata_access(struct rpc_cred *cred,
2802 struct nfs4_opendata *opendata,
2803 - struct nfs4_state *state, fmode_t fmode)
2804 + struct nfs4_state *state, fmode_t fmode,
2805 + int openflags)
2806 {
2807 struct nfs_access_entry cache;
2808 u32 mask;
2809 @@ -1733,11 +1734,14 @@ static int nfs4_opendata_access(struct rpc_cred *cred,
2810
2811 mask = 0;
2812 /* don't check MAY_WRITE - a newly created file may not have
2813 - * write mode bits, but POSIX allows the creating process to write */
2814 - if (fmode & FMODE_READ)
2815 - mask |= MAY_READ;
2816 - if (fmode & FMODE_EXEC)
2817 - mask |= MAY_EXEC;
2818 + * write mode bits, but POSIX allows the creating process to write.
2819 + * use openflags to check for exec, because fmode won't
2820 + * always have FMODE_EXEC set when file open for exec. */
2821 + if (openflags & __FMODE_EXEC) {
2822 + /* ONLY check for exec rights */
2823 + mask = MAY_EXEC;
2824 + } else if (fmode & FMODE_READ)
2825 + mask = MAY_READ;
2826
2827 cache.cred = cred;
2828 cache.jiffies = jiffies;
2829 @@ -2009,7 +2013,7 @@ static int _nfs4_do_open(struct inode *dir,
2830 if (server->caps & NFS_CAP_POSIX_LOCK)
2831 set_bit(NFS_STATE_POSIX_LOCKS, &state->flags);
2832
2833 - status = nfs4_opendata_access(cred, opendata, state, fmode);
2834 + status = nfs4_opendata_access(cred, opendata, state, fmode, flags);
2835 if (status != 0)
2836 goto err_opendata_put;
2837
2838 @@ -3937,8 +3941,13 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu
2839 goto out_free;
2840 }
2841 nfs4_write_cached_acl(inode, pages, res.acl_data_offset, res.acl_len);
2842 - if (buf)
2843 + if (buf) {
2844 + if (res.acl_len > buflen) {
2845 + ret = -ERANGE;
2846 + goto out_free;
2847 + }
2848 _copy_from_pages(buf, pages, res.acl_data_offset, res.acl_len);
2849 + }
2850 out_ok:
2851 ret = res.acl_len;
2852 out_free:
2853 @@ -6138,13 +6147,26 @@ static void nfs41_sequence_prepare(struct rpc_task *task, void *data)
2854 rpc_call_start(task);
2855 }
2856
2857 +static void nfs41_sequence_prepare_privileged(struct rpc_task *task, void *data)
2858 +{
2859 + rpc_task_set_priority(task, RPC_PRIORITY_PRIVILEGED);
2860 + nfs41_sequence_prepare(task, data);
2861 +}
2862 +
2863 static const struct rpc_call_ops nfs41_sequence_ops = {
2864 .rpc_call_done = nfs41_sequence_call_done,
2865 .rpc_call_prepare = nfs41_sequence_prepare,
2866 .rpc_release = nfs41_sequence_release,
2867 };
2868
2869 -static struct rpc_task *_nfs41_proc_sequence(struct nfs_client *clp, struct rpc_cred *cred)
2870 +static const struct rpc_call_ops nfs41_sequence_privileged_ops = {
2871 + .rpc_call_done = nfs41_sequence_call_done,
2872 + .rpc_call_prepare = nfs41_sequence_prepare_privileged,
2873 + .rpc_release = nfs41_sequence_release,
2874 +};
2875 +
2876 +static struct rpc_task *_nfs41_proc_sequence(struct nfs_client *clp, struct rpc_cred *cred,
2877 + const struct rpc_call_ops *seq_ops)
2878 {
2879 struct nfs4_sequence_data *calldata;
2880 struct rpc_message msg = {
2881 @@ -6154,7 +6176,7 @@ static struct rpc_task *_nfs41_proc_sequence(struct nfs_client *clp, struct rpc_
2882 struct rpc_task_setup task_setup_data = {
2883 .rpc_client = clp->cl_rpcclient,
2884 .rpc_message = &msg,
2885 - .callback_ops = &nfs41_sequence_ops,
2886 + .callback_ops = seq_ops,
2887 .flags = RPC_TASK_ASYNC | RPC_TASK_SOFT,
2888 };
2889
2890 @@ -6181,7 +6203,7 @@ static int nfs41_proc_async_sequence(struct nfs_client *clp, struct rpc_cred *cr
2891
2892 if ((renew_flags & NFS4_RENEW_TIMEOUT) == 0)
2893 return 0;
2894 - task = _nfs41_proc_sequence(clp, cred);
2895 + task = _nfs41_proc_sequence(clp, cred, &nfs41_sequence_ops);
2896 if (IS_ERR(task))
2897 ret = PTR_ERR(task);
2898 else
2899 @@ -6195,7 +6217,7 @@ static int nfs4_proc_sequence(struct nfs_client *clp, struct rpc_cred *cred)
2900 struct rpc_task *task;
2901 int ret;
2902
2903 - task = _nfs41_proc_sequence(clp, cred);
2904 + task = _nfs41_proc_sequence(clp, cred, &nfs41_sequence_privileged_ops);
2905 if (IS_ERR(task)) {
2906 ret = PTR_ERR(task);
2907 goto out;
2908 diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
2909 index 2878f97..b7f7538 100644
2910 --- a/fs/nfs/pnfs.c
2911 +++ b/fs/nfs/pnfs.c
2912 @@ -254,7 +254,7 @@ static void
2913 pnfs_layout_set_fail_bit(struct pnfs_layout_hdr *lo, int fail_bit)
2914 {
2915 lo->plh_retry_timestamp = jiffies;
2916 - if (test_and_set_bit(fail_bit, &lo->plh_flags))
2917 + if (!test_and_set_bit(fail_bit, &lo->plh_flags))
2918 atomic_inc(&lo->plh_refcount);
2919 }
2920
2921 diff --git a/fs/nfs/read.c b/fs/nfs/read.c
2922 index b6bdb18..a5e5d98 100644
2923 --- a/fs/nfs/read.c
2924 +++ b/fs/nfs/read.c
2925 @@ -91,12 +91,16 @@ void nfs_readdata_release(struct nfs_read_data *rdata)
2926 put_nfs_open_context(rdata->args.context);
2927 if (rdata->pages.pagevec != rdata->pages.page_array)
2928 kfree(rdata->pages.pagevec);
2929 - if (rdata != &read_header->rpc_data)
2930 - kfree(rdata);
2931 - else
2932 + if (rdata == &read_header->rpc_data) {
2933 rdata->header = NULL;
2934 + rdata = NULL;
2935 + }
2936 if (atomic_dec_and_test(&hdr->refcnt))
2937 hdr->completion_ops->completion(hdr);
2938 + /* Note: we only free the rpc_task after callbacks are done.
2939 + * See the comment in rpc_free_task() for why
2940 + */
2941 + kfree(rdata);
2942 }
2943 EXPORT_SYMBOL_GPL(nfs_readdata_release);
2944
2945 diff --git a/fs/nfs/super.c b/fs/nfs/super.c
2946 index 652d3f7..00be08f 100644
2947 --- a/fs/nfs/super.c
2948 +++ b/fs/nfs/super.c
2949 @@ -1150,7 +1150,7 @@ static int nfs_get_option_str(substring_t args[], char **option)
2950 {
2951 kfree(*option);
2952 *option = match_strdup(args);
2953 - return !option;
2954 + return !*option;
2955 }
2956
2957 static int nfs_get_option_ul(substring_t args[], unsigned long *option)
2958 diff --git a/fs/nfs/write.c b/fs/nfs/write.c
2959 index 9347ab7..8b67dc3 100644
2960 --- a/fs/nfs/write.c
2961 +++ b/fs/nfs/write.c
2962 @@ -126,12 +126,16 @@ void nfs_writedata_release(struct nfs_write_data *wdata)
2963 put_nfs_open_context(wdata->args.context);
2964 if (wdata->pages.pagevec != wdata->pages.page_array)
2965 kfree(wdata->pages.pagevec);
2966 - if (wdata != &write_header->rpc_data)
2967 - kfree(wdata);
2968 - else
2969 + if (wdata == &write_header->rpc_data) {
2970 wdata->header = NULL;
2971 + wdata = NULL;
2972 + }
2973 if (atomic_dec_and_test(&hdr->refcnt))
2974 hdr->completion_ops->completion(hdr);
2975 + /* Note: we only free the rpc_task after callbacks are done.
2976 + * See the comment in rpc_free_task() for why
2977 + */
2978 + kfree(wdata);
2979 }
2980 EXPORT_SYMBOL_GPL(nfs_writedata_release);
2981
2982 @@ -202,7 +206,6 @@ out:
2983 /* A writeback failed: mark the page as bad, and invalidate the page cache */
2984 static void nfs_set_pageerror(struct page *page)
2985 {
2986 - SetPageError(page);
2987 nfs_zap_mapping(page_file_mapping(page)->host, page_file_mapping(page));
2988 }
2989
2990 @@ -884,7 +887,7 @@ static bool nfs_write_pageuptodate(struct page *page, struct inode *inode)
2991 {
2992 if (nfs_have_delegated_attributes(inode))
2993 goto out;
2994 - if (NFS_I(inode)->cache_validity & NFS_INO_REVAL_PAGECACHE)
2995 + if (NFS_I(inode)->cache_validity & (NFS_INO_INVALID_DATA|NFS_INO_REVAL_PAGECACHE))
2996 return false;
2997 out:
2998 return PageUptodate(page) != 0;
2999 diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
3000 index 6c9a4b2..f75af01 100644
3001 --- a/fs/nfsd/nfs4proc.c
3002 +++ b/fs/nfsd/nfs4proc.c
3003 @@ -194,6 +194,7 @@ static __be32
3004 do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_open *open)
3005 {
3006 struct svc_fh *resfh;
3007 + int accmode;
3008 __be32 status;
3009
3010 resfh = kmalloc(sizeof(struct svc_fh), GFP_KERNEL);
3011 @@ -253,9 +254,10 @@ do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_o
3012 /* set reply cache */
3013 fh_copy_shallow(&open->op_openowner->oo_owner.so_replay.rp_openfh,
3014 &resfh->fh_handle);
3015 - if (!open->op_created)
3016 - status = do_open_permission(rqstp, resfh, open,
3017 - NFSD_MAY_NOP);
3018 + accmode = NFSD_MAY_NOP;
3019 + if (open->op_created)
3020 + accmode |= NFSD_MAY_OWNER_OVERRIDE;
3021 + status = do_open_permission(rqstp, resfh, open, accmode);
3022 set_change_info(&open->op_cinfo, current_fh);
3023 fh_dup2(current_fh, resfh);
3024 out:
3025 diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
3026 index d0237f8..503e15e 100644
3027 --- a/fs/nfsd/nfs4state.c
3028 +++ b/fs/nfsd/nfs4state.c
3029 @@ -2340,7 +2340,7 @@ nfsd4_init_slabs(void)
3030 if (openowner_slab == NULL)
3031 goto out_nomem;
3032 lockowner_slab = kmem_cache_create("nfsd4_lockowners",
3033 - sizeof(struct nfs4_openowner), 0, 0, NULL);
3034 + sizeof(struct nfs4_lockowner), 0, 0, NULL);
3035 if (lockowner_slab == NULL)
3036 goto out_nomem;
3037 file_slab = kmem_cache_create("nfsd4_files",
3038 diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
3039 index fd548d1..ac6850f 100644
3040 --- a/fs/nfsd/nfs4xdr.c
3041 +++ b/fs/nfsd/nfs4xdr.c
3042 @@ -2946,11 +2946,16 @@ nfsd4_encode_read(struct nfsd4_compoundres *resp, __be32 nfserr,
3043 len = maxcount;
3044 v = 0;
3045 while (len > 0) {
3046 - pn = resp->rqstp->rq_resused++;
3047 + pn = resp->rqstp->rq_resused;
3048 + if (!resp->rqstp->rq_respages[pn]) { /* ran out of pages */
3049 + maxcount -= len;
3050 + break;
3051 + }
3052 resp->rqstp->rq_vec[v].iov_base =
3053 page_address(resp->rqstp->rq_respages[pn]);
3054 resp->rqstp->rq_vec[v].iov_len =
3055 len < PAGE_SIZE ? len : PAGE_SIZE;
3056 + resp->rqstp->rq_resused++;
3057 v++;
3058 len -= PAGE_SIZE;
3059 }
3060 @@ -2996,6 +3001,8 @@ nfsd4_encode_readlink(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd
3061 return nfserr;
3062 if (resp->xbuf->page_len)
3063 return nfserr_resource;
3064 + if (!resp->rqstp->rq_respages[resp->rqstp->rq_resused])
3065 + return nfserr_resource;
3066
3067 page = page_address(resp->rqstp->rq_respages[resp->rqstp->rq_resused++]);
3068
3069 @@ -3045,6 +3052,8 @@ nfsd4_encode_readdir(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4
3070 return nfserr;
3071 if (resp->xbuf->page_len)
3072 return nfserr_resource;
3073 + if (!resp->rqstp->rq_respages[resp->rqstp->rq_resused])
3074 + return nfserr_resource;
3075
3076 RESERVE_SPACE(NFS4_VERIFIER_SIZE);
3077 savep = p;
3078 diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
3079 index 2013aa00..30d3784 100644
3080 --- a/fs/nfsd/nfssvc.c
3081 +++ b/fs/nfsd/nfssvc.c
3082 @@ -640,7 +640,7 @@ nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp)
3083 }
3084
3085 /* Store reply in cache. */
3086 - nfsd_cache_update(rqstp, proc->pc_cachetype, statp + 1);
3087 + nfsd_cache_update(rqstp, rqstp->rq_cachetype, statp + 1);
3088 return 1;
3089 }
3090
3091 diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
3092 index c120b48..f59169e 100644
3093 --- a/fs/nfsd/vfs.c
3094 +++ b/fs/nfsd/vfs.c
3095 @@ -1485,13 +1485,19 @@ do_nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,
3096 case NFS3_CREATE_EXCLUSIVE:
3097 if ( dchild->d_inode->i_mtime.tv_sec == v_mtime
3098 && dchild->d_inode->i_atime.tv_sec == v_atime
3099 - && dchild->d_inode->i_size == 0 )
3100 + && dchild->d_inode->i_size == 0 ) {
3101 + if (created)
3102 + *created = 1;
3103 break;
3104 + }
3105 case NFS4_CREATE_EXCLUSIVE4_1:
3106 if ( dchild->d_inode->i_mtime.tv_sec == v_mtime
3107 && dchild->d_inode->i_atime.tv_sec == v_atime
3108 - && dchild->d_inode->i_size == 0 )
3109 + && dchild->d_inode->i_size == 0 ) {
3110 + if (created)
3111 + *created = 1;
3112 goto set_attr;
3113 + }
3114 /* fallthru */
3115 case NFS3_CREATE_GUARDED:
3116 err = nfserr_exist;
3117 diff --git a/fs/proc/array.c b/fs/proc/array.c
3118 index c1c207c..bd31e02 100644
3119 --- a/fs/proc/array.c
3120 +++ b/fs/proc/array.c
3121 @@ -212,7 +212,7 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,
3122 group_info = cred->group_info;
3123 task_unlock(p);
3124
3125 - for (g = 0; g < min(group_info->ngroups, NGROUPS_SMALL); g++)
3126 + for (g = 0; g < group_info->ngroups; g++)
3127 seq_printf(m, "%d ",
3128 from_kgid_munged(user_ns, GROUP_AT(group_info, g)));
3129 put_cred(cred);
3130 diff --git a/fs/splice.c b/fs/splice.c
3131 index 13e5b47..48c7bd1 100644
3132 --- a/fs/splice.c
3133 +++ b/fs/splice.c
3134 @@ -696,8 +696,10 @@ static int pipe_to_sendpage(struct pipe_inode_info *pipe,
3135 return -EINVAL;
3136
3137 more = (sd->flags & SPLICE_F_MORE) ? MSG_MORE : 0;
3138 - if (sd->len < sd->total_len)
3139 +
3140 + if (sd->len < sd->total_len && pipe->nrbufs > 1)
3141 more |= MSG_SENDPAGE_NOTLAST;
3142 +
3143 return file->f_op->sendpage(file, buf->page, buf->offset,
3144 sd->len, &pos, more);
3145 }
3146 diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
3147 index e57e2da..e0e9ee0 100644
3148 --- a/fs/xfs/xfs_aops.c
3149 +++ b/fs/xfs/xfs_aops.c
3150 @@ -124,7 +124,7 @@ xfs_setfilesize_trans_alloc(
3151 ioend->io_append_trans = tp;
3152
3153 /*
3154 - * We will pass freeze protection with a transaction. So tell lockdep
3155 + * We may pass freeze protection with a transaction. So tell lockdep
3156 * we released it.
3157 */
3158 rwsem_release(&ioend->io_inode->i_sb->s_writers.lock_map[SB_FREEZE_FS-1],
3159 @@ -149,11 +149,13 @@ xfs_setfilesize(
3160 xfs_fsize_t isize;
3161
3162 /*
3163 - * The transaction was allocated in the I/O submission thread,
3164 - * thus we need to mark ourselves as beeing in a transaction
3165 - * manually.
3166 + * The transaction may have been allocated in the I/O submission thread,
3167 + * thus we need to mark ourselves as beeing in a transaction manually.
3168 + * Similarly for freeze protection.
3169 */
3170 current_set_flags_nested(&tp->t_pflags, PF_FSTRANS);
3171 + rwsem_acquire_read(&VFS_I(ip)->i_sb->s_writers.lock_map[SB_FREEZE_FS-1],
3172 + 0, 1, _THIS_IP_);
3173
3174 xfs_ilock(ip, XFS_ILOCK_EXCL);
3175 isize = xfs_new_eof(ip, ioend->io_offset + ioend->io_size);
3176 @@ -187,7 +189,8 @@ xfs_finish_ioend(
3177
3178 if (ioend->io_type == XFS_IO_UNWRITTEN)
3179 queue_work(mp->m_unwritten_workqueue, &ioend->io_work);
3180 - else if (ioend->io_append_trans)
3181 + else if (ioend->io_append_trans ||
3182 + (ioend->io_isdirect && xfs_ioend_is_append(ioend)))
3183 queue_work(mp->m_data_workqueue, &ioend->io_work);
3184 else
3185 xfs_destroy_ioend(ioend);
3186 @@ -205,15 +208,6 @@ xfs_end_io(
3187 struct xfs_inode *ip = XFS_I(ioend->io_inode);
3188 int error = 0;
3189
3190 - if (ioend->io_append_trans) {
3191 - /*
3192 - * We've got freeze protection passed with the transaction.
3193 - * Tell lockdep about it.
3194 - */
3195 - rwsem_acquire_read(
3196 - &ioend->io_inode->i_sb->s_writers.lock_map[SB_FREEZE_FS-1],
3197 - 0, 1, _THIS_IP_);
3198 - }
3199 if (XFS_FORCED_SHUTDOWN(ip->i_mount)) {
3200 ioend->io_error = -EIO;
3201 goto done;
3202 @@ -226,35 +220,31 @@ xfs_end_io(
3203 * range to normal written extens after the data I/O has finished.
3204 */
3205 if (ioend->io_type == XFS_IO_UNWRITTEN) {
3206 + error = xfs_iomap_write_unwritten(ip, ioend->io_offset,
3207 + ioend->io_size);
3208 + } else if (ioend->io_isdirect && xfs_ioend_is_append(ioend)) {
3209 /*
3210 - * For buffered I/O we never preallocate a transaction when
3211 - * doing the unwritten extent conversion, but for direct I/O
3212 - * we do not know if we are converting an unwritten extent
3213 - * or not at the point where we preallocate the transaction.
3214 + * For direct I/O we do not know if we need to allocate blocks
3215 + * or not so we can't preallocate an append transaction as that
3216 + * results in nested reservations and log space deadlocks. Hence
3217 + * allocate the transaction here. While this is sub-optimal and
3218 + * can block IO completion for some time, we're stuck with doing
3219 + * it this way until we can pass the ioend to the direct IO
3220 + * allocation callbacks and avoid nesting that way.
3221 */
3222 - if (ioend->io_append_trans) {
3223 - ASSERT(ioend->io_isdirect);
3224 -
3225 - current_set_flags_nested(
3226 - &ioend->io_append_trans->t_pflags, PF_FSTRANS);
3227 - xfs_trans_cancel(ioend->io_append_trans, 0);
3228 - }
3229 -
3230 - error = xfs_iomap_write_unwritten(ip, ioend->io_offset,
3231 - ioend->io_size);
3232 - if (error) {
3233 - ioend->io_error = -error;
3234 + error = xfs_setfilesize_trans_alloc(ioend);
3235 + if (error)
3236 goto done;
3237 - }
3238 + error = xfs_setfilesize(ioend);
3239 } else if (ioend->io_append_trans) {
3240 error = xfs_setfilesize(ioend);
3241 - if (error)
3242 - ioend->io_error = -error;
3243 } else {
3244 ASSERT(!xfs_ioend_is_append(ioend));
3245 }
3246
3247 done:
3248 + if (error)
3249 + ioend->io_error = -error;
3250 xfs_destroy_ioend(ioend);
3251 }
3252
3253 @@ -1432,25 +1422,21 @@ xfs_vm_direct_IO(
3254 size_t size = iov_length(iov, nr_segs);
3255
3256 /*
3257 - * We need to preallocate a transaction for a size update
3258 - * here. In the case that this write both updates the size
3259 - * and converts at least on unwritten extent we will cancel
3260 - * the still clean transaction after the I/O has finished.
3261 + * We cannot preallocate a size update transaction here as we
3262 + * don't know whether allocation is necessary or not. Hence we
3263 + * can only tell IO completion that one is necessary if we are
3264 + * not doing unwritten extent conversion.
3265 */
3266 iocb->private = ioend = xfs_alloc_ioend(inode, XFS_IO_DIRECT);
3267 - if (offset + size > XFS_I(inode)->i_d.di_size) {
3268 - ret = xfs_setfilesize_trans_alloc(ioend);
3269 - if (ret)
3270 - goto out_destroy_ioend;
3271 + if (offset + size > XFS_I(inode)->i_d.di_size)
3272 ioend->io_isdirect = 1;
3273 - }
3274
3275 ret = __blockdev_direct_IO(rw, iocb, inode, bdev, iov,
3276 offset, nr_segs,
3277 xfs_get_blocks_direct,
3278 xfs_end_io_direct_write, NULL, 0);
3279 if (ret != -EIOCBQUEUED && iocb->private)
3280 - goto out_trans_cancel;
3281 + goto out_destroy_ioend;
3282 } else {
3283 ret = __blockdev_direct_IO(rw, iocb, inode, bdev, iov,
3284 offset, nr_segs,
3285 @@ -1460,15 +1446,6 @@ xfs_vm_direct_IO(
3286
3287 return ret;
3288
3289 -out_trans_cancel:
3290 - if (ioend->io_append_trans) {
3291 - current_set_flags_nested(&ioend->io_append_trans->t_pflags,
3292 - PF_FSTRANS);
3293 - rwsem_acquire_read(
3294 - &inode->i_sb->s_writers.lock_map[SB_FREEZE_FS-1],
3295 - 0, 1, _THIS_IP_);
3296 - xfs_trans_cancel(ioend->io_append_trans, 0);
3297 - }
3298 out_destroy_ioend:
3299 xfs_destroy_ioend(ioend);
3300 return ret;
3301 diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c
3302 index 4dad756..a54c292 100644
3303 --- a/fs/xfs/xfs_log.c
3304 +++ b/fs/xfs/xfs_log.c
3305 @@ -458,7 +458,8 @@ xfs_log_reserve(
3306 tic->t_trans_type = t_type;
3307 *ticp = tic;
3308
3309 - xlog_grant_push_ail(log, tic->t_unit_res * tic->t_cnt);
3310 + xlog_grant_push_ail(log, tic->t_cnt ? tic->t_unit_res * tic->t_cnt
3311 + : tic->t_unit_res);
3312
3313 trace_xfs_log_reserve(log, tic);
3314
3315 diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c
3316 index 2e86fa0..335a340 100644
3317 --- a/fs/xfs/xfs_qm.c
3318 +++ b/fs/xfs/xfs_qm.c
3319 @@ -1453,7 +1453,7 @@ xfs_qm_dqreclaim_one(
3320 int error;
3321
3322 if (!xfs_dqlock_nowait(dqp))
3323 - goto out_busy;
3324 + goto out_move_tail;
3325
3326 /*
3327 * This dquot has acquired a reference in the meantime remove it from
3328 @@ -1476,7 +1476,7 @@ xfs_qm_dqreclaim_one(
3329 * getting flushed to disk, we don't want to reclaim it.
3330 */
3331 if (!xfs_dqflock_nowait(dqp))
3332 - goto out_busy;
3333 + goto out_unlock_move_tail;
3334
3335 if (XFS_DQ_IS_DIRTY(dqp)) {
3336 struct xfs_buf *bp = NULL;
3337 @@ -1487,7 +1487,7 @@ xfs_qm_dqreclaim_one(
3338 if (error) {
3339 xfs_warn(mp, "%s: dquot %p flush failed",
3340 __func__, dqp);
3341 - goto out_busy;
3342 + goto out_unlock_move_tail;
3343 }
3344
3345 xfs_buf_delwri_queue(bp, buffer_list);
3346 @@ -1496,7 +1496,7 @@ xfs_qm_dqreclaim_one(
3347 * Give the dquot another try on the freelist, as the
3348 * flushing will take some time.
3349 */
3350 - goto out_busy;
3351 + goto out_unlock_move_tail;
3352 }
3353 xfs_dqfunlock(dqp);
3354
3355 @@ -1515,14 +1515,13 @@ xfs_qm_dqreclaim_one(
3356 XFS_STATS_INC(xs_qm_dqreclaims);
3357 return;
3358
3359 -out_busy:
3360 - xfs_dqunlock(dqp);
3361 -
3362 /*
3363 * Move the dquot to the tail of the list so that we don't spin on it.
3364 */
3365 +out_unlock_move_tail:
3366 + xfs_dqunlock(dqp);
3367 +out_move_tail:
3368 list_move_tail(&dqp->q_lru, &qi->qi_lru_list);
3369 -
3370 trace_xfs_dqreclaim_busy(dqp);
3371 XFS_STATS_INC(xs_qm_dqreclaim_misses);
3372 }
3373 diff --git a/include/asm-generic/tlb.h b/include/asm-generic/tlb.h
3374 index ed6642a..25f01d0 100644
3375 --- a/include/asm-generic/tlb.h
3376 +++ b/include/asm-generic/tlb.h
3377 @@ -78,6 +78,14 @@ struct mmu_gather_batch {
3378 #define MAX_GATHER_BATCH \
3379 ((PAGE_SIZE - sizeof(struct mmu_gather_batch)) / sizeof(void *))
3380
3381 +/*
3382 + * Limit the maximum number of mmu_gather batches to reduce a risk of soft
3383 + * lockups for non-preemptible kernels on huge machines when a lot of memory
3384 + * is zapped during unmapping.
3385 + * 10K pages freed at once should be safe even without a preemption point.
3386 + */
3387 +#define MAX_GATHER_BATCH_COUNT (10000UL/MAX_GATHER_BATCH)
3388 +
3389 /* struct mmu_gather is an opaque type used by the mm code for passing around
3390 * any data needed by arch specific code for tlb_remove_page.
3391 */
3392 @@ -96,6 +104,7 @@ struct mmu_gather {
3393 struct mmu_gather_batch *active;
3394 struct mmu_gather_batch local;
3395 struct page *__pages[MMU_GATHER_BUNDLE];
3396 + unsigned int batch_count;
3397 };
3398
3399 #define HAVE_GENERIC_MMU_GATHER
3400 diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h
3401 index cfcc6bf..de0628e 100644
3402 --- a/include/linux/binfmts.h
3403 +++ b/include/linux/binfmts.h
3404 @@ -114,6 +114,7 @@ extern int setup_arg_pages(struct linux_binprm * bprm,
3405 unsigned long stack_top,
3406 int executable_stack);
3407 extern int bprm_mm_init(struct linux_binprm *bprm);
3408 +extern int bprm_change_interp(char *interp, struct linux_binprm *bprm);
3409 extern int copy_strings_kernel(int argc, const char *const *argv,
3410 struct linux_binprm *bprm);
3411 extern int prepare_bprm_creds(struct linux_binprm *bprm);
3412 diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
3413 index f8a030c..4cd1d0f 100644
3414 --- a/include/linux/cgroup.h
3415 +++ b/include/linux/cgroup.h
3416 @@ -34,7 +34,6 @@ extern int cgroup_lock_is_held(void);
3417 extern bool cgroup_lock_live_group(struct cgroup *cgrp);
3418 extern void cgroup_unlock(void);
3419 extern void cgroup_fork(struct task_struct *p);
3420 -extern void cgroup_fork_callbacks(struct task_struct *p);
3421 extern void cgroup_post_fork(struct task_struct *p);
3422 extern void cgroup_exit(struct task_struct *p, int run_callbacks);
3423 extern int cgroupstats_build(struct cgroupstats *stats,
3424 diff --git a/include/linux/freezer.h b/include/linux/freezer.h
3425 index d09af4b..ee89932 100644
3426 --- a/include/linux/freezer.h
3427 +++ b/include/linux/freezer.h
3428 @@ -75,28 +75,62 @@ static inline bool cgroup_freezing(struct task_struct *task)
3429 */
3430
3431
3432 -/* Tell the freezer not to count the current task as freezable. */
3433 +/**
3434 + * freezer_do_not_count - tell freezer to ignore %current
3435 + *
3436 + * Tell freezers to ignore the current task when determining whether the
3437 + * target frozen state is reached. IOW, the current task will be
3438 + * considered frozen enough by freezers.
3439 + *
3440 + * The caller shouldn't do anything which isn't allowed for a frozen task
3441 + * until freezer_cont() is called. Usually, freezer[_do_not]_count() pair
3442 + * wrap a scheduling operation and nothing much else.
3443 + */
3444 static inline void freezer_do_not_count(void)
3445 {
3446 current->flags |= PF_FREEZER_SKIP;
3447 }
3448
3449 -/*
3450 - * Tell the freezer to count the current task as freezable again and try to
3451 - * freeze it.
3452 +/**
3453 + * freezer_count - tell freezer to stop ignoring %current
3454 + *
3455 + * Undo freezer_do_not_count(). It tells freezers that %current should be
3456 + * considered again and tries to freeze if freezing condition is already in
3457 + * effect.
3458 */
3459 static inline void freezer_count(void)
3460 {
3461 current->flags &= ~PF_FREEZER_SKIP;
3462 + /*
3463 + * If freezing is in progress, the following paired with smp_mb()
3464 + * in freezer_should_skip() ensures that either we see %true
3465 + * freezing() or freezer_should_skip() sees !PF_FREEZER_SKIP.
3466 + */
3467 + smp_mb();
3468 try_to_freeze();
3469 }
3470
3471 -/*
3472 - * Check if the task should be counted as freezable by the freezer
3473 +/**
3474 + * freezer_should_skip - whether to skip a task when determining frozen
3475 + * state is reached
3476 + * @p: task in quesion
3477 + *
3478 + * This function is used by freezers after establishing %true freezing() to
3479 + * test whether a task should be skipped when determining the target frozen
3480 + * state is reached. IOW, if this function returns %true, @p is considered
3481 + * frozen enough.
3482 */
3483 -static inline int freezer_should_skip(struct task_struct *p)
3484 +static inline bool freezer_should_skip(struct task_struct *p)
3485 {
3486 - return !!(p->flags & PF_FREEZER_SKIP);
3487 + /*
3488 + * The following smp_mb() paired with the one in freezer_count()
3489 + * ensures that either freezer_count() sees %true freezing() or we
3490 + * see cleared %PF_FREEZER_SKIP and return %false. This makes it
3491 + * impossible for a task to slip frozen state testing after
3492 + * clearing %PF_FREEZER_SKIP.
3493 + */
3494 + smp_mb();
3495 + return p->flags & PF_FREEZER_SKIP;
3496 }
3497
3498 /*
3499 diff --git a/include/linux/hugetlb_cgroup.h b/include/linux/hugetlb_cgroup.h
3500 index d73878c..ce8217f 100644
3501 --- a/include/linux/hugetlb_cgroup.h
3502 +++ b/include/linux/hugetlb_cgroup.h
3503 @@ -62,7 +62,7 @@ extern void hugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages,
3504 struct page *page);
3505 extern void hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages,
3506 struct hugetlb_cgroup *h_cg);
3507 -extern int hugetlb_cgroup_file_init(int idx) __init;
3508 +extern void hugetlb_cgroup_file_init(void) __init;
3509 extern void hugetlb_cgroup_migrate(struct page *oldhpage,
3510 struct page *newhpage);
3511
3512 @@ -111,9 +111,8 @@ hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages,
3513 return;
3514 }
3515
3516 -static inline int __init hugetlb_cgroup_file_init(int idx)
3517 +static inline void hugetlb_cgroup_file_init(void)
3518 {
3519 - return 0;
3520 }
3521
3522 static inline void hugetlb_cgroup_migrate(struct page *oldhpage,
3523 diff --git a/include/linux/kernel.h b/include/linux/kernel.h
3524 index 7d8dfc7..b35fd0d 100644
3525 --- a/include/linux/kernel.h
3526 +++ b/include/linux/kernel.h
3527 @@ -77,13 +77,15 @@
3528
3529 /*
3530 * Divide positive or negative dividend by positive divisor and round
3531 - * to closest integer. Result is undefined for negative divisors.
3532 + * to closest integer. Result is undefined for negative divisors and
3533 + * for negative dividends if the divisor variable type is unsigned.
3534 */
3535 #define DIV_ROUND_CLOSEST(x, divisor)( \
3536 { \
3537 typeof(x) __x = x; \
3538 typeof(divisor) __d = divisor; \
3539 - (((typeof(x))-1) > 0 || (__x) > 0) ? \
3540 + (((typeof(x))-1) > 0 || \
3541 + ((typeof(divisor))-1) > 0 || (__x) > 0) ? \
3542 (((__x) + ((__d) / 2)) / (__d)) : \
3543 (((__x) - ((__d) / 2)) / (__d)); \
3544 } \
3545 diff --git a/include/linux/libata.h b/include/linux/libata.h
3546 index 77eeeda..e931c9a 100644
3547 --- a/include/linux/libata.h
3548 +++ b/include/linux/libata.h
3549 @@ -163,6 +163,7 @@ enum {
3550
3551 ATA_DFLAG_DA = (1 << 26), /* device supports Device Attention */
3552 ATA_DFLAG_DEVSLP = (1 << 27), /* device supports Device Sleep */
3553 + ATA_DFLAG_ACPI_DISABLED = (1 << 28), /* ACPI for the device is disabled */
3554
3555 ATA_DEV_UNKNOWN = 0, /* unknown device */
3556 ATA_DEV_ATA = 1, /* ATA device */
3557 diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h
3558 index b5d1384..70473da 100644
3559 --- a/include/linux/page-flags.h
3560 +++ b/include/linux/page-flags.h
3561 @@ -362,7 +362,7 @@ static inline void ClearPageCompound(struct page *page)
3562 * pages on the LRU and/or pagecache.
3563 */
3564 TESTPAGEFLAG(Compound, compound)
3565 -__PAGEFLAG(Head, compound)
3566 +__SETPAGEFLAG(Head, compound) __CLEARPAGEFLAG(Head, compound)
3567
3568 /*
3569 * PG_reclaim is used in combination with PG_compound to mark the
3570 @@ -374,8 +374,14 @@ __PAGEFLAG(Head, compound)
3571 * PG_compound & PG_reclaim => Tail page
3572 * PG_compound & ~PG_reclaim => Head page
3573 */
3574 +#define PG_head_mask ((1L << PG_compound))
3575 #define PG_head_tail_mask ((1L << PG_compound) | (1L << PG_reclaim))
3576
3577 +static inline int PageHead(struct page *page)
3578 +{
3579 + return ((page->flags & PG_head_tail_mask) == PG_head_mask);
3580 +}
3581 +
3582 static inline int PageTail(struct page *page)
3583 {
3584 return ((page->flags & PG_head_tail_mask) == PG_head_tail_mask);
3585 diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
3586 index 9d36b82..d16ad56 100644
3587 --- a/include/linux/pci_ids.h
3588 +++ b/include/linux/pci_ids.h
3589 @@ -1568,6 +1568,7 @@
3590 #define PCI_DEVICE_ID_RICOH_RL5C476 0x0476
3591 #define PCI_DEVICE_ID_RICOH_RL5C478 0x0478
3592 #define PCI_DEVICE_ID_RICOH_R5C822 0x0822
3593 +#define PCI_DEVICE_ID_RICOH_R5CE822 0xe822
3594 #define PCI_DEVICE_ID_RICOH_R5CE823 0xe823
3595 #define PCI_DEVICE_ID_RICOH_R5C832 0x0832
3596 #define PCI_DEVICE_ID_RICOH_R5C843 0x0843
3597 diff --git a/include/net/gro_cells.h b/include/net/gro_cells.h
3598 index 4fd8a4b..e5062c9 100644
3599 --- a/include/net/gro_cells.h
3600 +++ b/include/net/gro_cells.h
3601 @@ -17,7 +17,6 @@ struct gro_cells {
3602
3603 static inline void gro_cells_receive(struct gro_cells *gcells, struct sk_buff *skb)
3604 {
3605 - unsigned long flags;
3606 struct gro_cell *cell = gcells->cells;
3607 struct net_device *dev = skb->dev;
3608
3609 @@ -35,32 +34,37 @@ static inline void gro_cells_receive(struct gro_cells *gcells, struct sk_buff *s
3610 return;
3611 }
3612
3613 - spin_lock_irqsave(&cell->napi_skbs.lock, flags);
3614 + /* We run in BH context */
3615 + spin_lock(&cell->napi_skbs.lock);
3616
3617 __skb_queue_tail(&cell->napi_skbs, skb);
3618 if (skb_queue_len(&cell->napi_skbs) == 1)
3619 napi_schedule(&cell->napi);
3620
3621 - spin_unlock_irqrestore(&cell->napi_skbs.lock, flags);
3622 + spin_unlock(&cell->napi_skbs.lock);
3623 }
3624
3625 +/* called unser BH context */
3626 static inline int gro_cell_poll(struct napi_struct *napi, int budget)
3627 {
3628 struct gro_cell *cell = container_of(napi, struct gro_cell, napi);
3629 struct sk_buff *skb;
3630 int work_done = 0;
3631
3632 + spin_lock(&cell->napi_skbs.lock);
3633 while (work_done < budget) {
3634 - skb = skb_dequeue(&cell->napi_skbs);
3635 + skb = __skb_dequeue(&cell->napi_skbs);
3636 if (!skb)
3637 break;
3638 -
3639 + spin_unlock(&cell->napi_skbs.lock);
3640 napi_gro_receive(napi, skb);
3641 work_done++;
3642 + spin_lock(&cell->napi_skbs.lock);
3643 }
3644
3645 if (work_done < budget)
3646 napi_complete(napi);
3647 + spin_unlock(&cell->napi_skbs.lock);
3648 return work_done;
3649 }
3650
3651 diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h
3652 index ba1d361..1832927 100644
3653 --- a/include/net/inet_connection_sock.h
3654 +++ b/include/net/inet_connection_sock.h
3655 @@ -318,6 +318,7 @@ extern void inet_csk_reqsk_queue_prune(struct sock *parent,
3656 const unsigned long max_rto);
3657
3658 extern void inet_csk_destroy_sock(struct sock *sk);
3659 +extern void inet_csk_prepare_forced_close(struct sock *sk);
3660
3661 /*
3662 * LISTEN is a special case for poll..
3663 diff --git a/include/net/ndisc.h b/include/net/ndisc.h
3664 index 980d263..6b305d7 100644
3665 --- a/include/net/ndisc.h
3666 +++ b/include/net/ndisc.h
3667 @@ -78,6 +78,13 @@ struct ra_msg {
3668 __be32 retrans_timer;
3669 };
3670
3671 +struct rd_msg {
3672 + struct icmp6hdr icmph;
3673 + struct in6_addr target;
3674 + struct in6_addr dest;
3675 + __u8 opt[0];
3676 +};
3677 +
3678 struct nd_opt_hdr {
3679 __u8 nd_opt_type;
3680 __u8 nd_opt_len;
3681 diff --git a/kernel/cgroup.c b/kernel/cgroup.c
3682 index f24f724..ad99830 100644
3683 --- a/kernel/cgroup.c
3684 +++ b/kernel/cgroup.c
3685 @@ -2744,9 +2744,7 @@ static int cgroup_create_dir(struct cgroup *cgrp, struct dentry *dentry,
3686 dentry->d_fsdata = cgrp;
3687 inc_nlink(parent->d_inode);
3688 rcu_assign_pointer(cgrp->dentry, dentry);
3689 - dget(dentry);
3690 }
3691 - dput(dentry);
3692
3693 return error;
3694 }
3695 @@ -2791,12 +2789,6 @@ static int cgroup_add_file(struct cgroup *cgrp, struct cgroup_subsys *subsys,
3696
3697 simple_xattrs_init(&cft->xattrs);
3698
3699 - /* does @cft->flags tell us to skip creation on @cgrp? */
3700 - if ((cft->flags & CFTYPE_NOT_ON_ROOT) && !cgrp->parent)
3701 - return 0;
3702 - if ((cft->flags & CFTYPE_ONLY_ON_ROOT) && cgrp->parent)
3703 - return 0;
3704 -
3705 if (subsys && !test_bit(ROOT_NOPREFIX, &cgrp->root->flags)) {
3706 strcpy(name, subsys->name);
3707 strcat(name, ".");
3708 @@ -2837,6 +2829,12 @@ static int cgroup_addrm_files(struct cgroup *cgrp, struct cgroup_subsys *subsys,
3709 int err, ret = 0;
3710
3711 for (cft = cfts; cft->name[0] != '\0'; cft++) {
3712 + /* does cft->flags tell us to skip this file on @cgrp? */
3713 + if ((cft->flags & CFTYPE_NOT_ON_ROOT) && !cgrp->parent)
3714 + continue;
3715 + if ((cft->flags & CFTYPE_ONLY_ON_ROOT) && cgrp->parent)
3716 + continue;
3717 +
3718 if (is_add)
3719 err = cgroup_add_file(cgrp, subsys, cft);
3720 else
3721 @@ -4832,44 +4830,19 @@ void cgroup_fork(struct task_struct *child)
3722 }
3723
3724 /**
3725 - * cgroup_fork_callbacks - run fork callbacks
3726 - * @child: the new task
3727 - *
3728 - * Called on a new task very soon before adding it to the
3729 - * tasklist. No need to take any locks since no-one can
3730 - * be operating on this task.
3731 - */
3732 -void cgroup_fork_callbacks(struct task_struct *child)
3733 -{
3734 - if (need_forkexit_callback) {
3735 - int i;
3736 - for (i = 0; i < CGROUP_SUBSYS_COUNT; i++) {
3737 - struct cgroup_subsys *ss = subsys[i];
3738 -
3739 - /*
3740 - * forkexit callbacks are only supported for
3741 - * builtin subsystems.
3742 - */
3743 - if (!ss || ss->module)
3744 - continue;
3745 -
3746 - if (ss->fork)
3747 - ss->fork(child);
3748 - }
3749 - }
3750 -}
3751 -
3752 -/**
3753 * cgroup_post_fork - called on a new task after adding it to the task list
3754 * @child: the task in question
3755 *
3756 - * Adds the task to the list running through its css_set if necessary.
3757 - * Has to be after the task is visible on the task list in case we race
3758 - * with the first call to cgroup_iter_start() - to guarantee that the
3759 - * new task ends up on its list.
3760 + * Adds the task to the list running through its css_set if necessary and
3761 + * call the subsystem fork() callbacks. Has to be after the task is
3762 + * visible on the task list in case we race with the first call to
3763 + * cgroup_iter_start() - to guarantee that the new task ends up on its
3764 + * list.
3765 */
3766 void cgroup_post_fork(struct task_struct *child)
3767 {
3768 + int i;
3769 +
3770 /*
3771 * use_task_css_set_links is set to 1 before we walk the tasklist
3772 * under the tasklist_lock and we read it here after we added the child
3773 @@ -4889,7 +4862,30 @@ void cgroup_post_fork(struct task_struct *child)
3774 task_unlock(child);
3775 write_unlock(&css_set_lock);
3776 }
3777 +
3778 + /*
3779 + * Call ss->fork(). This must happen after @child is linked on
3780 + * css_set; otherwise, @child might change state between ->fork()
3781 + * and addition to css_set.
3782 + */
3783 + if (need_forkexit_callback) {
3784 + for (i = 0; i < CGROUP_SUBSYS_COUNT; i++) {
3785 + struct cgroup_subsys *ss = subsys[i];
3786 +
3787 + /*
3788 + * fork/exit callbacks are supported only for
3789 + * builtin subsystems and we don't need further
3790 + * synchronization as they never go away.
3791 + */
3792 + if (!ss || ss->module)
3793 + continue;
3794 +
3795 + if (ss->fork)
3796 + ss->fork(child);
3797 + }
3798 + }
3799 }
3800 +
3801 /**
3802 * cgroup_exit - detach cgroup from exiting task
3803 * @tsk: pointer to task_struct of exiting process
3804 diff --git a/kernel/cgroup_freezer.c b/kernel/cgroup_freezer.c
3805 index b1724ce..12bfedb 100644
3806 --- a/kernel/cgroup_freezer.c
3807 +++ b/kernel/cgroup_freezer.c
3808 @@ -186,23 +186,15 @@ static void freezer_fork(struct task_struct *task)
3809 {
3810 struct freezer *freezer;
3811
3812 - /*
3813 - * No lock is needed, since the task isn't on tasklist yet,
3814 - * so it can't be moved to another cgroup, which means the
3815 - * freezer won't be removed and will be valid during this
3816 - * function call. Nevertheless, apply RCU read-side critical
3817 - * section to suppress RCU lockdep false positives.
3818 - */
3819 rcu_read_lock();
3820 freezer = task_freezer(task);
3821 - rcu_read_unlock();
3822
3823 /*
3824 * The root cgroup is non-freezable, so we can skip the
3825 * following check.
3826 */
3827 if (!freezer->css.cgroup->parent)
3828 - return;
3829 + goto out;
3830
3831 spin_lock_irq(&freezer->lock);
3832 BUG_ON(freezer->state == CGROUP_FROZEN);
3833 @@ -210,7 +202,10 @@ static void freezer_fork(struct task_struct *task)
3834 /* Locking avoids race with FREEZING -> THAWED transitions. */
3835 if (freezer->state == CGROUP_FREEZING)
3836 freeze_task(task);
3837 +
3838 spin_unlock_irq(&freezer->lock);
3839 +out:
3840 + rcu_read_unlock();
3841 }
3842
3843 /*
3844 diff --git a/kernel/fork.c b/kernel/fork.c
3845 index 8b20ab7..acc4cb6 100644
3846 --- a/kernel/fork.c
3847 +++ b/kernel/fork.c
3848 @@ -1135,7 +1135,6 @@ static struct task_struct *copy_process(unsigned long clone_flags,
3849 {
3850 int retval;
3851 struct task_struct *p;
3852 - int cgroup_callbacks_done = 0;
3853
3854 if ((clone_flags & (CLONE_NEWNS|CLONE_FS)) == (CLONE_NEWNS|CLONE_FS))
3855 return ERR_PTR(-EINVAL);
3856 @@ -1393,12 +1392,6 @@ static struct task_struct *copy_process(unsigned long clone_flags,
3857 INIT_LIST_HEAD(&p->thread_group);
3858 p->task_works = NULL;
3859
3860 - /* Now that the task is set up, run cgroup callbacks if
3861 - * necessary. We need to run them before the task is visible
3862 - * on the tasklist. */
3863 - cgroup_fork_callbacks(p);
3864 - cgroup_callbacks_done = 1;
3865 -
3866 /* Need tasklist lock for parent etc handling! */
3867 write_lock_irq(&tasklist_lock);
3868
3869 @@ -1503,7 +1496,7 @@ bad_fork_cleanup_cgroup:
3870 #endif
3871 if (clone_flags & CLONE_THREAD)
3872 threadgroup_change_end(current);
3873 - cgroup_exit(p, cgroup_callbacks_done);
3874 + cgroup_exit(p, 0);
3875 delayacct_tsk_free(p);
3876 module_put(task_thread_info(p)->exec_domain->module);
3877 bad_fork_cleanup_count:
3878 diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
3879 index 4c69326..e48caf8 100644
3880 --- a/kernel/irq/manage.c
3881 +++ b/kernel/irq/manage.c
3882 @@ -716,6 +716,7 @@ static void
3883 irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action)
3884 {
3885 cpumask_var_t mask;
3886 + bool valid = true;
3887
3888 if (!test_and_clear_bit(IRQTF_AFFINITY, &action->thread_flags))
3889 return;
3890 @@ -730,10 +731,18 @@ irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action)
3891 }
3892
3893 raw_spin_lock_irq(&desc->lock);
3894 - cpumask_copy(mask, desc->irq_data.affinity);
3895 + /*
3896 + * This code is triggered unconditionally. Check the affinity
3897 + * mask pointer. For CPU_MASK_OFFSTACK=n this is optimized out.
3898 + */
3899 + if (desc->irq_data.affinity)
3900 + cpumask_copy(mask, desc->irq_data.affinity);
3901 + else
3902 + valid = false;
3903 raw_spin_unlock_irq(&desc->lock);
3904
3905 - set_cpus_allowed_ptr(current, mask);
3906 + if (valid)
3907 + set_cpus_allowed_ptr(current, mask);
3908 free_cpumask_var(mask);
3909 }
3910 #else
3911 @@ -936,6 +945,16 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
3912 */
3913 get_task_struct(t);
3914 new->thread = t;
3915 + /*
3916 + * Tell the thread to set its affinity. This is
3917 + * important for shared interrupt handlers as we do
3918 + * not invoke setup_affinity() for the secondary
3919 + * handlers as everything is already set up. Even for
3920 + * interrupts marked with IRQF_NO_BALANCE this is
3921 + * correct as we want the thread to move to the cpu(s)
3922 + * on which the requesting code placed the interrupt.
3923 + */
3924 + set_bit(IRQTF_AFFINITY, &new->thread_flags);
3925 }
3926
3927 if (!alloc_cpumask_var(&mask, GFP_KERNEL)) {
3928 diff --git a/kernel/printk.c b/kernel/printk.c
3929 index 2d607f4..f8e0b5a 100644
3930 --- a/kernel/printk.c
3931 +++ b/kernel/printk.c
3932 @@ -847,10 +847,11 @@ static size_t print_time(u64 ts, char *buf)
3933 if (!printk_time)
3934 return 0;
3935
3936 + rem_nsec = do_div(ts, 1000000000);
3937 +
3938 if (!buf)
3939 - return 15;
3940 + return snprintf(NULL, 0, "[%5lu.000000] ", (unsigned long)ts);
3941
3942 - rem_nsec = do_div(ts, 1000000000);
3943 return sprintf(buf, "[%5lu.%06lu] ",
3944 (unsigned long)ts, rem_nsec / 1000);
3945 }
3946 diff --git a/kernel/signal.c b/kernel/signal.c
3947 index 0af8868..e4d4014 100644
3948 --- a/kernel/signal.c
3949 +++ b/kernel/signal.c
3950 @@ -3221,6 +3221,7 @@ SYSCALL_DEFINE1(ssetmask, int, newmask)
3951 int old = current->blocked.sig[0];
3952 sigset_t newset;
3953
3954 + siginitset(&newset, newmask);
3955 set_current_blocked(&newset);
3956
3957 return old;
3958 diff --git a/lib/atomic64.c b/lib/atomic64.c
3959 index 9785378..08a4f06 100644
3960 --- a/lib/atomic64.c
3961 +++ b/lib/atomic64.c
3962 @@ -31,7 +31,11 @@
3963 static union {
3964 raw_spinlock_t lock;
3965 char pad[L1_CACHE_BYTES];
3966 -} atomic64_lock[NR_LOCKS] __cacheline_aligned_in_smp;
3967 +} atomic64_lock[NR_LOCKS] __cacheline_aligned_in_smp = {
3968 + [0 ... (NR_LOCKS - 1)] = {
3969 + .lock = __RAW_SPIN_LOCK_UNLOCKED(atomic64_lock.lock),
3970 + },
3971 +};
3972
3973 static inline raw_spinlock_t *lock_addr(const atomic64_t *v)
3974 {
3975 @@ -173,14 +177,3 @@ int atomic64_add_unless(atomic64_t *v, long long a, long long u)
3976 return ret;
3977 }
3978 EXPORT_SYMBOL(atomic64_add_unless);
3979 -
3980 -static int init_atomic64_lock(void)
3981 -{
3982 - int i;
3983 -
3984 - for (i = 0; i < NR_LOCKS; ++i)
3985 - raw_spin_lock_init(&atomic64_lock[i].lock);
3986 - return 0;
3987 -}
3988 -
3989 -pure_initcall(init_atomic64_lock);
3990 diff --git a/mm/highmem.c b/mm/highmem.c
3991 index 2da13a5..09fc744 100644
3992 --- a/mm/highmem.c
3993 +++ b/mm/highmem.c
3994 @@ -105,6 +105,7 @@ struct page *kmap_to_page(void *vaddr)
3995
3996 return virt_to_page(addr);
3997 }
3998 +EXPORT_SYMBOL(kmap_to_page);
3999
4000 static void flush_all_zero_pkmaps(void)
4001 {
4002 diff --git a/mm/hugetlb.c b/mm/hugetlb.c
4003 index 59a0059..f198aca 100644
4004 --- a/mm/hugetlb.c
4005 +++ b/mm/hugetlb.c
4006 @@ -1906,14 +1906,12 @@ static int __init hugetlb_init(void)
4007 default_hstate.max_huge_pages = default_hstate_max_huge_pages;
4008
4009 hugetlb_init_hstates();
4010 -
4011 gather_bootmem_prealloc();
4012 -
4013 report_hugepages();
4014
4015 hugetlb_sysfs_init();
4016 -
4017 hugetlb_register_all_nodes();
4018 + hugetlb_cgroup_file_init();
4019
4020 return 0;
4021 }
4022 @@ -1943,13 +1941,6 @@ void __init hugetlb_add_hstate(unsigned order)
4023 h->next_nid_to_free = first_node(node_states[N_HIGH_MEMORY]);
4024 snprintf(h->name, HSTATE_NAME_LEN, "hugepages-%lukB",
4025 huge_page_size(h)/1024);
4026 - /*
4027 - * Add cgroup control files only if the huge page consists
4028 - * of more than two normal pages. This is because we use
4029 - * page[2].lru.next for storing cgoup details.
4030 - */
4031 - if (order >= HUGETLB_CGROUP_MIN_ORDER)
4032 - hugetlb_cgroup_file_init(hugetlb_max_hstate - 1);
4033
4034 parsed_hstate = h;
4035 }
4036 diff --git a/mm/hugetlb_cgroup.c b/mm/hugetlb_cgroup.c
4037 index a3f358f..a0143e5 100644
4038 --- a/mm/hugetlb_cgroup.c
4039 +++ b/mm/hugetlb_cgroup.c
4040 @@ -340,7 +340,7 @@ static char *mem_fmt(char *buf, int size, unsigned long hsize)
4041 return buf;
4042 }
4043
4044 -int __init hugetlb_cgroup_file_init(int idx)
4045 +static void __init __hugetlb_cgroup_file_init(int idx)
4046 {
4047 char buf[32];
4048 struct cftype *cft;
4049 @@ -382,7 +382,22 @@ int __init hugetlb_cgroup_file_init(int idx)
4050
4051 WARN_ON(cgroup_add_cftypes(&hugetlb_subsys, h->cgroup_files));
4052
4053 - return 0;
4054 + return;
4055 +}
4056 +
4057 +void __init hugetlb_cgroup_file_init(void)
4058 +{
4059 + struct hstate *h;
4060 +
4061 + for_each_hstate(h) {
4062 + /*
4063 + * Add cgroup control files only if the huge page consists
4064 + * of more than two normal pages. This is because we use
4065 + * page[2].lru.next for storing cgroup details.
4066 + */
4067 + if (huge_page_order(h) >= HUGETLB_CGROUP_MIN_ORDER)
4068 + __hugetlb_cgroup_file_init(hstate_index(h));
4069 + }
4070 }
4071
4072 /*
4073 diff --git a/mm/memory.c b/mm/memory.c
4074 index 221fc9f..f2973b2 100644
4075 --- a/mm/memory.c
4076 +++ b/mm/memory.c
4077 @@ -182,10 +182,14 @@ static int tlb_next_batch(struct mmu_gather *tlb)
4078 return 1;
4079 }
4080
4081 + if (tlb->batch_count == MAX_GATHER_BATCH_COUNT)
4082 + return 0;
4083 +
4084 batch = (void *)__get_free_pages(GFP_NOWAIT | __GFP_NOWARN, 0);
4085 if (!batch)
4086 return 0;
4087
4088 + tlb->batch_count++;
4089 batch->next = NULL;
4090 batch->nr = 0;
4091 batch->max = MAX_GATHER_BATCH;
4092 @@ -214,6 +218,7 @@ void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, bool fullmm)
4093 tlb->local.nr = 0;
4094 tlb->local.max = ARRAY_SIZE(tlb->__pages);
4095 tlb->active = &tlb->local;
4096 + tlb->batch_count = 0;
4097
4098 #ifdef CONFIG_HAVE_RCU_TABLE_FREE
4099 tlb->batch = NULL;
4100 diff --git a/mm/mempolicy.c b/mm/mempolicy.c
4101 index 4ea600d..002c281 100644
4102 --- a/mm/mempolicy.c
4103 +++ b/mm/mempolicy.c
4104 @@ -2372,8 +2372,7 @@ void numa_default_policy(void)
4105 */
4106
4107 /*
4108 - * "local" is pseudo-policy: MPOL_PREFERRED with MPOL_F_LOCAL flag
4109 - * Used only for mpol_parse_str() and mpol_to_str()
4110 + * "local" is implemented internally by MPOL_PREFERRED with MPOL_F_LOCAL flag.
4111 */
4112 #define MPOL_LOCAL MPOL_MAX
4113 static const char * const policy_modes[] =
4114 @@ -2388,28 +2387,21 @@ static const char * const policy_modes[] =
4115
4116 #ifdef CONFIG_TMPFS
4117 /**
4118 - * mpol_parse_str - parse string to mempolicy
4119 + * mpol_parse_str - parse string to mempolicy, for tmpfs mpol mount option.
4120 * @str: string containing mempolicy to parse
4121 * @mpol: pointer to struct mempolicy pointer, returned on success.
4122 - * @no_context: flag whether to "contextualize" the mempolicy
4123 + * @unused: redundant argument, to be removed later.
4124 *
4125 * Format of input:
4126 * <mode>[=<flags>][:<nodelist>]
4127 *
4128 - * if @no_context is true, save the input nodemask in w.user_nodemask in
4129 - * the returned mempolicy. This will be used to "clone" the mempolicy in
4130 - * a specific context [cpuset] at a later time. Used to parse tmpfs mpol
4131 - * mount option. Note that if 'static' or 'relative' mode flags were
4132 - * specified, the input nodemask will already have been saved. Saving
4133 - * it again is redundant, but safe.
4134 - *
4135 * On success, returns 0, else 1
4136 */
4137 -int mpol_parse_str(char *str, struct mempolicy **mpol, int no_context)
4138 +int mpol_parse_str(char *str, struct mempolicy **mpol, int unused)
4139 {
4140 struct mempolicy *new = NULL;
4141 unsigned short mode;
4142 - unsigned short uninitialized_var(mode_flags);
4143 + unsigned short mode_flags;
4144 nodemask_t nodes;
4145 char *nodelist = strchr(str, ':');
4146 char *flags = strchr(str, '=');
4147 @@ -2497,24 +2489,23 @@ int mpol_parse_str(char *str, struct mempolicy **mpol, int no_context)
4148 if (IS_ERR(new))
4149 goto out;
4150
4151 - if (no_context) {
4152 - /* save for contextualization */
4153 - new->w.user_nodemask = nodes;
4154 - } else {
4155 - int ret;
4156 - NODEMASK_SCRATCH(scratch);
4157 - if (scratch) {
4158 - task_lock(current);
4159 - ret = mpol_set_nodemask(new, &nodes, scratch);
4160 - task_unlock(current);
4161 - } else
4162 - ret = -ENOMEM;
4163 - NODEMASK_SCRATCH_FREE(scratch);
4164 - if (ret) {
4165 - mpol_put(new);
4166 - goto out;
4167 - }
4168 - }
4169 + /*
4170 + * Save nodes for mpol_to_str() to show the tmpfs mount options
4171 + * for /proc/mounts, /proc/pid/mounts and /proc/pid/mountinfo.
4172 + */
4173 + if (mode != MPOL_PREFERRED)
4174 + new->v.nodes = nodes;
4175 + else if (nodelist)
4176 + new->v.preferred_node = first_node(nodes);
4177 + else
4178 + new->flags |= MPOL_F_LOCAL;
4179 +
4180 + /*
4181 + * Save nodes for contextualization: this will be used to "clone"
4182 + * the mempolicy in a specific context [cpuset] at a later time.
4183 + */
4184 + new->w.user_nodemask = nodes;
4185 +
4186 err = 0;
4187
4188 out:
4189 @@ -2534,13 +2525,13 @@ out:
4190 * @buffer: to contain formatted mempolicy string
4191 * @maxlen: length of @buffer
4192 * @pol: pointer to mempolicy to be formatted
4193 - * @no_context: "context free" mempolicy - use nodemask in w.user_nodemask
4194 + * @unused: redundant argument, to be removed later.
4195 *
4196 * Convert a mempolicy into a string.
4197 * Returns the number of characters in buffer (if positive)
4198 * or an error (negative)
4199 */
4200 -int mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol, int no_context)
4201 +int mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol, int unused)
4202 {
4203 char *p = buffer;
4204 int l;
4205 @@ -2566,7 +2557,7 @@ int mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol, int no_context)
4206 case MPOL_PREFERRED:
4207 nodes_clear(nodes);
4208 if (flags & MPOL_F_LOCAL)
4209 - mode = MPOL_LOCAL; /* pseudo-policy */
4210 + mode = MPOL_LOCAL;
4211 else
4212 node_set(pol->v.preferred_node, nodes);
4213 break;
4214 @@ -2574,10 +2565,7 @@ int mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol, int no_context)
4215 case MPOL_BIND:
4216 /* Fall through */
4217 case MPOL_INTERLEAVE:
4218 - if (no_context)
4219 - nodes = pol->w.user_nodemask;
4220 - else
4221 - nodes = pol->v.nodes;
4222 + nodes = pol->v.nodes;
4223 break;
4224
4225 default:
4226 diff --git a/mm/page-writeback.c b/mm/page-writeback.c
4227 index 830893b..c0fa8bd 100644
4228 --- a/mm/page-writeback.c
4229 +++ b/mm/page-writeback.c
4230 @@ -201,6 +201,18 @@ static unsigned long highmem_dirtyable_memory(unsigned long total)
4231 zone_reclaimable_pages(z) - z->dirty_balance_reserve;
4232 }
4233 /*
4234 + * Unreclaimable memory (kernel memory or anonymous memory
4235 + * without swap) can bring down the dirtyable pages below
4236 + * the zone's dirty balance reserve and the above calculation
4237 + * will underflow. However we still want to add in nodes
4238 + * which are below threshold (negative values) to get a more
4239 + * accurate calculation but make sure that the total never
4240 + * underflows.
4241 + */
4242 + if ((long)x < 0)
4243 + x = 0;
4244 +
4245 + /*
4246 * Make sure that the number of highmem pages is never larger
4247 * than the number of the total dirtyable memory. This can only
4248 * occur in very strange VM situations but we want to make sure
4249 @@ -222,8 +234,8 @@ static unsigned long global_dirtyable_memory(void)
4250 {
4251 unsigned long x;
4252
4253 - x = global_page_state(NR_FREE_PAGES) + global_reclaimable_pages() -
4254 - dirty_balance_reserve;
4255 + x = global_page_state(NR_FREE_PAGES) + global_reclaimable_pages();
4256 + x -= min(x, dirty_balance_reserve);
4257
4258 if (!vm_highmem_is_dirtyable)
4259 x -= highmem_dirtyable_memory(x);
4260 @@ -290,9 +302,12 @@ static unsigned long zone_dirtyable_memory(struct zone *zone)
4261 * highmem zone can hold its share of dirty pages, so we don't
4262 * care about vm_highmem_is_dirtyable here.
4263 */
4264 - return zone_page_state(zone, NR_FREE_PAGES) +
4265 - zone_reclaimable_pages(zone) -
4266 - zone->dirty_balance_reserve;
4267 + unsigned long nr_pages = zone_page_state(zone, NR_FREE_PAGES) +
4268 + zone_reclaimable_pages(zone);
4269 +
4270 + /* don't allow this to underflow */
4271 + nr_pages -= min(nr_pages, zone->dirty_balance_reserve);
4272 + return nr_pages;
4273 }
4274
4275 /**
4276 diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c
4277 index 35b8911..fd05c81 100644
4278 --- a/net/9p/trans_virtio.c
4279 +++ b/net/9p/trans_virtio.c
4280 @@ -39,6 +39,7 @@
4281 #include <linux/inet.h>
4282 #include <linux/idr.h>
4283 #include <linux/file.h>
4284 +#include <linux/highmem.h>
4285 #include <linux/slab.h>
4286 #include <net/9p/9p.h>
4287 #include <linux/parser.h>
4288 @@ -325,7 +326,7 @@ static int p9_get_mapped_pages(struct virtio_chan *chan,
4289 int count = nr_pages;
4290 while (nr_pages) {
4291 s = rest_of_page(data);
4292 - pages[index++] = virt_to_page(data);
4293 + pages[index++] = kmap_to_page(data);
4294 data += s;
4295 nr_pages--;
4296 }
4297 diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c
4298 index b02b75d..c6fcc76 100644
4299 --- a/net/batman-adv/bat_iv_ogm.c
4300 +++ b/net/batman-adv/bat_iv_ogm.c
4301 @@ -119,7 +119,7 @@ batadv_iv_ogm_emit_send_time(const struct batadv_priv *bat_priv)
4302 unsigned int msecs;
4303
4304 msecs = atomic_read(&bat_priv->orig_interval) - BATADV_JITTER;
4305 - msecs += (random32() % 2 * BATADV_JITTER);
4306 + msecs += random32() % (2 * BATADV_JITTER);
4307
4308 return jiffies + msecs_to_jiffies(msecs);
4309 }
4310 diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
4311 index a0a2f97..e48bfdb 100644
4312 --- a/net/bluetooth/hci_core.c
4313 +++ b/net/bluetooth/hci_core.c
4314 @@ -1793,6 +1793,8 @@ void hci_unregister_dev(struct hci_dev *hdev)
4315 for (i = 0; i < NUM_REASSEMBLY; i++)
4316 kfree_skb(hdev->reassembly[i]);
4317
4318 + cancel_work_sync(&hdev->power_on);
4319 +
4320 if (!test_bit(HCI_INIT, &hdev->flags) &&
4321 !test_bit(HCI_SETUP, &hdev->dev_flags)) {
4322 hci_dev_lock(hdev);
4323 diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c
4324 index b3226f3..868a909 100644
4325 --- a/net/bluetooth/rfcomm/sock.c
4326 +++ b/net/bluetooth/rfcomm/sock.c
4327 @@ -467,7 +467,7 @@ static int rfcomm_sock_accept(struct socket *sock, struct socket *newsock, int f
4328 long timeo;
4329 int err = 0;
4330
4331 - lock_sock(sk);
4332 + lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
4333
4334 if (sk->sk_type != SOCK_STREAM) {
4335 err = -EINVAL;
4336 @@ -504,7 +504,7 @@ static int rfcomm_sock_accept(struct socket *sock, struct socket *newsock, int f
4337
4338 release_sock(sk);
4339 timeo = schedule_timeout(timeo);
4340 - lock_sock(sk);
4341 + lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
4342 }
4343 __set_current_state(TASK_RUNNING);
4344 remove_wait_queue(sk_sleep(sk), &wait);
4345 diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c
4346 index dc42b91..caa109d 100644
4347 --- a/net/bluetooth/sco.c
4348 +++ b/net/bluetooth/sco.c
4349 @@ -131,15 +131,6 @@ static int sco_conn_del(struct hci_conn *hcon, int err)
4350 sco_sock_clear_timer(sk);
4351 sco_chan_del(sk, err);
4352 bh_unlock_sock(sk);
4353 -
4354 - sco_conn_lock(conn);
4355 - conn->sk = NULL;
4356 - sco_pi(sk)->conn = NULL;
4357 - sco_conn_unlock(conn);
4358 -
4359 - if (conn->hcon)
4360 - hci_conn_put(conn->hcon);
4361 -
4362 sco_sock_kill(sk);
4363 }
4364
4365 @@ -830,6 +821,16 @@ static void sco_chan_del(struct sock *sk, int err)
4366
4367 BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
4368
4369 + if (conn) {
4370 + sco_conn_lock(conn);
4371 + conn->sk = NULL;
4372 + sco_pi(sk)->conn = NULL;
4373 + sco_conn_unlock(conn);
4374 +
4375 + if (conn->hcon)
4376 + hci_conn_put(conn->hcon);
4377 + }
4378 +
4379 sk->sk_state = BT_CLOSED;
4380 sk->sk_err = err;
4381 sk->sk_state_change(sk);
4382 diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c
4383 index 176ecdb..4f9f5eb 100644
4384 --- a/net/dccp/ipv4.c
4385 +++ b/net/dccp/ipv4.c
4386 @@ -439,8 +439,8 @@ exit:
4387 NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS);
4388 return NULL;
4389 put_and_exit:
4390 - bh_unlock_sock(newsk);
4391 - sock_put(newsk);
4392 + inet_csk_prepare_forced_close(newsk);
4393 + dccp_done(newsk);
4394 goto exit;
4395 }
4396
4397 diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c
4398 index 56840b2..6e05981 100644
4399 --- a/net/dccp/ipv6.c
4400 +++ b/net/dccp/ipv6.c
4401 @@ -585,7 +585,8 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk,
4402 newinet->inet_rcv_saddr = LOOPBACK4_IPV6;
4403
4404 if (__inet_inherit_port(sk, newsk) < 0) {
4405 - sock_put(newsk);
4406 + inet_csk_prepare_forced_close(newsk);
4407 + dccp_done(newsk);
4408 goto out;
4409 }
4410 __inet6_hash(newsk, NULL);
4411 diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
4412 index d34ce29..13a13e8 100644
4413 --- a/net/ipv4/inet_connection_sock.c
4414 +++ b/net/ipv4/inet_connection_sock.c
4415 @@ -699,6 +699,22 @@ void inet_csk_destroy_sock(struct sock *sk)
4416 }
4417 EXPORT_SYMBOL(inet_csk_destroy_sock);
4418
4419 +/* This function allows to force a closure of a socket after the call to
4420 + * tcp/dccp_create_openreq_child().
4421 + */
4422 +void inet_csk_prepare_forced_close(struct sock *sk)
4423 +{
4424 + /* sk_clone_lock locked the socket and set refcnt to 2 */
4425 + bh_unlock_sock(sk);
4426 + sock_put(sk);
4427 +
4428 + /* The below has to be done to allow calling inet_csk_destroy_sock */
4429 + sock_set_flag(sk, SOCK_DEAD);
4430 + percpu_counter_inc(sk->sk_prot->orphan_count);
4431 + inet_sk(sk)->inet_num = 0;
4432 +}
4433 +EXPORT_SYMBOL(inet_csk_prepare_forced_close);
4434 +
4435 int inet_csk_listen_start(struct sock *sk, const int nr_table_entries)
4436 {
4437 struct inet_sock *inet = inet_sk(sk);
4438 diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
4439 index 0c4a643..bc3cb46 100644
4440 --- a/net/ipv4/tcp_ipv4.c
4441 +++ b/net/ipv4/tcp_ipv4.c
4442 @@ -1774,10 +1774,8 @@ exit:
4443 NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS);
4444 return NULL;
4445 put_and_exit:
4446 - tcp_clear_xmit_timers(newsk);
4447 - tcp_cleanup_congestion_control(newsk);
4448 - bh_unlock_sock(newsk);
4449 - sock_put(newsk);
4450 + inet_csk_prepare_forced_close(newsk);
4451 + tcp_done(newsk);
4452 goto exit;
4453 }
4454 EXPORT_SYMBOL(tcp_v4_syn_recv_sock);
4455 diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
4456 index 2edce30..89dab79 100644
4457 --- a/net/ipv6/ndisc.c
4458 +++ b/net/ipv6/ndisc.c
4459 @@ -1333,6 +1333,12 @@ out:
4460
4461 static void ndisc_redirect_rcv(struct sk_buff *skb)
4462 {
4463 + u8 *hdr;
4464 + struct ndisc_options ndopts;
4465 + struct rd_msg *msg = (struct rd_msg *)skb_transport_header(skb);
4466 + u32 ndoptlen = skb->tail - (skb->transport_header +
4467 + offsetof(struct rd_msg, opt));
4468 +
4469 #ifdef CONFIG_IPV6_NDISC_NODETYPE
4470 switch (skb->ndisc_nodetype) {
4471 case NDISC_NODETYPE_HOST:
4472 @@ -1349,6 +1355,17 @@ static void ndisc_redirect_rcv(struct sk_buff *skb)
4473 return;
4474 }
4475
4476 + if (!ndisc_parse_options(msg->opt, ndoptlen, &ndopts))
4477 + return;
4478 +
4479 + if (!ndopts.nd_opts_rh)
4480 + return;
4481 +
4482 + hdr = (u8 *)ndopts.nd_opts_rh;
4483 + hdr += 8;
4484 + if (!pskb_pull(skb, hdr - skb_transport_header(skb)))
4485 + return;
4486 +
4487 icmpv6_notify(skb, NDISC_REDIRECT, 0, 0);
4488 }
4489
4490 diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
4491 index 26175bf..73f2a6b 100644
4492 --- a/net/ipv6/tcp_ipv6.c
4493 +++ b/net/ipv6/tcp_ipv6.c
4494 @@ -1384,7 +1384,8 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
4495 #endif
4496
4497 if (__inet_inherit_port(sk, newsk) < 0) {
4498 - sock_put(newsk);
4499 + inet_csk_prepare_forced_close(newsk);
4500 + tcp_done(newsk);
4501 goto out;
4502 }
4503 __inet6_hash(newsk, NULL);
4504 diff --git a/net/mac802154/wpan.c b/net/mac802154/wpan.c
4505 index f30f6d4..c5e24c8 100644
4506 --- a/net/mac802154/wpan.c
4507 +++ b/net/mac802154/wpan.c
4508 @@ -387,7 +387,7 @@ void mac802154_wpan_setup(struct net_device *dev)
4509
4510 static int mac802154_process_data(struct net_device *dev, struct sk_buff *skb)
4511 {
4512 - return netif_rx(skb);
4513 + return netif_rx_ni(skb);
4514 }
4515
4516 static int
4517 diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c
4518 index 9d75b77..e9ea2f3 100644
4519 --- a/net/sched/sch_htb.c
4520 +++ b/net/sched/sch_htb.c
4521 @@ -874,7 +874,7 @@ ok:
4522 q->now = psched_get_time();
4523 start_at = jiffies;
4524
4525 - next_event = q->now + 5 * PSCHED_TICKS_PER_SEC;
4526 + next_event = q->now + 5LLU * PSCHED_TICKS_PER_SEC;
4527
4528 for (level = 0; level < TC_HTB_MAXDEPTH; level++) {
4529 /* common case optimization - skip event handler quickly */
4530 diff --git a/net/sctp/probe.c b/net/sctp/probe.c
4531 index bc6cd75..5f7518d 100644
4532 --- a/net/sctp/probe.c
4533 +++ b/net/sctp/probe.c
4534 @@ -122,7 +122,8 @@ static const struct file_operations sctpprobe_fops = {
4535 .llseek = noop_llseek,
4536 };
4537
4538 -sctp_disposition_t jsctp_sf_eat_sack(const struct sctp_endpoint *ep,
4539 +sctp_disposition_t jsctp_sf_eat_sack(struct net *net,
4540 + const struct sctp_endpoint *ep,
4541 const struct sctp_association *asoc,
4542 const sctp_subtype_t type,
4543 void *arg,
4544 diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
4545 index f9d870e..a9652d6 100644
4546 --- a/sound/pci/hda/hda_intel.c
4547 +++ b/sound/pci/hda/hda_intel.c
4548 @@ -2557,10 +2557,6 @@ static int azx_runtime_suspend(struct device *dev)
4549 struct snd_card *card = dev_get_drvdata(dev);
4550 struct azx *chip = card->private_data;
4551
4552 - if (!power_save_controller ||
4553 - !(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
4554 - return -EAGAIN;
4555 -
4556 azx_stop_chip(chip);
4557 azx_clear_irq_pending(chip);
4558 return 0;
4559 @@ -2575,12 +2571,25 @@ static int azx_runtime_resume(struct device *dev)
4560 azx_init_chip(chip, 1);
4561 return 0;
4562 }
4563 +
4564 +static int azx_runtime_idle(struct device *dev)
4565 +{
4566 + struct snd_card *card = dev_get_drvdata(dev);
4567 + struct azx *chip = card->private_data;
4568 +
4569 + if (!power_save_controller ||
4570 + !(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
4571 + return -EBUSY;
4572 +
4573 + return 0;
4574 +}
4575 +
4576 #endif /* CONFIG_PM_RUNTIME */
4577
4578 #ifdef CONFIG_PM
4579 static const struct dev_pm_ops azx_pm = {
4580 SET_SYSTEM_SLEEP_PM_OPS(azx_suspend, azx_resume)
4581 - SET_RUNTIME_PM_OPS(azx_runtime_suspend, azx_runtime_resume, NULL)
4582 + SET_RUNTIME_PM_OPS(azx_runtime_suspend, azx_runtime_resume, azx_runtime_idle)
4583 };
4584
4585 #define AZX_PM_OPS &azx_pm
4586 diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
4587 index 03b1dc3..a7b522a 100644
4588 --- a/sound/pci/hda/patch_conexant.c
4589 +++ b/sound/pci/hda/patch_conexant.c
4590 @@ -4453,6 +4453,7 @@ static const struct snd_pci_quirk cxt5051_fixups[] = {
4591 };
4592
4593 static const struct snd_pci_quirk cxt5066_fixups[] = {
4594 + SND_PCI_QUIRK(0x1025, 0x0543, "Acer Aspire One 522", CXT_FIXUP_STEREO_DMIC),
4595 SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo T400", CXT_PINCFG_LENOVO_TP410),
4596 SND_PCI_QUIRK(0x17aa, 0x215e, "Lenovo T410", CXT_PINCFG_LENOVO_TP410),
4597 SND_PCI_QUIRK(0x17aa, 0x215f, "Lenovo T510", CXT_PINCFG_LENOVO_TP410),
4598 diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
4599 index 71555cc..4642c68 100644
4600 --- a/sound/pci/hda/patch_hdmi.c
4601 +++ b/sound/pci/hda/patch_hdmi.c
4602 @@ -431,9 +431,11 @@ static void hdmi_init_pin(struct hda_codec *codec, hda_nid_t pin_nid)
4603 if (get_wcaps(codec, pin_nid) & AC_WCAP_OUT_AMP)
4604 snd_hda_codec_write(codec, pin_nid, 0,
4605 AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE);
4606 - /* Disable pin out until stream is active*/
4607 + /* Enable pin out: some machines with GM965 gets broken output when
4608 + * the pin is disabled or changed while using with HDMI
4609 + */
4610 snd_hda_codec_write(codec, pin_nid, 0,
4611 - AC_VERB_SET_PIN_WIDGET_CONTROL, 0);
4612 + AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
4613 }
4614
4615 static int hdmi_get_channel_count(struct hda_codec *codec, hda_nid_t cvt_nid)
4616 @@ -1338,7 +1340,6 @@ static int generic_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
4617 struct hdmi_spec *spec = codec->spec;
4618 int pin_idx = hinfo_to_pin_index(spec, hinfo);
4619 hda_nid_t pin_nid = spec->pins[pin_idx].pin_nid;
4620 - int pinctl;
4621 bool non_pcm;
4622
4623 non_pcm = check_non_pcm_per_cvt(codec, cvt_nid);
4624 @@ -1347,11 +1348,6 @@ static int generic_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
4625
4626 hdmi_setup_audio_infoframe(codec, pin_idx, non_pcm, substream);
4627
4628 - pinctl = snd_hda_codec_read(codec, pin_nid, 0,
4629 - AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
4630 - snd_hda_codec_write(codec, pin_nid, 0,
4631 - AC_VERB_SET_PIN_WIDGET_CONTROL, pinctl | PIN_OUT);
4632 -
4633 return hdmi_setup_stream(codec, cvt_nid, pin_nid, stream_tag, format);
4634 }
4635
4636 @@ -1371,7 +1367,6 @@ static int hdmi_pcm_close(struct hda_pcm_stream *hinfo,
4637 int cvt_idx, pin_idx;
4638 struct hdmi_spec_per_cvt *per_cvt;
4639 struct hdmi_spec_per_pin *per_pin;
4640 - int pinctl;
4641
4642 if (hinfo->nid) {
4643 cvt_idx = cvt_nid_to_cvt_index(spec, hinfo->nid);
4644 @@ -1388,11 +1383,6 @@ static int hdmi_pcm_close(struct hda_pcm_stream *hinfo,
4645 return -EINVAL;
4646 per_pin = &spec->pins[pin_idx];
4647
4648 - pinctl = snd_hda_codec_read(codec, per_pin->pin_nid, 0,
4649 - AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
4650 - snd_hda_codec_write(codec, per_pin->pin_nid, 0,
4651 - AC_VERB_SET_PIN_WIDGET_CONTROL,
4652 - pinctl & ~PIN_OUT);
4653 snd_hda_spdif_ctls_unassign(codec, pin_idx);
4654 per_pin->chmap_set = false;
4655 memset(per_pin->chmap, 0, sizeof(per_pin->chmap));
4656 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
4657 index ad68d22..4bbabdc 100644
4658 --- a/sound/pci/hda/patch_realtek.c
4659 +++ b/sound/pci/hda/patch_realtek.c
4660 @@ -5986,6 +5986,30 @@ static void alc269_fixup_quanta_mute(struct hda_codec *codec,
4661 spec->automute_hook = alc269_quanta_automute;
4662 }
4663
4664 +/* update mute-LED according to the speaker mute state via mic1 VREF pin */
4665 +static void alc269_fixup_mic1_mute_hook(void *private_data, int enabled)
4666 +{
4667 + struct hda_codec *codec = private_data;
4668 + unsigned int pinval = AC_PINCTL_IN_EN + (enabled ?
4669 + AC_PINCTL_VREF_HIZ : AC_PINCTL_VREF_80);
4670 + snd_hda_set_pin_ctl_cache(codec, 0x18, pinval);
4671 +}
4672 +
4673 +static void alc269_fixup_mic1_mute(struct hda_codec *codec,
4674 + const struct alc_fixup *fix, int action)
4675 +{
4676 + struct alc_spec *spec = codec->spec;
4677 + switch (action) {
4678 + case ALC_FIXUP_ACT_BUILD:
4679 + spec->vmaster_mute.hook = alc269_fixup_mic1_mute_hook;
4680 + snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute, true);
4681 + /* fallthru */
4682 + case ALC_FIXUP_ACT_INIT:
4683 + snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
4684 + break;
4685 + }
4686 +}
4687 +
4688 /* update mute-LED according to the speaker mute state via mic2 VREF pin */
4689 static void alc269_fixup_mic2_mute_hook(void *private_data, int enabled)
4690 {
4691 @@ -6027,6 +6051,7 @@ enum {
4692 ALC269_FIXUP_DMIC,
4693 ALC269VB_FIXUP_AMIC,
4694 ALC269VB_FIXUP_DMIC,
4695 + ALC269_FIXUP_MIC1_MUTE_LED,
4696 ALC269_FIXUP_MIC2_MUTE_LED,
4697 ALC269_FIXUP_INV_DMIC,
4698 ALC269_FIXUP_LENOVO_DOCK,
4699 @@ -6153,6 +6178,10 @@ static const struct alc_fixup alc269_fixups[] = {
4700 { }
4701 },
4702 },
4703 + [ALC269_FIXUP_MIC1_MUTE_LED] = {
4704 + .type = ALC_FIXUP_FUNC,
4705 + .v.func = alc269_fixup_mic1_mute,
4706 + },
4707 [ALC269_FIXUP_MIC2_MUTE_LED] = {
4708 .type = ALC_FIXUP_FUNC,
4709 .v.func = alc269_fixup_mic2_mute,
4710 @@ -6181,6 +6210,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
4711 SND_PCI_QUIRK(0x1025, 0x029b, "Acer 1810TZ", ALC269_FIXUP_INV_DMIC),
4712 SND_PCI_QUIRK(0x1025, 0x0349, "Acer AOD260", ALC269_FIXUP_INV_DMIC),
4713 SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_MIC2_MUTE_LED),
4714 + SND_PCI_QUIRK(0x103c, 0x1972, "HP Pavilion 17", ALC269_FIXUP_MIC1_MUTE_LED),
4715 SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_DMIC),
4716 SND_PCI_QUIRK(0x1043, 0x1517, "Asus Zenbook UX31A", ALC269VB_FIXUP_DMIC),
4717 SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW),
4718 @@ -6535,8 +6565,8 @@ static void alc861vd_fixup_dallas(struct hda_codec *codec,
4719 const struct alc_fixup *fix, int action)
4720 {
4721 if (action == ALC_FIXUP_ACT_PRE_PROBE) {
4722 - snd_hda_override_pin_caps(codec, 0x18, 0x00001714);
4723 - snd_hda_override_pin_caps(codec, 0x19, 0x0000171c);
4724 + snd_hda_override_pin_caps(codec, 0x18, 0x00000734);
4725 + snd_hda_override_pin_caps(codec, 0x19, 0x0000073c);
4726 }
4727 }
4728
4729 diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
4730 index 9ba8af0..f3bae20 100644
4731 --- a/sound/pci/hda/patch_sigmatel.c
4732 +++ b/sound/pci/hda/patch_sigmatel.c
4733 @@ -1724,7 +1724,7 @@ static const struct snd_pci_quirk stac92hd83xxx_cfg_tbl[] = {
4734 SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1658,
4735 "HP", STAC_92HD83XXX_HP_cNB11_INTQUAD),
4736 SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1659,
4737 - "HP", STAC_92HD83XXX_HP_cNB11_INTQUAD),
4738 + "HP Pavilion dv7", STAC_HP_DV7_4000),
4739 SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x165A,
4740 "HP", STAC_92HD83XXX_HP_cNB11_INTQUAD),
4741 SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x165B,
4742 diff --git a/sound/usb/midi.c b/sound/usb/midi.c
4743 index eeefbce..34b9bb7 100644
4744 --- a/sound/usb/midi.c
4745 +++ b/sound/usb/midi.c
4746 @@ -116,6 +116,7 @@ struct snd_usb_midi {
4747 struct list_head list;
4748 struct timer_list error_timer;
4749 spinlock_t disc_lock;
4750 + struct rw_semaphore disc_rwsem;
4751 struct mutex mutex;
4752 u32 usb_id;
4753 int next_midi_device;
4754 @@ -125,8 +126,10 @@ struct snd_usb_midi {
4755 struct snd_usb_midi_in_endpoint *in;
4756 } endpoints[MIDI_MAX_ENDPOINTS];
4757 unsigned long input_triggered;
4758 - unsigned int opened;
4759 + bool autopm_reference;
4760 + unsigned int opened[2];
4761 unsigned char disconnected;
4762 + unsigned char input_running;
4763
4764 struct snd_kcontrol *roland_load_ctl;
4765 };
4766 @@ -148,7 +151,6 @@ struct snd_usb_midi_out_endpoint {
4767 struct snd_usb_midi_out_endpoint* ep;
4768 struct snd_rawmidi_substream *substream;
4769 int active;
4770 - bool autopm_reference;
4771 uint8_t cable; /* cable number << 4 */
4772 uint8_t state;
4773 #define STATE_UNKNOWN 0
4774 @@ -1033,29 +1035,58 @@ static void update_roland_altsetting(struct snd_usb_midi* umidi)
4775 snd_usbmidi_input_start(&umidi->list);
4776 }
4777
4778 -static void substream_open(struct snd_rawmidi_substream *substream, int open)
4779 +static int substream_open(struct snd_rawmidi_substream *substream, int dir,
4780 + int open)
4781 {
4782 struct snd_usb_midi* umidi = substream->rmidi->private_data;
4783 struct snd_kcontrol *ctl;
4784 + int err;
4785 +
4786 + down_read(&umidi->disc_rwsem);
4787 + if (umidi->disconnected) {
4788 + up_read(&umidi->disc_rwsem);
4789 + return open ? -ENODEV : 0;
4790 + }
4791
4792 mutex_lock(&umidi->mutex);
4793 if (open) {
4794 - if (umidi->opened++ == 0 && umidi->roland_load_ctl) {
4795 - ctl = umidi->roland_load_ctl;
4796 - ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
4797 - snd_ctl_notify(umidi->card,
4798 + if (!umidi->opened[0] && !umidi->opened[1]) {
4799 + err = usb_autopm_get_interface(umidi->iface);
4800 + umidi->autopm_reference = err >= 0;
4801 + if (err < 0 && err != -EACCES) {
4802 + mutex_unlock(&umidi->mutex);
4803 + up_read(&umidi->disc_rwsem);
4804 + return -EIO;
4805 + }
4806 + if (umidi->roland_load_ctl) {
4807 + ctl = umidi->roland_load_ctl;
4808 + ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
4809 + snd_ctl_notify(umidi->card,
4810 SNDRV_CTL_EVENT_MASK_INFO, &ctl->id);
4811 - update_roland_altsetting(umidi);
4812 + update_roland_altsetting(umidi);
4813 + }
4814 }
4815 + umidi->opened[dir]++;
4816 + if (umidi->opened[1])
4817 + snd_usbmidi_input_start(&umidi->list);
4818 } else {
4819 - if (--umidi->opened == 0 && umidi->roland_load_ctl) {
4820 - ctl = umidi->roland_load_ctl;
4821 - ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
4822 - snd_ctl_notify(umidi->card,
4823 + umidi->opened[dir]--;
4824 + if (!umidi->opened[1])
4825 + snd_usbmidi_input_stop(&umidi->list);
4826 + if (!umidi->opened[0] && !umidi->opened[1]) {
4827 + if (umidi->roland_load_ctl) {
4828 + ctl = umidi->roland_load_ctl;
4829 + ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
4830 + snd_ctl_notify(umidi->card,
4831 SNDRV_CTL_EVENT_MASK_INFO, &ctl->id);
4832 + }
4833 + if (umidi->autopm_reference)
4834 + usb_autopm_put_interface(umidi->iface);
4835 }
4836 }
4837 mutex_unlock(&umidi->mutex);
4838 + up_read(&umidi->disc_rwsem);
4839 + return 0;
4840 }
4841
4842 static int snd_usbmidi_output_open(struct snd_rawmidi_substream *substream)
4843 @@ -1063,7 +1094,6 @@ static int snd_usbmidi_output_open(struct snd_rawmidi_substream *substream)
4844 struct snd_usb_midi* umidi = substream->rmidi->private_data;
4845 struct usbmidi_out_port* port = NULL;
4846 int i, j;
4847 - int err;
4848
4849 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i)
4850 if (umidi->endpoints[i].out)
4851 @@ -1076,25 +1106,15 @@ static int snd_usbmidi_output_open(struct snd_rawmidi_substream *substream)
4852 snd_BUG();
4853 return -ENXIO;
4854 }
4855 - err = usb_autopm_get_interface(umidi->iface);
4856 - port->autopm_reference = err >= 0;
4857 - if (err < 0 && err != -EACCES)
4858 - return -EIO;
4859 +
4860 substream->runtime->private_data = port;
4861 port->state = STATE_UNKNOWN;
4862 - substream_open(substream, 1);
4863 - return 0;
4864 + return substream_open(substream, 0, 1);
4865 }
4866
4867 static int snd_usbmidi_output_close(struct snd_rawmidi_substream *substream)
4868 {
4869 - struct snd_usb_midi* umidi = substream->rmidi->private_data;
4870 - struct usbmidi_out_port *port = substream->runtime->private_data;
4871 -
4872 - substream_open(substream, 0);
4873 - if (port->autopm_reference)
4874 - usb_autopm_put_interface(umidi->iface);
4875 - return 0;
4876 + return substream_open(substream, 0, 0);
4877 }
4878
4879 static void snd_usbmidi_output_trigger(struct snd_rawmidi_substream *substream, int up)
4880 @@ -1147,14 +1167,12 @@ static void snd_usbmidi_output_drain(struct snd_rawmidi_substream *substream)
4881
4882 static int snd_usbmidi_input_open(struct snd_rawmidi_substream *substream)
4883 {
4884 - substream_open(substream, 1);
4885 - return 0;
4886 + return substream_open(substream, 1, 1);
4887 }
4888
4889 static int snd_usbmidi_input_close(struct snd_rawmidi_substream *substream)
4890 {
4891 - substream_open(substream, 0);
4892 - return 0;
4893 + return substream_open(substream, 1, 0);
4894 }
4895
4896 static void snd_usbmidi_input_trigger(struct snd_rawmidi_substream *substream, int up)
4897 @@ -1403,9 +1421,12 @@ void snd_usbmidi_disconnect(struct list_head* p)
4898 * a timer may submit an URB. To reliably break the cycle
4899 * a flag under lock must be used
4900 */
4901 + down_write(&umidi->disc_rwsem);
4902 spin_lock_irq(&umidi->disc_lock);
4903 umidi->disconnected = 1;
4904 spin_unlock_irq(&umidi->disc_lock);
4905 + up_write(&umidi->disc_rwsem);
4906 +
4907 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) {
4908 struct snd_usb_midi_endpoint* ep = &umidi->endpoints[i];
4909 if (ep->out)
4910 @@ -2060,12 +2081,15 @@ void snd_usbmidi_input_stop(struct list_head* p)
4911 unsigned int i, j;
4912
4913 umidi = list_entry(p, struct snd_usb_midi, list);
4914 + if (!umidi->input_running)
4915 + return;
4916 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) {
4917 struct snd_usb_midi_endpoint* ep = &umidi->endpoints[i];
4918 if (ep->in)
4919 for (j = 0; j < INPUT_URBS; ++j)
4920 usb_kill_urb(ep->in->urbs[j]);
4921 }
4922 + umidi->input_running = 0;
4923 }
4924
4925 static void snd_usbmidi_input_start_ep(struct snd_usb_midi_in_endpoint* ep)
4926 @@ -2090,8 +2114,11 @@ void snd_usbmidi_input_start(struct list_head* p)
4927 int i;
4928
4929 umidi = list_entry(p, struct snd_usb_midi, list);
4930 + if (umidi->input_running || !umidi->opened[1])
4931 + return;
4932 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i)
4933 snd_usbmidi_input_start_ep(umidi->endpoints[i].in);
4934 + umidi->input_running = 1;
4935 }
4936
4937 /*
4938 @@ -2117,6 +2144,7 @@ int snd_usbmidi_create(struct snd_card *card,
4939 umidi->usb_protocol_ops = &snd_usbmidi_standard_ops;
4940 init_timer(&umidi->error_timer);
4941 spin_lock_init(&umidi->disc_lock);
4942 + init_rwsem(&umidi->disc_rwsem);
4943 mutex_init(&umidi->mutex);
4944 umidi->usb_id = USB_ID(le16_to_cpu(umidi->dev->descriptor.idVendor),
4945 le16_to_cpu(umidi->dev->descriptor.idProduct));
4946 @@ -2229,9 +2257,6 @@ int snd_usbmidi_create(struct snd_card *card,
4947 }
4948
4949 list_add_tail(&umidi->list, midi_list);
4950 -
4951 - for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i)
4952 - snd_usbmidi_input_start_ep(umidi->endpoints[i].in);
4953 return 0;
4954 }
4955