Magellan Linux

Contents of /trunk/kernel-magellan/patches-3.9/0102-3.9.3-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2178 - (show annotations) (download)
Wed May 22 06:42:34 2013 UTC (10 years, 11 months ago) by niro
File size: 118026 byte(s)
-linux-3.9.1-3
1 diff --git a/arch/arm/include/asm/cmpxchg.h b/arch/arm/include/asm/cmpxchg.h
2 index 7eb18c1..4f009c1 100644
3 --- a/arch/arm/include/asm/cmpxchg.h
4 +++ b/arch/arm/include/asm/cmpxchg.h
5 @@ -233,15 +233,15 @@ static inline unsigned long __cmpxchg_local(volatile void *ptr,
6 ((__typeof__(*(ptr)))atomic64_cmpxchg(container_of((ptr), \
7 atomic64_t, \
8 counter), \
9 - (unsigned long)(o), \
10 - (unsigned long)(n)))
11 + (unsigned long long)(o), \
12 + (unsigned long long)(n)))
13
14 #define cmpxchg64_local(ptr, o, n) \
15 ((__typeof__(*(ptr)))local64_cmpxchg(container_of((ptr), \
16 local64_t, \
17 a), \
18 - (unsigned long)(o), \
19 - (unsigned long)(n)))
20 + (unsigned long long)(o), \
21 + (unsigned long long)(n)))
22
23 #endif /* __LINUX_ARM_ARCH__ >= 6 */
24
25 diff --git a/arch/arm/mach-exynos/include/mach/regs-pmu.h b/arch/arm/mach-exynos/include/mach/regs-pmu.h
26 index 3f30aa1..57344b7 100644
27 --- a/arch/arm/mach-exynos/include/mach/regs-pmu.h
28 +++ b/arch/arm/mach-exynos/include/mach/regs-pmu.h
29 @@ -344,6 +344,7 @@
30 #define EXYNOS5_FSYS_ARM_OPTION S5P_PMUREG(0x2208)
31 #define EXYNOS5_ISP_ARM_OPTION S5P_PMUREG(0x2288)
32 #define EXYNOS5_ARM_COMMON_OPTION S5P_PMUREG(0x2408)
33 +#define EXYNOS5_ARM_L2_OPTION S5P_PMUREG(0x2608)
34 #define EXYNOS5_TOP_PWR_OPTION S5P_PMUREG(0x2C48)
35 #define EXYNOS5_TOP_PWR_SYSMEM_OPTION S5P_PMUREG(0x2CC8)
36 #define EXYNOS5_JPEG_MEM_OPTION S5P_PMUREG(0x2F48)
37 diff --git a/arch/arm/mach-exynos/pmu.c b/arch/arm/mach-exynos/pmu.c
38 index daebc1a..97d6885 100644
39 --- a/arch/arm/mach-exynos/pmu.c
40 +++ b/arch/arm/mach-exynos/pmu.c
41 @@ -228,6 +228,7 @@ static struct exynos_pmu_conf exynos5250_pmu_config[] = {
42 { EXYNOS5_DIS_IRQ_ISP_ARM_CENTRAL_SYS_PWR_REG, { 0x0, 0x0, 0x0} },
43 { EXYNOS5_ARM_COMMON_SYS_PWR_REG, { 0x0, 0x0, 0x2} },
44 { EXYNOS5_ARM_L2_SYS_PWR_REG, { 0x3, 0x3, 0x3} },
45 + { EXYNOS5_ARM_L2_OPTION, { 0x10, 0x10, 0x0 } },
46 { EXYNOS5_CMU_ACLKSTOP_SYS_PWR_REG, { 0x1, 0x0, 0x1} },
47 { EXYNOS5_CMU_SCLKSTOP_SYS_PWR_REG, { 0x1, 0x0, 0x1} },
48 { EXYNOS5_CMU_RESET_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
49 @@ -353,11 +354,9 @@ static void exynos5_init_pmu(void)
50
51 /*
52 * SKIP_DEACTIVATE_ACEACP_IN_PWDN_BITFIELD Enable
53 - * MANUAL_L2RSTDISABLE_CONTROL_BITFIELD Enable
54 */
55 tmp = __raw_readl(EXYNOS5_ARM_COMMON_OPTION);
56 - tmp |= (EXYNOS5_MANUAL_L2RSTDISABLE_CONTROL |
57 - EXYNOS5_SKIP_DEACTIVATE_ACEACP_IN_PWDN);
58 + tmp |= EXYNOS5_SKIP_DEACTIVATE_ACEACP_IN_PWDN;
59 __raw_writel(tmp, EXYNOS5_ARM_COMMON_OPTION);
60
61 /*
62 diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c
63 index 3a077df..9bc9f19 100644
64 --- a/arch/arm/mach-omap2/board-rx51-peripherals.c
65 +++ b/arch/arm/mach-omap2/board-rx51-peripherals.c
66 @@ -73,11 +73,11 @@
67 #define LIS302_IRQ1_GPIO 181
68 #define LIS302_IRQ2_GPIO 180 /* Not yet in use */
69
70 -/* list all spi devices here */
71 +/* List all SPI devices here. Note that the list/probe order seems to matter! */
72 enum {
73 RX51_SPI_WL1251,
74 - RX51_SPI_MIPID, /* LCD panel */
75 RX51_SPI_TSC2005, /* Touch Controller */
76 + RX51_SPI_MIPID, /* LCD panel */
77 };
78
79 static struct wl12xx_platform_data wl1251_pdata;
80 diff --git a/arch/parisc/Makefile b/arch/parisc/Makefile
81 index 113e282..1976900 100644
82 --- a/arch/parisc/Makefile
83 +++ b/arch/parisc/Makefile
84 @@ -23,26 +23,21 @@ NM = sh $(srctree)/arch/parisc/nm
85 CHECKFLAGS += -D__hppa__=1
86 LIBGCC = $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
87
88 -MACHINE := $(shell uname -m)
89 -ifeq ($(MACHINE),parisc*)
90 -NATIVE := 1
91 -endif
92 -
93 ifdef CONFIG_64BIT
94 UTS_MACHINE := parisc64
95 CHECKFLAGS += -D__LP64__=1 -m64
96 -WIDTH := 64
97 +CC_ARCHES = hppa64
98 else # 32-bit
99 -WIDTH :=
100 +CC_ARCHES = hppa hppa2.0 hppa1.1
101 endif
102
103 -# attempt to help out folks who are cross-compiling
104 -ifeq ($(NATIVE),1)
105 -CROSS_COMPILE := hppa$(WIDTH)-linux-
106 -else
107 - ifeq ($(CROSS_COMPILE),)
108 - CROSS_COMPILE := hppa$(WIDTH)-linux-gnu-
109 - endif
110 +ifneq ($(SUBARCH),$(UTS_MACHINE))
111 + ifeq ($(CROSS_COMPILE),)
112 + CC_SUFFIXES = linux linux-gnu unknown-linux-gnu
113 + CROSS_COMPILE := $(call cc-cross-prefix, \
114 + $(foreach a,$(CC_ARCHES), \
115 + $(foreach s,$(CC_SUFFIXES),$(a)-$(s)-)))
116 + endif
117 endif
118
119 OBJCOPY_FLAGS =-O binary -R .note -R .comment -S
120 diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S
121 index f33201b..897bce4 100644
122 --- a/arch/parisc/kernel/entry.S
123 +++ b/arch/parisc/kernel/entry.S
124 @@ -444,9 +444,41 @@
125 L2_ptep \pgd,\pte,\index,\va,\fault
126 .endm
127
128 + /* Acquire pa_dbit_lock lock. */
129 + .macro dbit_lock spc,tmp,tmp1
130 +#ifdef CONFIG_SMP
131 + cmpib,COND(=),n 0,\spc,2f
132 + load32 PA(pa_dbit_lock),\tmp
133 +1: LDCW 0(\tmp),\tmp1
134 + cmpib,COND(=) 0,\tmp1,1b
135 + nop
136 +2:
137 +#endif
138 + .endm
139 +
140 + /* Release pa_dbit_lock lock without reloading lock address. */
141 + .macro dbit_unlock0 spc,tmp
142 +#ifdef CONFIG_SMP
143 + or,COND(=) %r0,\spc,%r0
144 + stw \spc,0(\tmp)
145 +#endif
146 + .endm
147 +
148 + /* Release pa_dbit_lock lock. */
149 + .macro dbit_unlock1 spc,tmp
150 +#ifdef CONFIG_SMP
151 + load32 PA(pa_dbit_lock),\tmp
152 + dbit_unlock0 \spc,\tmp
153 +#endif
154 + .endm
155 +
156 /* Set the _PAGE_ACCESSED bit of the PTE. Be clever and
157 * don't needlessly dirty the cache line if it was already set */
158 - .macro update_ptep ptep,pte,tmp,tmp1
159 + .macro update_ptep spc,ptep,pte,tmp,tmp1
160 +#ifdef CONFIG_SMP
161 + or,COND(=) %r0,\spc,%r0
162 + LDREG 0(\ptep),\pte
163 +#endif
164 ldi _PAGE_ACCESSED,\tmp1
165 or \tmp1,\pte,\tmp
166 and,COND(<>) \tmp1,\pte,%r0
167 @@ -455,7 +487,11 @@
168
169 /* Set the dirty bit (and accessed bit). No need to be
170 * clever, this is only used from the dirty fault */
171 - .macro update_dirty ptep,pte,tmp
172 + .macro update_dirty spc,ptep,pte,tmp
173 +#ifdef CONFIG_SMP
174 + or,COND(=) %r0,\spc,%r0
175 + LDREG 0(\ptep),\pte
176 +#endif
177 ldi _PAGE_ACCESSED|_PAGE_DIRTY,\tmp
178 or \tmp,\pte,\pte
179 STREG \pte,0(\ptep)
180 @@ -825,11 +861,6 @@ ENTRY(syscall_exit_rfi)
181 STREG %r19,PT_SR7(%r16)
182
183 intr_return:
184 - /* NOTE: Need to enable interrupts incase we schedule. */
185 - ssm PSW_SM_I, %r0
186 -
187 -intr_check_resched:
188 -
189 /* check for reschedule */
190 mfctl %cr30,%r1
191 LDREG TI_FLAGS(%r1),%r19 /* sched.h: TIF_NEED_RESCHED */
192 @@ -856,6 +887,11 @@ intr_check_sig:
193 LDREG PT_IASQ1(%r16), %r20
194 cmpib,COND(=),n 0,%r20,intr_restore /* backward */
195
196 + /* NOTE: We need to enable interrupts if we have to deliver
197 + * signals. We used to do this earlier but it caused kernel
198 + * stack overflows. */
199 + ssm PSW_SM_I, %r0
200 +
201 copy %r0, %r25 /* long in_syscall = 0 */
202 #ifdef CONFIG_64BIT
203 ldo -16(%r30),%r29 /* Reference param save area */
204 @@ -907,6 +943,10 @@ intr_do_resched:
205 cmpib,COND(=) 0, %r20, intr_do_preempt
206 nop
207
208 + /* NOTE: We need to enable interrupts if we schedule. We used
209 + * to do this earlier but it caused kernel stack overflows. */
210 + ssm PSW_SM_I, %r0
211 +
212 #ifdef CONFIG_64BIT
213 ldo -16(%r30),%r29 /* Reference param save area */
214 #endif
215 @@ -1099,11 +1139,13 @@ dtlb_miss_20w:
216
217 L3_ptep ptp,pte,t0,va,dtlb_check_alias_20w
218
219 - update_ptep ptp,pte,t0,t1
220 + dbit_lock spc,t0,t1
221 + update_ptep spc,ptp,pte,t0,t1
222
223 make_insert_tlb spc,pte,prot
224
225 idtlbt pte,prot
226 + dbit_unlock1 spc,t0
227
228 rfir
229 nop
230 @@ -1123,11 +1165,13 @@ nadtlb_miss_20w:
231
232 L3_ptep ptp,pte,t0,va,nadtlb_check_alias_20w
233
234 - update_ptep ptp,pte,t0,t1
235 + dbit_lock spc,t0,t1
236 + update_ptep spc,ptp,pte,t0,t1
237
238 make_insert_tlb spc,pte,prot
239
240 idtlbt pte,prot
241 + dbit_unlock1 spc,t0
242
243 rfir
244 nop
245 @@ -1149,7 +1193,8 @@ dtlb_miss_11:
246
247 L2_ptep ptp,pte,t0,va,dtlb_check_alias_11
248
249 - update_ptep ptp,pte,t0,t1
250 + dbit_lock spc,t0,t1
251 + update_ptep spc,ptp,pte,t0,t1
252
253 make_insert_tlb_11 spc,pte,prot
254
255 @@ -1160,6 +1205,7 @@ dtlb_miss_11:
256 idtlbp prot,(%sr1,va)
257
258 mtsp t0, %sr1 /* Restore sr1 */
259 + dbit_unlock1 spc,t0
260
261 rfir
262 nop
263 @@ -1180,7 +1226,8 @@ nadtlb_miss_11:
264
265 L2_ptep ptp,pte,t0,va,nadtlb_check_alias_11
266
267 - update_ptep ptp,pte,t0,t1
268 + dbit_lock spc,t0,t1
269 + update_ptep spc,ptp,pte,t0,t1
270
271 make_insert_tlb_11 spc,pte,prot
272
273 @@ -1192,6 +1239,7 @@ nadtlb_miss_11:
274 idtlbp prot,(%sr1,va)
275
276 mtsp t0, %sr1 /* Restore sr1 */
277 + dbit_unlock1 spc,t0
278
279 rfir
280 nop
281 @@ -1212,13 +1260,15 @@ dtlb_miss_20:
282
283 L2_ptep ptp,pte,t0,va,dtlb_check_alias_20
284
285 - update_ptep ptp,pte,t0,t1
286 + dbit_lock spc,t0,t1
287 + update_ptep spc,ptp,pte,t0,t1
288
289 make_insert_tlb spc,pte,prot
290
291 f_extend pte,t0
292
293 idtlbt pte,prot
294 + dbit_unlock1 spc,t0
295
296 rfir
297 nop
298 @@ -1238,13 +1288,15 @@ nadtlb_miss_20:
299
300 L2_ptep ptp,pte,t0,va,nadtlb_check_alias_20
301
302 - update_ptep ptp,pte,t0,t1
303 + dbit_lock spc,t0,t1
304 + update_ptep spc,ptp,pte,t0,t1
305
306 make_insert_tlb spc,pte,prot
307
308 f_extend pte,t0
309
310 idtlbt pte,prot
311 + dbit_unlock1 spc,t0
312
313 rfir
314 nop
315 @@ -1345,11 +1397,13 @@ itlb_miss_20w:
316
317 L3_ptep ptp,pte,t0,va,itlb_fault
318
319 - update_ptep ptp,pte,t0,t1
320 + dbit_lock spc,t0,t1
321 + update_ptep spc,ptp,pte,t0,t1
322
323 make_insert_tlb spc,pte,prot
324
325 iitlbt pte,prot
326 + dbit_unlock1 spc,t0
327
328 rfir
329 nop
330 @@ -1367,11 +1421,13 @@ naitlb_miss_20w:
331
332 L3_ptep ptp,pte,t0,va,naitlb_check_alias_20w
333
334 - update_ptep ptp,pte,t0,t1
335 + dbit_lock spc,t0,t1
336 + update_ptep spc,ptp,pte,t0,t1
337
338 make_insert_tlb spc,pte,prot
339
340 iitlbt pte,prot
341 + dbit_unlock1 spc,t0
342
343 rfir
344 nop
345 @@ -1393,7 +1449,8 @@ itlb_miss_11:
346
347 L2_ptep ptp,pte,t0,va,itlb_fault
348
349 - update_ptep ptp,pte,t0,t1
350 + dbit_lock spc,t0,t1
351 + update_ptep spc,ptp,pte,t0,t1
352
353 make_insert_tlb_11 spc,pte,prot
354
355 @@ -1404,6 +1461,7 @@ itlb_miss_11:
356 iitlbp prot,(%sr1,va)
357
358 mtsp t0, %sr1 /* Restore sr1 */
359 + dbit_unlock1 spc,t0
360
361 rfir
362 nop
363 @@ -1415,7 +1473,8 @@ naitlb_miss_11:
364
365 L2_ptep ptp,pte,t0,va,naitlb_check_alias_11
366
367 - update_ptep ptp,pte,t0,t1
368 + dbit_lock spc,t0,t1
369 + update_ptep spc,ptp,pte,t0,t1
370
371 make_insert_tlb_11 spc,pte,prot
372
373 @@ -1426,6 +1485,7 @@ naitlb_miss_11:
374 iitlbp prot,(%sr1,va)
375
376 mtsp t0, %sr1 /* Restore sr1 */
377 + dbit_unlock1 spc,t0
378
379 rfir
380 nop
381 @@ -1447,13 +1507,15 @@ itlb_miss_20:
382
383 L2_ptep ptp,pte,t0,va,itlb_fault
384
385 - update_ptep ptp,pte,t0,t1
386 + dbit_lock spc,t0,t1
387 + update_ptep spc,ptp,pte,t0,t1
388
389 make_insert_tlb spc,pte,prot
390
391 f_extend pte,t0
392
393 iitlbt pte,prot
394 + dbit_unlock1 spc,t0
395
396 rfir
397 nop
398 @@ -1465,13 +1527,15 @@ naitlb_miss_20:
399
400 L2_ptep ptp,pte,t0,va,naitlb_check_alias_20
401
402 - update_ptep ptp,pte,t0,t1
403 + dbit_lock spc,t0,t1
404 + update_ptep spc,ptp,pte,t0,t1
405
406 make_insert_tlb spc,pte,prot
407
408 f_extend pte,t0
409
410 iitlbt pte,prot
411 + dbit_unlock1 spc,t0
412
413 rfir
414 nop
415 @@ -1495,29 +1559,13 @@ dbit_trap_20w:
416
417 L3_ptep ptp,pte,t0,va,dbit_fault
418
419 -#ifdef CONFIG_SMP
420 - cmpib,COND(=),n 0,spc,dbit_nolock_20w
421 - load32 PA(pa_dbit_lock),t0
422 -
423 -dbit_spin_20w:
424 - LDCW 0(t0),t1
425 - cmpib,COND(=) 0,t1,dbit_spin_20w
426 - nop
427 -
428 -dbit_nolock_20w:
429 -#endif
430 - update_dirty ptp,pte,t1
431 + dbit_lock spc,t0,t1
432 + update_dirty spc,ptp,pte,t1
433
434 make_insert_tlb spc,pte,prot
435
436 idtlbt pte,prot
437 -#ifdef CONFIG_SMP
438 - cmpib,COND(=),n 0,spc,dbit_nounlock_20w
439 - ldi 1,t1
440 - stw t1,0(t0)
441 -
442 -dbit_nounlock_20w:
443 -#endif
444 + dbit_unlock0 spc,t0
445
446 rfir
447 nop
448 @@ -1531,18 +1579,8 @@ dbit_trap_11:
449
450 L2_ptep ptp,pte,t0,va,dbit_fault
451
452 -#ifdef CONFIG_SMP
453 - cmpib,COND(=),n 0,spc,dbit_nolock_11
454 - load32 PA(pa_dbit_lock),t0
455 -
456 -dbit_spin_11:
457 - LDCW 0(t0),t1
458 - cmpib,= 0,t1,dbit_spin_11
459 - nop
460 -
461 -dbit_nolock_11:
462 -#endif
463 - update_dirty ptp,pte,t1
464 + dbit_lock spc,t0,t1
465 + update_dirty spc,ptp,pte,t1
466
467 make_insert_tlb_11 spc,pte,prot
468
469 @@ -1553,13 +1591,7 @@ dbit_nolock_11:
470 idtlbp prot,(%sr1,va)
471
472 mtsp t1, %sr1 /* Restore sr1 */
473 -#ifdef CONFIG_SMP
474 - cmpib,COND(=),n 0,spc,dbit_nounlock_11
475 - ldi 1,t1
476 - stw t1,0(t0)
477 -
478 -dbit_nounlock_11:
479 -#endif
480 + dbit_unlock0 spc,t0
481
482 rfir
483 nop
484 @@ -1571,32 +1603,15 @@ dbit_trap_20:
485
486 L2_ptep ptp,pte,t0,va,dbit_fault
487
488 -#ifdef CONFIG_SMP
489 - cmpib,COND(=),n 0,spc,dbit_nolock_20
490 - load32 PA(pa_dbit_lock),t0
491 -
492 -dbit_spin_20:
493 - LDCW 0(t0),t1
494 - cmpib,= 0,t1,dbit_spin_20
495 - nop
496 -
497 -dbit_nolock_20:
498 -#endif
499 - update_dirty ptp,pte,t1
500 + dbit_lock spc,t0,t1
501 + update_dirty spc,ptp,pte,t1
502
503 make_insert_tlb spc,pte,prot
504
505 f_extend pte,t1
506
507 idtlbt pte,prot
508 -
509 -#ifdef CONFIG_SMP
510 - cmpib,COND(=),n 0,spc,dbit_nounlock_20
511 - ldi 1,t1
512 - stw t1,0(t0)
513 -
514 -dbit_nounlock_20:
515 -#endif
516 + dbit_unlock0 spc,t0
517
518 rfir
519 nop
520 @@ -1694,7 +1709,8 @@ ENTRY(sys_\name\()_wrapper)
521 ldo TASK_REGS(%r1),%r1
522 reg_save %r1
523 mfctl %cr27, %r28
524 - b sys_\name
525 + ldil L%sys_\name, %r31
526 + be R%sys_\name(%sr4,%r31)
527 STREG %r28, PT_CR27(%r1)
528 ENDPROC(sys_\name\()_wrapper)
529 .endm
530 diff --git a/arch/powerpc/include/asm/rtas.h b/arch/powerpc/include/asm/rtas.h
531 index aef00c6..ee38f29 100644
532 --- a/arch/powerpc/include/asm/rtas.h
533 +++ b/arch/powerpc/include/asm/rtas.h
534 @@ -262,6 +262,8 @@ extern void rtas_progress(char *s, unsigned short hex);
535 extern void rtas_initialize(void);
536 extern int rtas_suspend_cpu(struct rtas_suspend_me_data *data);
537 extern int rtas_suspend_last_cpu(struct rtas_suspend_me_data *data);
538 +extern int rtas_online_cpus_mask(cpumask_var_t cpus);
539 +extern int rtas_offline_cpus_mask(cpumask_var_t cpus);
540 extern int rtas_ibm_suspend_me(struct rtas_args *);
541
542 struct rtc_time;
543 diff --git a/arch/powerpc/kernel/machine_kexec_64.c b/arch/powerpc/kernel/machine_kexec_64.c
544 index 466a290..611acdf 100644
545 --- a/arch/powerpc/kernel/machine_kexec_64.c
546 +++ b/arch/powerpc/kernel/machine_kexec_64.c
547 @@ -17,6 +17,7 @@
548 #include <linux/errno.h>
549 #include <linux/kernel.h>
550 #include <linux/cpu.h>
551 +#include <linux/hardirq.h>
552
553 #include <asm/page.h>
554 #include <asm/current.h>
555 @@ -335,10 +336,13 @@ void default_machine_kexec(struct kimage *image)
556 pr_debug("kexec: Starting switchover sequence.\n");
557
558 /* switch to a staticly allocated stack. Based on irq stack code.
559 + * We setup preempt_count to avoid using VMX in memcpy.
560 * XXX: the task struct will likely be invalid once we do the copy!
561 */
562 kexec_stack.thread_info.task = current_thread_info()->task;
563 kexec_stack.thread_info.flags = 0;
564 + kexec_stack.thread_info.preempt_count = HARDIRQ_OFFSET;
565 + kexec_stack.thread_info.cpu = current_thread_info()->cpu;
566
567 /* We need a static PACA, too; copy this CPU's PACA over and switch to
568 * it. Also poison per_cpu_offset to catch anyone using non-static
569 diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
570 index 1fd6e7b..52add6f 100644
571 --- a/arch/powerpc/kernel/rtas.c
572 +++ b/arch/powerpc/kernel/rtas.c
573 @@ -19,6 +19,7 @@
574 #include <linux/init.h>
575 #include <linux/capability.h>
576 #include <linux/delay.h>
577 +#include <linux/cpu.h>
578 #include <linux/smp.h>
579 #include <linux/completion.h>
580 #include <linux/cpumask.h>
581 @@ -807,6 +808,95 @@ static void rtas_percpu_suspend_me(void *info)
582 __rtas_suspend_cpu((struct rtas_suspend_me_data *)info, 1);
583 }
584
585 +enum rtas_cpu_state {
586 + DOWN,
587 + UP,
588 +};
589 +
590 +#ifndef CONFIG_SMP
591 +static int rtas_cpu_state_change_mask(enum rtas_cpu_state state,
592 + cpumask_var_t cpus)
593 +{
594 + if (!cpumask_empty(cpus)) {
595 + cpumask_clear(cpus);
596 + return -EINVAL;
597 + } else
598 + return 0;
599 +}
600 +#else
601 +/* On return cpumask will be altered to indicate CPUs changed.
602 + * CPUs with states changed will be set in the mask,
603 + * CPUs with status unchanged will be unset in the mask. */
604 +static int rtas_cpu_state_change_mask(enum rtas_cpu_state state,
605 + cpumask_var_t cpus)
606 +{
607 + int cpu;
608 + int cpuret = 0;
609 + int ret = 0;
610 +
611 + if (cpumask_empty(cpus))
612 + return 0;
613 +
614 + for_each_cpu(cpu, cpus) {
615 + switch (state) {
616 + case DOWN:
617 + cpuret = cpu_down(cpu);
618 + break;
619 + case UP:
620 + cpuret = cpu_up(cpu);
621 + break;
622 + }
623 + if (cpuret) {
624 + pr_debug("%s: cpu_%s for cpu#%d returned %d.\n",
625 + __func__,
626 + ((state == UP) ? "up" : "down"),
627 + cpu, cpuret);
628 + if (!ret)
629 + ret = cpuret;
630 + if (state == UP) {
631 + /* clear bits for unchanged cpus, return */
632 + cpumask_shift_right(cpus, cpus, cpu);
633 + cpumask_shift_left(cpus, cpus, cpu);
634 + break;
635 + } else {
636 + /* clear bit for unchanged cpu, continue */
637 + cpumask_clear_cpu(cpu, cpus);
638 + }
639 + }
640 + }
641 +
642 + return ret;
643 +}
644 +#endif
645 +
646 +int rtas_online_cpus_mask(cpumask_var_t cpus)
647 +{
648 + int ret;
649 +
650 + ret = rtas_cpu_state_change_mask(UP, cpus);
651 +
652 + if (ret) {
653 + cpumask_var_t tmp_mask;
654 +
655 + if (!alloc_cpumask_var(&tmp_mask, GFP_TEMPORARY))
656 + return ret;
657 +
658 + /* Use tmp_mask to preserve cpus mask from first failure */
659 + cpumask_copy(tmp_mask, cpus);
660 + rtas_offline_cpus_mask(tmp_mask);
661 + free_cpumask_var(tmp_mask);
662 + }
663 +
664 + return ret;
665 +}
666 +EXPORT_SYMBOL(rtas_online_cpus_mask);
667 +
668 +int rtas_offline_cpus_mask(cpumask_var_t cpus)
669 +{
670 + return rtas_cpu_state_change_mask(DOWN, cpus);
671 +}
672 +EXPORT_SYMBOL(rtas_offline_cpus_mask);
673 +
674 int rtas_ibm_suspend_me(struct rtas_args *args)
675 {
676 long state;
677 @@ -814,6 +904,8 @@ int rtas_ibm_suspend_me(struct rtas_args *args)
678 unsigned long retbuf[PLPAR_HCALL_BUFSIZE];
679 struct rtas_suspend_me_data data;
680 DECLARE_COMPLETION_ONSTACK(done);
681 + cpumask_var_t offline_mask;
682 + int cpuret;
683
684 if (!rtas_service_present("ibm,suspend-me"))
685 return -ENOSYS;
686 @@ -837,11 +929,24 @@ int rtas_ibm_suspend_me(struct rtas_args *args)
687 return 0;
688 }
689
690 + if (!alloc_cpumask_var(&offline_mask, GFP_TEMPORARY))
691 + return -ENOMEM;
692 +
693 atomic_set(&data.working, 0);
694 atomic_set(&data.done, 0);
695 atomic_set(&data.error, 0);
696 data.token = rtas_token("ibm,suspend-me");
697 data.complete = &done;
698 +
699 + /* All present CPUs must be online */
700 + cpumask_andnot(offline_mask, cpu_present_mask, cpu_online_mask);
701 + cpuret = rtas_online_cpus_mask(offline_mask);
702 + if (cpuret) {
703 + pr_err("%s: Could not bring present CPUs online.\n", __func__);
704 + atomic_set(&data.error, cpuret);
705 + goto out;
706 + }
707 +
708 stop_topology_update();
709
710 /* Call function on all CPUs. One of us will make the
711 @@ -857,6 +962,14 @@ int rtas_ibm_suspend_me(struct rtas_args *args)
712
713 start_topology_update();
714
715 + /* Take down CPUs not online prior to suspend */
716 + cpuret = rtas_offline_cpus_mask(offline_mask);
717 + if (cpuret)
718 + pr_warn("%s: Could not restore CPUs to offline state.\n",
719 + __func__);
720 +
721 +out:
722 + free_cpumask_var(offline_mask);
723 return atomic_read(&data.error);
724 }
725 #else /* CONFIG_PPC_PSERIES */
726 diff --git a/arch/powerpc/platforms/pseries/suspend.c b/arch/powerpc/platforms/pseries/suspend.c
727 index 47226e0..5f997e7 100644
728 --- a/arch/powerpc/platforms/pseries/suspend.c
729 +++ b/arch/powerpc/platforms/pseries/suspend.c
730 @@ -16,6 +16,7 @@
731 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
732 */
733
734 +#include <linux/cpu.h>
735 #include <linux/delay.h>
736 #include <linux/suspend.h>
737 #include <linux/stat.h>
738 @@ -126,11 +127,15 @@ static ssize_t store_hibernate(struct device *dev,
739 struct device_attribute *attr,
740 const char *buf, size_t count)
741 {
742 + cpumask_var_t offline_mask;
743 int rc;
744
745 if (!capable(CAP_SYS_ADMIN))
746 return -EPERM;
747
748 + if (!alloc_cpumask_var(&offline_mask, GFP_TEMPORARY))
749 + return -ENOMEM;
750 +
751 stream_id = simple_strtoul(buf, NULL, 16);
752
753 do {
754 @@ -140,15 +145,32 @@ static ssize_t store_hibernate(struct device *dev,
755 } while (rc == -EAGAIN);
756
757 if (!rc) {
758 + /* All present CPUs must be online */
759 + cpumask_andnot(offline_mask, cpu_present_mask,
760 + cpu_online_mask);
761 + rc = rtas_online_cpus_mask(offline_mask);
762 + if (rc) {
763 + pr_err("%s: Could not bring present CPUs online.\n",
764 + __func__);
765 + goto out;
766 + }
767 +
768 stop_topology_update();
769 rc = pm_suspend(PM_SUSPEND_MEM);
770 start_topology_update();
771 +
772 + /* Take down CPUs not online prior to suspend */
773 + if (!rtas_offline_cpus_mask(offline_mask))
774 + pr_warn("%s: Could not restore CPUs to offline "
775 + "state.\n", __func__);
776 }
777
778 stream_id = 0;
779
780 if (!rc)
781 rc = count;
782 +out:
783 + free_cpumask_var(offline_mask);
784 return rc;
785 }
786
787 diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig
788 index 25877ae..41a2a0b 100644
789 --- a/arch/tile/Kconfig
790 +++ b/arch/tile/Kconfig
791 @@ -368,11 +368,17 @@ config HARDWALL
792 config KERNEL_PL
793 int "Processor protection level for kernel"
794 range 1 2
795 - default "1"
796 + default 2 if TILEGX
797 + default 1 if !TILEGX
798 ---help---
799 - This setting determines the processor protection level the
800 - kernel will be built to run at. Generally you should use
801 - the default value here.
802 + Since MDE 4.2, the Tilera hypervisor runs the kernel
803 + at PL2 by default. If running under an older hypervisor,
804 + or as a KVM guest, you must run at PL1. (The current
805 + hypervisor may also be recompiled with "make HV_PL=2" to
806 + allow it to run a kernel at PL1, but clients running at PL1
807 + are not expected to be supported indefinitely.)
808 +
809 + If you're not sure, don't change the default.
810
811 source "arch/tile/gxio/Kconfig"
812
813 diff --git a/arch/tile/include/hv/hypervisor.h b/arch/tile/include/hv/hypervisor.h
814 index ccd847e..837dca5 100644
815 --- a/arch/tile/include/hv/hypervisor.h
816 +++ b/arch/tile/include/hv/hypervisor.h
817 @@ -107,7 +107,22 @@
818 #define HV_DISPATCH_ENTRY_SIZE 32
819
820 /** Version of the hypervisor interface defined by this file */
821 -#define _HV_VERSION 11
822 +#define _HV_VERSION 13
823 +
824 +/** Last version of the hypervisor interface with old hv_init() ABI.
825 + *
826 + * The change from version 12 to version 13 corresponds to launching
827 + * the client by default at PL2 instead of PL1 (corresponding to the
828 + * hv itself running at PL3 instead of PL2). To make this explicit,
829 + * the hv_init() API was also extended so the client can report its
830 + * desired PL, resulting in a more helpful failure diagnostic. If you
831 + * call hv_init() with _HV_VERSION_OLD_HV_INIT and omit the client_pl
832 + * argument, the hypervisor will assume client_pl = 1.
833 + *
834 + * Note that this is a deprecated solution and we do not expect to
835 + * support clients of the Tilera hypervisor running at PL1 indefinitely.
836 + */
837 +#define _HV_VERSION_OLD_HV_INIT 12
838
839 /* Index into hypervisor interface dispatch code blocks.
840 *
841 @@ -377,7 +392,11 @@ typedef int HV_Errno;
842 #ifndef __ASSEMBLER__
843
844 /** Pass HV_VERSION to hv_init to request this version of the interface. */
845 -typedef enum { HV_VERSION = _HV_VERSION } HV_VersionNumber;
846 +typedef enum {
847 + HV_VERSION = _HV_VERSION,
848 + HV_VERSION_OLD_HV_INIT = _HV_VERSION_OLD_HV_INIT,
849 +
850 +} HV_VersionNumber;
851
852 /** Initializes the hypervisor.
853 *
854 @@ -385,9 +404,11 @@ typedef enum { HV_VERSION = _HV_VERSION } HV_VersionNumber;
855 * that this program expects, typically HV_VERSION.
856 * @param chip_num Architecture number of the chip the client was built for.
857 * @param chip_rev_num Revision number of the chip the client was built for.
858 + * @param client_pl Privilege level the client is built for
859 + * (not required if interface_version_number == HV_VERSION_OLD_HV_INIT).
860 */
861 void hv_init(HV_VersionNumber interface_version_number,
862 - int chip_num, int chip_rev_num);
863 + int chip_num, int chip_rev_num, int client_pl);
864
865
866 /** Queries we can make for hv_sysconf().
867 diff --git a/arch/tile/kernel/head_32.S b/arch/tile/kernel/head_32.S
868 index f71bfee..ac11530 100644
869 --- a/arch/tile/kernel/head_32.S
870 +++ b/arch/tile/kernel/head_32.S
871 @@ -38,7 +38,7 @@ ENTRY(_start)
872 movei r2, TILE_CHIP_REV
873 }
874 {
875 - moveli r0, _HV_VERSION
876 + moveli r0, _HV_VERSION_OLD_HV_INIT
877 jal hv_init
878 }
879 /* Get a reasonable default ASID in r0 */
880 diff --git a/arch/tile/kernel/head_64.S b/arch/tile/kernel/head_64.S
881 index f9a2734..6093964 100644
882 --- a/arch/tile/kernel/head_64.S
883 +++ b/arch/tile/kernel/head_64.S
884 @@ -34,13 +34,19 @@
885 ENTRY(_start)
886 /* Notify the hypervisor of what version of the API we want */
887 {
888 +#if KERNEL_PL == 1 && _HV_VERSION == 13
889 + /* Support older hypervisors by asking for API version 12. */
890 + movei r0, _HV_VERSION_OLD_HV_INIT
891 +#else
892 + movei r0, _HV_VERSION
893 +#endif
894 movei r1, TILE_CHIP
895 - movei r2, TILE_CHIP_REV
896 }
897 {
898 - moveli r0, _HV_VERSION
899 - jal hv_init
900 + movei r2, TILE_CHIP_REV
901 + movei r3, KERNEL_PL
902 }
903 + jal hv_init
904 /* Get a reasonable default ASID in r0 */
905 {
906 move r0, zero
907 diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
908 index 15b5cef..6ef2a37 100644
909 --- a/arch/x86/Kconfig
910 +++ b/arch/x86/Kconfig
911 @@ -107,7 +107,6 @@ config X86
912 select GENERIC_CLOCKEVENTS_BROADCAST if X86_64 || (X86_32 && X86_LOCAL_APIC)
913 select GENERIC_TIME_VSYSCALL if X86_64
914 select KTIME_SCALAR if X86_32
915 - select ALWAYS_USE_PERSISTENT_CLOCK
916 select GENERIC_STRNCPY_FROM_USER
917 select GENERIC_STRNLEN_USER
918 select HAVE_CONTEXT_TRACKING if X86_64
919 diff --git a/arch/x86/kernel/microcode_intel_early.c b/arch/x86/kernel/microcode_intel_early.c
920 index d893e8e..2e9e128 100644
921 --- a/arch/x86/kernel/microcode_intel_early.c
922 +++ b/arch/x86/kernel/microcode_intel_early.c
923 @@ -487,6 +487,7 @@ static inline void show_saved_mc(void)
924 #endif
925
926 #if defined(CONFIG_MICROCODE_INTEL_EARLY) && defined(CONFIG_HOTPLUG_CPU)
927 +static DEFINE_MUTEX(x86_cpu_microcode_mutex);
928 /*
929 * Save this mc into mc_saved_data. So it will be loaded early when a CPU is
930 * hot added or resumes.
931 @@ -507,7 +508,7 @@ int save_mc_for_early(u8 *mc)
932 * Hold hotplug lock so mc_saved_data is not accessed by a CPU in
933 * hotplug.
934 */
935 - cpu_hotplug_driver_lock();
936 + mutex_lock(&x86_cpu_microcode_mutex);
937
938 mc_saved_count_init = mc_saved_data.mc_saved_count;
939 mc_saved_count = mc_saved_data.mc_saved_count;
940 @@ -544,7 +545,7 @@ int save_mc_for_early(u8 *mc)
941 }
942
943 out:
944 - cpu_hotplug_driver_unlock();
945 + mutex_unlock(&x86_cpu_microcode_mutex);
946
947 return ret;
948 }
949 diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
950 index a9c9d3e..59622c9 100644
951 --- a/arch/x86/kvm/emulate.c
952 +++ b/arch/x86/kvm/emulate.c
953 @@ -60,6 +60,7 @@
954 #define OpGS 25ull /* GS */
955 #define OpMem8 26ull /* 8-bit zero extended memory operand */
956 #define OpImm64 27ull /* Sign extended 16/32/64-bit immediate */
957 +#define OpXLat 28ull /* memory at BX/EBX/RBX + zero-extended AL */
958
959 #define OpBits 5 /* Width of operand field */
960 #define OpMask ((1ull << OpBits) - 1)
961 @@ -99,6 +100,7 @@
962 #define SrcImmUByte (OpImmUByte << SrcShift)
963 #define SrcImmU (OpImmU << SrcShift)
964 #define SrcSI (OpSI << SrcShift)
965 +#define SrcXLat (OpXLat << SrcShift)
966 #define SrcImmFAddr (OpImmFAddr << SrcShift)
967 #define SrcMemFAddr (OpMemFAddr << SrcShift)
968 #define SrcAcc (OpAcc << SrcShift)
969 @@ -532,6 +534,9 @@ FOP_SETCC(setle)
970 FOP_SETCC(setnle)
971 FOP_END;
972
973 +FOP_START(salc) "pushf; sbb %al, %al; popf \n\t" FOP_RET
974 +FOP_END;
975 +
976 #define __emulate_1op_rax_rdx(ctxt, _op, _suffix, _ex) \
977 do { \
978 unsigned long _tmp; \
979 @@ -2986,6 +2991,28 @@ static int em_das(struct x86_emulate_ctxt *ctxt)
980 return X86EMUL_CONTINUE;
981 }
982
983 +static int em_aam(struct x86_emulate_ctxt *ctxt)
984 +{
985 + u8 al, ah;
986 +
987 + if (ctxt->src.val == 0)
988 + return emulate_de(ctxt);
989 +
990 + al = ctxt->dst.val & 0xff;
991 + ah = al / ctxt->src.val;
992 + al %= ctxt->src.val;
993 +
994 + ctxt->dst.val = (ctxt->dst.val & 0xffff0000) | al | (ah << 8);
995 +
996 + /* Set PF, ZF, SF */
997 + ctxt->src.type = OP_IMM;
998 + ctxt->src.val = 0;
999 + ctxt->src.bytes = 1;
1000 + fastop(ctxt, em_or);
1001 +
1002 + return X86EMUL_CONTINUE;
1003 +}
1004 +
1005 static int em_aad(struct x86_emulate_ctxt *ctxt)
1006 {
1007 u8 al = ctxt->dst.val & 0xff;
1008 @@ -3926,7 +3953,10 @@ static const struct opcode opcode_table[256] = {
1009 /* 0xD0 - 0xD7 */
1010 G(Src2One | ByteOp, group2), G(Src2One, group2),
1011 G(Src2CL | ByteOp, group2), G(Src2CL, group2),
1012 - N, I(DstAcc | SrcImmByte | No64, em_aad), N, N,
1013 + I(DstAcc | SrcImmUByte | No64, em_aam),
1014 + I(DstAcc | SrcImmUByte | No64, em_aad),
1015 + F(DstAcc | ByteOp | No64, em_salc),
1016 + I(DstAcc | SrcXLat | ByteOp, em_mov),
1017 /* 0xD8 - 0xDF */
1018 N, E(0, &escape_d9), N, E(0, &escape_db), N, E(0, &escape_dd), N, N,
1019 /* 0xE0 - 0xE7 */
1020 @@ -4188,6 +4218,16 @@ static int decode_operand(struct x86_emulate_ctxt *ctxt, struct operand *op,
1021 op->val = 0;
1022 op->count = 1;
1023 break;
1024 + case OpXLat:
1025 + op->type = OP_MEM;
1026 + op->bytes = (ctxt->d & ByteOp) ? 1 : ctxt->op_bytes;
1027 + op->addr.mem.ea =
1028 + register_address(ctxt,
1029 + reg_read(ctxt, VCPU_REGS_RBX) +
1030 + (reg_read(ctxt, VCPU_REGS_RAX) & 0xff));
1031 + op->addr.mem.seg = seg_override(ctxt);
1032 + op->val = 0;
1033 + break;
1034 case OpImmFAddr:
1035 op->type = OP_IMM;
1036 op->addr.mem.ea = ctxt->_eip;
1037 diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
1038 index 6667042..0af1807 100644
1039 --- a/arch/x86/kvm/vmx.c
1040 +++ b/arch/x86/kvm/vmx.c
1041 @@ -5197,6 +5197,12 @@ static int handle_invalid_guest_state(struct kvm_vcpu *vcpu)
1042 return 0;
1043 }
1044
1045 + if (vcpu->arch.halt_request) {
1046 + vcpu->arch.halt_request = 0;
1047 + ret = kvm_emulate_halt(vcpu);
1048 + goto out;
1049 + }
1050 +
1051 if (signal_pending(current))
1052 goto out;
1053 if (need_resched())
1054 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
1055 index 2363127..cf95e19 100644
1056 --- a/arch/x86/xen/enlighten.c
1057 +++ b/arch/x86/xen/enlighten.c
1058 @@ -156,6 +156,21 @@ static void xen_vcpu_setup(int cpu)
1059
1060 BUG_ON(HYPERVISOR_shared_info == &xen_dummy_shared_info);
1061
1062 + /*
1063 + * This path is called twice on PVHVM - first during bootup via
1064 + * smp_init -> xen_hvm_cpu_notify, and then if the VCPU is being
1065 + * hotplugged: cpu_up -> xen_hvm_cpu_notify.
1066 + * As we can only do the VCPUOP_register_vcpu_info once lets
1067 + * not over-write its result.
1068 + *
1069 + * For PV it is called during restore (xen_vcpu_restore) and bootup
1070 + * (xen_setup_vcpu_info_placement). The hotplug mechanism does not
1071 + * use this function.
1072 + */
1073 + if (xen_hvm_domain()) {
1074 + if (per_cpu(xen_vcpu, cpu) == &per_cpu(xen_vcpu_info, cpu))
1075 + return;
1076 + }
1077 if (cpu < MAX_VIRT_CPUS)
1078 per_cpu(xen_vcpu,cpu) = &HYPERVISOR_shared_info->vcpu_info[cpu];
1079
1080 diff --git a/drivers/acpi/acpica/exfldio.c b/drivers/acpi/acpica/exfldio.c
1081 index ec7f569..c84ee95 100644
1082 --- a/drivers/acpi/acpica/exfldio.c
1083 +++ b/drivers/acpi/acpica/exfldio.c
1084 @@ -720,7 +720,19 @@ acpi_ex_extract_from_field(union acpi_operand_object *obj_desc,
1085
1086 if ((obj_desc->common_field.start_field_bit_offset == 0) &&
1087 (obj_desc->common_field.bit_length == access_bit_width)) {
1088 - status = acpi_ex_field_datum_io(obj_desc, 0, buffer, ACPI_READ);
1089 + if (buffer_length >= sizeof(u64)) {
1090 + status =
1091 + acpi_ex_field_datum_io(obj_desc, 0, buffer,
1092 + ACPI_READ);
1093 + } else {
1094 + /* Use raw_datum (u64) to handle buffers < 64 bits */
1095 +
1096 + status =
1097 + acpi_ex_field_datum_io(obj_desc, 0, &raw_datum,
1098 + ACPI_READ);
1099 + ACPI_MEMCPY(buffer, &raw_datum, buffer_length);
1100 + }
1101 +
1102 return_ACPI_STATUS(status);
1103 }
1104
1105 diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
1106 index d45b287..edc0081 100644
1107 --- a/drivers/acpi/ec.c
1108 +++ b/drivers/acpi/ec.c
1109 @@ -223,7 +223,7 @@ static int ec_check_sci_sync(struct acpi_ec *ec, u8 state)
1110 static int ec_poll(struct acpi_ec *ec)
1111 {
1112 unsigned long flags;
1113 - int repeat = 2; /* number of command restarts */
1114 + int repeat = 5; /* number of command restarts */
1115 while (repeat--) {
1116 unsigned long delay = jiffies +
1117 msecs_to_jiffies(ec_delay);
1118 @@ -241,8 +241,6 @@ static int ec_poll(struct acpi_ec *ec)
1119 }
1120 advance_transaction(ec, acpi_ec_read_status(ec));
1121 } while (time_before(jiffies, delay));
1122 - if (acpi_ec_read_status(ec) & ACPI_EC_FLAG_IBF)
1123 - break;
1124 pr_debug(PREFIX "controller reset, restart transaction\n");
1125 spin_lock_irqsave(&ec->lock, flags);
1126 start_transaction(ec);
1127 diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
1128 index e98da67..54d03d4 100644
1129 --- a/drivers/block/drbd/drbd_main.c
1130 +++ b/drivers/block/drbd/drbd_main.c
1131 @@ -2795,6 +2795,7 @@ void drbd_free_bc(struct drbd_backing_dev *ldev)
1132 blkdev_put(ldev->backing_bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL);
1133 blkdev_put(ldev->md_bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL);
1134
1135 + kfree(ldev->disk_conf);
1136 kfree(ldev);
1137 }
1138
1139 diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
1140 index a9eccfc..2f5fffd 100644
1141 --- a/drivers/block/drbd/drbd_receiver.c
1142 +++ b/drivers/block/drbd/drbd_receiver.c
1143 @@ -2661,7 +2661,6 @@ static int drbd_asb_recover_1p(struct drbd_conf *mdev) __must_hold(local)
1144 if (hg == -1 && mdev->state.role == R_PRIMARY) {
1145 enum drbd_state_rv rv2;
1146
1147 - drbd_set_role(mdev, R_SECONDARY, 0);
1148 /* drbd_change_state() does not sleep while in SS_IN_TRANSIENT_STATE,
1149 * we might be here in C_WF_REPORT_PARAMS which is transient.
1150 * we do not need to wait for the after state change work either. */
1151 @@ -4659,8 +4658,8 @@ static int drbd_do_features(struct drbd_tconn *tconn)
1152 #if !defined(CONFIG_CRYPTO_HMAC) && !defined(CONFIG_CRYPTO_HMAC_MODULE)
1153 static int drbd_do_auth(struct drbd_tconn *tconn)
1154 {
1155 - dev_err(DEV, "This kernel was build without CONFIG_CRYPTO_HMAC.\n");
1156 - dev_err(DEV, "You need to disable 'cram-hmac-alg' in drbd.conf.\n");
1157 + conn_err(tconn, "This kernel was build without CONFIG_CRYPTO_HMAC.\n");
1158 + conn_err(tconn, "You need to disable 'cram-hmac-alg' in drbd.conf.\n");
1159 return -1;
1160 }
1161 #else
1162 diff --git a/drivers/char/ipmi/ipmi_bt_sm.c b/drivers/char/ipmi/ipmi_bt_sm.c
1163 index cdd4c09f..a22a7a5 100644
1164 --- a/drivers/char/ipmi/ipmi_bt_sm.c
1165 +++ b/drivers/char/ipmi/ipmi_bt_sm.c
1166 @@ -95,9 +95,9 @@ struct si_sm_data {
1167 enum bt_states state;
1168 unsigned char seq; /* BT sequence number */
1169 struct si_sm_io *io;
1170 - unsigned char write_data[IPMI_MAX_MSG_LENGTH];
1171 + unsigned char write_data[IPMI_MAX_MSG_LENGTH + 2]; /* +2 for memcpy */
1172 int write_count;
1173 - unsigned char read_data[IPMI_MAX_MSG_LENGTH];
1174 + unsigned char read_data[IPMI_MAX_MSG_LENGTH + 2]; /* +2 for memcpy */
1175 int read_count;
1176 int truncated;
1177 long timeout; /* microseconds countdown */
1178 diff --git a/drivers/char/ipmi/ipmi_devintf.c b/drivers/char/ipmi/ipmi_devintf.c
1179 index 9eb360f..d5a5f02 100644
1180 --- a/drivers/char/ipmi/ipmi_devintf.c
1181 +++ b/drivers/char/ipmi/ipmi_devintf.c
1182 @@ -837,13 +837,25 @@ static long compat_ipmi_ioctl(struct file *filep, unsigned int cmd,
1183 return ipmi_ioctl(filep, cmd, arg);
1184 }
1185 }
1186 +
1187 +static long unlocked_compat_ipmi_ioctl(struct file *filep, unsigned int cmd,
1188 + unsigned long arg)
1189 +{
1190 + int ret;
1191 +
1192 + mutex_lock(&ipmi_mutex);
1193 + ret = compat_ipmi_ioctl(filep, cmd, arg);
1194 + mutex_unlock(&ipmi_mutex);
1195 +
1196 + return ret;
1197 +}
1198 #endif
1199
1200 static const struct file_operations ipmi_fops = {
1201 .owner = THIS_MODULE,
1202 .unlocked_ioctl = ipmi_unlocked_ioctl,
1203 #ifdef CONFIG_COMPAT
1204 - .compat_ioctl = compat_ipmi_ioctl,
1205 + .compat_ioctl = unlocked_compat_ipmi_ioctl,
1206 #endif
1207 .open = ipmi_open,
1208 .release = ipmi_release,
1209 diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
1210 index 6133ef5..d8a8c9b 100644
1211 --- a/drivers/cpufreq/intel_pstate.c
1212 +++ b/drivers/cpufreq/intel_pstate.c
1213 @@ -48,12 +48,7 @@ static inline int32_t div_fp(int32_t x, int32_t y)
1214 }
1215
1216 struct sample {
1217 - ktime_t start_time;
1218 - ktime_t end_time;
1219 int core_pct_busy;
1220 - int pstate_pct_busy;
1221 - u64 duration_us;
1222 - u64 idletime_us;
1223 u64 aperf;
1224 u64 mperf;
1225 int freq;
1226 @@ -91,8 +86,6 @@ struct cpudata {
1227 int min_pstate_count;
1228 int idle_mode;
1229
1230 - ktime_t prev_sample;
1231 - u64 prev_idle_time_us;
1232 u64 prev_aperf;
1233 u64 prev_mperf;
1234 int sample_ptr;
1235 @@ -124,6 +117,8 @@ struct perf_limits {
1236 int min_perf_pct;
1237 int32_t max_perf;
1238 int32_t min_perf;
1239 + int max_policy_pct;
1240 + int max_sysfs_pct;
1241 };
1242
1243 static struct perf_limits limits = {
1244 @@ -132,6 +127,8 @@ static struct perf_limits limits = {
1245 .max_perf = int_tofp(1),
1246 .min_perf_pct = 0,
1247 .min_perf = 0,
1248 + .max_policy_pct = 100,
1249 + .max_sysfs_pct = 100,
1250 };
1251
1252 static inline void pid_reset(struct _pid *pid, int setpoint, int busy,
1253 @@ -302,7 +299,8 @@ static ssize_t store_max_perf_pct(struct kobject *a, struct attribute *b,
1254 if (ret != 1)
1255 return -EINVAL;
1256
1257 - limits.max_perf_pct = clamp_t(int, input, 0 , 100);
1258 + limits.max_sysfs_pct = clamp_t(int, input, 0 , 100);
1259 + limits.max_perf_pct = min(limits.max_policy_pct, limits.max_sysfs_pct);
1260 limits.max_perf = div_fp(int_tofp(limits.max_perf_pct), int_tofp(100));
1261 return count;
1262 }
1263 @@ -450,48 +448,26 @@ static inline void intel_pstate_calc_busy(struct cpudata *cpu,
1264 struct sample *sample)
1265 {
1266 u64 core_pct;
1267 - sample->pstate_pct_busy = 100 - div64_u64(
1268 - sample->idletime_us * 100,
1269 - sample->duration_us);
1270 core_pct = div64_u64(sample->aperf * 100, sample->mperf);
1271 sample->freq = cpu->pstate.max_pstate * core_pct * 1000;
1272
1273 - sample->core_pct_busy = div_s64((sample->pstate_pct_busy * core_pct),
1274 - 100);
1275 + sample->core_pct_busy = core_pct;
1276 }
1277
1278 static inline void intel_pstate_sample(struct cpudata *cpu)
1279 {
1280 - ktime_t now;
1281 - u64 idle_time_us;
1282 u64 aperf, mperf;
1283
1284 - now = ktime_get();
1285 - idle_time_us = get_cpu_idle_time_us(cpu->cpu, NULL);
1286 -
1287 rdmsrl(MSR_IA32_APERF, aperf);
1288 rdmsrl(MSR_IA32_MPERF, mperf);
1289 - /* for the first sample, don't actually record a sample, just
1290 - * set the baseline */
1291 - if (cpu->prev_idle_time_us > 0) {
1292 - cpu->sample_ptr = (cpu->sample_ptr + 1) % SAMPLE_COUNT;
1293 - cpu->samples[cpu->sample_ptr].start_time = cpu->prev_sample;
1294 - cpu->samples[cpu->sample_ptr].end_time = now;
1295 - cpu->samples[cpu->sample_ptr].duration_us =
1296 - ktime_us_delta(now, cpu->prev_sample);
1297 - cpu->samples[cpu->sample_ptr].idletime_us =
1298 - idle_time_us - cpu->prev_idle_time_us;
1299 -
1300 - cpu->samples[cpu->sample_ptr].aperf = aperf;
1301 - cpu->samples[cpu->sample_ptr].mperf = mperf;
1302 - cpu->samples[cpu->sample_ptr].aperf -= cpu->prev_aperf;
1303 - cpu->samples[cpu->sample_ptr].mperf -= cpu->prev_mperf;
1304 -
1305 - intel_pstate_calc_busy(cpu, &cpu->samples[cpu->sample_ptr]);
1306 - }
1307 + cpu->sample_ptr = (cpu->sample_ptr + 1) % SAMPLE_COUNT;
1308 + cpu->samples[cpu->sample_ptr].aperf = aperf;
1309 + cpu->samples[cpu->sample_ptr].mperf = mperf;
1310 + cpu->samples[cpu->sample_ptr].aperf -= cpu->prev_aperf;
1311 + cpu->samples[cpu->sample_ptr].mperf -= cpu->prev_mperf;
1312 +
1313 + intel_pstate_calc_busy(cpu, &cpu->samples[cpu->sample_ptr]);
1314
1315 - cpu->prev_sample = now;
1316 - cpu->prev_idle_time_us = idle_time_us;
1317 cpu->prev_aperf = aperf;
1318 cpu->prev_mperf = mperf;
1319 }
1320 @@ -575,22 +551,16 @@ static void intel_pstate_timer_func(unsigned long __data)
1321 struct cpudata *cpu = (struct cpudata *) __data;
1322
1323 intel_pstate_sample(cpu);
1324 + intel_pstate_adjust_busy_pstate(cpu);
1325
1326 - if (!cpu->idle_mode)
1327 - intel_pstate_adjust_busy_pstate(cpu);
1328 - else
1329 - intel_pstate_adjust_idle_pstate(cpu);
1330 -
1331 -#if defined(XPERF_FIX)
1332 if (cpu->pstate.current_pstate == cpu->pstate.min_pstate) {
1333 cpu->min_pstate_count++;
1334 if (!(cpu->min_pstate_count % 5)) {
1335 intel_pstate_set_pstate(cpu, cpu->pstate.max_pstate);
1336 - intel_pstate_idle_mode(cpu);
1337 }
1338 } else
1339 cpu->min_pstate_count = 0;
1340 -#endif
1341 +
1342 intel_pstate_set_sample_time(cpu);
1343 }
1344
1345 @@ -670,8 +640,9 @@ static int intel_pstate_set_policy(struct cpufreq_policy *policy)
1346 limits.min_perf_pct = clamp_t(int, limits.min_perf_pct, 0 , 100);
1347 limits.min_perf = div_fp(int_tofp(limits.min_perf_pct), int_tofp(100));
1348
1349 - limits.max_perf_pct = policy->max * 100 / policy->cpuinfo.max_freq;
1350 - limits.max_perf_pct = clamp_t(int, limits.max_perf_pct, 0 , 100);
1351 + limits.max_policy_pct = policy->max * 100 / policy->cpuinfo.max_freq;
1352 + limits.max_policy_pct = clamp_t(int, limits.max_policy_pct, 0 , 100);
1353 + limits.max_perf_pct = min(limits.max_policy_pct, limits.max_sysfs_pct);
1354 limits.max_perf = div_fp(int_tofp(limits.max_perf_pct), int_tofp(100));
1355
1356 if (policy->policy == CPUFREQ_POLICY_PERFORMANCE) {
1357 diff --git a/drivers/dma/of-dma.c b/drivers/dma/of-dma.c
1358 index 69d04d2..09c7ad1 100644
1359 --- a/drivers/dma/of-dma.c
1360 +++ b/drivers/dma/of-dma.c
1361 @@ -93,6 +93,7 @@ int of_dma_controller_register(struct device_node *np,
1362 {
1363 struct of_dma *ofdma;
1364 int nbcells;
1365 + const __be32 *prop;
1366
1367 if (!np || !of_dma_xlate) {
1368 pr_err("%s: not enough information provided\n", __func__);
1369 @@ -103,8 +104,11 @@ int of_dma_controller_register(struct device_node *np,
1370 if (!ofdma)
1371 return -ENOMEM;
1372
1373 - nbcells = be32_to_cpup(of_get_property(np, "#dma-cells", NULL));
1374 - if (!nbcells) {
1375 + prop = of_get_property(np, "#dma-cells", NULL);
1376 + if (prop)
1377 + nbcells = be32_to_cpup(prop);
1378 +
1379 + if (!prop || !nbcells) {
1380 pr_err("%s: #dma-cells property is missing or invalid\n",
1381 __func__);
1382 kfree(ofdma);
1383 diff --git a/drivers/dma/pch_dma.c b/drivers/dma/pch_dma.c
1384 index d01faeb..ce3dc3e 100644
1385 --- a/drivers/dma/pch_dma.c
1386 +++ b/drivers/dma/pch_dma.c
1387 @@ -476,7 +476,7 @@ static struct pch_dma_desc *pdc_desc_get(struct pch_dma_chan *pd_chan)
1388 dev_dbg(chan2dev(&pd_chan->chan), "scanned %d descriptors\n", i);
1389
1390 if (!ret) {
1391 - ret = pdc_alloc_desc(&pd_chan->chan, GFP_NOIO);
1392 + ret = pdc_alloc_desc(&pd_chan->chan, GFP_ATOMIC);
1393 if (ret) {
1394 spin_lock(&pd_chan->lock);
1395 pd_chan->descs_allocated++;
1396 diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
1397 index dd64a06..016c5d8 100644
1398 --- a/drivers/gpu/drm/drm_crtc.c
1399 +++ b/drivers/gpu/drm/drm_crtc.c
1400 @@ -78,6 +78,10 @@ void drm_warn_on_modeset_not_all_locked(struct drm_device *dev)
1401 {
1402 struct drm_crtc *crtc;
1403
1404 + /* Locking is currently fubar in the panic handler. */
1405 + if (oops_in_progress)
1406 + return;
1407 +
1408 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head)
1409 WARN_ON(!mutex_is_locked(&crtc->mutex));
1410
1411 diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c
1412 index db1e2d6..07cf99c 100644
1413 --- a/drivers/gpu/drm/drm_mm.c
1414 +++ b/drivers/gpu/drm/drm_mm.c
1415 @@ -755,33 +755,35 @@ void drm_mm_debug_table(struct drm_mm *mm, const char *prefix)
1416 EXPORT_SYMBOL(drm_mm_debug_table);
1417
1418 #if defined(CONFIG_DEBUG_FS)
1419 -int drm_mm_dump_table(struct seq_file *m, struct drm_mm *mm)
1420 +static unsigned long drm_mm_dump_hole(struct seq_file *m, struct drm_mm_node *entry)
1421 {
1422 - struct drm_mm_node *entry;
1423 - unsigned long total_used = 0, total_free = 0, total = 0;
1424 unsigned long hole_start, hole_end, hole_size;
1425
1426 - hole_start = drm_mm_hole_node_start(&mm->head_node);
1427 - hole_end = drm_mm_hole_node_end(&mm->head_node);
1428 - hole_size = hole_end - hole_start;
1429 - if (hole_size)
1430 + if (entry->hole_follows) {
1431 + hole_start = drm_mm_hole_node_start(entry);
1432 + hole_end = drm_mm_hole_node_end(entry);
1433 + hole_size = hole_end - hole_start;
1434 seq_printf(m, "0x%08lx-0x%08lx: 0x%08lx: free\n",
1435 hole_start, hole_end, hole_size);
1436 - total_free += hole_size;
1437 + return hole_size;
1438 + }
1439 +
1440 + return 0;
1441 +}
1442 +
1443 +int drm_mm_dump_table(struct seq_file *m, struct drm_mm *mm)
1444 +{
1445 + struct drm_mm_node *entry;
1446 + unsigned long total_used = 0, total_free = 0, total = 0;
1447 +
1448 + total_free += drm_mm_dump_hole(m, &mm->head_node);
1449
1450 drm_mm_for_each_node(entry, mm) {
1451 seq_printf(m, "0x%08lx-0x%08lx: 0x%08lx: used\n",
1452 entry->start, entry->start + entry->size,
1453 entry->size);
1454 total_used += entry->size;
1455 - if (entry->hole_follows) {
1456 - hole_start = drm_mm_hole_node_start(entry);
1457 - hole_end = drm_mm_hole_node_end(entry);
1458 - hole_size = hole_end - hole_start;
1459 - seq_printf(m, "0x%08lx-0x%08lx: 0x%08lx: free\n",
1460 - hole_start, hole_end, hole_size);
1461 - total_free += hole_size;
1462 - }
1463 + total_free += drm_mm_dump_hole(m, entry);
1464 }
1465 total = total_free + total_used;
1466
1467 diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
1468 index 981bdce..898832b 100644
1469 --- a/drivers/gpu/drm/i915/intel_fb.c
1470 +++ b/drivers/gpu/drm/i915/intel_fb.c
1471 @@ -261,10 +261,22 @@ void intel_fbdev_fini(struct drm_device *dev)
1472 void intel_fbdev_set_suspend(struct drm_device *dev, int state)
1473 {
1474 drm_i915_private_t *dev_priv = dev->dev_private;
1475 - if (!dev_priv->fbdev)
1476 + struct intel_fbdev *ifbdev = dev_priv->fbdev;
1477 + struct fb_info *info;
1478 +
1479 + if (!ifbdev)
1480 return;
1481
1482 - fb_set_suspend(dev_priv->fbdev->helper.fbdev, state);
1483 + info = ifbdev->helper.fbdev;
1484 +
1485 + /* On resume from hibernation: If the object is shmemfs backed, it has
1486 + * been restored from swap. If the object is stolen however, it will be
1487 + * full of whatever garbage was left in there.
1488 + */
1489 + if (!state && ifbdev->ifb.obj->stolen)
1490 + memset_io(info->screen_base, 0, info->screen_size);
1491 +
1492 + fb_set_suspend(info, state);
1493 }
1494
1495 MODULE_LICENSE("GPL and additional rights");
1496 diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
1497 index 78d8e91..713dd70 100644
1498 --- a/drivers/gpu/drm/mgag200/mgag200_mode.c
1499 +++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
1500 @@ -189,12 +189,12 @@ static int mga_g200wb_set_plls(struct mga_device *mdev, long clock)
1501 WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
1502 tmp = RREG8(DAC_DATA);
1503 tmp |= MGA1064_PIX_CLK_CTL_CLK_DIS;
1504 - WREG_DAC(MGA1064_PIX_CLK_CTL_CLK_DIS, tmp);
1505 + WREG8(DAC_DATA, tmp);
1506
1507 WREG8(DAC_INDEX, MGA1064_REMHEADCTL);
1508 tmp = RREG8(DAC_DATA);
1509 tmp |= MGA1064_REMHEADCTL_CLKDIS;
1510 - WREG_DAC(MGA1064_REMHEADCTL, tmp);
1511 + WREG8(DAC_DATA, tmp);
1512
1513 /* select PLL Set C */
1514 tmp = RREG8(MGAREG_MEM_MISC_READ);
1515 @@ -204,7 +204,7 @@ static int mga_g200wb_set_plls(struct mga_device *mdev, long clock)
1516 WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
1517 tmp = RREG8(DAC_DATA);
1518 tmp |= MGA1064_PIX_CLK_CTL_CLK_POW_DOWN | 0x80;
1519 - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
1520 + WREG8(DAC_DATA, tmp);
1521
1522 udelay(500);
1523
1524 @@ -212,7 +212,7 @@ static int mga_g200wb_set_plls(struct mga_device *mdev, long clock)
1525 WREG8(DAC_INDEX, MGA1064_VREF_CTL);
1526 tmp = RREG8(DAC_DATA);
1527 tmp &= ~0x04;
1528 - WREG_DAC(MGA1064_VREF_CTL, tmp);
1529 + WREG8(DAC_DATA, tmp);
1530
1531 udelay(50);
1532
1533 @@ -236,13 +236,13 @@ static int mga_g200wb_set_plls(struct mga_device *mdev, long clock)
1534 tmp = RREG8(DAC_DATA);
1535 tmp &= ~MGA1064_PIX_CLK_CTL_SEL_MSK;
1536 tmp |= MGA1064_PIX_CLK_CTL_SEL_PLL;
1537 - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
1538 + WREG8(DAC_DATA, tmp);
1539
1540 WREG8(DAC_INDEX, MGA1064_REMHEADCTL);
1541 tmp = RREG8(DAC_DATA);
1542 tmp &= ~MGA1064_REMHEADCTL_CLKSL_MSK;
1543 tmp |= MGA1064_REMHEADCTL_CLKSL_PLL;
1544 - WREG_DAC(MGA1064_REMHEADCTL, tmp);
1545 + WREG8(DAC_DATA, tmp);
1546
1547 /* reset dotclock rate bit */
1548 WREG8(MGAREG_SEQ_INDEX, 1);
1549 @@ -253,7 +253,7 @@ static int mga_g200wb_set_plls(struct mga_device *mdev, long clock)
1550 WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
1551 tmp = RREG8(DAC_DATA);
1552 tmp &= ~MGA1064_PIX_CLK_CTL_CLK_DIS;
1553 - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
1554 + WREG8(DAC_DATA, tmp);
1555
1556 vcount = RREG8(MGAREG_VCOUNT);
1557
1558 @@ -318,7 +318,7 @@ static int mga_g200ev_set_plls(struct mga_device *mdev, long clock)
1559 WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
1560 tmp = RREG8(DAC_DATA);
1561 tmp |= MGA1064_PIX_CLK_CTL_CLK_DIS;
1562 - WREG_DAC(MGA1064_PIX_CLK_CTL_CLK_DIS, tmp);
1563 + WREG8(DAC_DATA, tmp);
1564
1565 tmp = RREG8(MGAREG_MEM_MISC_READ);
1566 tmp |= 0x3 << 2;
1567 @@ -326,12 +326,12 @@ static int mga_g200ev_set_plls(struct mga_device *mdev, long clock)
1568
1569 WREG8(DAC_INDEX, MGA1064_PIX_PLL_STAT);
1570 tmp = RREG8(DAC_DATA);
1571 - WREG_DAC(MGA1064_PIX_PLL_STAT, tmp & ~0x40);
1572 + WREG8(DAC_DATA, tmp & ~0x40);
1573
1574 WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
1575 tmp = RREG8(DAC_DATA);
1576 tmp |= MGA1064_PIX_CLK_CTL_CLK_POW_DOWN;
1577 - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
1578 + WREG8(DAC_DATA, tmp);
1579
1580 WREG_DAC(MGA1064_EV_PIX_PLLC_M, m);
1581 WREG_DAC(MGA1064_EV_PIX_PLLC_N, n);
1582 @@ -342,7 +342,7 @@ static int mga_g200ev_set_plls(struct mga_device *mdev, long clock)
1583 WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
1584 tmp = RREG8(DAC_DATA);
1585 tmp &= ~MGA1064_PIX_CLK_CTL_CLK_POW_DOWN;
1586 - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
1587 + WREG8(DAC_DATA, tmp);
1588
1589 udelay(500);
1590
1591 @@ -350,11 +350,11 @@ static int mga_g200ev_set_plls(struct mga_device *mdev, long clock)
1592 tmp = RREG8(DAC_DATA);
1593 tmp &= ~MGA1064_PIX_CLK_CTL_SEL_MSK;
1594 tmp |= MGA1064_PIX_CLK_CTL_SEL_PLL;
1595 - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
1596 + WREG8(DAC_DATA, tmp);
1597
1598 WREG8(DAC_INDEX, MGA1064_PIX_PLL_STAT);
1599 tmp = RREG8(DAC_DATA);
1600 - WREG_DAC(MGA1064_PIX_PLL_STAT, tmp | 0x40);
1601 + WREG8(DAC_DATA, tmp | 0x40);
1602
1603 tmp = RREG8(MGAREG_MEM_MISC_READ);
1604 tmp |= (0x3 << 2);
1605 @@ -363,7 +363,7 @@ static int mga_g200ev_set_plls(struct mga_device *mdev, long clock)
1606 WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
1607 tmp = RREG8(DAC_DATA);
1608 tmp &= ~MGA1064_PIX_CLK_CTL_CLK_DIS;
1609 - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
1610 + WREG8(DAC_DATA, tmp);
1611
1612 return 0;
1613 }
1614 @@ -416,7 +416,7 @@ static int mga_g200eh_set_plls(struct mga_device *mdev, long clock)
1615 WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
1616 tmp = RREG8(DAC_DATA);
1617 tmp |= MGA1064_PIX_CLK_CTL_CLK_DIS;
1618 - WREG_DAC(MGA1064_PIX_CLK_CTL_CLK_DIS, tmp);
1619 + WREG8(DAC_DATA, tmp);
1620
1621 tmp = RREG8(MGAREG_MEM_MISC_READ);
1622 tmp |= 0x3 << 2;
1623 @@ -425,7 +425,7 @@ static int mga_g200eh_set_plls(struct mga_device *mdev, long clock)
1624 WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
1625 tmp = RREG8(DAC_DATA);
1626 tmp |= MGA1064_PIX_CLK_CTL_CLK_POW_DOWN;
1627 - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
1628 + WREG8(DAC_DATA, tmp);
1629
1630 udelay(500);
1631
1632 @@ -439,13 +439,13 @@ static int mga_g200eh_set_plls(struct mga_device *mdev, long clock)
1633 tmp = RREG8(DAC_DATA);
1634 tmp &= ~MGA1064_PIX_CLK_CTL_SEL_MSK;
1635 tmp |= MGA1064_PIX_CLK_CTL_SEL_PLL;
1636 - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
1637 + WREG8(DAC_DATA, tmp);
1638
1639 WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
1640 tmp = RREG8(DAC_DATA);
1641 tmp &= ~MGA1064_PIX_CLK_CTL_CLK_DIS;
1642 tmp &= ~MGA1064_PIX_CLK_CTL_CLK_POW_DOWN;
1643 - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
1644 + WREG8(DAC_DATA, tmp);
1645
1646 vcount = RREG8(MGAREG_VCOUNT);
1647
1648 @@ -515,12 +515,12 @@ static int mga_g200er_set_plls(struct mga_device *mdev, long clock)
1649 WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
1650 tmp = RREG8(DAC_DATA);
1651 tmp |= MGA1064_PIX_CLK_CTL_CLK_DIS;
1652 - WREG_DAC(MGA1064_PIX_CLK_CTL_CLK_DIS, tmp);
1653 + WREG8(DAC_DATA, tmp);
1654
1655 WREG8(DAC_INDEX, MGA1064_REMHEADCTL);
1656 tmp = RREG8(DAC_DATA);
1657 tmp |= MGA1064_REMHEADCTL_CLKDIS;
1658 - WREG_DAC(MGA1064_REMHEADCTL, tmp);
1659 + WREG8(DAC_DATA, tmp);
1660
1661 tmp = RREG8(MGAREG_MEM_MISC_READ);
1662 tmp |= (0x3<<2) | 0xc0;
1663 @@ -530,7 +530,7 @@ static int mga_g200er_set_plls(struct mga_device *mdev, long clock)
1664 tmp = RREG8(DAC_DATA);
1665 tmp &= ~MGA1064_PIX_CLK_CTL_CLK_DIS;
1666 tmp |= MGA1064_PIX_CLK_CTL_CLK_POW_DOWN;
1667 - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
1668 + WREG8(DAC_DATA, tmp);
1669
1670 udelay(500);
1671
1672 @@ -657,12 +657,26 @@ static void mga_g200wb_commit(struct drm_crtc *crtc)
1673 WREG_DAC(MGA1064_GEN_IO_DATA, tmp);
1674 }
1675
1676 -
1677 +/*
1678 + This is how the framebuffer base address is stored in g200 cards:
1679 + * Assume @offset is the gpu_addr variable of the framebuffer object
1680 + * Then addr is the number of _pixels_ (not bytes) from the start of
1681 + VRAM to the first pixel we want to display. (divided by 2 for 32bit
1682 + framebuffers)
1683 + * addr is stored in the CRTCEXT0, CRTCC and CRTCD registers
1684 + addr<20> -> CRTCEXT0<6>
1685 + addr<19-16> -> CRTCEXT0<3-0>
1686 + addr<15-8> -> CRTCC<7-0>
1687 + addr<7-0> -> CRTCD<7-0>
1688 + CRTCEXT0 has to be programmed last to trigger an update and make the
1689 + new addr variable take effect.
1690 + */
1691 void mga_set_start_address(struct drm_crtc *crtc, unsigned offset)
1692 {
1693 struct mga_device *mdev = crtc->dev->dev_private;
1694 u32 addr;
1695 int count;
1696 + u8 crtcext0;
1697
1698 while (RREG8(0x1fda) & 0x08);
1699 while (!(RREG8(0x1fda) & 0x08));
1700 @@ -670,10 +684,17 @@ void mga_set_start_address(struct drm_crtc *crtc, unsigned offset)
1701 count = RREG8(MGAREG_VCOUNT) + 2;
1702 while (RREG8(MGAREG_VCOUNT) < count);
1703
1704 - addr = offset >> 2;
1705 + WREG8(MGAREG_CRTCEXT_INDEX, 0);
1706 + crtcext0 = RREG8(MGAREG_CRTCEXT_DATA);
1707 + crtcext0 &= 0xB0;
1708 + addr = offset / 8;
1709 + /* Can't store addresses any higher than that...
1710 + but we also don't have more than 16MB of memory, so it should be fine. */
1711 + WARN_ON(addr > 0x1fffff);
1712 + crtcext0 |= (!!(addr & (1<<20)))<<6;
1713 WREG_CRT(0x0d, (u8)(addr & 0xff));
1714 WREG_CRT(0x0c, (u8)(addr >> 8) & 0xff);
1715 - WREG_CRT(0xaf, (u8)(addr >> 16) & 0xf);
1716 + WREG_ECRT(0x0, ((u8)(addr >> 16) & 0xf) | crtcext0);
1717 }
1718
1719
1720 diff --git a/drivers/gpu/drm/radeon/r300_cmdbuf.c b/drivers/gpu/drm/radeon/r300_cmdbuf.c
1721 index 865e2c9..60170ea 100644
1722 --- a/drivers/gpu/drm/radeon/r300_cmdbuf.c
1723 +++ b/drivers/gpu/drm/radeon/r300_cmdbuf.c
1724 @@ -75,7 +75,7 @@ static int r300_emit_cliprects(drm_radeon_private_t *dev_priv,
1725 OUT_RING(CP_PACKET0(R300_RE_CLIPRECT_TL_0, nr * 2 - 1));
1726
1727 for (i = 0; i < nr; ++i) {
1728 - if (DRM_COPY_FROM_USER_UNCHECKED
1729 + if (DRM_COPY_FROM_USER
1730 (&box, &cmdbuf->boxes[n + i], sizeof(box))) {
1731 DRM_ERROR("copy cliprect faulted\n");
1732 return -EFAULT;
1733 diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
1734 index 66a7f0f..96cf439 100644
1735 --- a/drivers/gpu/drm/radeon/radeon_drv.c
1736 +++ b/drivers/gpu/drm/radeon/radeon_drv.c
1737 @@ -144,7 +144,7 @@ static inline void radeon_unregister_atpx_handler(void) {}
1738 #endif
1739
1740 int radeon_no_wb;
1741 -int radeon_modeset = 1;
1742 +int radeon_modeset = -1;
1743 int radeon_dynclks = -1;
1744 int radeon_r4xx_atom = 0;
1745 int radeon_agpmode = 0;
1746 @@ -449,6 +449,16 @@ static struct pci_driver radeon_kms_pci_driver = {
1747
1748 static int __init radeon_init(void)
1749 {
1750 +#ifdef CONFIG_VGA_CONSOLE
1751 + if (vgacon_text_force() && radeon_modeset == -1) {
1752 + DRM_INFO("VGACON disable radeon kernel modesetting.\n");
1753 + radeon_modeset = 0;
1754 + }
1755 +#endif
1756 + /* set to modesetting by default if not nomodeset */
1757 + if (radeon_modeset == -1)
1758 + radeon_modeset = 1;
1759 +
1760 if (radeon_modeset == 1) {
1761 DRM_INFO("radeon kernel modesetting enabled.\n");
1762 driver = &kms_driver;
1763 diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
1764 index aa341d1..e6dbf09 100644
1765 --- a/drivers/hid/hid-core.c
1766 +++ b/drivers/hid/hid-core.c
1767 @@ -1702,6 +1702,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
1768 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) },
1769 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
1770 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) },
1771 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE) },
1772 { HID_USB_DEVICE(USB_VENDOR_ID_STEELSERIES, USB_DEVICE_ID_STEELSERIES_SRWS1) },
1773 { HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) },
1774 { HID_USB_DEVICE(USB_VENDOR_ID_THINGM, USB_DEVICE_ID_BLINK1) },
1775 diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c
1776 index c608313..0387e05 100644
1777 --- a/drivers/md/dm-bufio.c
1778 +++ b/drivers/md/dm-bufio.c
1779 @@ -319,6 +319,9 @@ static void __cache_size_refresh(void)
1780 static void *alloc_buffer_data(struct dm_bufio_client *c, gfp_t gfp_mask,
1781 enum data_mode *data_mode)
1782 {
1783 + unsigned noio_flag;
1784 + void *ptr;
1785 +
1786 if (c->block_size <= DM_BUFIO_BLOCK_SIZE_SLAB_LIMIT) {
1787 *data_mode = DATA_MODE_SLAB;
1788 return kmem_cache_alloc(DM_BUFIO_CACHE(c), gfp_mask);
1789 @@ -332,7 +335,26 @@ static void *alloc_buffer_data(struct dm_bufio_client *c, gfp_t gfp_mask,
1790 }
1791
1792 *data_mode = DATA_MODE_VMALLOC;
1793 - return __vmalloc(c->block_size, gfp_mask, PAGE_KERNEL);
1794 +
1795 + /*
1796 + * __vmalloc allocates the data pages and auxiliary structures with
1797 + * gfp_flags that were specified, but pagetables are always allocated
1798 + * with GFP_KERNEL, no matter what was specified as gfp_mask.
1799 + *
1800 + * Consequently, we must set per-process flag PF_MEMALLOC_NOIO so that
1801 + * all allocations done by this process (including pagetables) are done
1802 + * as if GFP_NOIO was specified.
1803 + */
1804 +
1805 + if (gfp_mask & __GFP_NORETRY)
1806 + noio_flag = memalloc_noio_save();
1807 +
1808 + ptr = __vmalloc(c->block_size, gfp_mask, PAGE_KERNEL);
1809 +
1810 + if (gfp_mask & __GFP_NORETRY)
1811 + memalloc_noio_restore(noio_flag);
1812 +
1813 + return ptr;
1814 }
1815
1816 /*
1817 diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c
1818 index 1074409..6feaba2 100644
1819 --- a/drivers/md/dm-cache-target.c
1820 +++ b/drivers/md/dm-cache-target.c
1821 @@ -1971,6 +1971,7 @@ static int cache_create(struct cache_args *ca, struct cache **result)
1822 atomic_set(&cache->nr_migrations, 0);
1823 init_waitqueue_head(&cache->migration_wait);
1824
1825 + r = -ENOMEM;
1826 cache->nr_dirty = 0;
1827 cache->dirty_bitset = alloc_bitset(from_cblock(cache->cache_size));
1828 if (!cache->dirty_bitset) {
1829 diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c
1830 index c0e0702..c434e5a 100644
1831 --- a/drivers/md/dm-snap.c
1832 +++ b/drivers/md/dm-snap.c
1833 @@ -1121,6 +1121,7 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv)
1834 s->pending_pool = mempool_create_slab_pool(MIN_IOS, pending_cache);
1835 if (!s->pending_pool) {
1836 ti->error = "Could not allocate mempool for pending exceptions";
1837 + r = -ENOMEM;
1838 goto bad_pending_pool;
1839 }
1840
1841 diff --git a/drivers/md/dm-stripe.c b/drivers/md/dm-stripe.c
1842 index d8837d3..7b8b2b9 100644
1843 --- a/drivers/md/dm-stripe.c
1844 +++ b/drivers/md/dm-stripe.c
1845 @@ -94,7 +94,7 @@ static int get_stripe(struct dm_target *ti, struct stripe_c *sc,
1846 static int stripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
1847 {
1848 struct stripe_c *sc;
1849 - sector_t width;
1850 + sector_t width, tmp_len;
1851 uint32_t stripes;
1852 uint32_t chunk_size;
1853 int r;
1854 @@ -116,15 +116,16 @@ static int stripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
1855 }
1856
1857 width = ti->len;
1858 - if (sector_div(width, chunk_size)) {
1859 + if (sector_div(width, stripes)) {
1860 ti->error = "Target length not divisible by "
1861 - "chunk size";
1862 + "number of stripes";
1863 return -EINVAL;
1864 }
1865
1866 - if (sector_div(width, stripes)) {
1867 + tmp_len = width;
1868 + if (sector_div(tmp_len, chunk_size)) {
1869 ti->error = "Target length not divisible by "
1870 - "number of stripes";
1871 + "chunk size";
1872 return -EINVAL;
1873 }
1874
1875 diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
1876 index e50dad0..1ff252a 100644
1877 --- a/drivers/md/dm-table.c
1878 +++ b/drivers/md/dm-table.c
1879 @@ -1442,7 +1442,7 @@ static bool dm_table_supports_write_same(struct dm_table *t)
1880 return false;
1881
1882 if (!ti->type->iterate_devices ||
1883 - !ti->type->iterate_devices(ti, device_not_write_same_capable, NULL))
1884 + ti->type->iterate_devices(ti, device_not_write_same_capable, NULL))
1885 return false;
1886 }
1887
1888 diff --git a/drivers/net/ethernet/3com/3c509.c b/drivers/net/ethernet/3com/3c509.c
1889 index f36ff99..adb4bf5 100644
1890 --- a/drivers/net/ethernet/3com/3c509.c
1891 +++ b/drivers/net/ethernet/3com/3c509.c
1892 @@ -306,6 +306,7 @@ static int el3_isa_match(struct device *pdev, unsigned int ndev)
1893 if (!dev)
1894 return -ENOMEM;
1895
1896 + SET_NETDEV_DEV(dev, pdev);
1897 netdev_boot_setup_check(dev);
1898
1899 if (!request_region(ioaddr, EL3_IO_EXTENT, "3c509-isa")) {
1900 @@ -595,6 +596,7 @@ static int __init el3_eisa_probe (struct device *device)
1901 return -ENOMEM;
1902 }
1903
1904 + SET_NETDEV_DEV(dev, device);
1905 netdev_boot_setup_check(dev);
1906
1907 el3_dev_fill(dev, phys_addr, ioaddr, irq, if_port, EL3_EISA);
1908 diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c
1909 index 1928e20..072c6f1 100644
1910 --- a/drivers/net/ethernet/3com/3c59x.c
1911 +++ b/drivers/net/ethernet/3com/3c59x.c
1912 @@ -632,7 +632,6 @@ struct vortex_private {
1913 pm_state_valid:1, /* pci_dev->saved_config_space has sane contents */
1914 open:1,
1915 medialock:1,
1916 - must_free_region:1, /* Flag: if zero, Cardbus owns the I/O region */
1917 large_frames:1, /* accept large frames */
1918 handling_irq:1; /* private in_irq indicator */
1919 /* {get|set}_wol operations are already serialized by rtnl.
1920 @@ -951,7 +950,7 @@ static int vortex_eisa_remove(struct device *device)
1921
1922 unregister_netdev(dev);
1923 iowrite16(TotalReset|0x14, ioaddr + EL3_CMD);
1924 - release_region(dev->base_addr, VORTEX_TOTAL_SIZE);
1925 + release_region(edev->base_addr, VORTEX_TOTAL_SIZE);
1926
1927 free_netdev(dev);
1928 return 0;
1929 @@ -1012,6 +1011,12 @@ static int vortex_init_one(struct pci_dev *pdev,
1930 if (rc < 0)
1931 goto out;
1932
1933 + rc = pci_request_regions(pdev, DRV_NAME);
1934 + if (rc < 0) {
1935 + pci_disable_device(pdev);
1936 + goto out;
1937 + }
1938 +
1939 unit = vortex_cards_found;
1940
1941 if (global_use_mmio < 0 && (unit >= MAX_UNITS || use_mmio[unit] < 0)) {
1942 @@ -1027,6 +1032,7 @@ static int vortex_init_one(struct pci_dev *pdev,
1943 if (!ioaddr) /* If mapping fails, fall-back to BAR 0... */
1944 ioaddr = pci_iomap(pdev, 0, 0);
1945 if (!ioaddr) {
1946 + pci_release_regions(pdev);
1947 pci_disable_device(pdev);
1948 rc = -ENOMEM;
1949 goto out;
1950 @@ -1036,6 +1042,7 @@ static int vortex_init_one(struct pci_dev *pdev,
1951 ent->driver_data, unit);
1952 if (rc < 0) {
1953 pci_iounmap(pdev, ioaddr);
1954 + pci_release_regions(pdev);
1955 pci_disable_device(pdev);
1956 goto out;
1957 }
1958 @@ -1178,11 +1185,6 @@ static int vortex_probe1(struct device *gendev, void __iomem *ioaddr, int irq,
1959
1960 /* PCI-only startup logic */
1961 if (pdev) {
1962 - /* EISA resources already marked, so only PCI needs to do this here */
1963 - /* Ignore return value, because Cardbus drivers already allocate for us */
1964 - if (request_region(dev->base_addr, vci->io_size, print_name) != NULL)
1965 - vp->must_free_region = 1;
1966 -
1967 /* enable bus-mastering if necessary */
1968 if (vci->flags & PCI_USES_MASTER)
1969 pci_set_master(pdev);
1970 @@ -1220,7 +1222,7 @@ static int vortex_probe1(struct device *gendev, void __iomem *ioaddr, int irq,
1971 &vp->rx_ring_dma);
1972 retval = -ENOMEM;
1973 if (!vp->rx_ring)
1974 - goto free_region;
1975 + goto free_device;
1976
1977 vp->tx_ring = (struct boom_tx_desc *)(vp->rx_ring + RX_RING_SIZE);
1978 vp->tx_ring_dma = vp->rx_ring_dma + sizeof(struct boom_rx_desc) * RX_RING_SIZE;
1979 @@ -1484,9 +1486,7 @@ free_ring:
1980 + sizeof(struct boom_tx_desc) * TX_RING_SIZE,
1981 vp->rx_ring,
1982 vp->rx_ring_dma);
1983 -free_region:
1984 - if (vp->must_free_region)
1985 - release_region(dev->base_addr, vci->io_size);
1986 +free_device:
1987 free_netdev(dev);
1988 pr_err(PFX "vortex_probe1 fails. Returns %d\n", retval);
1989 out:
1990 @@ -3254,8 +3254,9 @@ static void vortex_remove_one(struct pci_dev *pdev)
1991 + sizeof(struct boom_tx_desc) * TX_RING_SIZE,
1992 vp->rx_ring,
1993 vp->rx_ring_dma);
1994 - if (vp->must_free_region)
1995 - release_region(dev->base_addr, vp->io_size);
1996 +
1997 + pci_release_regions(pdev);
1998 +
1999 free_netdev(dev);
2000 }
2001
2002 diff --git a/drivers/net/ethernet/sfc/mcdi.c b/drivers/net/ethernet/sfc/mcdi.c
2003 index 0095ce9..97dd8f18 100644
2004 --- a/drivers/net/ethernet/sfc/mcdi.c
2005 +++ b/drivers/net/ethernet/sfc/mcdi.c
2006 @@ -667,7 +667,7 @@ fail:
2007 int efx_mcdi_get_board_cfg(struct efx_nic *efx, u8 *mac_address,
2008 u16 *fw_subtype_list, u32 *capabilities)
2009 {
2010 - uint8_t outbuf[MC_CMD_GET_BOARD_CFG_OUT_LENMIN];
2011 + uint8_t outbuf[MC_CMD_GET_BOARD_CFG_OUT_LENMAX];
2012 size_t outlen, offset, i;
2013 int port_num = efx_port_num(efx);
2014 int rc;
2015 diff --git a/drivers/net/ethernet/tile/tilegx.c b/drivers/net/ethernet/tile/tilegx.c
2016 index 66e025a..f3c2d03 100644
2017 --- a/drivers/net/ethernet/tile/tilegx.c
2018 +++ b/drivers/net/ethernet/tile/tilegx.c
2019 @@ -930,7 +930,7 @@ static int tile_net_setup_interrupts(struct net_device *dev)
2020 if (info->has_iqueue) {
2021 gxio_mpipe_request_notif_ring_interrupt(
2022 &context, cpu_x(cpu), cpu_y(cpu),
2023 - 1, ingress_irq, info->iqueue.ring);
2024 + KERNEL_PL, ingress_irq, info->iqueue.ring);
2025 }
2026 }
2027
2028 diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
2029 index 73abbc1..011062e 100644
2030 --- a/drivers/net/macvlan.c
2031 +++ b/drivers/net/macvlan.c
2032 @@ -222,7 +222,8 @@ static rx_handler_result_t macvlan_handle_frame(struct sk_buff **pskb)
2033 }
2034
2035 if (port->passthru)
2036 - vlan = list_first_entry(&port->vlans, struct macvlan_dev, list);
2037 + vlan = list_first_or_null_rcu(&port->vlans,
2038 + struct macvlan_dev, list);
2039 else
2040 vlan = macvlan_hash_lookup(port, eth->h_dest);
2041 if (vlan == NULL)
2042 @@ -807,7 +808,7 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
2043 if (err < 0)
2044 goto upper_dev_unlink;
2045
2046 - list_add_tail(&vlan->list, &port->vlans);
2047 + list_add_tail_rcu(&vlan->list, &port->vlans);
2048 netif_stacked_transfer_operstate(lowerdev, dev);
2049
2050 return 0;
2051 @@ -835,7 +836,7 @@ void macvlan_dellink(struct net_device *dev, struct list_head *head)
2052 {
2053 struct macvlan_dev *vlan = netdev_priv(dev);
2054
2055 - list_del(&vlan->list);
2056 + list_del_rcu(&vlan->list);
2057 unregister_netdevice_queue(dev, head);
2058 netdev_upper_dev_unlink(vlan->lowerdev, dev);
2059 }
2060 diff --git a/drivers/net/tun.c b/drivers/net/tun.c
2061 index 729ed53..755fa9e 100644
2062 --- a/drivers/net/tun.c
2063 +++ b/drivers/net/tun.c
2064 @@ -1471,14 +1471,17 @@ static int tun_recvmsg(struct kiocb *iocb, struct socket *sock,
2065 if (!tun)
2066 return -EBADFD;
2067
2068 - if (flags & ~(MSG_DONTWAIT|MSG_TRUNC))
2069 - return -EINVAL;
2070 + if (flags & ~(MSG_DONTWAIT|MSG_TRUNC)) {
2071 + ret = -EINVAL;
2072 + goto out;
2073 + }
2074 ret = tun_do_read(tun, tfile, iocb, m->msg_iov, total_len,
2075 flags & MSG_DONTWAIT);
2076 if (ret > total_len) {
2077 m->msg_flags |= MSG_TRUNC;
2078 ret = flags & MSG_TRUNC ? ret : total_len;
2079 }
2080 +out:
2081 tun_put(tun);
2082 return ret;
2083 }
2084 diff --git a/drivers/net/usb/asix_common.c b/drivers/net/usb/asix_common.c
2085 index f7f623a..577c72d 100644
2086 --- a/drivers/net/usb/asix_common.c
2087 +++ b/drivers/net/usb/asix_common.c
2088 @@ -100,6 +100,9 @@ int asix_rx_fixup_internal(struct usbnet *dev, struct sk_buff *skb,
2089 netdev_err(dev->net, "asix_rx_fixup() Bad RX Length %d\n",
2090 rx->size);
2091 kfree_skb(rx->ax_skb);
2092 + rx->ax_skb = NULL;
2093 + rx->size = 0U;
2094 +
2095 return 0;
2096 }
2097
2098 diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
2099 index 988372d..e509c37 100644
2100 --- a/drivers/net/wireless/ath/ath9k/main.c
2101 +++ b/drivers/net/wireless/ath/ath9k/main.c
2102 @@ -1308,6 +1308,7 @@ static int ath9k_sta_add(struct ieee80211_hw *hw,
2103 struct ath_common *common = ath9k_hw_common(sc->sc_ah);
2104 struct ath_node *an = (struct ath_node *) sta->drv_priv;
2105 struct ieee80211_key_conf ps_key = { };
2106 + int key;
2107
2108 ath_node_attach(sc, sta, vif);
2109
2110 @@ -1315,7 +1316,9 @@ static int ath9k_sta_add(struct ieee80211_hw *hw,
2111 vif->type != NL80211_IFTYPE_AP_VLAN)
2112 return 0;
2113
2114 - an->ps_key = ath_key_config(common, vif, sta, &ps_key);
2115 + key = ath_key_config(common, vif, sta, &ps_key);
2116 + if (key > 0)
2117 + an->ps_key = key;
2118
2119 return 0;
2120 }
2121 @@ -1332,6 +1335,7 @@ static void ath9k_del_ps_key(struct ath_softc *sc,
2122 return;
2123
2124 ath_key_delete(common, &ps_key);
2125 + an->ps_key = 0;
2126 }
2127
2128 static int ath9k_sta_remove(struct ieee80211_hw *hw,
2129 diff --git a/drivers/net/wireless/b43/dma.c b/drivers/net/wireless/b43/dma.c
2130 index 1221469..ee3d640 100644
2131 --- a/drivers/net/wireless/b43/dma.c
2132 +++ b/drivers/net/wireless/b43/dma.c
2133 @@ -1733,6 +1733,25 @@ drop_recycle_buffer:
2134 sync_descbuffer_for_device(ring, dmaaddr, ring->rx_buffersize);
2135 }
2136
2137 +void b43_dma_handle_rx_overflow(struct b43_dmaring *ring)
2138 +{
2139 + int current_slot, previous_slot;
2140 +
2141 + B43_WARN_ON(ring->tx);
2142 +
2143 + /* Device has filled all buffers, drop all packets and let TCP
2144 + * decrease speed.
2145 + * Decrement RX index by one will let the device to see all slots
2146 + * as free again
2147 + */
2148 + /*
2149 + *TODO: How to increase rx_drop in mac80211?
2150 + */
2151 + current_slot = ring->ops->get_current_rxslot(ring);
2152 + previous_slot = prev_slot(ring, current_slot);
2153 + ring->ops->set_current_rxslot(ring, previous_slot);
2154 +}
2155 +
2156 void b43_dma_rx(struct b43_dmaring *ring)
2157 {
2158 const struct b43_dma_ops *ops = ring->ops;
2159 diff --git a/drivers/net/wireless/b43/dma.h b/drivers/net/wireless/b43/dma.h
2160 index 9fdd198..df8c8cd 100644
2161 --- a/drivers/net/wireless/b43/dma.h
2162 +++ b/drivers/net/wireless/b43/dma.h
2163 @@ -9,7 +9,7 @@
2164 /* DMA-Interrupt reasons. */
2165 #define B43_DMAIRQ_FATALMASK ((1 << 10) | (1 << 11) | (1 << 12) \
2166 | (1 << 14) | (1 << 15))
2167 -#define B43_DMAIRQ_NONFATALMASK (1 << 13)
2168 +#define B43_DMAIRQ_RDESC_UFLOW (1 << 13)
2169 #define B43_DMAIRQ_RX_DONE (1 << 16)
2170
2171 /*** 32-bit DMA Engine. ***/
2172 @@ -295,6 +295,8 @@ int b43_dma_tx(struct b43_wldev *dev,
2173 void b43_dma_handle_txstatus(struct b43_wldev *dev,
2174 const struct b43_txstatus *status);
2175
2176 +void b43_dma_handle_rx_overflow(struct b43_dmaring *ring);
2177 +
2178 void b43_dma_rx(struct b43_dmaring *ring);
2179
2180 void b43_dma_direct_fifo_rx(struct b43_wldev *dev,
2181 diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
2182 index 0568273..64b637a 100644
2183 --- a/drivers/net/wireless/b43/main.c
2184 +++ b/drivers/net/wireless/b43/main.c
2185 @@ -1895,30 +1895,18 @@ static void b43_do_interrupt_thread(struct b43_wldev *dev)
2186 }
2187 }
2188
2189 - if (unlikely(merged_dma_reason & (B43_DMAIRQ_FATALMASK |
2190 - B43_DMAIRQ_NONFATALMASK))) {
2191 - if (merged_dma_reason & B43_DMAIRQ_FATALMASK) {
2192 - b43err(dev->wl, "Fatal DMA error: "
2193 - "0x%08X, 0x%08X, 0x%08X, "
2194 - "0x%08X, 0x%08X, 0x%08X\n",
2195 - dma_reason[0], dma_reason[1],
2196 - dma_reason[2], dma_reason[3],
2197 - dma_reason[4], dma_reason[5]);
2198 - b43err(dev->wl, "This device does not support DMA "
2199 + if (unlikely(merged_dma_reason & (B43_DMAIRQ_FATALMASK))) {
2200 + b43err(dev->wl,
2201 + "Fatal DMA error: 0x%08X, 0x%08X, 0x%08X, 0x%08X, 0x%08X, 0x%08X\n",
2202 + dma_reason[0], dma_reason[1],
2203 + dma_reason[2], dma_reason[3],
2204 + dma_reason[4], dma_reason[5]);
2205 + b43err(dev->wl, "This device does not support DMA "
2206 "on your system. It will now be switched to PIO.\n");
2207 - /* Fall back to PIO transfers if we get fatal DMA errors! */
2208 - dev->use_pio = true;
2209 - b43_controller_restart(dev, "DMA error");
2210 - return;
2211 - }
2212 - if (merged_dma_reason & B43_DMAIRQ_NONFATALMASK) {
2213 - b43err(dev->wl, "DMA error: "
2214 - "0x%08X, 0x%08X, 0x%08X, "
2215 - "0x%08X, 0x%08X, 0x%08X\n",
2216 - dma_reason[0], dma_reason[1],
2217 - dma_reason[2], dma_reason[3],
2218 - dma_reason[4], dma_reason[5]);
2219 - }
2220 + /* Fall back to PIO transfers if we get fatal DMA errors! */
2221 + dev->use_pio = true;
2222 + b43_controller_restart(dev, "DMA error");
2223 + return;
2224 }
2225
2226 if (unlikely(reason & B43_IRQ_UCODE_DEBUG))
2227 @@ -1937,6 +1925,11 @@ static void b43_do_interrupt_thread(struct b43_wldev *dev)
2228 handle_irq_noise(dev);
2229
2230 /* Check the DMA reason registers for received data. */
2231 + if (dma_reason[0] & B43_DMAIRQ_RDESC_UFLOW) {
2232 + if (B43_DEBUG)
2233 + b43warn(dev->wl, "RX descriptor underrun\n");
2234 + b43_dma_handle_rx_overflow(dev->dma.rx_ring);
2235 + }
2236 if (dma_reason[0] & B43_DMAIRQ_RX_DONE) {
2237 if (b43_using_pio_transfers(dev))
2238 b43_pio_rx(dev->pio.rx_queue);
2239 @@ -1994,7 +1987,7 @@ static irqreturn_t b43_do_interrupt(struct b43_wldev *dev)
2240 return IRQ_NONE;
2241
2242 dev->dma_reason[0] = b43_read32(dev, B43_MMIO_DMA0_REASON)
2243 - & 0x0001DC00;
2244 + & 0x0001FC00;
2245 dev->dma_reason[1] = b43_read32(dev, B43_MMIO_DMA1_REASON)
2246 & 0x0000DC00;
2247 dev->dma_reason[2] = b43_read32(dev, B43_MMIO_DMA2_REASON)
2248 @@ -3126,7 +3119,7 @@ static int b43_chip_init(struct b43_wldev *dev)
2249 b43_write32(dev, 0x018C, 0x02000000);
2250 }
2251 b43_write32(dev, B43_MMIO_GEN_IRQ_REASON, 0x00004000);
2252 - b43_write32(dev, B43_MMIO_DMA0_IRQ_MASK, 0x0001DC00);
2253 + b43_write32(dev, B43_MMIO_DMA0_IRQ_MASK, 0x0001FC00);
2254 b43_write32(dev, B43_MMIO_DMA1_IRQ_MASK, 0x0000DC00);
2255 b43_write32(dev, B43_MMIO_DMA2_IRQ_MASK, 0x0000DC00);
2256 b43_write32(dev, B43_MMIO_DMA3_IRQ_MASK, 0x0001DC00);
2257 diff --git a/drivers/net/wireless/iwlegacy/4965-mac.c b/drivers/net/wireless/iwlegacy/4965-mac.c
2258 index 7941eb3..cbaa777 100644
2259 --- a/drivers/net/wireless/iwlegacy/4965-mac.c
2260 +++ b/drivers/net/wireless/iwlegacy/4965-mac.c
2261 @@ -5740,8 +5740,7 @@ il4965_mac_setup_register(struct il_priv *il, u32 max_probe_length)
2262 hw->flags =
2263 IEEE80211_HW_SIGNAL_DBM | IEEE80211_HW_AMPDU_AGGREGATION |
2264 IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC | IEEE80211_HW_SPECTRUM_MGMT |
2265 - IEEE80211_HW_REPORTS_TX_ACK_STATUS | IEEE80211_HW_SUPPORTS_PS |
2266 - IEEE80211_HW_SUPPORTS_DYNAMIC_PS;
2267 + IEEE80211_HW_SUPPORTS_PS | IEEE80211_HW_SUPPORTS_DYNAMIC_PS;
2268 if (il->cfg->sku & IL_SKU_N)
2269 hw->flags |=
2270 IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS |
2271 diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c
2272 index 8aaf56a..c13f6e9 100644
2273 --- a/drivers/net/wireless/mwifiex/cfg80211.c
2274 +++ b/drivers/net/wireless/mwifiex/cfg80211.c
2275 @@ -2280,9 +2280,6 @@ int mwifiex_del_virtual_intf(struct wiphy *wiphy, struct wireless_dev *wdev)
2276 if (wdev->netdev->reg_state == NETREG_REGISTERED)
2277 unregister_netdevice(wdev->netdev);
2278
2279 - if (wdev->netdev->reg_state == NETREG_UNREGISTERED)
2280 - free_netdev(wdev->netdev);
2281 -
2282 /* Clear the priv in adapter */
2283 priv->netdev = NULL;
2284
2285 diff --git a/drivers/net/wireless/mwifiex/cmdevt.c b/drivers/net/wireless/mwifiex/cmdevt.c
2286 index b5c8b96..aeade10 100644
2287 --- a/drivers/net/wireless/mwifiex/cmdevt.c
2288 +++ b/drivers/net/wireless/mwifiex/cmdevt.c
2289 @@ -1176,6 +1176,7 @@ mwifiex_process_hs_config(struct mwifiex_adapter *adapter)
2290 adapter->if_ops.wakeup(adapter);
2291 adapter->hs_activated = false;
2292 adapter->is_hs_configured = false;
2293 + adapter->is_suspended = false;
2294 mwifiex_hs_activated_event(mwifiex_get_priv(adapter,
2295 MWIFIEX_BSS_ROLE_ANY),
2296 false);
2297 diff --git a/drivers/net/wireless/mwifiex/main.c b/drivers/net/wireless/mwifiex/main.c
2298 index 9c802ed..6d9bc63 100644
2299 --- a/drivers/net/wireless/mwifiex/main.c
2300 +++ b/drivers/net/wireless/mwifiex/main.c
2301 @@ -646,6 +646,7 @@ void mwifiex_init_priv_params(struct mwifiex_private *priv,
2302 struct net_device *dev)
2303 {
2304 dev->netdev_ops = &mwifiex_netdev_ops;
2305 + dev->destructor = free_netdev;
2306 /* Initialize private structure */
2307 priv->current_key_index = 0;
2308 priv->media_connected = false;
2309 diff --git a/drivers/net/wireless/mwifiex/sta_ioctl.c b/drivers/net/wireless/mwifiex/sta_ioctl.c
2310 index 13100f8..fb420fe 100644
2311 --- a/drivers/net/wireless/mwifiex/sta_ioctl.c
2312 +++ b/drivers/net/wireless/mwifiex/sta_ioctl.c
2313 @@ -99,7 +99,7 @@ int mwifiex_request_set_multicast_list(struct mwifiex_private *priv,
2314 } else {
2315 /* Multicast */
2316 priv->curr_pkt_filter &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
2317 - if (mcast_list->mode == MWIFIEX_MULTICAST_MODE) {
2318 + if (mcast_list->mode == MWIFIEX_ALL_MULTI_MODE) {
2319 dev_dbg(priv->adapter->dev,
2320 "info: Enabling All Multicast!\n");
2321 priv->curr_pkt_filter |=
2322 @@ -111,20 +111,11 @@ int mwifiex_request_set_multicast_list(struct mwifiex_private *priv,
2323 dev_dbg(priv->adapter->dev,
2324 "info: Set multicast list=%d\n",
2325 mcast_list->num_multicast_addr);
2326 - /* Set multicast addresses to firmware */
2327 - if (old_pkt_filter == priv->curr_pkt_filter) {
2328 - /* Send request to firmware */
2329 - ret = mwifiex_send_cmd_async(priv,
2330 - HostCmd_CMD_MAC_MULTICAST_ADR,
2331 - HostCmd_ACT_GEN_SET, 0,
2332 - mcast_list);
2333 - } else {
2334 - /* Send request to firmware */
2335 - ret = mwifiex_send_cmd_async(priv,
2336 - HostCmd_CMD_MAC_MULTICAST_ADR,
2337 - HostCmd_ACT_GEN_SET, 0,
2338 - mcast_list);
2339 - }
2340 + /* Send multicast addresses to firmware */
2341 + ret = mwifiex_send_cmd_async(priv,
2342 + HostCmd_CMD_MAC_MULTICAST_ADR,
2343 + HostCmd_ACT_GEN_SET, 0,
2344 + mcast_list);
2345 }
2346 }
2347 }
2348 diff --git a/drivers/platform/x86/hp_accel.c b/drivers/platform/x86/hp_accel.c
2349 index e64a7a8..a8e43cf 100644
2350 --- a/drivers/platform/x86/hp_accel.c
2351 +++ b/drivers/platform/x86/hp_accel.c
2352 @@ -362,7 +362,8 @@ static int lis3lv02d_suspend(struct device *dev)
2353
2354 static int lis3lv02d_resume(struct device *dev)
2355 {
2356 - return lis3lv02d_poweron(&lis3_dev);
2357 + lis3lv02d_poweron(&lis3_dev);
2358 + return 0;
2359 }
2360
2361 static SIMPLE_DEV_PM_OPS(hp_accel_pm, lis3lv02d_suspend, lis3lv02d_resume);
2362 diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
2363 index 79fbe38..9e95473 100644
2364 --- a/drivers/rtc/Kconfig
2365 +++ b/drivers/rtc/Kconfig
2366 @@ -20,7 +20,6 @@ if RTC_CLASS
2367 config RTC_HCTOSYS
2368 bool "Set system time from RTC on startup and resume"
2369 default y
2370 - depends on !ALWAYS_USE_PERSISTENT_CLOCK
2371 help
2372 If you say yes here, the system time (wall clock) will be set using
2373 the value read from a specified RTC device. This is useful to avoid
2374 @@ -29,7 +28,6 @@ config RTC_HCTOSYS
2375 config RTC_SYSTOHC
2376 bool "Set the RTC time based on NTP synchronization"
2377 default y
2378 - depends on !ALWAYS_USE_PERSISTENT_CLOCK
2379 help
2380 If you say yes here, the system time (wall clock) will be stored
2381 in the RTC specified by RTC_HCTOSYS_DEVICE approximately every 11
2382 diff --git a/drivers/rtc/rtc-pcf2123.c b/drivers/rtc/rtc-pcf2123.c
2383 index 02b742a..6dd6b38 100644
2384 --- a/drivers/rtc/rtc-pcf2123.c
2385 +++ b/drivers/rtc/rtc-pcf2123.c
2386 @@ -265,6 +265,7 @@ static int pcf2123_probe(struct spi_device *spi)
2387
2388 if (!(rxbuf[0] & 0x20)) {
2389 dev_err(&spi->dev, "chip not found\n");
2390 + ret = -ENODEV;
2391 goto kfree_exit;
2392 }
2393
2394 diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
2395 index 7992635..82910cc 100644
2396 --- a/drivers/scsi/sd.c
2397 +++ b/drivers/scsi/sd.c
2398 @@ -142,6 +142,7 @@ sd_store_cache_type(struct device *dev, struct device_attribute *attr,
2399 char *buffer_data;
2400 struct scsi_mode_data data;
2401 struct scsi_sense_hdr sshdr;
2402 + const char *temp = "temporary ";
2403 int len;
2404
2405 if (sdp->type != TYPE_DISK)
2406 @@ -150,6 +151,13 @@ sd_store_cache_type(struct device *dev, struct device_attribute *attr,
2407 * it's not worth the risk */
2408 return -EINVAL;
2409
2410 + if (strncmp(buf, temp, sizeof(temp) - 1) == 0) {
2411 + buf += sizeof(temp) - 1;
2412 + sdkp->cache_override = 1;
2413 + } else {
2414 + sdkp->cache_override = 0;
2415 + }
2416 +
2417 for (i = 0; i < ARRAY_SIZE(sd_cache_types); i++) {
2418 len = strlen(sd_cache_types[i]);
2419 if (strncmp(sd_cache_types[i], buf, len) == 0 &&
2420 @@ -162,6 +170,13 @@ sd_store_cache_type(struct device *dev, struct device_attribute *attr,
2421 return -EINVAL;
2422 rcd = ct & 0x01 ? 1 : 0;
2423 wce = ct & 0x02 ? 1 : 0;
2424 +
2425 + if (sdkp->cache_override) {
2426 + sdkp->WCE = wce;
2427 + sdkp->RCD = rcd;
2428 + return count;
2429 + }
2430 +
2431 if (scsi_mode_sense(sdp, 0x08, 8, buffer, sizeof(buffer), SD_TIMEOUT,
2432 SD_MAX_RETRIES, &data, NULL))
2433 return -EINVAL;
2434 @@ -2319,6 +2334,10 @@ sd_read_cache_type(struct scsi_disk *sdkp, unsigned char *buffer)
2435 int old_rcd = sdkp->RCD;
2436 int old_dpofua = sdkp->DPOFUA;
2437
2438 +
2439 + if (sdkp->cache_override)
2440 + return;
2441 +
2442 first_len = 4;
2443 if (sdp->skip_ms_page_8) {
2444 if (sdp->type == TYPE_RBC)
2445 @@ -2812,6 +2831,7 @@ static void sd_probe_async(void *data, async_cookie_t cookie)
2446 sdkp->capacity = 0;
2447 sdkp->media_present = 1;
2448 sdkp->write_prot = 0;
2449 + sdkp->cache_override = 0;
2450 sdkp->WCE = 0;
2451 sdkp->RCD = 0;
2452 sdkp->ATO = 0;
2453 diff --git a/drivers/scsi/sd.h b/drivers/scsi/sd.h
2454 index 74a1e4c..2386aeb 100644
2455 --- a/drivers/scsi/sd.h
2456 +++ b/drivers/scsi/sd.h
2457 @@ -73,6 +73,7 @@ struct scsi_disk {
2458 u8 protection_type;/* Data Integrity Field */
2459 u8 provisioning_mode;
2460 unsigned ATO : 1; /* state of disk ATO bit */
2461 + unsigned cache_override : 1; /* temp override of WCE,RCD */
2462 unsigned WCE : 1; /* state of disk WCE bit */
2463 unsigned RCD : 1; /* state of disk RCD bit, unused */
2464 unsigned DPOFUA : 1; /* state of disk DPOFUA bit */
2465 diff --git a/drivers/target/iscsi/iscsi_target_erl1.c b/drivers/target/iscsi/iscsi_target_erl1.c
2466 index 0b52a23..805f3d2 100644
2467 --- a/drivers/target/iscsi/iscsi_target_erl1.c
2468 +++ b/drivers/target/iscsi/iscsi_target_erl1.c
2469 @@ -819,7 +819,7 @@ static int iscsit_attach_ooo_cmdsn(
2470 /*
2471 * CmdSN is greater than the tail of the list.
2472 */
2473 - if (ooo_tail->cmdsn < ooo_cmdsn->cmdsn)
2474 + if (iscsi_sna_lt(ooo_tail->cmdsn, ooo_cmdsn->cmdsn))
2475 list_add_tail(&ooo_cmdsn->ooo_list,
2476 &sess->sess_ooo_cmdsn_list);
2477 else {
2478 @@ -829,11 +829,12 @@ static int iscsit_attach_ooo_cmdsn(
2479 */
2480 list_for_each_entry(ooo_tmp, &sess->sess_ooo_cmdsn_list,
2481 ooo_list) {
2482 - if (ooo_tmp->cmdsn < ooo_cmdsn->cmdsn)
2483 + if (iscsi_sna_lt(ooo_tmp->cmdsn, ooo_cmdsn->cmdsn))
2484 continue;
2485
2486 + /* Insert before this entry */
2487 list_add(&ooo_cmdsn->ooo_list,
2488 - &ooo_tmp->ooo_list);
2489 + ooo_tmp->ooo_list.prev);
2490 break;
2491 }
2492 }
2493 diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c
2494 index 17a6acb..ca4b219 100644
2495 --- a/drivers/target/target_core_file.c
2496 +++ b/drivers/target/target_core_file.c
2497 @@ -148,13 +148,8 @@ static int fd_configure_device(struct se_device *dev)
2498 */
2499 inode = file->f_mapping->host;
2500 if (S_ISBLK(inode->i_mode)) {
2501 - struct request_queue *q = bdev_get_queue(inode->i_bdev);
2502 unsigned long long dev_size;
2503
2504 - dev->dev_attrib.hw_block_size =
2505 - bdev_logical_block_size(inode->i_bdev);
2506 - dev->dev_attrib.hw_max_sectors = queue_max_hw_sectors(q);
2507 -
2508 /*
2509 * Determine the number of bytes from i_size_read() minus
2510 * one (1) logical sector from underlying struct block_device
2511 @@ -173,13 +168,12 @@ static int fd_configure_device(struct se_device *dev)
2512 " block_device\n");
2513 goto fail;
2514 }
2515 -
2516 - dev->dev_attrib.hw_block_size = FD_BLOCKSIZE;
2517 - dev->dev_attrib.hw_max_sectors = FD_MAX_SECTORS;
2518 }
2519
2520 fd_dev->fd_block_size = dev->dev_attrib.hw_block_size;
2521
2522 + dev->dev_attrib.hw_block_size = FD_BLOCKSIZE;
2523 + dev->dev_attrib.hw_max_sectors = FD_MAX_SECTORS;
2524 dev->dev_attrib.hw_queue_depth = FD_MAX_DEVICE_QUEUE_DEPTH;
2525
2526 if (fd_dev->fbd_flags & FDBD_HAS_BUFFERED_IO_WCE) {
2527 diff --git a/drivers/target/target_core_iblock.c b/drivers/target/target_core_iblock.c
2528 index 8bcc514..e1af9d5 100644
2529 --- a/drivers/target/target_core_iblock.c
2530 +++ b/drivers/target/target_core_iblock.c
2531 @@ -679,6 +679,8 @@ iblock_execute_rw(struct se_cmd *cmd)
2532 rw = WRITE_FUA;
2533 else if (!(q->flush_flags & REQ_FLUSH))
2534 rw = WRITE_FUA;
2535 + else
2536 + rw = WRITE;
2537 } else {
2538 rw = WRITE;
2539 }
2540 diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
2541 index 3243ea7..0d46276 100644
2542 --- a/drivers/target/target_core_transport.c
2543 +++ b/drivers/target/target_core_transport.c
2544 @@ -2213,21 +2213,19 @@ static void target_release_cmd_kref(struct kref *kref)
2545 {
2546 struct se_cmd *se_cmd = container_of(kref, struct se_cmd, cmd_kref);
2547 struct se_session *se_sess = se_cmd->se_sess;
2548 - unsigned long flags;
2549
2550 - spin_lock_irqsave(&se_sess->sess_cmd_lock, flags);
2551 if (list_empty(&se_cmd->se_cmd_list)) {
2552 - spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
2553 + spin_unlock(&se_sess->sess_cmd_lock);
2554 se_cmd->se_tfo->release_cmd(se_cmd);
2555 return;
2556 }
2557 if (se_sess->sess_tearing_down && se_cmd->cmd_wait_set) {
2558 - spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
2559 + spin_unlock(&se_sess->sess_cmd_lock);
2560 complete(&se_cmd->cmd_wait_comp);
2561 return;
2562 }
2563 list_del(&se_cmd->se_cmd_list);
2564 - spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
2565 + spin_unlock(&se_sess->sess_cmd_lock);
2566
2567 se_cmd->se_tfo->release_cmd(se_cmd);
2568 }
2569 @@ -2238,7 +2236,8 @@ static void target_release_cmd_kref(struct kref *kref)
2570 */
2571 int target_put_sess_cmd(struct se_session *se_sess, struct se_cmd *se_cmd)
2572 {
2573 - return kref_put(&se_cmd->cmd_kref, target_release_cmd_kref);
2574 + return kref_put_spinlock_irqsave(&se_cmd->cmd_kref, target_release_cmd_kref,
2575 + &se_sess->sess_cmd_lock);
2576 }
2577 EXPORT_SYMBOL(target_put_sess_cmd);
2578
2579 diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c
2580 index 08b48bb..faf4e18 100644
2581 --- a/drivers/watchdog/watchdog_dev.c
2582 +++ b/drivers/watchdog/watchdog_dev.c
2583 @@ -523,6 +523,7 @@ int watchdog_dev_register(struct watchdog_device *watchdog)
2584 int err, devno;
2585
2586 if (watchdog->id == 0) {
2587 + old_wdd = watchdog;
2588 watchdog_miscdev.parent = watchdog->parent;
2589 err = misc_register(&watchdog_miscdev);
2590 if (err != 0) {
2591 @@ -531,9 +532,9 @@ int watchdog_dev_register(struct watchdog_device *watchdog)
2592 if (err == -EBUSY)
2593 pr_err("%s: a legacy watchdog module is probably present.\n",
2594 watchdog->info->identity);
2595 + old_wdd = NULL;
2596 return err;
2597 }
2598 - old_wdd = watchdog;
2599 }
2600
2601 /* Fill in the data structures */
2602 diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
2603 index cf3025c..f3190ab 100644
2604 --- a/fs/ext4/mballoc.c
2605 +++ b/fs/ext4/mballoc.c
2606 @@ -1994,7 +1994,11 @@ repeat:
2607 group = ac->ac_g_ex.fe_group;
2608
2609 for (i = 0; i < ngroups; group++, i++) {
2610 - if (group == ngroups)
2611 + /*
2612 + * Artificially restricted ngroups for non-extent
2613 + * files makes group > ngroups possible on first loop.
2614 + */
2615 + if (group >= ngroups)
2616 group = 0;
2617
2618 /* This now checks without needing the buddy page */
2619 diff --git a/fs/namei.c b/fs/namei.c
2620 index 57ae9c8..85e40d1 100644
2621 --- a/fs/namei.c
2622 +++ b/fs/namei.c
2623 @@ -2740,7 +2740,7 @@ static int do_last(struct nameidata *nd, struct path *path,
2624 if (error)
2625 return error;
2626
2627 - audit_inode(name, dir, 0);
2628 + audit_inode(name, dir, LOOKUP_PARENT);
2629 error = -EISDIR;
2630 /* trailing slashes? */
2631 if (nd->last.name[nd->last.len])
2632 diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
2633 index 8288b08..d401d01 100644
2634 --- a/fs/nfsd/nfs4proc.c
2635 +++ b/fs/nfsd/nfs4proc.c
2636 @@ -271,6 +271,7 @@ static __be32
2637 do_open_fhandle(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_open *open)
2638 {
2639 __be32 status;
2640 + int accmode = 0;
2641
2642 /* We don't know the target directory, and therefore can not
2643 * set the change info
2644 @@ -284,9 +285,19 @@ do_open_fhandle(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_
2645
2646 open->op_truncate = (open->op_iattr.ia_valid & ATTR_SIZE) &&
2647 (open->op_iattr.ia_size == 0);
2648 + /*
2649 + * In the delegation case, the client is telling us about an
2650 + * open that it *already* performed locally, some time ago. We
2651 + * should let it succeed now if possible.
2652 + *
2653 + * In the case of a CLAIM_FH open, on the other hand, the client
2654 + * may be counting on us to enforce permissions (the Linux 4.1
2655 + * client uses this for normal opens, for example).
2656 + */
2657 + if (open->op_claim_type == NFS4_OPEN_CLAIM_DELEG_CUR_FH)
2658 + accmode = NFSD_MAY_OWNER_OVERRIDE;
2659
2660 - status = do_open_permission(rqstp, current_fh, open,
2661 - NFSD_MAY_OWNER_OVERRIDE);
2662 + status = do_open_permission(rqstp, current_fh, open, accmode);
2663
2664 return status;
2665 }
2666 diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c
2667 index 899ca26..4e9a21d 100644
2668 --- a/fs/nfsd/nfs4recover.c
2669 +++ b/fs/nfsd/nfs4recover.c
2670 @@ -146,7 +146,7 @@ out_no_tfm:
2671 * then disable recovery tracking.
2672 */
2673 static void
2674 -legacy_recdir_name_error(int error)
2675 +legacy_recdir_name_error(struct nfs4_client *clp, int error)
2676 {
2677 printk(KERN_ERR "NFSD: unable to generate recoverydir "
2678 "name (%d).\n", error);
2679 @@ -159,9 +159,7 @@ legacy_recdir_name_error(int error)
2680 if (error == -ENOENT) {
2681 printk(KERN_ERR "NFSD: disabling legacy clientid tracking. "
2682 "Reboot recovery will not function correctly!\n");
2683 -
2684 - /* the argument is ignored by the legacy exit function */
2685 - nfsd4_client_tracking_exit(NULL);
2686 + nfsd4_client_tracking_exit(clp->net);
2687 }
2688 }
2689
2690 @@ -184,7 +182,7 @@ nfsd4_create_clid_dir(struct nfs4_client *clp)
2691
2692 status = nfs4_make_rec_clidname(dname, &clp->cl_name);
2693 if (status)
2694 - return legacy_recdir_name_error(status);
2695 + return legacy_recdir_name_error(clp, status);
2696
2697 status = nfs4_save_creds(&original_cred);
2698 if (status < 0)
2699 @@ -341,7 +339,7 @@ nfsd4_remove_clid_dir(struct nfs4_client *clp)
2700
2701 status = nfs4_make_rec_clidname(dname, &clp->cl_name);
2702 if (status)
2703 - return legacy_recdir_name_error(status);
2704 + return legacy_recdir_name_error(clp, status);
2705
2706 status = mnt_want_write_file(nn->rec_file);
2707 if (status)
2708 @@ -601,7 +599,7 @@ nfsd4_check_legacy_client(struct nfs4_client *clp)
2709
2710 status = nfs4_make_rec_clidname(dname, &clp->cl_name);
2711 if (status) {
2712 - legacy_recdir_name_error(status);
2713 + legacy_recdir_name_error(clp, status);
2714 return status;
2715 }
2716
2717 diff --git a/include/linux/audit.h b/include/linux/audit.h
2718 index 5a6d718..b4086cf 100644
2719 --- a/include/linux/audit.h
2720 +++ b/include/linux/audit.h
2721 @@ -120,7 +120,7 @@ static inline void audit_syscall_entry(int arch, int major, unsigned long a0,
2722 unsigned long a1, unsigned long a2,
2723 unsigned long a3)
2724 {
2725 - if (unlikely(!audit_dummy_context()))
2726 + if (unlikely(current->audit_context))
2727 __audit_syscall_entry(arch, major, a0, a1, a2, a3);
2728 }
2729 static inline void audit_syscall_exit(void *pt_regs)
2730 @@ -390,6 +390,11 @@ static inline void audit_ptrace(struct task_struct *t)
2731 #define audit_signals 0
2732 #endif /* CONFIG_AUDITSYSCALL */
2733
2734 +static inline bool audit_loginuid_set(struct task_struct *tsk)
2735 +{
2736 + return uid_valid(audit_get_loginuid(tsk));
2737 +}
2738 +
2739 #ifdef CONFIG_AUDIT
2740 /* These are defined in audit.c */
2741 /* Public API */
2742 diff --git a/include/linux/kref.h b/include/linux/kref.h
2743 index 4972e6e..7419c02 100644
2744 --- a/include/linux/kref.h
2745 +++ b/include/linux/kref.h
2746 @@ -19,6 +19,7 @@
2747 #include <linux/atomic.h>
2748 #include <linux/kernel.h>
2749 #include <linux/mutex.h>
2750 +#include <linux/spinlock.h>
2751
2752 struct kref {
2753 atomic_t refcount;
2754 @@ -95,6 +96,38 @@ static inline int kref_put(struct kref *kref, void (*release)(struct kref *kref)
2755 return kref_sub(kref, 1, release);
2756 }
2757
2758 +/**
2759 + * kref_put_spinlock_irqsave - decrement refcount for object.
2760 + * @kref: object.
2761 + * @release: pointer to the function that will clean up the object when the
2762 + * last reference to the object is released.
2763 + * This pointer is required, and it is not acceptable to pass kfree
2764 + * in as this function.
2765 + * @lock: lock to take in release case
2766 + *
2767 + * Behaves identical to kref_put with one exception. If the reference count
2768 + * drops to zero, the lock will be taken atomically wrt dropping the reference
2769 + * count. The release function has to call spin_unlock() without _irqrestore.
2770 + */
2771 +static inline int kref_put_spinlock_irqsave(struct kref *kref,
2772 + void (*release)(struct kref *kref),
2773 + spinlock_t *lock)
2774 +{
2775 + unsigned long flags;
2776 +
2777 + WARN_ON(release == NULL);
2778 + if (atomic_add_unless(&kref->refcount, -1, 1))
2779 + return 0;
2780 + spin_lock_irqsave(lock, flags);
2781 + if (atomic_dec_and_test(&kref->refcount)) {
2782 + release(kref);
2783 + local_irq_restore(flags);
2784 + return 1;
2785 + }
2786 + spin_unlock_irqrestore(lock, flags);
2787 + return 0;
2788 +}
2789 +
2790 static inline int kref_put_mutex(struct kref *kref,
2791 void (*release)(struct kref *kref),
2792 struct mutex *lock)
2793 diff --git a/include/linux/time.h b/include/linux/time.h
2794 index d4835df..afcdc4b 100644
2795 --- a/include/linux/time.h
2796 +++ b/include/linux/time.h
2797 @@ -117,14 +117,10 @@ static inline bool timespec_valid_strict(const struct timespec *ts)
2798
2799 extern bool persistent_clock_exist;
2800
2801 -#ifdef ALWAYS_USE_PERSISTENT_CLOCK
2802 -#define has_persistent_clock() true
2803 -#else
2804 static inline bool has_persistent_clock(void)
2805 {
2806 return persistent_clock_exist;
2807 }
2808 -#endif
2809
2810 extern void read_persistent_clock(struct timespec *ts);
2811 extern void read_boot_clock(struct timespec *ts);
2812 diff --git a/include/net/inet_frag.h b/include/net/inet_frag.h
2813 index 0a1dcc2..ab3d0ac 100644
2814 --- a/include/net/inet_frag.h
2815 +++ b/include/net/inet_frag.h
2816 @@ -135,14 +135,15 @@ static inline int sum_frag_mem_limit(struct netns_frags *nf)
2817 static inline void inet_frag_lru_move(struct inet_frag_queue *q)
2818 {
2819 spin_lock(&q->net->lru_lock);
2820 - list_move_tail(&q->lru_list, &q->net->lru_list);
2821 + if (!list_empty(&q->lru_list))
2822 + list_move_tail(&q->lru_list, &q->net->lru_list);
2823 spin_unlock(&q->net->lru_lock);
2824 }
2825
2826 static inline void inet_frag_lru_del(struct inet_frag_queue *q)
2827 {
2828 spin_lock(&q->net->lru_lock);
2829 - list_del(&q->lru_list);
2830 + list_del_init(&q->lru_list);
2831 spin_unlock(&q->net->lru_lock);
2832 }
2833
2834 diff --git a/include/net/sock.h b/include/net/sock.h
2835 index 14f6e9d..0be480a 100644
2836 --- a/include/net/sock.h
2837 +++ b/include/net/sock.h
2838 @@ -865,6 +865,18 @@ struct inet_hashinfo;
2839 struct raw_hashinfo;
2840 struct module;
2841
2842 +/*
2843 + * caches using SLAB_DESTROY_BY_RCU should let .next pointer from nulls nodes
2844 + * un-modified. Special care is taken when initializing object to zero.
2845 + */
2846 +static inline void sk_prot_clear_nulls(struct sock *sk, int size)
2847 +{
2848 + if (offsetof(struct sock, sk_node.next) != 0)
2849 + memset(sk, 0, offsetof(struct sock, sk_node.next));
2850 + memset(&sk->sk_node.pprev, 0,
2851 + size - offsetof(struct sock, sk_node.pprev));
2852 +}
2853 +
2854 /* Networking protocol blocks we attach to sockets.
2855 * socket layer -> transport layer interface
2856 * transport -> network interface is defined by struct inet_proto
2857 diff --git a/include/net/tcp.h b/include/net/tcp.h
2858 index cf0694d..a345480 100644
2859 --- a/include/net/tcp.h
2860 +++ b/include/net/tcp.h
2861 @@ -1049,6 +1049,7 @@ static inline bool tcp_prequeue(struct sock *sk, struct sk_buff *skb)
2862 skb_queue_len(&tp->ucopy.prequeue) == 0)
2863 return false;
2864
2865 + skb_dst_force(skb);
2866 __skb_queue_tail(&tp->ucopy.prequeue, skb);
2867 tp->ucopy.memory += skb->truesize;
2868 if (tp->ucopy.memory > sk->sk_rcvbuf) {
2869 diff --git a/include/uapi/linux/audit.h b/include/uapi/linux/audit.h
2870 index 9f096f1..9554a19 100644
2871 --- a/include/uapi/linux/audit.h
2872 +++ b/include/uapi/linux/audit.h
2873 @@ -246,6 +246,7 @@
2874 #define AUDIT_OBJ_TYPE 21
2875 #define AUDIT_OBJ_LEV_LOW 22
2876 #define AUDIT_OBJ_LEV_HIGH 23
2877 +#define AUDIT_LOGINUID_SET 24
2878
2879 /* These are ONLY useful when checking
2880 * at syscall exit time (AUDIT_AT_EXIT). */
2881 diff --git a/include/uapi/linux/if_cablemodem.h b/include/uapi/linux/if_cablemodem.h
2882 index 9ca1007..ee6b3c4 100644
2883 --- a/include/uapi/linux/if_cablemodem.h
2884 +++ b/include/uapi/linux/if_cablemodem.h
2885 @@ -12,11 +12,11 @@
2886 */
2887
2888 /* some useful defines for sb1000.c e cmconfig.c - fv */
2889 -#define SIOCGCMSTATS SIOCDEVPRIVATE+0 /* get cable modem stats */
2890 -#define SIOCGCMFIRMWARE SIOCDEVPRIVATE+1 /* get cm firmware version */
2891 -#define SIOCGCMFREQUENCY SIOCDEVPRIVATE+2 /* get cable modem frequency */
2892 -#define SIOCSCMFREQUENCY SIOCDEVPRIVATE+3 /* set cable modem frequency */
2893 -#define SIOCGCMPIDS SIOCDEVPRIVATE+4 /* get cable modem PIDs */
2894 -#define SIOCSCMPIDS SIOCDEVPRIVATE+5 /* set cable modem PIDs */
2895 +#define SIOCGCMSTATS (SIOCDEVPRIVATE+0) /* get cable modem stats */
2896 +#define SIOCGCMFIRMWARE (SIOCDEVPRIVATE+1) /* get cm firmware version */
2897 +#define SIOCGCMFREQUENCY (SIOCDEVPRIVATE+2) /* get cable modem frequency */
2898 +#define SIOCSCMFREQUENCY (SIOCDEVPRIVATE+3) /* set cable modem frequency */
2899 +#define SIOCGCMPIDS (SIOCDEVPRIVATE+4) /* get cable modem PIDs */
2900 +#define SIOCSCMPIDS (SIOCDEVPRIVATE+5) /* set cable modem PIDs */
2901
2902 #endif
2903 diff --git a/include/uapi/linux/virtio_net.h b/include/uapi/linux/virtio_net.h
2904 index a5a8c88..c520203 100644
2905 --- a/include/uapi/linux/virtio_net.h
2906 +++ b/include/uapi/linux/virtio_net.h
2907 @@ -191,7 +191,7 @@ struct virtio_net_ctrl_mac {
2908 * specified.
2909 */
2910 struct virtio_net_ctrl_mq {
2911 - u16 virtqueue_pairs;
2912 + __u16 virtqueue_pairs;
2913 };
2914
2915 #define VIRTIO_NET_CTRL_MQ 4
2916 diff --git a/ipc/shm.c b/ipc/shm.c
2917 index 34af1fe..7e199fa 100644
2918 --- a/ipc/shm.c
2919 +++ b/ipc/shm.c
2920 @@ -493,7 +493,13 @@ static int newseg(struct ipc_namespace *ns, struct ipc_params *params)
2921 if (shmflg & SHM_HUGETLB) {
2922 struct hstate *hs = hstate_sizelog((shmflg >> SHM_HUGE_SHIFT)
2923 & SHM_HUGE_MASK);
2924 - size_t hugesize = ALIGN(size, huge_page_size(hs));
2925 + size_t hugesize;
2926 +
2927 + if (!hs) {
2928 + error = -EINVAL;
2929 + goto no_file;
2930 + }
2931 + hugesize = ALIGN(size, huge_page_size(hs));
2932
2933 /* hugetlb_file_setup applies strict accounting */
2934 if (shmflg & SHM_NORESERVE)
2935 diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
2936 index f9fc54b..2bf508d 100644
2937 --- a/kernel/auditfilter.c
2938 +++ b/kernel/auditfilter.c
2939 @@ -345,6 +345,12 @@ static struct audit_entry *audit_rule_to_entry(struct audit_rule *rule)
2940 f->uid = INVALID_UID;
2941 f->gid = INVALID_GID;
2942
2943 + /* Support legacy tests for a valid loginuid */
2944 + if ((f->type == AUDIT_LOGINUID) && (f->val == 4294967295U)) {
2945 + f->type = AUDIT_LOGINUID_SET;
2946 + f->val = 0;
2947 + }
2948 +
2949 err = -EINVAL;
2950 if (f->op == Audit_bad)
2951 goto exit_free;
2952 @@ -352,6 +358,12 @@ static struct audit_entry *audit_rule_to_entry(struct audit_rule *rule)
2953 switch(f->type) {
2954 default:
2955 goto exit_free;
2956 + case AUDIT_LOGINUID_SET:
2957 + if ((f->val != 0) && (f->val != 1))
2958 + goto exit_free;
2959 + if (f->op != Audit_not_equal && f->op != Audit_equal)
2960 + goto exit_free;
2961 + break;
2962 case AUDIT_UID:
2963 case AUDIT_EUID:
2964 case AUDIT_SUID:
2965 @@ -459,7 +471,20 @@ static struct audit_entry *audit_data_to_entry(struct audit_rule_data *data,
2966 f->gid = INVALID_GID;
2967 f->lsm_str = NULL;
2968 f->lsm_rule = NULL;
2969 - switch(f->type) {
2970 +
2971 + /* Support legacy tests for a valid loginuid */
2972 + if ((f->type == AUDIT_LOGINUID) && (f->val == 4294967295U)) {
2973 + f->type = AUDIT_LOGINUID_SET;
2974 + f->val = 0;
2975 + }
2976 +
2977 + switch (f->type) {
2978 + case AUDIT_LOGINUID_SET:
2979 + if ((f->val != 0) && (f->val != 1))
2980 + goto exit_free;
2981 + if (f->op != Audit_not_equal && f->op != Audit_equal)
2982 + goto exit_free;
2983 + break;
2984 case AUDIT_UID:
2985 case AUDIT_EUID:
2986 case AUDIT_SUID:
2987 @@ -1378,6 +1403,10 @@ static int audit_filter_user_rules(struct audit_krule *rule,
2988 result = audit_uid_comparator(audit_get_loginuid(current),
2989 f->op, f->uid);
2990 break;
2991 + case AUDIT_LOGINUID_SET:
2992 + result = audit_comparator(audit_loginuid_set(current),
2993 + f->op, f->val);
2994 + break;
2995 case AUDIT_SUBJ_USER:
2996 case AUDIT_SUBJ_ROLE:
2997 case AUDIT_SUBJ_TYPE:
2998 diff --git a/kernel/auditsc.c b/kernel/auditsc.c
2999 index a371f85..c4b72b0 100644
3000 --- a/kernel/auditsc.c
3001 +++ b/kernel/auditsc.c
3002 @@ -742,6 +742,9 @@ static int audit_filter_rules(struct task_struct *tsk,
3003 if (ctx)
3004 result = audit_uid_comparator(tsk->loginuid, f->op, f->uid);
3005 break;
3006 + case AUDIT_LOGINUID_SET:
3007 + result = audit_comparator(audit_loginuid_set(tsk), f->op, f->val);
3008 + break;
3009 case AUDIT_SUBJ_USER:
3010 case AUDIT_SUBJ_ROLE:
3011 case AUDIT_SUBJ_TYPE:
3012 @@ -2309,7 +2312,7 @@ int audit_set_loginuid(kuid_t loginuid)
3013 unsigned int sessionid;
3014
3015 #ifdef CONFIG_AUDIT_LOGINUID_IMMUTABLE
3016 - if (uid_valid(task->loginuid))
3017 + if (audit_loginuid_set(task))
3018 return -EPERM;
3019 #else /* CONFIG_AUDIT_LOGINUID_IMMUTABLE */
3020 if (!capable(CAP_AUDIT_CONTROL))
3021 diff --git a/kernel/kmod.c b/kernel/kmod.c
3022 index 56dd349..8985c87 100644
3023 --- a/kernel/kmod.c
3024 +++ b/kernel/kmod.c
3025 @@ -570,6 +570,11 @@ int call_usermodehelper_exec(struct subprocess_info *sub_info, int wait)
3026 int retval = 0;
3027
3028 helper_lock();
3029 + if (!sub_info->path) {
3030 + retval = -EINVAL;
3031 + goto out;
3032 + }
3033 +
3034 if (sub_info->path[0] == '\0')
3035 goto out;
3036
3037 diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c
3038 index e93cca9..6af50ad 100644
3039 --- a/kernel/sched/cputime.c
3040 +++ b/kernel/sched/cputime.c
3041 @@ -521,18 +521,49 @@ EXPORT_SYMBOL_GPL(vtime_account_irq_enter);
3042
3043 #else /* !CONFIG_VIRT_CPU_ACCOUNTING */
3044
3045 -static cputime_t scale_stime(cputime_t stime, cputime_t rtime, cputime_t total)
3046 +/*
3047 + * Perform (stime * rtime) / total, but avoid multiplication overflow by
3048 + * loosing precision when the numbers are big.
3049 + */
3050 +static cputime_t scale_stime(u64 stime, u64 rtime, u64 total)
3051 {
3052 - u64 temp = (__force u64) rtime;
3053 + u64 scaled;
3054
3055 - temp *= (__force u64) stime;
3056 + for (;;) {
3057 + /* Make sure "rtime" is the bigger of stime/rtime */
3058 + if (stime > rtime) {
3059 + u64 tmp = rtime; rtime = stime; stime = tmp;
3060 + }
3061
3062 - if (sizeof(cputime_t) == 4)
3063 - temp = div_u64(temp, (__force u32) total);
3064 - else
3065 - temp = div64_u64(temp, (__force u64) total);
3066 + /* Make sure 'total' fits in 32 bits */
3067 + if (total >> 32)
3068 + goto drop_precision;
3069 +
3070 + /* Does rtime (and thus stime) fit in 32 bits? */
3071 + if (!(rtime >> 32))
3072 + break;
3073
3074 - return (__force cputime_t) temp;
3075 + /* Can we just balance rtime/stime rather than dropping bits? */
3076 + if (stime >> 31)
3077 + goto drop_precision;
3078 +
3079 + /* We can grow stime and shrink rtime and try to make them both fit */
3080 + stime <<= 1;
3081 + rtime >>= 1;
3082 + continue;
3083 +
3084 +drop_precision:
3085 + /* We drop from rtime, it has more bits than stime */
3086 + rtime >>= 1;
3087 + total >>= 1;
3088 + }
3089 +
3090 + /*
3091 + * Make sure gcc understands that this is a 32x32->64 multiply,
3092 + * followed by a 64/32->64 divide.
3093 + */
3094 + scaled = div_u64((u64) (u32) stime * (u64) (u32) rtime, (u32)total);
3095 + return (__force cputime_t) scaled;
3096 }
3097
3098 /*
3099 @@ -543,7 +574,7 @@ static void cputime_adjust(struct task_cputime *curr,
3100 struct cputime *prev,
3101 cputime_t *ut, cputime_t *st)
3102 {
3103 - cputime_t rtime, stime, total;
3104 + cputime_t rtime, stime, utime, total;
3105
3106 stime = curr->stime;
3107 total = stime + curr->utime;
3108 @@ -560,10 +591,22 @@ static void cputime_adjust(struct task_cputime *curr,
3109 */
3110 rtime = nsecs_to_cputime(curr->sum_exec_runtime);
3111
3112 - if (total)
3113 - stime = scale_stime(stime, rtime, total);
3114 - else
3115 + /*
3116 + * Update userspace visible utime/stime values only if actual execution
3117 + * time is bigger than already exported. Note that can happen, that we
3118 + * provided bigger values due to scaling inaccuracy on big numbers.
3119 + */
3120 + if (prev->stime + prev->utime >= rtime)
3121 + goto out;
3122 +
3123 + if (total) {
3124 + stime = scale_stime((__force u64)stime,
3125 + (__force u64)rtime, (__force u64)total);
3126 + utime = rtime - stime;
3127 + } else {
3128 stime = rtime;
3129 + utime = 0;
3130 + }
3131
3132 /*
3133 * If the tick based count grows faster than the scheduler one,
3134 @@ -571,8 +614,9 @@ static void cputime_adjust(struct task_cputime *curr,
3135 * Let's enforce monotonicity.
3136 */
3137 prev->stime = max(prev->stime, stime);
3138 - prev->utime = max(prev->utime, rtime - prev->stime);
3139 + prev->utime = max(prev->utime, utime);
3140
3141 +out:
3142 *ut = prev->utime;
3143 *st = prev->stime;
3144 }
3145 diff --git a/kernel/time/Kconfig b/kernel/time/Kconfig
3146 index 24510d8..b696922 100644
3147 --- a/kernel/time/Kconfig
3148 +++ b/kernel/time/Kconfig
3149 @@ -12,11 +12,6 @@ config CLOCKSOURCE_WATCHDOG
3150 config ARCH_CLOCKSOURCE_DATA
3151 bool
3152
3153 -# Platforms has a persistent clock
3154 -config ALWAYS_USE_PERSISTENT_CLOCK
3155 - bool
3156 - default n
3157 -
3158 # Timekeeping vsyscall support
3159 config GENERIC_TIME_VSYSCALL
3160 bool
3161 diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
3162 index a19a399..e717ad9 100644
3163 --- a/kernel/time/tick-sched.c
3164 +++ b/kernel/time/tick-sched.c
3165 @@ -904,7 +904,7 @@ void tick_cancel_sched_timer(int cpu)
3166 hrtimer_cancel(&ts->sched_timer);
3167 # endif
3168
3169 - ts->nohz_mode = NOHZ_MODE_INACTIVE;
3170 + memset(ts, 0, sizeof(*ts));
3171 }
3172 #endif
3173
3174 diff --git a/kernel/timer.c b/kernel/timer.c
3175 index dbf7a78..1b399c8 100644
3176 --- a/kernel/timer.c
3177 +++ b/kernel/timer.c
3178 @@ -1678,12 +1678,12 @@ static int __cpuinit init_timers_cpu(int cpu)
3179 boot_done = 1;
3180 base = &boot_tvec_bases;
3181 }
3182 + spin_lock_init(&base->lock);
3183 tvec_base_done[cpu] = 1;
3184 } else {
3185 base = per_cpu(tvec_bases, cpu);
3186 }
3187
3188 - spin_lock_init(&base->lock);
3189
3190 for (j = 0; j < TVN_SIZE; j++) {
3191 INIT_LIST_HEAD(base->tv5.vec + j);
3192 diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
3193 index e5b0ca8..5a8a53e 100644
3194 --- a/kernel/trace/trace_events_filter.c
3195 +++ b/kernel/trace/trace_events_filter.c
3196 @@ -777,7 +777,11 @@ static int filter_set_pred(struct event_filter *filter,
3197
3198 static void __free_preds(struct event_filter *filter)
3199 {
3200 + int i;
3201 +
3202 if (filter->preds) {
3203 + for (i = 0; i < filter->n_preds; i++)
3204 + kfree(filter->preds[i].ops);
3205 kfree(filter->preds);
3206 filter->preds = NULL;
3207 }
3208 diff --git a/mm/mmap.c b/mm/mmap.c
3209 index e17fc06..0dceed8 100644
3210 --- a/mm/mmap.c
3211 +++ b/mm/mmap.c
3212 @@ -1331,9 +1331,13 @@ SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len,
3213 len = ALIGN(len, huge_page_size(hstate_file(file)));
3214 } else if (flags & MAP_HUGETLB) {
3215 struct user_struct *user = NULL;
3216 + struct hstate *hs = hstate_sizelog((flags >> MAP_HUGE_SHIFT) &
3217 + SHM_HUGE_MASK);
3218
3219 - len = ALIGN(len, huge_page_size(hstate_sizelog(
3220 - (flags >> MAP_HUGE_SHIFT) & MAP_HUGE_MASK)));
3221 + if (!hs)
3222 + return -EINVAL;
3223 +
3224 + len = ALIGN(len, huge_page_size(hs));
3225 /*
3226 * VM_NORESERVE is used because the reservations will be
3227 * taken when vm_ops->mmap() is called
3228 diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
3229 index 19cf81b..63bd98c 100644
3230 --- a/net/8021q/vlan_dev.c
3231 +++ b/net/8021q/vlan_dev.c
3232 @@ -627,7 +627,7 @@ static netdev_features_t vlan_dev_fix_features(struct net_device *dev,
3233 netdev_features_t features)
3234 {
3235 struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
3236 - u32 old_features = features;
3237 + netdev_features_t old_features = features;
3238
3239 features &= real_dev->vlan_features;
3240 features |= NETIF_F_RXCSUM;
3241 diff --git a/net/bridge/br_stp_timer.c b/net/bridge/br_stp_timer.c
3242 index c3530a8..950663d 100644
3243 --- a/net/bridge/br_stp_timer.c
3244 +++ b/net/bridge/br_stp_timer.c
3245 @@ -107,7 +107,7 @@ static void br_tcn_timer_expired(unsigned long arg)
3246
3247 br_debug(br, "tcn timer expired\n");
3248 spin_lock(&br->lock);
3249 - if (br->dev->flags & IFF_UP) {
3250 + if (!br_is_root_bridge(br) && (br->dev->flags & IFF_UP)) {
3251 br_transmit_tcn(br);
3252
3253 mod_timer(&br->tcn_timer,jiffies + br->bridge_hello_time);
3254 diff --git a/net/core/dev.c b/net/core/dev.c
3255 index b24ab0e9..9a278e9 100644
3256 --- a/net/core/dev.c
3257 +++ b/net/core/dev.c
3258 @@ -2458,7 +2458,7 @@ EXPORT_SYMBOL(netif_skb_features);
3259 * 2. skb is fragmented and the device does not support SG.
3260 */
3261 static inline int skb_needs_linearize(struct sk_buff *skb,
3262 - int features)
3263 + netdev_features_t features)
3264 {
3265 return skb_is_nonlinear(skb) &&
3266 ((skb_has_frag_list(skb) &&
3267 diff --git a/net/core/ethtool.c b/net/core/ethtool.c
3268 index 3e9b2c3..41f4bdf 100644
3269 --- a/net/core/ethtool.c
3270 +++ b/net/core/ethtool.c
3271 @@ -1416,7 +1416,7 @@ int dev_ethtool(struct net *net, struct ifreq *ifr)
3272 void __user *useraddr = ifr->ifr_data;
3273 u32 ethcmd;
3274 int rc;
3275 - u32 old_features;
3276 + netdev_features_t old_features;
3277
3278 if (!dev || !netif_device_present(dev))
3279 return -ENODEV;
3280 diff --git a/net/core/sock.c b/net/core/sock.c
3281 index b261a79..1432266 100644
3282 --- a/net/core/sock.c
3283 +++ b/net/core/sock.c
3284 @@ -1209,18 +1209,6 @@ static void sock_copy(struct sock *nsk, const struct sock *osk)
3285 #endif
3286 }
3287
3288 -/*
3289 - * caches using SLAB_DESTROY_BY_RCU should let .next pointer from nulls nodes
3290 - * un-modified. Special care is taken when initializing object to zero.
3291 - */
3292 -static inline void sk_prot_clear_nulls(struct sock *sk, int size)
3293 -{
3294 - if (offsetof(struct sock, sk_node.next) != 0)
3295 - memset(sk, 0, offsetof(struct sock, sk_node.next));
3296 - memset(&sk->sk_node.pprev, 0,
3297 - size - offsetof(struct sock, sk_node.pprev));
3298 -}
3299 -
3300 void sk_prot_clear_portaddr_nulls(struct sock *sk, int size)
3301 {
3302 unsigned long nulls1, nulls2;
3303 diff --git a/net/ipv4/inet_fragment.c b/net/ipv4/inet_fragment.c
3304 index f4fd23d..3211914 100644
3305 --- a/net/ipv4/inet_fragment.c
3306 +++ b/net/ipv4/inet_fragment.c
3307 @@ -257,6 +257,7 @@ static struct inet_frag_queue *inet_frag_alloc(struct netns_frags *nf,
3308 setup_timer(&q->timer, f->frag_expire, (unsigned long)q);
3309 spin_lock_init(&q->lock);
3310 atomic_set(&q->refcnt, 1);
3311 + INIT_LIST_HEAD(&q->lru_list);
3312
3313 return q;
3314 }
3315 diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c
3316 index b83a49c..2f672e7 100644
3317 --- a/net/ipv4/tcp_minisocks.c
3318 +++ b/net/ipv4/tcp_minisocks.c
3319 @@ -583,8 +583,13 @@ struct sock *tcp_check_req(struct sock *sk, struct sk_buff *skb,
3320 *
3321 * Note that even if there is new data in the SYN packet
3322 * they will be thrown away too.
3323 + *
3324 + * Reset timer after retransmitting SYNACK, similar to
3325 + * the idea of fast retransmit in recovery.
3326 */
3327 - inet_rtx_syn_ack(sk, req);
3328 + if (!inet_rtx_syn_ack(sk, req))
3329 + req->expires = min(TCP_TIMEOUT_INIT << req->num_timeout,
3330 + TCP_RTO_MAX) + jiffies;
3331 return NULL;
3332 }
3333
3334 diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
3335 index e4efffe..95d13c7 100644
3336 --- a/net/ipv6/ip6_gre.c
3337 +++ b/net/ipv6/ip6_gre.c
3338 @@ -1135,6 +1135,7 @@ static int ip6gre_tunnel_ioctl(struct net_device *dev,
3339 }
3340 if (t == NULL)
3341 t = netdev_priv(dev);
3342 + memset(&p, 0, sizeof(p));
3343 ip6gre_tnl_parm_to_user(&p, &t->parms);
3344 if (copy_to_user(ifr->ifr_ifru.ifru_data, &p, sizeof(p)))
3345 err = -EFAULT;
3346 @@ -1182,6 +1183,7 @@ static int ip6gre_tunnel_ioctl(struct net_device *dev,
3347 if (t) {
3348 err = 0;
3349
3350 + memset(&p, 0, sizeof(p));
3351 ip6gre_tnl_parm_to_user(&p, &t->parms);
3352 if (copy_to_user(ifr->ifr_ifru.ifru_data, &p, sizeof(p)))
3353 err = -EFAULT;
3354 diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
3355 index 46a5be8..0fce928 100644
3356 --- a/net/ipv6/tcp_ipv6.c
3357 +++ b/net/ipv6/tcp_ipv6.c
3358 @@ -1937,6 +1937,17 @@ void tcp6_proc_exit(struct net *net)
3359 }
3360 #endif
3361
3362 +static void tcp_v6_clear_sk(struct sock *sk, int size)
3363 +{
3364 + struct inet_sock *inet = inet_sk(sk);
3365 +
3366 + /* we do not want to clear pinet6 field, because of RCU lookups */
3367 + sk_prot_clear_nulls(sk, offsetof(struct inet_sock, pinet6));
3368 +
3369 + size -= offsetof(struct inet_sock, pinet6) + sizeof(inet->pinet6);
3370 + memset(&inet->pinet6 + 1, 0, size);
3371 +}
3372 +
3373 struct proto tcpv6_prot = {
3374 .name = "TCPv6",
3375 .owner = THIS_MODULE,
3376 @@ -1980,6 +1991,7 @@ struct proto tcpv6_prot = {
3377 #ifdef CONFIG_MEMCG_KMEM
3378 .proto_cgroup = tcp_proto_cgroup,
3379 #endif
3380 + .clear_sk = tcp_v6_clear_sk,
3381 };
3382
3383 static const struct inet6_protocol tcpv6_protocol = {
3384 diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
3385 index d8e5e85..27f0f8e 100644
3386 --- a/net/ipv6/udp.c
3387 +++ b/net/ipv6/udp.c
3388 @@ -1422,6 +1422,17 @@ void udp6_proc_exit(struct net *net) {
3389 }
3390 #endif /* CONFIG_PROC_FS */
3391
3392 +void udp_v6_clear_sk(struct sock *sk, int size)
3393 +{
3394 + struct inet_sock *inet = inet_sk(sk);
3395 +
3396 + /* we do not want to clear pinet6 field, because of RCU lookups */
3397 + sk_prot_clear_portaddr_nulls(sk, offsetof(struct inet_sock, pinet6));
3398 +
3399 + size -= offsetof(struct inet_sock, pinet6) + sizeof(inet->pinet6);
3400 + memset(&inet->pinet6 + 1, 0, size);
3401 +}
3402 +
3403 /* ------------------------------------------------------------------------ */
3404
3405 struct proto udpv6_prot = {
3406 @@ -1452,7 +1463,7 @@ struct proto udpv6_prot = {
3407 .compat_setsockopt = compat_udpv6_setsockopt,
3408 .compat_getsockopt = compat_udpv6_getsockopt,
3409 #endif
3410 - .clear_sk = sk_prot_clear_portaddr_nulls,
3411 + .clear_sk = udp_v6_clear_sk,
3412 };
3413
3414 static struct inet_protosw udpv6_protosw = {
3415 diff --git a/net/ipv6/udp_impl.h b/net/ipv6/udp_impl.h
3416 index d757104..4691ed5 100644
3417 --- a/net/ipv6/udp_impl.h
3418 +++ b/net/ipv6/udp_impl.h
3419 @@ -31,6 +31,8 @@ extern int udpv6_recvmsg(struct kiocb *iocb, struct sock *sk,
3420 extern int udpv6_queue_rcv_skb(struct sock * sk, struct sk_buff *skb);
3421 extern void udpv6_destroy_sock(struct sock *sk);
3422
3423 +extern void udp_v6_clear_sk(struct sock *sk, int size);
3424 +
3425 #ifdef CONFIG_PROC_FS
3426 extern int udp6_seq_show(struct seq_file *seq, void *v);
3427 #endif
3428 diff --git a/net/ipv6/udplite.c b/net/ipv6/udplite.c
3429 index 1d08e21..dfcc4be 100644
3430 --- a/net/ipv6/udplite.c
3431 +++ b/net/ipv6/udplite.c
3432 @@ -56,7 +56,7 @@ struct proto udplitev6_prot = {
3433 .compat_setsockopt = compat_udpv6_setsockopt,
3434 .compat_getsockopt = compat_udpv6_getsockopt,
3435 #endif
3436 - .clear_sk = sk_prot_clear_portaddr_nulls,
3437 + .clear_sk = udp_v6_clear_sk,
3438 };
3439
3440 static struct inet_protosw udplite6_protosw = {
3441 diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c
3442 index 4ef7bdb..23ed03d 100644
3443 --- a/net/ipv6/xfrm6_policy.c
3444 +++ b/net/ipv6/xfrm6_policy.c
3445 @@ -103,8 +103,10 @@ static int xfrm6_fill_dst(struct xfrm_dst *xdst, struct net_device *dev,
3446 dev_hold(dev);
3447
3448 xdst->u.rt6.rt6i_idev = in6_dev_get(dev);
3449 - if (!xdst->u.rt6.rt6i_idev)
3450 + if (!xdst->u.rt6.rt6i_idev) {
3451 + dev_put(dev);
3452 return -ENODEV;
3453 + }
3454
3455 rt6_transfer_peer(&xdst->u.rt6, rt);
3456
3457 diff --git a/net/mac802154/mac802154.h b/net/mac802154/mac802154.h
3458 index a4dcaf1..703c121 100644
3459 --- a/net/mac802154/mac802154.h
3460 +++ b/net/mac802154/mac802154.h
3461 @@ -90,7 +90,7 @@ struct mac802154_sub_if_data {
3462
3463 #define MAC802154_MAX_XMIT_ATTEMPTS 3
3464
3465 -#define MAC802154_CHAN_NONE (~(u8)0) /* No channel is assigned */
3466 +#define MAC802154_CHAN_NONE 0xff /* No channel is assigned */
3467
3468 extern struct ieee802154_reduced_mlme_ops mac802154_mlme_reduced;
3469 extern struct ieee802154_mlme_ops mac802154_mlme_wpan;
3470 diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
3471 index 1d6793d..f83e172 100644
3472 --- a/net/packet/af_packet.c
3473 +++ b/net/packet/af_packet.c
3474 @@ -693,36 +693,33 @@ static void prb_open_block(struct tpacket_kbdq_core *pkc1,
3475
3476 smp_rmb();
3477
3478 - if (likely(TP_STATUS_KERNEL == BLOCK_STATUS(pbd1))) {
3479 + /* We could have just memset this but we will lose the
3480 + * flexibility of making the priv area sticky
3481 + */
3482
3483 - /* We could have just memset this but we will lose the
3484 - * flexibility of making the priv area sticky
3485 - */
3486 - BLOCK_SNUM(pbd1) = pkc1->knxt_seq_num++;
3487 - BLOCK_NUM_PKTS(pbd1) = 0;
3488 - BLOCK_LEN(pbd1) = BLK_PLUS_PRIV(pkc1->blk_sizeof_priv);
3489 - getnstimeofday(&ts);
3490 - h1->ts_first_pkt.ts_sec = ts.tv_sec;
3491 - h1->ts_first_pkt.ts_nsec = ts.tv_nsec;
3492 - pkc1->pkblk_start = (char *)pbd1;
3493 - pkc1->nxt_offset = pkc1->pkblk_start + BLK_PLUS_PRIV(pkc1->blk_sizeof_priv);
3494 - BLOCK_O2FP(pbd1) = (__u32)BLK_PLUS_PRIV(pkc1->blk_sizeof_priv);
3495 - BLOCK_O2PRIV(pbd1) = BLK_HDR_LEN;
3496 - pbd1->version = pkc1->version;
3497 - pkc1->prev = pkc1->nxt_offset;
3498 - pkc1->pkblk_end = pkc1->pkblk_start + pkc1->kblk_size;
3499 - prb_thaw_queue(pkc1);
3500 - _prb_refresh_rx_retire_blk_timer(pkc1);
3501 + BLOCK_SNUM(pbd1) = pkc1->knxt_seq_num++;
3502 + BLOCK_NUM_PKTS(pbd1) = 0;
3503 + BLOCK_LEN(pbd1) = BLK_PLUS_PRIV(pkc1->blk_sizeof_priv);
3504
3505 - smp_wmb();
3506 + getnstimeofday(&ts);
3507
3508 - return;
3509 - }
3510 + h1->ts_first_pkt.ts_sec = ts.tv_sec;
3511 + h1->ts_first_pkt.ts_nsec = ts.tv_nsec;
3512
3513 - WARN(1, "ERROR block:%p is NOT FREE status:%d kactive_blk_num:%d\n",
3514 - pbd1, BLOCK_STATUS(pbd1), pkc1->kactive_blk_num);
3515 - dump_stack();
3516 - BUG();
3517 + pkc1->pkblk_start = (char *)pbd1;
3518 + pkc1->nxt_offset = pkc1->pkblk_start + BLK_PLUS_PRIV(pkc1->blk_sizeof_priv);
3519 +
3520 + BLOCK_O2FP(pbd1) = (__u32)BLK_PLUS_PRIV(pkc1->blk_sizeof_priv);
3521 + BLOCK_O2PRIV(pbd1) = BLK_HDR_LEN;
3522 +
3523 + pbd1->version = pkc1->version;
3524 + pkc1->prev = pkc1->nxt_offset;
3525 + pkc1->pkblk_end = pkc1->pkblk_start + pkc1->kblk_size;
3526 +
3527 + prb_thaw_queue(pkc1);
3528 + _prb_refresh_rx_retire_blk_timer(pkc1);
3529 +
3530 + smp_wmb();
3531 }
3532
3533 /*
3534 @@ -813,10 +810,6 @@ static void prb_retire_current_block(struct tpacket_kbdq_core *pkc,
3535 prb_close_block(pkc, pbd, po, status);
3536 return;
3537 }
3538 -
3539 - WARN(1, "ERROR-pbd[%d]:%p\n", pkc->kactive_blk_num, pbd);
3540 - dump_stack();
3541 - BUG();
3542 }
3543
3544 static int prb_curr_blk_in_use(struct tpacket_kbdq_core *pkc,
3545 diff --git a/net/sched/act_ipt.c b/net/sched/act_ipt.c
3546 index e0f6de6..60d88b6 100644
3547 --- a/net/sched/act_ipt.c
3548 +++ b/net/sched/act_ipt.c
3549 @@ -8,7 +8,7 @@
3550 * as published by the Free Software Foundation; either version
3551 * 2 of the License, or (at your option) any later version.
3552 *
3553 - * Copyright: Jamal Hadi Salim (2002-4)
3554 + * Copyright: Jamal Hadi Salim (2002-13)
3555 */
3556
3557 #include <linux/types.h>
3558 @@ -303,17 +303,44 @@ static struct tc_action_ops act_ipt_ops = {
3559 .walk = tcf_generic_walker
3560 };
3561
3562 -MODULE_AUTHOR("Jamal Hadi Salim(2002-4)");
3563 +static struct tc_action_ops act_xt_ops = {
3564 + .kind = "xt",
3565 + .hinfo = &ipt_hash_info,
3566 + .type = TCA_ACT_IPT,
3567 + .capab = TCA_CAP_NONE,
3568 + .owner = THIS_MODULE,
3569 + .act = tcf_ipt,
3570 + .dump = tcf_ipt_dump,
3571 + .cleanup = tcf_ipt_cleanup,
3572 + .lookup = tcf_hash_search,
3573 + .init = tcf_ipt_init,
3574 + .walk = tcf_generic_walker
3575 +};
3576 +
3577 +MODULE_AUTHOR("Jamal Hadi Salim(2002-13)");
3578 MODULE_DESCRIPTION("Iptables target actions");
3579 MODULE_LICENSE("GPL");
3580 +MODULE_ALIAS("act_xt");
3581
3582 static int __init ipt_init_module(void)
3583 {
3584 - return tcf_register_action(&act_ipt_ops);
3585 + int ret1, ret2;
3586 + ret1 = tcf_register_action(&act_xt_ops);
3587 + if (ret1 < 0)
3588 + printk("Failed to load xt action\n");
3589 + ret2 = tcf_register_action(&act_ipt_ops);
3590 + if (ret2 < 0)
3591 + printk("Failed to load ipt action\n");
3592 +
3593 + if (ret1 < 0 && ret2 < 0)
3594 + return ret1;
3595 + else
3596 + return 0;
3597 }
3598
3599 static void __exit ipt_cleanup_module(void)
3600 {
3601 + tcf_unregister_action(&act_xt_ops);
3602 tcf_unregister_action(&act_ipt_ops);
3603 }
3604
3605 diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
3606 index 7f93e2a..2e330e8 100644
3607 --- a/net/vmw_vsock/af_vsock.c
3608 +++ b/net/vmw_vsock/af_vsock.c
3609 @@ -165,7 +165,7 @@ static struct list_head vsock_bind_table[VSOCK_HASH_SIZE + 1];
3610 static struct list_head vsock_connected_table[VSOCK_HASH_SIZE];
3611 static DEFINE_SPINLOCK(vsock_table_lock);
3612
3613 -static __init void vsock_init_tables(void)
3614 +static void vsock_init_tables(void)
3615 {
3616 int i;
3617
3618 diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
3619 index 4aba764..c414cdd 100644
3620 --- a/sound/pci/hda/hda_codec.c
3621 +++ b/sound/pci/hda/hda_codec.c
3622 @@ -681,6 +681,9 @@ int snd_hda_queue_unsol_event(struct hda_bus *bus, u32 res, u32 res_ex)
3623 struct hda_bus_unsolicited *unsol;
3624 unsigned int wp;
3625
3626 + if (!bus || !bus->workq)
3627 + return 0;
3628 +
3629 trace_hda_unsol_event(bus, res, res_ex);
3630 unsol = bus->unsol;
3631 if (!unsol)
3632 @@ -1577,7 +1580,7 @@ void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
3633 "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
3634 nid, stream_tag, channel_id, format);
3635 p = get_hda_cvt_setup(codec, nid);
3636 - if (!p || p->active)
3637 + if (!p)
3638 return;
3639
3640 if (codec->pcm_format_first)
3641 @@ -1624,7 +1627,7 @@ void __snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid,
3642
3643 snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid);
3644 p = get_hda_cvt_setup(codec, nid);
3645 - if (p && p->active) {
3646 + if (p) {
3647 /* here we just clear the active flag when do_now isn't set;
3648 * actual clean-ups will be done later in
3649 * purify_inactive_streams() called from snd_hda_codec_prpapre()
3650 diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
3651 index 2a89d1ee..1e5a30f 100644
3652 --- a/sound/pci/hda/patch_conexant.c
3653 +++ b/sound/pci/hda/patch_conexant.c
3654 @@ -64,6 +64,7 @@ struct conexant_spec {
3655 /* extra EAPD pins */
3656 unsigned int num_eapds;
3657 hda_nid_t eapds[4];
3658 + bool dynamic_eapd;
3659
3660 #ifdef ENABLE_CXT_STATIC_QUIRKS
3661 const struct snd_kcontrol_new *mixers[5];
3662 @@ -3152,7 +3153,7 @@ static void cx_auto_parse_eapd(struct hda_codec *codec)
3663 * thus it might control over all pins.
3664 */
3665 if (spec->num_eapds > 2)
3666 - spec->gen.own_eapd_ctl = 1;
3667 + spec->dynamic_eapd = 1;
3668 }
3669
3670 static void cx_auto_turn_eapd(struct hda_codec *codec, int num_pins,
3671 @@ -3191,6 +3192,15 @@ static int cx_auto_build_controls(struct hda_codec *codec)
3672 return 0;
3673 }
3674
3675 +static int cx_auto_init(struct hda_codec *codec)
3676 +{
3677 + struct conexant_spec *spec = codec->spec;
3678 + snd_hda_gen_init(codec);
3679 + if (!spec->dynamic_eapd)
3680 + cx_auto_turn_eapd(codec, spec->num_eapds, spec->eapds, true);
3681 + return 0;
3682 +}
3683 +
3684 static void cx_auto_free(struct hda_codec *codec)
3685 {
3686 snd_hda_detach_beep_device(codec);
3687 @@ -3200,7 +3210,7 @@ static void cx_auto_free(struct hda_codec *codec)
3688 static const struct hda_codec_ops cx_auto_patch_ops = {
3689 .build_controls = cx_auto_build_controls,
3690 .build_pcms = snd_hda_gen_build_pcms,
3691 - .init = snd_hda_gen_init,
3692 + .init = cx_auto_init,
3693 .free = cx_auto_free,
3694 .unsol_event = snd_hda_jack_unsol_event,
3695 #ifdef CONFIG_PM
3696 @@ -3350,7 +3360,8 @@ static int patch_conexant_auto(struct hda_codec *codec)
3697
3698 cx_auto_parse_beep(codec);
3699 cx_auto_parse_eapd(codec);
3700 - if (spec->gen.own_eapd_ctl)
3701 + spec->gen.own_eapd_ctl = 1;
3702 + if (spec->dynamic_eapd)
3703 spec->gen.vmaster_mute.hook = cx_auto_vmaster_hook;
3704
3705 switch (codec->vendor_id) {
3706 diff --git a/sound/soc/codecs/da7213.c b/sound/soc/codecs/da7213.c
3707 index 41230ad..4a6f1da 100644
3708 --- a/sound/soc/codecs/da7213.c
3709 +++ b/sound/soc/codecs/da7213.c
3710 @@ -1488,17 +1488,17 @@ static int da7213_probe(struct snd_soc_codec *codec)
3711 DA7213_DMIC_DATA_SEL_SHIFT);
3712 break;
3713 }
3714 - switch (pdata->dmic_data_sel) {
3715 + switch (pdata->dmic_samplephase) {
3716 case DA7213_DMIC_SAMPLE_ON_CLKEDGE:
3717 case DA7213_DMIC_SAMPLE_BETWEEN_CLKEDGE:
3718 - dmic_cfg |= (pdata->dmic_data_sel <<
3719 + dmic_cfg |= (pdata->dmic_samplephase <<
3720 DA7213_DMIC_SAMPLEPHASE_SHIFT);
3721 break;
3722 }
3723 - switch (pdata->dmic_data_sel) {
3724 + switch (pdata->dmic_clk_rate) {
3725 case DA7213_DMIC_CLK_3_0MHZ:
3726 case DA7213_DMIC_CLK_1_5MHZ:
3727 - dmic_cfg |= (pdata->dmic_data_sel <<
3728 + dmic_cfg |= (pdata->dmic_clk_rate <<
3729 DA7213_DMIC_CLK_RATE_SHIFT);
3730 break;
3731 }
3732 diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
3733 index c9bd445..e5f96c9 100644
3734 --- a/sound/soc/codecs/wm8994.c
3735 +++ b/sound/soc/codecs/wm8994.c
3736 @@ -2841,6 +2841,7 @@ static int wm8994_aif3_hw_params(struct snd_pcm_substream *substream,
3737 default:
3738 return 0;
3739 }
3740 + break;
3741 default:
3742 return 0;
3743 }