Magellan Linux

Contents of /trunk/kernel-alx/patches-3.18/0108-3.18.9-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2553 - (show annotations) (download)
Wed Mar 18 09:24:38 2015 UTC (9 years, 1 month ago) by niro
File size: 192335 byte(s)
-import from kernel-magellan
1 diff --git a/Makefile b/Makefile
2 index 0b3f8a1b3715..62b333802a0e 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 3
7 PATCHLEVEL = 18
8 -SUBLEVEL = 8
9 +SUBLEVEL = 9
10 EXTRAVERSION =
11 NAME = Diseased Newt
12
13 diff --git a/arch/arc/include/asm/pgtable.h b/arch/arc/include/asm/pgtable.h
14 index 6b0b7f7ef783..7670f33b9ce2 100644
15 --- a/arch/arc/include/asm/pgtable.h
16 +++ b/arch/arc/include/asm/pgtable.h
17 @@ -259,7 +259,8 @@ static inline void pmd_set(pmd_t *pmdp, pte_t *ptep)
18 #define pmd_clear(xp) do { pmd_val(*(xp)) = 0; } while (0)
19
20 #define pte_page(x) (mem_map + \
21 - (unsigned long)(((pte_val(x) - PAGE_OFFSET) >> PAGE_SHIFT)))
22 + (unsigned long)(((pte_val(x) - CONFIG_LINUX_LINK_BASE) >> \
23 + PAGE_SHIFT)))
24
25 #define mk_pte(page, pgprot) \
26 ({ \
27 diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi
28 index 6cc25ed912ee..2c6248d9a9ef 100644
29 --- a/arch/arm/boot/dts/am335x-bone-common.dtsi
30 +++ b/arch/arm/boot/dts/am335x-bone-common.dtsi
31 @@ -195,6 +195,7 @@
32
33 &usb0 {
34 status = "okay";
35 + dr_mode = "peripheral";
36 };
37
38 &usb1 {
39 diff --git a/arch/arm/boot/dts/bcm63138.dtsi b/arch/arm/boot/dts/bcm63138.dtsi
40 index f3bb2dd6269e..c97844cac4e7 100644
41 --- a/arch/arm/boot/dts/bcm63138.dtsi
42 +++ b/arch/arm/boot/dts/bcm63138.dtsi
43 @@ -66,8 +66,9 @@
44 reg = <0x1d000 0x1000>;
45 cache-unified;
46 cache-level = <2>;
47 - cache-sets = <16>;
48 - cache-size = <0x80000>;
49 + cache-size = <524288>;
50 + cache-sets = <1024>;
51 + cache-line-size = <32>;
52 interrupts = <GIC_PPI 0 IRQ_TYPE_LEVEL_HIGH>;
53 };
54
55 diff --git a/arch/arm/boot/dts/tegra20.dtsi b/arch/arm/boot/dts/tegra20.dtsi
56 index 8acf5d85c99d..f76fe94267d6 100644
57 --- a/arch/arm/boot/dts/tegra20.dtsi
58 +++ b/arch/arm/boot/dts/tegra20.dtsi
59 @@ -68,9 +68,9 @@
60 reset-names = "2d";
61 };
62
63 - gr3d@54140000 {
64 + gr3d@54180000 {
65 compatible = "nvidia,tegra20-gr3d";
66 - reg = <0x54140000 0x00040000>;
67 + reg = <0x54180000 0x00040000>;
68 clocks = <&tegra_car TEGRA20_CLK_GR3D>;
69 resets = <&tegra_car 24>;
70 reset-names = "3d";
71 @@ -130,9 +130,9 @@
72 status = "disabled";
73 };
74
75 - dsi@542c0000 {
76 + dsi@54300000 {
77 compatible = "nvidia,tegra20-dsi";
78 - reg = <0x542c0000 0x00040000>;
79 + reg = <0x54300000 0x00040000>;
80 clocks = <&tegra_car TEGRA20_CLK_DSI>;
81 resets = <&tegra_car 48>;
82 reset-names = "dsi";
83 diff --git a/arch/arm/mach-mvebu/system-controller.c b/arch/arm/mach-mvebu/system-controller.c
84 index a068cb5c2ce8..c6c132acd7a6 100644
85 --- a/arch/arm/mach-mvebu/system-controller.c
86 +++ b/arch/arm/mach-mvebu/system-controller.c
87 @@ -126,7 +126,7 @@ int mvebu_system_controller_get_soc_id(u32 *dev, u32 *rev)
88 return -ENODEV;
89 }
90
91 -#ifdef CONFIG_SMP
92 +#if defined(CONFIG_SMP) && defined(CONFIG_MACH_MVEBU_V7)
93 void mvebu_armada375_smp_wa_init(void)
94 {
95 u32 dev, rev;
96 diff --git a/arch/arm/mach-omap2/omap_hwmod_7xx_data.c b/arch/arm/mach-omap2/omap_hwmod_7xx_data.c
97 index 5684f112654b..4e9d2a97c2cb 100644
98 --- a/arch/arm/mach-omap2/omap_hwmod_7xx_data.c
99 +++ b/arch/arm/mach-omap2/omap_hwmod_7xx_data.c
100 @@ -2017,7 +2017,7 @@ static struct omap_hwmod dra7xx_uart3_hwmod = {
101 .class = &dra7xx_uart_hwmod_class,
102 .clkdm_name = "l4per_clkdm",
103 .main_clk = "uart3_gfclk_mux",
104 - .flags = HWMOD_SWSUP_SIDLE_ACT,
105 + .flags = HWMOD_SWSUP_SIDLE_ACT | DEBUG_OMAP4UART3_FLAGS,
106 .prcm = {
107 .omap4 = {
108 .clkctrl_offs = DRA7XX_CM_L4PER_UART3_CLKCTRL_OFFSET,
109 diff --git a/arch/arm/mach-pxa/corgi.c b/arch/arm/mach-pxa/corgi.c
110 index 06022b235730..89f790dda93e 100644
111 --- a/arch/arm/mach-pxa/corgi.c
112 +++ b/arch/arm/mach-pxa/corgi.c
113 @@ -26,6 +26,7 @@
114 #include <linux/i2c.h>
115 #include <linux/i2c/pxa-i2c.h>
116 #include <linux/io.h>
117 +#include <linux/regulator/machine.h>
118 #include <linux/spi/spi.h>
119 #include <linux/spi/ads7846.h>
120 #include <linux/spi/corgi_lcd.h>
121 @@ -752,6 +753,8 @@ static void __init corgi_init(void)
122 sharpsl_nand_partitions[1].size = 53 * 1024 * 1024;
123
124 platform_add_devices(devices, ARRAY_SIZE(devices));
125 +
126 + regulator_has_full_constraints();
127 }
128
129 static void __init fixup_corgi(struct tag *tags, char **cmdline)
130 diff --git a/arch/arm/mach-pxa/hx4700.c b/arch/arm/mach-pxa/hx4700.c
131 index c66ad4edc5e3..5fb41ad6e3bc 100644
132 --- a/arch/arm/mach-pxa/hx4700.c
133 +++ b/arch/arm/mach-pxa/hx4700.c
134 @@ -893,6 +893,8 @@ static void __init hx4700_init(void)
135 mdelay(10);
136 gpio_set_value(GPIO71_HX4700_ASIC3_nRESET, 1);
137 mdelay(10);
138 +
139 + regulator_has_full_constraints();
140 }
141
142 MACHINE_START(H4700, "HP iPAQ HX4700")
143 diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c
144 index 131991629116..e81d216b05e4 100644
145 --- a/arch/arm/mach-pxa/poodle.c
146 +++ b/arch/arm/mach-pxa/poodle.c
147 @@ -25,6 +25,7 @@
148 #include <linux/gpio.h>
149 #include <linux/i2c.h>
150 #include <linux/i2c/pxa-i2c.h>
151 +#include <linux/regulator/machine.h>
152 #include <linux/spi/spi.h>
153 #include <linux/spi/ads7846.h>
154 #include <linux/spi/pxa2xx_spi.h>
155 @@ -455,6 +456,7 @@ static void __init poodle_init(void)
156 pxa_set_i2c_info(NULL);
157 i2c_register_board_info(0, ARRAY_AND_SIZE(poodle_i2c_devices));
158 poodle_init_spi();
159 + regulator_has_full_constraints();
160 }
161
162 static void __init fixup_poodle(struct tag *tags, char **cmdline)
163 diff --git a/arch/arm/mach-sa1100/pm.c b/arch/arm/mach-sa1100/pm.c
164 index 6645d1e31f14..34853d5dfda2 100644
165 --- a/arch/arm/mach-sa1100/pm.c
166 +++ b/arch/arm/mach-sa1100/pm.c
167 @@ -81,6 +81,7 @@ static int sa11x0_pm_enter(suspend_state_t state)
168 /*
169 * Ensure not to come back here if it wasn't intended
170 */
171 + RCSR = RCSR_SMR;
172 PSPR = 0;
173
174 /*
175 diff --git a/arch/arm/mach-vexpress/Kconfig b/arch/arm/mach-vexpress/Kconfig
176 index b2cfba16c4e8..18865136156f 100644
177 --- a/arch/arm/mach-vexpress/Kconfig
178 +++ b/arch/arm/mach-vexpress/Kconfig
179 @@ -75,6 +75,7 @@ config ARCH_VEXPRESS_TC2_PM
180 depends on MCPM
181 select ARM_CCI
182 select ARCH_VEXPRESS_SPC
183 + select ARM_CPU_SUSPEND
184 help
185 Support for CPU and cluster power management on Versatile Express
186 with a TC2 (A15x2 A7x3) big.LITTLE core tile.
187 diff --git a/arch/arm64/kernel/signal32.c b/arch/arm64/kernel/signal32.c
188 index 1b9ad02837cf..76920d4040d4 100644
189 --- a/arch/arm64/kernel/signal32.c
190 +++ b/arch/arm64/kernel/signal32.c
191 @@ -154,8 +154,7 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, const siginfo_t *from)
192 case __SI_TIMER:
193 err |= __put_user(from->si_tid, &to->si_tid);
194 err |= __put_user(from->si_overrun, &to->si_overrun);
195 - err |= __put_user((compat_uptr_t)(unsigned long)from->si_ptr,
196 - &to->si_ptr);
197 + err |= __put_user(from->si_int, &to->si_int);
198 break;
199 case __SI_POLL:
200 err |= __put_user(from->si_band, &to->si_band);
201 @@ -184,7 +183,7 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, const siginfo_t *from)
202 case __SI_MESGQ: /* But this is */
203 err |= __put_user(from->si_pid, &to->si_pid);
204 err |= __put_user(from->si_uid, &to->si_uid);
205 - err |= __put_user((compat_uptr_t)(unsigned long)from->si_ptr, &to->si_ptr);
206 + err |= __put_user(from->si_int, &to->si_int);
207 break;
208 default: /* this is just in case for now ... */
209 err |= __put_user(from->si_pid, &to->si_pid);
210 diff --git a/arch/metag/include/asm/processor.h b/arch/metag/include/asm/processor.h
211 index 881071c07942..13272fd5a5ba 100644
212 --- a/arch/metag/include/asm/processor.h
213 +++ b/arch/metag/include/asm/processor.h
214 @@ -149,8 +149,8 @@ extern void exit_thread(void);
215
216 unsigned long get_wchan(struct task_struct *p);
217
218 -#define KSTK_EIP(tsk) ((tsk)->thread.kernel_context->CurrPC)
219 -#define KSTK_ESP(tsk) ((tsk)->thread.kernel_context->AX[0].U0)
220 +#define KSTK_EIP(tsk) (task_pt_regs(tsk)->ctx.CurrPC)
221 +#define KSTK_ESP(tsk) (task_pt_regs(tsk)->ctx.AX[0].U0)
222
223 #define user_stack_pointer(regs) ((regs)->ctx.AX[0].U0)
224
225 diff --git a/arch/mips/alchemy/common/clock.c b/arch/mips/alchemy/common/clock.c
226 index d7557cde271a..3fff11ec7dc0 100644
227 --- a/arch/mips/alchemy/common/clock.c
228 +++ b/arch/mips/alchemy/common/clock.c
229 @@ -128,6 +128,8 @@ static unsigned long alchemy_clk_cpu_recalc(struct clk_hw *hw,
230 t = 396000000;
231 else {
232 t = alchemy_rdsys(AU1000_SYS_CPUPLL) & 0x7f;
233 + if (alchemy_get_cputype() < ALCHEMY_CPU_AU1300)
234 + t &= 0x3f;
235 t *= parent_rate;
236 }
237
238 diff --git a/arch/mips/include/asm/asmmacro.h b/arch/mips/include/asm/asmmacro.h
239 index 6caf8766b80f..71fef0af9c9a 100644
240 --- a/arch/mips/include/asm/asmmacro.h
241 +++ b/arch/mips/include/asm/asmmacro.h
242 @@ -304,7 +304,7 @@
243 .set push
244 .set noat
245 SET_HARDFLOAT
246 - add $1, \base, \off
247 + addu $1, \base, \off
248 .word LDD_MSA_INSN | (\wd << 6)
249 .set pop
250 .endm
251 @@ -313,7 +313,7 @@
252 .set push
253 .set noat
254 SET_HARDFLOAT
255 - add $1, \base, \off
256 + addu $1, \base, \off
257 .word STD_MSA_INSN | (\wd << 6)
258 .set pop
259 .endm
260 diff --git a/arch/mips/include/asm/cpu-info.h b/arch/mips/include/asm/cpu-info.h
261 index a6c9ccb33c5c..c3f4f2d2e108 100644
262 --- a/arch/mips/include/asm/cpu-info.h
263 +++ b/arch/mips/include/asm/cpu-info.h
264 @@ -84,6 +84,11 @@ struct cpuinfo_mips {
265 * (shifted by _CACHE_SHIFT)
266 */
267 unsigned int writecombine;
268 + /*
269 + * Simple counter to prevent enabling HTW in nested
270 + * htw_start/htw_stop calls
271 + */
272 + unsigned int htw_seq;
273 } __attribute__((aligned(SMP_CACHE_BYTES)));
274
275 extern struct cpuinfo_mips cpu_data[];
276 diff --git a/arch/mips/include/asm/mmu_context.h b/arch/mips/include/asm/mmu_context.h
277 index 2f82568a3ee4..bc01579a907a 100644
278 --- a/arch/mips/include/asm/mmu_context.h
279 +++ b/arch/mips/include/asm/mmu_context.h
280 @@ -25,7 +25,6 @@ do { \
281 if (cpu_has_htw) { \
282 write_c0_pwbase(pgd); \
283 back_to_back_c0_hazard(); \
284 - htw_reset(); \
285 } \
286 } while (0)
287
288 @@ -142,6 +141,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
289 unsigned long flags;
290 local_irq_save(flags);
291
292 + htw_stop();
293 /* Check if our ASID is of an older version and thus invalid */
294 if ((cpu_context(cpu, next) ^ asid_cache(cpu)) & ASID_VERSION_MASK)
295 get_new_mmu_context(next, cpu);
296 @@ -154,6 +154,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
297 */
298 cpumask_clear_cpu(cpu, mm_cpumask(prev));
299 cpumask_set_cpu(cpu, mm_cpumask(next));
300 + htw_start();
301
302 local_irq_restore(flags);
303 }
304 @@ -180,6 +181,7 @@ activate_mm(struct mm_struct *prev, struct mm_struct *next)
305
306 local_irq_save(flags);
307
308 + htw_stop();
309 /* Unconditionally get a new ASID. */
310 get_new_mmu_context(next, cpu);
311
312 @@ -189,6 +191,7 @@ activate_mm(struct mm_struct *prev, struct mm_struct *next)
313 /* mark mmu ownership change */
314 cpumask_clear_cpu(cpu, mm_cpumask(prev));
315 cpumask_set_cpu(cpu, mm_cpumask(next));
316 + htw_start();
317
318 local_irq_restore(flags);
319 }
320 @@ -203,6 +206,7 @@ drop_mmu_context(struct mm_struct *mm, unsigned cpu)
321 unsigned long flags;
322
323 local_irq_save(flags);
324 + htw_stop();
325
326 if (cpumask_test_cpu(cpu, mm_cpumask(mm))) {
327 get_new_mmu_context(mm, cpu);
328 @@ -211,6 +215,7 @@ drop_mmu_context(struct mm_struct *mm, unsigned cpu)
329 /* will get a new context next time */
330 cpu_context(cpu, mm) = 0;
331 }
332 + htw_start();
333 local_irq_restore(flags);
334 }
335
336 diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h
337 index d6d1928539b1..bc3fc4fdc9ab 100644
338 --- a/arch/mips/include/asm/pgtable.h
339 +++ b/arch/mips/include/asm/pgtable.h
340 @@ -99,29 +99,35 @@ extern void paging_init(void);
341
342 #define htw_stop() \
343 do { \
344 - if (cpu_has_htw) \
345 - write_c0_pwctl(read_c0_pwctl() & \
346 - ~(1 << MIPS_PWCTL_PWEN_SHIFT)); \
347 + unsigned long flags; \
348 + \
349 + if (cpu_has_htw) { \
350 + local_irq_save(flags); \
351 + if(!raw_current_cpu_data.htw_seq++) { \
352 + write_c0_pwctl(read_c0_pwctl() & \
353 + ~(1 << MIPS_PWCTL_PWEN_SHIFT)); \
354 + back_to_back_c0_hazard(); \
355 + } \
356 + local_irq_restore(flags); \
357 + } \
358 } while(0)
359
360 #define htw_start() \
361 do { \
362 - if (cpu_has_htw) \
363 - write_c0_pwctl(read_c0_pwctl() | \
364 - (1 << MIPS_PWCTL_PWEN_SHIFT)); \
365 -} while(0)
366 -
367 -
368 -#define htw_reset() \
369 -do { \
370 + unsigned long flags; \
371 + \
372 if (cpu_has_htw) { \
373 - htw_stop(); \
374 - back_to_back_c0_hazard(); \
375 - htw_start(); \
376 - back_to_back_c0_hazard(); \
377 + local_irq_save(flags); \
378 + if (!--raw_current_cpu_data.htw_seq) { \
379 + write_c0_pwctl(read_c0_pwctl() | \
380 + (1 << MIPS_PWCTL_PWEN_SHIFT)); \
381 + back_to_back_c0_hazard(); \
382 + } \
383 + local_irq_restore(flags); \
384 } \
385 } while(0)
386
387 +
388 extern void set_pte_at(struct mm_struct *mm, unsigned long addr, pte_t *ptep,
389 pte_t pteval);
390
391 @@ -153,12 +159,13 @@ static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *pt
392 {
393 pte_t null = __pte(0);
394
395 + htw_stop();
396 /* Preserve global status for the pair */
397 if (ptep_buddy(ptep)->pte_low & _PAGE_GLOBAL)
398 null.pte_low = null.pte_high = _PAGE_GLOBAL;
399
400 set_pte_at(mm, addr, ptep, null);
401 - htw_reset();
402 + htw_start();
403 }
404 #else
405
406 @@ -188,6 +195,7 @@ static inline void set_pte(pte_t *ptep, pte_t pteval)
407
408 static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
409 {
410 + htw_stop();
411 #if !defined(CONFIG_CPU_R3000) && !defined(CONFIG_CPU_TX39XX)
412 /* Preserve global status for the pair */
413 if (pte_val(*ptep_buddy(ptep)) & _PAGE_GLOBAL)
414 @@ -195,7 +203,7 @@ static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *pt
415 else
416 #endif
417 set_pte_at(mm, addr, ptep, __pte(0));
418 - htw_reset();
419 + htw_start();
420 }
421 #endif
422
423 diff --git a/arch/mips/kernel/cps-vec.S b/arch/mips/kernel/cps-vec.S
424 index 0384b05ab5a0..55b759a0019e 100644
425 --- a/arch/mips/kernel/cps-vec.S
426 +++ b/arch/mips/kernel/cps-vec.S
427 @@ -99,11 +99,11 @@ not_nmi:
428 xori t2, t1, 0x7
429 beqz t2, 1f
430 li t3, 32
431 - addi t1, t1, 1
432 + addiu t1, t1, 1
433 sllv t1, t3, t1
434 1: /* At this point t1 == I-cache sets per way */
435 _EXT t2, v0, MIPS_CONF1_IA_SHF, MIPS_CONF1_IA_SZ
436 - addi t2, t2, 1
437 + addiu t2, t2, 1
438 mul t1, t1, t0
439 mul t1, t1, t2
440
441 @@ -126,11 +126,11 @@ icache_done:
442 xori t2, t1, 0x7
443 beqz t2, 1f
444 li t3, 32
445 - addi t1, t1, 1
446 + addiu t1, t1, 1
447 sllv t1, t3, t1
448 1: /* At this point t1 == D-cache sets per way */
449 _EXT t2, v0, MIPS_CONF1_DA_SHF, MIPS_CONF1_DA_SZ
450 - addi t2, t2, 1
451 + addiu t2, t2, 1
452 mul t1, t1, t0
453 mul t1, t1, t2
454
455 @@ -250,7 +250,7 @@ LEAF(mips_cps_core_init)
456 mfc0 t0, CP0_MVPCONF0
457 srl t0, t0, MVPCONF0_PVPE_SHIFT
458 andi t0, t0, (MVPCONF0_PVPE >> MVPCONF0_PVPE_SHIFT)
459 - addi t7, t0, 1
460 + addiu t7, t0, 1
461
462 /* If there's only 1, we're done */
463 beqz t0, 2f
464 @@ -280,7 +280,7 @@ LEAF(mips_cps_core_init)
465 mttc0 t0, CP0_TCHALT
466
467 /* Next VPE */
468 - addi t5, t5, 1
469 + addiu t5, t5, 1
470 slt t0, t5, t7
471 bnez t0, 1b
472 nop
473 @@ -317,7 +317,7 @@ LEAF(mips_cps_boot_vpes)
474 mfc0 t1, CP0_MVPCONF0
475 srl t1, t1, MVPCONF0_PVPE_SHIFT
476 andi t1, t1, MVPCONF0_PVPE >> MVPCONF0_PVPE_SHIFT
477 - addi t1, t1, 1
478 + addiu t1, t1, 1
479
480 /* Calculate a mask for the VPE ID from EBase.CPUNum */
481 clz t1, t1
482 @@ -424,7 +424,7 @@ LEAF(mips_cps_boot_vpes)
483
484 /* Next VPE */
485 2: srl t6, t6, 1
486 - addi t5, t5, 1
487 + addiu t5, t5, 1
488 bnez t6, 1b
489 nop
490
491 diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c
492 index dc49cf30c2db..5d6e59f20750 100644
493 --- a/arch/mips/kernel/cpu-probe.c
494 +++ b/arch/mips/kernel/cpu-probe.c
495 @@ -367,8 +367,10 @@ static inline unsigned int decode_config3(struct cpuinfo_mips *c)
496 if (config3 & MIPS_CONF3_MSA)
497 c->ases |= MIPS_ASE_MSA;
498 /* Only tested on 32-bit cores */
499 - if ((config3 & MIPS_CONF3_PW) && config_enabled(CONFIG_32BIT))
500 + if ((config3 & MIPS_CONF3_PW) && config_enabled(CONFIG_32BIT)) {
501 + c->htw_seq = 0;
502 c->options |= MIPS_CPU_HTW;
503 + }
504
505 return config3 & MIPS_CONF_M;
506 }
507 diff --git a/arch/mips/kernel/mips_ksyms.c b/arch/mips/kernel/mips_ksyms.c
508 index 2607c3a4ff7e..1b2452e2be67 100644
509 --- a/arch/mips/kernel/mips_ksyms.c
510 +++ b/arch/mips/kernel/mips_ksyms.c
511 @@ -14,6 +14,8 @@
512 #include <linux/mm.h>
513 #include <asm/uaccess.h>
514 #include <asm/ftrace.h>
515 +#include <asm/fpu.h>
516 +#include <asm/msa.h>
517
518 extern void *__bzero(void *__s, size_t __count);
519 extern long __strncpy_from_kernel_nocheck_asm(char *__to,
520 @@ -34,6 +36,14 @@ extern long __strnlen_user_nocheck_asm(const char *s);
521 extern long __strnlen_user_asm(const char *s);
522
523 /*
524 + * Core architecture code
525 + */
526 +EXPORT_SYMBOL_GPL(_save_fp);
527 +#ifdef CONFIG_CPU_HAS_MSA
528 +EXPORT_SYMBOL_GPL(_save_msa);
529 +#endif
530 +
531 +/*
532 * String functions
533 */
534 EXPORT_SYMBOL(memset);
535 diff --git a/arch/mips/kvm/locore.S b/arch/mips/kvm/locore.S
536 index d7279c03c517..4a68b176d6e4 100644
537 --- a/arch/mips/kvm/locore.S
538 +++ b/arch/mips/kvm/locore.S
539 @@ -434,7 +434,7 @@ __kvm_mips_return_to_guest:
540 /* Setup status register for running guest in UM */
541 .set at
542 or v1, v1, (ST0_EXL | KSU_USER | ST0_IE)
543 - and v1, v1, ~ST0_CU0
544 + and v1, v1, ~(ST0_CU0 | ST0_MX)
545 .set noat
546 mtc0 v1, CP0_STATUS
547 ehb
548 diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c
549 index e3b21e51ff7e..270bbd41769e 100644
550 --- a/arch/mips/kvm/mips.c
551 +++ b/arch/mips/kvm/mips.c
552 @@ -15,9 +15,11 @@
553 #include <linux/vmalloc.h>
554 #include <linux/fs.h>
555 #include <linux/bootmem.h>
556 +#include <asm/fpu.h>
557 #include <asm/page.h>
558 #include <asm/cacheflush.h>
559 #include <asm/mmu_context.h>
560 +#include <asm/pgtable.h>
561
562 #include <linux/kvm_host.h>
563
564 @@ -378,6 +380,8 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
565 vcpu->mmio_needed = 0;
566 }
567
568 + lose_fpu(1);
569 +
570 local_irq_disable();
571 /* Check if we have any exceptions/interrupts pending */
572 kvm_mips_deliver_interrupts(vcpu,
573 @@ -385,8 +389,14 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
574
575 kvm_guest_enter();
576
577 + /* Disable hardware page table walking while in guest */
578 + htw_stop();
579 +
580 r = __kvm_mips_vcpu_run(run, vcpu);
581
582 + /* Re-enable HTW before enabling interrupts */
583 + htw_start();
584 +
585 kvm_guest_exit();
586 local_irq_enable();
587
588 @@ -980,9 +990,6 @@ static void kvm_mips_set_c0_status(void)
589 {
590 uint32_t status = read_c0_status();
591
592 - if (cpu_has_fpu)
593 - status |= (ST0_CU1);
594 -
595 if (cpu_has_dsp)
596 status |= (ST0_MX);
597
598 @@ -1002,6 +1009,9 @@ int kvm_mips_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu)
599 enum emulation_result er = EMULATE_DONE;
600 int ret = RESUME_GUEST;
601
602 + /* re-enable HTW before enabling interrupts */
603 + htw_start();
604 +
605 /* Set a default exit reason */
606 run->exit_reason = KVM_EXIT_UNKNOWN;
607 run->ready_for_interrupt_injection = 1;
608 @@ -1136,6 +1146,9 @@ skip_emul:
609 }
610 }
611
612 + /* Disable HTW before returning to guest or host */
613 + htw_stop();
614 +
615 return ret;
616 }
617
618 diff --git a/arch/powerpc/sysdev/axonram.c b/arch/powerpc/sysdev/axonram.c
619 index ad56edc39919..e8bb33b2d3cc 100644
620 --- a/arch/powerpc/sysdev/axonram.c
621 +++ b/arch/powerpc/sysdev/axonram.c
622 @@ -156,7 +156,7 @@ axon_ram_direct_access(struct block_device *device, sector_t sector,
623 }
624
625 *kaddr = (void *)(bank->ph_addr + offset);
626 - *pfn = virt_to_phys(kaddr) >> PAGE_SHIFT;
627 + *pfn = virt_to_phys(*kaddr) >> PAGE_SHIFT;
628
629 return 0;
630 }
631 diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
632 index 4fc3fed636dc..29e2e5aa2111 100644
633 --- a/arch/s390/kvm/interrupt.c
634 +++ b/arch/s390/kvm/interrupt.c
635 @@ -613,7 +613,7 @@ no_timer:
636 __unset_cpu_idle(vcpu);
637 vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
638
639 - hrtimer_try_to_cancel(&vcpu->arch.ckc_timer);
640 + hrtimer_cancel(&vcpu->arch.ckc_timer);
641 return 0;
642 }
643
644 @@ -633,10 +633,20 @@ void kvm_s390_vcpu_wakeup(struct kvm_vcpu *vcpu)
645 enum hrtimer_restart kvm_s390_idle_wakeup(struct hrtimer *timer)
646 {
647 struct kvm_vcpu *vcpu;
648 + u64 now, sltime;
649
650 vcpu = container_of(timer, struct kvm_vcpu, arch.ckc_timer);
651 - kvm_s390_vcpu_wakeup(vcpu);
652 + now = get_tod_clock_fast() + vcpu->arch.sie_block->epoch;
653 + sltime = tod_to_ns(vcpu->arch.sie_block->ckc - now);
654
655 + /*
656 + * If the monotonic clock runs faster than the tod clock we might be
657 + * woken up too early and have to go back to sleep to avoid deadlocks.
658 + */
659 + if (vcpu->arch.sie_block->ckc > now &&
660 + hrtimer_forward_now(timer, ns_to_ktime(sltime)))
661 + return HRTIMER_RESTART;
662 + kvm_s390_vcpu_wakeup(vcpu);
663 return HRTIMER_NORESTART;
664 }
665
666 @@ -840,6 +850,8 @@ static int __inject_vm(struct kvm *kvm, struct kvm_s390_interrupt_info *inti)
667 list_add_tail(&inti->list, &iter->list);
668 }
669 atomic_set(&fi->active, 1);
670 + if (atomic_read(&kvm->online_vcpus) == 0)
671 + goto unlock_fi;
672 sigcpu = find_first_bit(fi->idle_mask, KVM_MAX_VCPUS);
673 if (sigcpu == KVM_MAX_VCPUS) {
674 do {
675 @@ -864,6 +876,7 @@ int kvm_s390_inject_vm(struct kvm *kvm,
676 struct kvm_s390_interrupt *s390int)
677 {
678 struct kvm_s390_interrupt_info *inti;
679 + int rc;
680
681 inti = kzalloc(sizeof(*inti), GFP_KERNEL);
682 if (!inti)
683 @@ -911,7 +924,10 @@ int kvm_s390_inject_vm(struct kvm *kvm,
684 trace_kvm_s390_inject_vm(s390int->type, s390int->parm, s390int->parm64,
685 2);
686
687 - return __inject_vm(kvm, inti);
688 + rc = __inject_vm(kvm, inti);
689 + if (rc)
690 + kfree(inti);
691 + return rc;
692 }
693
694 void kvm_s390_reinject_io_int(struct kvm *kvm,
695 diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
696 index 55aade49b6d1..ced09d8738b4 100644
697 --- a/arch/s390/kvm/kvm-s390.c
698 +++ b/arch/s390/kvm/kvm-s390.c
699 @@ -662,7 +662,7 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
700 if (rc)
701 return rc;
702 }
703 - hrtimer_init(&vcpu->arch.ckc_timer, CLOCK_REALTIME, HRTIMER_MODE_ABS);
704 + hrtimer_init(&vcpu->arch.ckc_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
705 vcpu->arch.ckc_timer.function = kvm_s390_idle_wakeup;
706 get_cpu_id(&vcpu->arch.cpu_id);
707 vcpu->arch.cpu_id.version = 0xff;
708 diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
709 index 6a1a8458c042..30c0acf4ea6c 100644
710 --- a/arch/x86/boot/compressed/Makefile
711 +++ b/arch/x86/boot/compressed/Makefile
712 @@ -36,6 +36,7 @@ vmlinux-objs-$(CONFIG_RANDOMIZE_BASE) += $(obj)/aslr.o
713 $(obj)/eboot.o: KBUILD_CFLAGS += -fshort-wchar -mno-red-zone
714
715 vmlinux-objs-$(CONFIG_EFI_STUB) += $(obj)/eboot.o $(obj)/efi_stub_$(BITS).o
716 +vmlinux-objs-$(CONFIG_EFI_MIXED) += $(obj)/efi_thunk_$(BITS).o
717
718 $(obj)/vmlinux: $(vmlinux-objs-y) FORCE
719 $(call if_changed,ld)
720 diff --git a/arch/x86/boot/compressed/efi_stub_64.S b/arch/x86/boot/compressed/efi_stub_64.S
721 index 7ff3632806b1..99494dff2113 100644
722 --- a/arch/x86/boot/compressed/efi_stub_64.S
723 +++ b/arch/x86/boot/compressed/efi_stub_64.S
724 @@ -3,28 +3,3 @@
725 #include <asm/processor-flags.h>
726
727 #include "../../platform/efi/efi_stub_64.S"
728 -
729 -#ifdef CONFIG_EFI_MIXED
730 - .code64
731 - .text
732 -ENTRY(efi64_thunk)
733 - push %rbp
734 - push %rbx
735 -
736 - subq $16, %rsp
737 - leaq efi_exit32(%rip), %rax
738 - movl %eax, 8(%rsp)
739 - leaq efi_gdt64(%rip), %rax
740 - movl %eax, 4(%rsp)
741 - movl %eax, 2(%rax) /* Fixup the gdt base address */
742 - leaq efi32_boot_gdt(%rip), %rax
743 - movl %eax, (%rsp)
744 -
745 - call __efi64_thunk
746 -
747 - addq $16, %rsp
748 - pop %rbx
749 - pop %rbp
750 - ret
751 -ENDPROC(efi64_thunk)
752 -#endif /* CONFIG_EFI_MIXED */
753 diff --git a/arch/x86/boot/compressed/efi_thunk_64.S b/arch/x86/boot/compressed/efi_thunk_64.S
754 new file mode 100644
755 index 000000000000..630384a4c14a
756 --- /dev/null
757 +++ b/arch/x86/boot/compressed/efi_thunk_64.S
758 @@ -0,0 +1,196 @@
759 +/*
760 + * Copyright (C) 2014, 2015 Intel Corporation; author Matt Fleming
761 + *
762 + * Early support for invoking 32-bit EFI services from a 64-bit kernel.
763 + *
764 + * Because this thunking occurs before ExitBootServices() we have to
765 + * restore the firmware's 32-bit GDT before we make EFI serivce calls,
766 + * since the firmware's 32-bit IDT is still currently installed and it
767 + * needs to be able to service interrupts.
768 + *
769 + * On the plus side, we don't have to worry about mangling 64-bit
770 + * addresses into 32-bits because we're executing with an identify
771 + * mapped pagetable and haven't transitioned to 64-bit virtual addresses
772 + * yet.
773 + */
774 +
775 +#include <linux/linkage.h>
776 +#include <asm/msr.h>
777 +#include <asm/page_types.h>
778 +#include <asm/processor-flags.h>
779 +#include <asm/segment.h>
780 +
781 + .code64
782 + .text
783 +ENTRY(efi64_thunk)
784 + push %rbp
785 + push %rbx
786 +
787 + subq $8, %rsp
788 + leaq efi_exit32(%rip), %rax
789 + movl %eax, 4(%rsp)
790 + leaq efi_gdt64(%rip), %rax
791 + movl %eax, (%rsp)
792 + movl %eax, 2(%rax) /* Fixup the gdt base address */
793 +
794 + movl %ds, %eax
795 + push %rax
796 + movl %es, %eax
797 + push %rax
798 + movl %ss, %eax
799 + push %rax
800 +
801 + /*
802 + * Convert x86-64 ABI params to i386 ABI
803 + */
804 + subq $32, %rsp
805 + movl %esi, 0x0(%rsp)
806 + movl %edx, 0x4(%rsp)
807 + movl %ecx, 0x8(%rsp)
808 + movq %r8, %rsi
809 + movl %esi, 0xc(%rsp)
810 + movq %r9, %rsi
811 + movl %esi, 0x10(%rsp)
812 +
813 + sgdt save_gdt(%rip)
814 +
815 + leaq 1f(%rip), %rbx
816 + movq %rbx, func_rt_ptr(%rip)
817 +
818 + /*
819 + * Switch to gdt with 32-bit segments. This is the firmware GDT
820 + * that was installed when the kernel started executing. This
821 + * pointer was saved at the EFI stub entry point in head_64.S.
822 + */
823 + leaq efi32_boot_gdt(%rip), %rax
824 + lgdt (%rax)
825 +
826 + pushq $__KERNEL_CS
827 + leaq efi_enter32(%rip), %rax
828 + pushq %rax
829 + lretq
830 +
831 +1: addq $32, %rsp
832 +
833 + lgdt save_gdt(%rip)
834 +
835 + pop %rbx
836 + movl %ebx, %ss
837 + pop %rbx
838 + movl %ebx, %es
839 + pop %rbx
840 + movl %ebx, %ds
841 +
842 + /*
843 + * Convert 32-bit status code into 64-bit.
844 + */
845 + test %rax, %rax
846 + jz 1f
847 + movl %eax, %ecx
848 + andl $0x0fffffff, %ecx
849 + andl $0xf0000000, %eax
850 + shl $32, %rax
851 + or %rcx, %rax
852 +1:
853 + addq $8, %rsp
854 + pop %rbx
855 + pop %rbp
856 + ret
857 +ENDPROC(efi64_thunk)
858 +
859 +ENTRY(efi_exit32)
860 + movq func_rt_ptr(%rip), %rax
861 + push %rax
862 + mov %rdi, %rax
863 + ret
864 +ENDPROC(efi_exit32)
865 +
866 + .code32
867 +/*
868 + * EFI service pointer must be in %edi.
869 + *
870 + * The stack should represent the 32-bit calling convention.
871 + */
872 +ENTRY(efi_enter32)
873 + movl $__KERNEL_DS, %eax
874 + movl %eax, %ds
875 + movl %eax, %es
876 + movl %eax, %ss
877 +
878 + /* Reload pgtables */
879 + movl %cr3, %eax
880 + movl %eax, %cr3
881 +
882 + /* Disable paging */
883 + movl %cr0, %eax
884 + btrl $X86_CR0_PG_BIT, %eax
885 + movl %eax, %cr0
886 +
887 + /* Disable long mode via EFER */
888 + movl $MSR_EFER, %ecx
889 + rdmsr
890 + btrl $_EFER_LME, %eax
891 + wrmsr
892 +
893 + call *%edi
894 +
895 + /* We must preserve return value */
896 + movl %eax, %edi
897 +
898 + /*
899 + * Some firmware will return with interrupts enabled. Be sure to
900 + * disable them before we switch GDTs.
901 + */
902 + cli
903 +
904 + movl 56(%esp), %eax
905 + movl %eax, 2(%eax)
906 + lgdtl (%eax)
907 +
908 + movl %cr4, %eax
909 + btsl $(X86_CR4_PAE_BIT), %eax
910 + movl %eax, %cr4
911 +
912 + movl %cr3, %eax
913 + movl %eax, %cr3
914 +
915 + movl $MSR_EFER, %ecx
916 + rdmsr
917 + btsl $_EFER_LME, %eax
918 + wrmsr
919 +
920 + xorl %eax, %eax
921 + lldt %ax
922 +
923 + movl 60(%esp), %eax
924 + pushl $__KERNEL_CS
925 + pushl %eax
926 +
927 + /* Enable paging */
928 + movl %cr0, %eax
929 + btsl $X86_CR0_PG_BIT, %eax
930 + movl %eax, %cr0
931 + lret
932 +ENDPROC(efi_enter32)
933 +
934 + .data
935 + .balign 8
936 + .global efi32_boot_gdt
937 +efi32_boot_gdt: .word 0
938 + .quad 0
939 +
940 +save_gdt: .word 0
941 + .quad 0
942 +func_rt_ptr: .quad 0
943 +
944 + .global efi_gdt64
945 +efi_gdt64:
946 + .word efi_gdt64_end - efi_gdt64
947 + .long 0 /* Filled out by user */
948 + .word 0
949 + .quad 0x0000000000000000 /* NULL descriptor */
950 + .quad 0x00af9a000000ffff /* __KERNEL_CS */
951 + .quad 0x00cf92000000ffff /* __KERNEL_DS */
952 + .quad 0x0080890000000000 /* TS descriptor */
953 + .quad 0x0000000000000000 /* TS continued */
954 +efi_gdt64_end:
955 diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
956 index a142e77693e1..a3eadfdc3e04 100644
957 --- a/arch/x86/kernel/acpi/boot.c
958 +++ b/arch/x86/kernel/acpi/boot.c
959 @@ -604,18 +604,24 @@ void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)
960
961 int acpi_gsi_to_irq(u32 gsi, unsigned int *irqp)
962 {
963 - int irq;
964 + int rc, irq, trigger, polarity;
965
966 if (acpi_irq_model == ACPI_IRQ_MODEL_PIC) {
967 *irqp = gsi;
968 - } else {
969 - irq = mp_map_gsi_to_irq(gsi,
970 - IOAPIC_MAP_ALLOC | IOAPIC_MAP_CHECK);
971 - if (irq < 0)
972 - return -1;
973 - *irqp = irq;
974 + return 0;
975 }
976 - return 0;
977 +
978 + rc = acpi_get_override_irq(gsi, &trigger, &polarity);
979 + if (rc == 0) {
980 + trigger = trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE;
981 + polarity = polarity ? ACPI_ACTIVE_LOW : ACPI_ACTIVE_HIGH;
982 + irq = acpi_register_gsi(NULL, gsi, trigger, polarity);
983 + if (irq >= 0) {
984 + *irqp = irq;
985 + return 0;
986 + }
987 + }
988 + return -1;
989 }
990 EXPORT_SYMBOL_GPL(acpi_gsi_to_irq);
991
992 diff --git a/arch/x86/kernel/pmc_atom.c b/arch/x86/kernel/pmc_atom.c
993 index 0ee5025e0fa4..8bb9a611ca23 100644
994 --- a/arch/x86/kernel/pmc_atom.c
995 +++ b/arch/x86/kernel/pmc_atom.c
996 @@ -217,6 +217,8 @@ static int pmc_dbgfs_register(struct pmc_dev *pmc, struct pci_dev *pdev)
997 if (!dir)
998 return -ENOMEM;
999
1000 + pmc->dbgfs_dir = dir;
1001 +
1002 f = debugfs_create_file("dev_state", S_IFREG | S_IRUGO,
1003 dir, pmc, &pmc_dev_state_ops);
1004 if (!f) {
1005 @@ -229,7 +231,7 @@ static int pmc_dbgfs_register(struct pmc_dev *pmc, struct pci_dev *pdev)
1006 dev_err(&pdev->dev, "sleep_state register failed\n");
1007 goto err;
1008 }
1009 - pmc->dbgfs_dir = dir;
1010 +
1011 return 0;
1012 err:
1013 pmc_dbgfs_unregister(pmc);
1014 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
1015 index 506488cfa385..8b92cf4b165a 100644
1016 --- a/arch/x86/kvm/x86.c
1017 +++ b/arch/x86/kvm/x86.c
1018 @@ -1237,21 +1237,22 @@ void kvm_track_tsc_matching(struct kvm_vcpu *vcpu)
1019 {
1020 #ifdef CONFIG_X86_64
1021 bool vcpus_matched;
1022 - bool do_request = false;
1023 struct kvm_arch *ka = &vcpu->kvm->arch;
1024 struct pvclock_gtod_data *gtod = &pvclock_gtod_data;
1025
1026 vcpus_matched = (ka->nr_vcpus_matched_tsc + 1 ==
1027 atomic_read(&vcpu->kvm->online_vcpus));
1028
1029 - if (vcpus_matched && gtod->clock.vclock_mode == VCLOCK_TSC)
1030 - if (!ka->use_master_clock)
1031 - do_request = 1;
1032 -
1033 - if (!vcpus_matched && ka->use_master_clock)
1034 - do_request = 1;
1035 -
1036 - if (do_request)
1037 + /*
1038 + * Once the masterclock is enabled, always perform request in
1039 + * order to update it.
1040 + *
1041 + * In order to enable masterclock, the host clocksource must be TSC
1042 + * and the vcpus need to have matched TSCs. When that happens,
1043 + * perform request to enable masterclock.
1044 + */
1045 + if (ka->use_master_clock ||
1046 + (gtod->clock.vclock_mode == VCLOCK_TSC && vcpus_matched))
1047 kvm_make_request(KVM_REQ_MASTERCLOCK_UPDATE, vcpu);
1048
1049 trace_kvm_track_tsc(vcpu->vcpu_id, ka->nr_vcpus_matched_tsc,
1050 diff --git a/arch/x86/mm/gup.c b/arch/x86/mm/gup.c
1051 index 207d9aef662d..448ee8912d9b 100644
1052 --- a/arch/x86/mm/gup.c
1053 +++ b/arch/x86/mm/gup.c
1054 @@ -172,7 +172,7 @@ static int gup_pmd_range(pud_t pud, unsigned long addr, unsigned long end,
1055 */
1056 if (pmd_none(pmd) || pmd_trans_splitting(pmd))
1057 return 0;
1058 - if (unlikely(pmd_large(pmd))) {
1059 + if (unlikely(pmd_large(pmd) || !pmd_present(pmd))) {
1060 /*
1061 * NUMA hinting faults need to be handled in the GUP
1062 * slowpath for accounting purposes and so that they
1063 diff --git a/arch/x86/mm/hugetlbpage.c b/arch/x86/mm/hugetlbpage.c
1064 index 8b977ebf9388..006cc914994b 100644
1065 --- a/arch/x86/mm/hugetlbpage.c
1066 +++ b/arch/x86/mm/hugetlbpage.c
1067 @@ -66,9 +66,15 @@ follow_huge_addr(struct mm_struct *mm, unsigned long address, int write)
1068 return ERR_PTR(-EINVAL);
1069 }
1070
1071 +/*
1072 + * pmd_huge() returns 1 if @pmd is hugetlb related entry, that is normal
1073 + * hugetlb entry or non-present (migration or hwpoisoned) hugetlb entry.
1074 + * Otherwise, returns 0.
1075 + */
1076 int pmd_huge(pmd_t pmd)
1077 {
1078 - return !!(pmd_val(pmd) & _PAGE_PSE);
1079 + return !pmd_none(pmd) &&
1080 + (pmd_val(pmd) & (_PAGE_PRESENT|_PAGE_PSE)) != _PAGE_PRESENT;
1081 }
1082
1083 int pud_huge(pud_t pud)
1084 diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c
1085 index 919b91205cd4..df4552bd239e 100644
1086 --- a/arch/x86/mm/mmap.c
1087 +++ b/arch/x86/mm/mmap.c
1088 @@ -35,12 +35,12 @@ struct va_alignment __read_mostly va_align = {
1089 .flags = -1,
1090 };
1091
1092 -static unsigned int stack_maxrandom_size(void)
1093 +static unsigned long stack_maxrandom_size(void)
1094 {
1095 - unsigned int max = 0;
1096 + unsigned long max = 0;
1097 if ((current->flags & PF_RANDOMIZE) &&
1098 !(current->personality & ADDR_NO_RANDOMIZE)) {
1099 - max = ((-1U) & STACK_RND_MASK) << PAGE_SHIFT;
1100 + max = ((-1UL) & STACK_RND_MASK) << PAGE_SHIFT;
1101 }
1102
1103 return max;
1104 diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c
1105 index 093f5f4272d3..6b3cf7c4e5c2 100644
1106 --- a/arch/x86/pci/xen.c
1107 +++ b/arch/x86/pci/xen.c
1108 @@ -452,52 +452,6 @@ int __init pci_xen_hvm_init(void)
1109 }
1110
1111 #ifdef CONFIG_XEN_DOM0
1112 -static __init void xen_setup_acpi_sci(void)
1113 -{
1114 - int rc;
1115 - int trigger, polarity;
1116 - int gsi = acpi_sci_override_gsi;
1117 - int irq = -1;
1118 - int gsi_override = -1;
1119 -
1120 - if (!gsi)
1121 - return;
1122 -
1123 - rc = acpi_get_override_irq(gsi, &trigger, &polarity);
1124 - if (rc) {
1125 - printk(KERN_WARNING "xen: acpi_get_override_irq failed for acpi"
1126 - " sci, rc=%d\n", rc);
1127 - return;
1128 - }
1129 - trigger = trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE;
1130 - polarity = polarity ? ACPI_ACTIVE_LOW : ACPI_ACTIVE_HIGH;
1131 -
1132 - printk(KERN_INFO "xen: sci override: global_irq=%d trigger=%d "
1133 - "polarity=%d\n", gsi, trigger, polarity);
1134 -
1135 - /* Before we bind the GSI to a Linux IRQ, check whether
1136 - * we need to override it with bus_irq (IRQ) value. Usually for
1137 - * IRQs below IRQ_LEGACY_IRQ this holds IRQ == GSI, as so:
1138 - * ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 low level)
1139 - * but there are oddballs where the IRQ != GSI:
1140 - * ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 20 low level)
1141 - * which ends up being: gsi_to_irq[9] == 20
1142 - * (which is what acpi_gsi_to_irq ends up calling when starting the
1143 - * the ACPI interpreter and keels over since IRQ 9 has not been
1144 - * setup as we had setup IRQ 20 for it).
1145 - */
1146 - if (acpi_gsi_to_irq(gsi, &irq) == 0) {
1147 - /* Use the provided value if it's valid. */
1148 - if (irq >= 0)
1149 - gsi_override = irq;
1150 - }
1151 -
1152 - gsi = xen_register_gsi(gsi, gsi_override, trigger, polarity);
1153 - printk(KERN_INFO "xen: acpi sci %d\n", gsi);
1154 -
1155 - return;
1156 -}
1157 -
1158 int __init pci_xen_initial_domain(void)
1159 {
1160 int irq;
1161 @@ -509,7 +463,6 @@ int __init pci_xen_initial_domain(void)
1162 x86_msi.msi_mask_irq = xen_nop_msi_mask_irq;
1163 x86_msi.msix_mask_irq = xen_nop_msix_mask_irq;
1164 #endif
1165 - xen_setup_acpi_sci();
1166 __acpi_register_gsi = acpi_register_gsi_xen;
1167 /* Pre-allocate legacy irqs */
1168 for (irq = 0; irq < nr_legacy_irqs(); irq++) {
1169 diff --git a/arch/x86/platform/efi/efi_stub_64.S b/arch/x86/platform/efi/efi_stub_64.S
1170 index 5fcda7272550..86d0f9e08dd9 100644
1171 --- a/arch/x86/platform/efi/efi_stub_64.S
1172 +++ b/arch/x86/platform/efi/efi_stub_64.S
1173 @@ -91,167 +91,6 @@ ENTRY(efi_call)
1174 ret
1175 ENDPROC(efi_call)
1176
1177 -#ifdef CONFIG_EFI_MIXED
1178 -
1179 -/*
1180 - * We run this function from the 1:1 mapping.
1181 - *
1182 - * This function must be invoked with a 1:1 mapped stack.
1183 - */
1184 -ENTRY(__efi64_thunk)
1185 - movl %ds, %eax
1186 - push %rax
1187 - movl %es, %eax
1188 - push %rax
1189 - movl %ss, %eax
1190 - push %rax
1191 -
1192 - subq $32, %rsp
1193 - movl %esi, 0x0(%rsp)
1194 - movl %edx, 0x4(%rsp)
1195 - movl %ecx, 0x8(%rsp)
1196 - movq %r8, %rsi
1197 - movl %esi, 0xc(%rsp)
1198 - movq %r9, %rsi
1199 - movl %esi, 0x10(%rsp)
1200 -
1201 - sgdt save_gdt(%rip)
1202 -
1203 - leaq 1f(%rip), %rbx
1204 - movq %rbx, func_rt_ptr(%rip)
1205 -
1206 - /* Switch to gdt with 32-bit segments */
1207 - movl 64(%rsp), %eax
1208 - lgdt (%rax)
1209 -
1210 - leaq efi_enter32(%rip), %rax
1211 - pushq $__KERNEL_CS
1212 - pushq %rax
1213 - lretq
1214 -
1215 -1: addq $32, %rsp
1216 -
1217 - lgdt save_gdt(%rip)
1218 -
1219 - pop %rbx
1220 - movl %ebx, %ss
1221 - pop %rbx
1222 - movl %ebx, %es
1223 - pop %rbx
1224 - movl %ebx, %ds
1225 -
1226 - /*
1227 - * Convert 32-bit status code into 64-bit.
1228 - */
1229 - test %rax, %rax
1230 - jz 1f
1231 - movl %eax, %ecx
1232 - andl $0x0fffffff, %ecx
1233 - andl $0xf0000000, %eax
1234 - shl $32, %rax
1235 - or %rcx, %rax
1236 -1:
1237 - ret
1238 -ENDPROC(__efi64_thunk)
1239 -
1240 -ENTRY(efi_exit32)
1241 - movq func_rt_ptr(%rip), %rax
1242 - push %rax
1243 - mov %rdi, %rax
1244 - ret
1245 -ENDPROC(efi_exit32)
1246 -
1247 - .code32
1248 -/*
1249 - * EFI service pointer must be in %edi.
1250 - *
1251 - * The stack should represent the 32-bit calling convention.
1252 - */
1253 -ENTRY(efi_enter32)
1254 - movl $__KERNEL_DS, %eax
1255 - movl %eax, %ds
1256 - movl %eax, %es
1257 - movl %eax, %ss
1258 -
1259 - /* Reload pgtables */
1260 - movl %cr3, %eax
1261 - movl %eax, %cr3
1262 -
1263 - /* Disable paging */
1264 - movl %cr0, %eax
1265 - btrl $X86_CR0_PG_BIT, %eax
1266 - movl %eax, %cr0
1267 -
1268 - /* Disable long mode via EFER */
1269 - movl $MSR_EFER, %ecx
1270 - rdmsr
1271 - btrl $_EFER_LME, %eax
1272 - wrmsr
1273 -
1274 - call *%edi
1275 -
1276 - /* We must preserve return value */
1277 - movl %eax, %edi
1278 -
1279 - /*
1280 - * Some firmware will return with interrupts enabled. Be sure to
1281 - * disable them before we switch GDTs.
1282 - */
1283 - cli
1284 -
1285 - movl 68(%esp), %eax
1286 - movl %eax, 2(%eax)
1287 - lgdtl (%eax)
1288 -
1289 - movl %cr4, %eax
1290 - btsl $(X86_CR4_PAE_BIT), %eax
1291 - movl %eax, %cr4
1292 -
1293 - movl %cr3, %eax
1294 - movl %eax, %cr3
1295 -
1296 - movl $MSR_EFER, %ecx
1297 - rdmsr
1298 - btsl $_EFER_LME, %eax
1299 - wrmsr
1300 -
1301 - xorl %eax, %eax
1302 - lldt %ax
1303 -
1304 - movl 72(%esp), %eax
1305 - pushl $__KERNEL_CS
1306 - pushl %eax
1307 -
1308 - /* Enable paging */
1309 - movl %cr0, %eax
1310 - btsl $X86_CR0_PG_BIT, %eax
1311 - movl %eax, %cr0
1312 - lret
1313 -ENDPROC(efi_enter32)
1314 -
1315 - .data
1316 - .balign 8
1317 - .global efi32_boot_gdt
1318 -efi32_boot_gdt: .word 0
1319 - .quad 0
1320 -
1321 -save_gdt: .word 0
1322 - .quad 0
1323 -func_rt_ptr: .quad 0
1324 -
1325 - .global efi_gdt64
1326 -efi_gdt64:
1327 - .word efi_gdt64_end - efi_gdt64
1328 - .long 0 /* Filled out by user */
1329 - .word 0
1330 - .quad 0x0000000000000000 /* NULL descriptor */
1331 - .quad 0x00af9a000000ffff /* __KERNEL_CS */
1332 - .quad 0x00cf92000000ffff /* __KERNEL_DS */
1333 - .quad 0x0080890000000000 /* TS descriptor */
1334 - .quad 0x0000000000000000 /* TS continued */
1335 -efi_gdt64_end:
1336 -#endif /* CONFIG_EFI_MIXED */
1337 -
1338 .data
1339 ENTRY(efi_scratch)
1340 .fill 3,8,0
1341 diff --git a/arch/x86/platform/efi/efi_thunk_64.S b/arch/x86/platform/efi/efi_thunk_64.S
1342 index 8806fa73e6e6..ff85d28c50f2 100644
1343 --- a/arch/x86/platform/efi/efi_thunk_64.S
1344 +++ b/arch/x86/platform/efi/efi_thunk_64.S
1345 @@ -1,9 +1,26 @@
1346 /*
1347 * Copyright (C) 2014 Intel Corporation; author Matt Fleming
1348 + *
1349 + * Support for invoking 32-bit EFI runtime services from a 64-bit
1350 + * kernel.
1351 + *
1352 + * The below thunking functions are only used after ExitBootServices()
1353 + * has been called. This simplifies things considerably as compared with
1354 + * the early EFI thunking because we can leave all the kernel state
1355 + * intact (GDT, IDT, etc) and simply invoke the the 32-bit EFI runtime
1356 + * services from __KERNEL32_CS. This means we can continue to service
1357 + * interrupts across an EFI mixed mode call.
1358 + *
1359 + * We do however, need to handle the fact that we're running in a full
1360 + * 64-bit virtual address space. Things like the stack and instruction
1361 + * addresses need to be accessible by the 32-bit firmware, so we rely on
1362 + * using the identity mappings in the EFI page table to access the stack
1363 + * and kernel text (see efi_setup_page_tables()).
1364 */
1365
1366 #include <linux/linkage.h>
1367 #include <asm/page_types.h>
1368 +#include <asm/segment.h>
1369
1370 .text
1371 .code64
1372 @@ -33,14 +50,6 @@ ENTRY(efi64_thunk)
1373 leaq efi_exit32(%rip), %rbx
1374 subq %rax, %rbx
1375 movl %ebx, 8(%rsp)
1376 - leaq efi_gdt64(%rip), %rbx
1377 - subq %rax, %rbx
1378 - movl %ebx, 2(%ebx)
1379 - movl %ebx, 4(%rsp)
1380 - leaq efi_gdt32(%rip), %rbx
1381 - subq %rax, %rbx
1382 - movl %ebx, 2(%ebx)
1383 - movl %ebx, (%rsp)
1384
1385 leaq __efi64_thunk(%rip), %rbx
1386 subq %rax, %rbx
1387 @@ -52,14 +61,92 @@ ENTRY(efi64_thunk)
1388 retq
1389 ENDPROC(efi64_thunk)
1390
1391 - .data
1392 -efi_gdt32:
1393 - .word efi_gdt32_end - efi_gdt32
1394 - .long 0 /* Filled out above */
1395 - .word 0
1396 - .quad 0x0000000000000000 /* NULL descriptor */
1397 - .quad 0x00cf9a000000ffff /* __KERNEL_CS */
1398 - .quad 0x00cf93000000ffff /* __KERNEL_DS */
1399 -efi_gdt32_end:
1400 +/*
1401 + * We run this function from the 1:1 mapping.
1402 + *
1403 + * This function must be invoked with a 1:1 mapped stack.
1404 + */
1405 +ENTRY(__efi64_thunk)
1406 + movl %ds, %eax
1407 + push %rax
1408 + movl %es, %eax
1409 + push %rax
1410 + movl %ss, %eax
1411 + push %rax
1412 +
1413 + subq $32, %rsp
1414 + movl %esi, 0x0(%rsp)
1415 + movl %edx, 0x4(%rsp)
1416 + movl %ecx, 0x8(%rsp)
1417 + movq %r8, %rsi
1418 + movl %esi, 0xc(%rsp)
1419 + movq %r9, %rsi
1420 + movl %esi, 0x10(%rsp)
1421 +
1422 + leaq 1f(%rip), %rbx
1423 + movq %rbx, func_rt_ptr(%rip)
1424 +
1425 + /* Switch to 32-bit descriptor */
1426 + pushq $__KERNEL32_CS
1427 + leaq efi_enter32(%rip), %rax
1428 + pushq %rax
1429 + lretq
1430 +
1431 +1: addq $32, %rsp
1432 +
1433 + pop %rbx
1434 + movl %ebx, %ss
1435 + pop %rbx
1436 + movl %ebx, %es
1437 + pop %rbx
1438 + movl %ebx, %ds
1439
1440 + /*
1441 + * Convert 32-bit status code into 64-bit.
1442 + */
1443 + test %rax, %rax
1444 + jz 1f
1445 + movl %eax, %ecx
1446 + andl $0x0fffffff, %ecx
1447 + andl $0xf0000000, %eax
1448 + shl $32, %rax
1449 + or %rcx, %rax
1450 +1:
1451 + ret
1452 +ENDPROC(__efi64_thunk)
1453 +
1454 +ENTRY(efi_exit32)
1455 + movq func_rt_ptr(%rip), %rax
1456 + push %rax
1457 + mov %rdi, %rax
1458 + ret
1459 +ENDPROC(efi_exit32)
1460 +
1461 + .code32
1462 +/*
1463 + * EFI service pointer must be in %edi.
1464 + *
1465 + * The stack should represent the 32-bit calling convention.
1466 + */
1467 +ENTRY(efi_enter32)
1468 + movl $__KERNEL_DS, %eax
1469 + movl %eax, %ds
1470 + movl %eax, %es
1471 + movl %eax, %ss
1472 +
1473 + call *%edi
1474 +
1475 + /* We must preserve return value */
1476 + movl %eax, %edi
1477 +
1478 + movl 72(%esp), %eax
1479 + pushl $__KERNEL_CS
1480 + pushl %eax
1481 +
1482 + lret
1483 +ENDPROC(efi_enter32)
1484 +
1485 + .data
1486 + .balign 8
1487 +func_rt_ptr: .quad 0
1488 efi_saved_sp: .quad 0
1489 diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c
1490 index ff18dab6b585..702ae29b8d90 100644
1491 --- a/block/blk-mq-tag.c
1492 +++ b/block/blk-mq-tag.c
1493 @@ -500,6 +500,7 @@ static int bt_alloc(struct blk_mq_bitmap_tags *bt, unsigned int depth,
1494 bt->bs = kzalloc(BT_WAIT_QUEUES * sizeof(*bt->bs), GFP_KERNEL);
1495 if (!bt->bs) {
1496 kfree(bt->map);
1497 + bt->map = NULL;
1498 return -ENOMEM;
1499 }
1500
1501 diff --git a/block/blk-throttle.c b/block/blk-throttle.c
1502 index 9273d0969ebd..5b9c6d5c3636 100644
1503 --- a/block/blk-throttle.c
1504 +++ b/block/blk-throttle.c
1505 @@ -1292,6 +1292,9 @@ static u64 tg_prfill_cpu_rwstat(struct seq_file *sf,
1506 struct blkg_rwstat rwstat = { }, tmp;
1507 int i, cpu;
1508
1509 + if (tg->stats_cpu == NULL)
1510 + return 0;
1511 +
1512 for_each_possible_cpu(cpu) {
1513 struct tg_stats_cpu *sc = per_cpu_ptr(tg->stats_cpu, cpu);
1514
1515 diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
1516 index 6f2751d305de..5da8e6e9ab4b 100644
1517 --- a/block/cfq-iosched.c
1518 +++ b/block/cfq-iosched.c
1519 @@ -3590,6 +3590,11 @@ retry:
1520
1521 blkcg = bio_blkcg(bio);
1522 cfqg = cfq_lookup_create_cfqg(cfqd, blkcg);
1523 + if (!cfqg) {
1524 + cfqq = &cfqd->oom_cfqq;
1525 + goto out;
1526 + }
1527 +
1528 cfqq = cic_to_cfqq(cic, is_sync);
1529
1530 /*
1531 @@ -3626,7 +3631,7 @@ retry:
1532 } else
1533 cfqq = &cfqd->oom_cfqq;
1534 }
1535 -
1536 +out:
1537 if (new_cfqq)
1538 kmem_cache_free(cfq_pool, new_cfqq);
1539
1540 @@ -3656,12 +3661,17 @@ static struct cfq_queue *
1541 cfq_get_queue(struct cfq_data *cfqd, bool is_sync, struct cfq_io_cq *cic,
1542 struct bio *bio, gfp_t gfp_mask)
1543 {
1544 - const int ioprio_class = IOPRIO_PRIO_CLASS(cic->ioprio);
1545 - const int ioprio = IOPRIO_PRIO_DATA(cic->ioprio);
1546 + int ioprio_class = IOPRIO_PRIO_CLASS(cic->ioprio);
1547 + int ioprio = IOPRIO_PRIO_DATA(cic->ioprio);
1548 struct cfq_queue **async_cfqq = NULL;
1549 struct cfq_queue *cfqq = NULL;
1550
1551 if (!is_sync) {
1552 + if (!ioprio_valid(cic->ioprio)) {
1553 + struct task_struct *tsk = current;
1554 + ioprio = task_nice_ioprio(tsk);
1555 + ioprio_class = task_nice_ioclass(tsk);
1556 + }
1557 async_cfqq = cfq_async_queue_prio(cfqd, ioprio_class, ioprio);
1558 cfqq = *async_cfqq;
1559 }
1560 diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
1561 index 93d160661f4c..41e9c199e874 100644
1562 --- a/drivers/acpi/acpi_lpss.c
1563 +++ b/drivers/acpi/acpi_lpss.c
1564 @@ -105,7 +105,7 @@ static void lpss_uart_setup(struct lpss_private_data *pdata)
1565 }
1566 }
1567
1568 -static void byt_i2c_setup(struct lpss_private_data *pdata)
1569 +static void lpss_deassert_reset(struct lpss_private_data *pdata)
1570 {
1571 unsigned int offset;
1572 u32 val;
1573 @@ -114,9 +114,18 @@ static void byt_i2c_setup(struct lpss_private_data *pdata)
1574 val = readl(pdata->mmio_base + offset);
1575 val |= LPSS_RESETS_RESET_APB | LPSS_RESETS_RESET_FUNC;
1576 writel(val, pdata->mmio_base + offset);
1577 +}
1578 +
1579 +#define LPSS_I2C_ENABLE 0x6c
1580 +
1581 +static void byt_i2c_setup(struct lpss_private_data *pdata)
1582 +{
1583 + lpss_deassert_reset(pdata);
1584
1585 if (readl(pdata->mmio_base + pdata->dev_desc->prv_offset))
1586 pdata->fixed_clk_rate = 133000000;
1587 +
1588 + writel(0, pdata->mmio_base + LPSS_I2C_ENABLE);
1589 }
1590
1591 static struct lpss_device_desc lpt_dev_desc = {
1592 @@ -166,6 +175,12 @@ static struct lpss_device_desc byt_i2c_dev_desc = {
1593 .setup = byt_i2c_setup,
1594 };
1595
1596 +static struct lpss_device_desc bsw_spi_dev_desc = {
1597 + .flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_SAVE_CTX,
1598 + .prv_offset = 0x400,
1599 + .setup = lpss_deassert_reset,
1600 +};
1601 +
1602 #else
1603
1604 #define LPSS_ADDR(desc) (0UL)
1605 @@ -198,7 +213,7 @@ static const struct acpi_device_id acpi_lpss_device_ids[] = {
1606 /* Braswell LPSS devices */
1607 { "80862288", LPSS_ADDR(byt_pwm_dev_desc) },
1608 { "8086228A", LPSS_ADDR(byt_uart_dev_desc) },
1609 - { "8086228E", LPSS_ADDR(byt_spi_dev_desc) },
1610 + { "8086228E", LPSS_ADDR(bsw_spi_dev_desc) },
1611 { "808622C1", LPSS_ADDR(byt_i2c_dev_desc) },
1612
1613 { "INT3430", LPSS_ADDR(lpt_dev_desc) },
1614 diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
1615 index 086240cd29c3..fe1678c4ff89 100644
1616 --- a/drivers/bluetooth/ath3k.c
1617 +++ b/drivers/bluetooth/ath3k.c
1618 @@ -106,6 +106,7 @@ static const struct usb_device_id ath3k_table[] = {
1619 { USB_DEVICE(0x13d3, 0x3393) },
1620 { USB_DEVICE(0x13d3, 0x3402) },
1621 { USB_DEVICE(0x13d3, 0x3408) },
1622 + { USB_DEVICE(0x13d3, 0x3423) },
1623 { USB_DEVICE(0x13d3, 0x3432) },
1624
1625 /* Atheros AR5BBU12 with sflash firmware */
1626 @@ -158,6 +159,7 @@ static const struct usb_device_id ath3k_blist_tbl[] = {
1627 { USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },
1628 { USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 },
1629 { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 },
1630 + { USB_DEVICE(0x13d3, 0x3423), .driver_info = BTUSB_ATH3012 },
1631 { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 },
1632
1633 /* Atheros AR5BBU22 with sflash firmware */
1634 @@ -170,6 +172,8 @@ static const struct usb_device_id ath3k_blist_tbl[] = {
1635 #define USB_REQ_DFU_DNLOAD 1
1636 #define BULK_SIZE 4096
1637 #define FW_HDR_SIZE 20
1638 +#define TIMEGAP_USEC_MIN 50
1639 +#define TIMEGAP_USEC_MAX 100
1640
1641 static int ath3k_load_firmware(struct usb_device *udev,
1642 const struct firmware *firmware)
1643 @@ -201,6 +205,9 @@ static int ath3k_load_firmware(struct usb_device *udev,
1644 pipe = usb_sndbulkpipe(udev, 0x02);
1645
1646 while (count) {
1647 + /* workaround the compatibility issue with xHCI controller*/
1648 + usleep_range(TIMEGAP_USEC_MIN, TIMEGAP_USEC_MAX);
1649 +
1650 size = min_t(uint, count, BULK_SIZE);
1651 memcpy(send_buf, firmware->data + sent, size);
1652
1653 @@ -298,6 +305,9 @@ static int ath3k_load_fwfile(struct usb_device *udev,
1654 pipe = usb_sndbulkpipe(udev, 0x02);
1655
1656 while (count) {
1657 + /* workaround the compatibility issue with xHCI controller*/
1658 + usleep_range(TIMEGAP_USEC_MIN, TIMEGAP_USEC_MAX);
1659 +
1660 size = min_t(uint, count, BULK_SIZE);
1661 memcpy(send_buf, firmware->data + sent, size);
1662
1663 diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
1664 index 091c813df8e9..f0e2f721c8ce 100644
1665 --- a/drivers/bluetooth/btusb.c
1666 +++ b/drivers/bluetooth/btusb.c
1667 @@ -107,15 +107,23 @@ static const struct usb_device_id btusb_table[] = {
1668 { USB_DEVICE(0x0b05, 0x17cb) },
1669 { USB_DEVICE(0x413c, 0x8197) },
1670
1671 + /* Broadcom BCM20702B0 (Dynex/Insignia) */
1672 + { USB_DEVICE(0x19ff, 0x0239), .driver_info = BTUSB_BCM_PATCHRAM },
1673 +
1674 /* Foxconn - Hon Hai */
1675 { USB_VENDOR_AND_INTERFACE_INFO(0x0489, 0xff, 0x01, 0x01) },
1676
1677 + /* Lite-On Technology - Broadcom based */
1678 + { USB_VENDOR_AND_INTERFACE_INFO(0x04ca, 0xff, 0x01, 0x01),
1679 + .driver_info = BTUSB_BCM_PATCHRAM },
1680 +
1681 /* Broadcom devices with vendor specific id */
1682 { USB_VENDOR_AND_INTERFACE_INFO(0x0a5c, 0xff, 0x01, 0x01),
1683 .driver_info = BTUSB_BCM_PATCHRAM },
1684
1685 /* ASUSTek Computer - Broadcom based */
1686 - { USB_VENDOR_AND_INTERFACE_INFO(0x0b05, 0xff, 0x01, 0x01) },
1687 + { USB_VENDOR_AND_INTERFACE_INFO(0x0b05, 0xff, 0x01, 0x01),
1688 + .driver_info = BTUSB_BCM_PATCHRAM },
1689
1690 /* Belkin F8065bf - Broadcom based */
1691 { USB_VENDOR_AND_INTERFACE_INFO(0x050d, 0xff, 0x01, 0x01) },
1692 @@ -183,6 +191,7 @@ static const struct usb_device_id blacklist_table[] = {
1693 { USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },
1694 { USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 },
1695 { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 },
1696 + { USB_DEVICE(0x13d3, 0x3423), .driver_info = BTUSB_ATH3012 },
1697 { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 },
1698
1699 /* Atheros AR5BBU12 with sflash firmware */
1700 diff --git a/drivers/char/random.c b/drivers/char/random.c
1701 index 04645c09fe5e..9cd6968e2f92 100644
1702 --- a/drivers/char/random.c
1703 +++ b/drivers/char/random.c
1704 @@ -569,19 +569,19 @@ static void fast_mix(struct fast_pool *f)
1705 __u32 c = f->pool[2], d = f->pool[3];
1706
1707 a += b; c += d;
1708 - b = rol32(a, 6); d = rol32(c, 27);
1709 + b = rol32(b, 6); d = rol32(d, 27);
1710 d ^= a; b ^= c;
1711
1712 a += b; c += d;
1713 - b = rol32(a, 16); d = rol32(c, 14);
1714 + b = rol32(b, 16); d = rol32(d, 14);
1715 d ^= a; b ^= c;
1716
1717 a += b; c += d;
1718 - b = rol32(a, 6); d = rol32(c, 27);
1719 + b = rol32(b, 6); d = rol32(d, 27);
1720 d ^= a; b ^= c;
1721
1722 a += b; c += d;
1723 - b = rol32(a, 16); d = rol32(c, 14);
1724 + b = rol32(b, 16); d = rol32(d, 14);
1725 d ^= a; b ^= c;
1726
1727 f->pool[0] = a; f->pool[1] = b;
1728 diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
1729 index 6af17002a115..cfb9089887bd 100644
1730 --- a/drivers/char/tpm/tpm-interface.c
1731 +++ b/drivers/char/tpm/tpm-interface.c
1732 @@ -1122,7 +1122,7 @@ struct tpm_chip *tpm_register_hardware(struct device *dev,
1733
1734 /* Make chip available */
1735 spin_lock(&driver_lock);
1736 - list_add_rcu(&chip->list, &tpm_chip_list);
1737 + list_add_tail_rcu(&chip->list, &tpm_chip_list);
1738 spin_unlock(&driver_lock);
1739
1740 return chip;
1741 diff --git a/drivers/char/tpm/tpm_i2c_atmel.c b/drivers/char/tpm/tpm_i2c_atmel.c
1742 index 77272925dee6..503a85ae176c 100644
1743 --- a/drivers/char/tpm/tpm_i2c_atmel.c
1744 +++ b/drivers/char/tpm/tpm_i2c_atmel.c
1745 @@ -168,6 +168,10 @@ static int i2c_atmel_probe(struct i2c_client *client,
1746
1747 chip->vendor.priv = devm_kzalloc(dev, sizeof(struct priv_data),
1748 GFP_KERNEL);
1749 + if (!chip->vendor.priv) {
1750 + rc = -ENOMEM;
1751 + goto out_err;
1752 + }
1753
1754 /* Default timeouts */
1755 chip->vendor.timeout_a = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
1756 diff --git a/drivers/char/tpm/tpm_i2c_nuvoton.c b/drivers/char/tpm/tpm_i2c_nuvoton.c
1757 index 7b158efd49f7..23c7b137a7fd 100644
1758 --- a/drivers/char/tpm/tpm_i2c_nuvoton.c
1759 +++ b/drivers/char/tpm/tpm_i2c_nuvoton.c
1760 @@ -538,6 +538,11 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
1761
1762 chip->vendor.priv = devm_kzalloc(dev, sizeof(struct priv_data),
1763 GFP_KERNEL);
1764 + if (!chip->vendor.priv) {
1765 + rc = -ENOMEM;
1766 + goto out_err;
1767 + }
1768 +
1769 init_waitqueue_head(&chip->vendor.read_queue);
1770 init_waitqueue_head(&chip->vendor.int_queue);
1771
1772 diff --git a/drivers/char/tpm/tpm_i2c_stm_st33.c b/drivers/char/tpm/tpm_i2c_stm_st33.c
1773 index 4669e3713428..7d1c540fa26a 100644
1774 --- a/drivers/char/tpm/tpm_i2c_stm_st33.c
1775 +++ b/drivers/char/tpm/tpm_i2c_stm_st33.c
1776 @@ -487,7 +487,7 @@ static int tpm_stm_i2c_send(struct tpm_chip *chip, unsigned char *buf,
1777 if (burstcnt < 0)
1778 return burstcnt;
1779 size = min_t(int, len - i - 1, burstcnt);
1780 - ret = I2C_WRITE_DATA(client, TPM_DATA_FIFO, buf, size);
1781 + ret = I2C_WRITE_DATA(client, TPM_DATA_FIFO, buf + i, size);
1782 if (ret < 0)
1783 goto out_err;
1784
1785 diff --git a/drivers/char/tpm/tpm_ibmvtpm.c b/drivers/char/tpm/tpm_ibmvtpm.c
1786 index af74c57e5090..eff9d5870034 100644
1787 --- a/drivers/char/tpm/tpm_ibmvtpm.c
1788 +++ b/drivers/char/tpm/tpm_ibmvtpm.c
1789 @@ -148,7 +148,8 @@ static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
1790 crq.len = (u16)count;
1791 crq.data = ibmvtpm->rtce_dma_handle;
1792
1793 - rc = ibmvtpm_send_crq(ibmvtpm->vdev, word[0], word[1]);
1794 + rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(word[0]),
1795 + cpu_to_be64(word[1]));
1796 if (rc != H_SUCCESS) {
1797 dev_err(ibmvtpm->dev, "tpm_ibmvtpm_send failed rc=%d\n", rc);
1798 rc = 0;
1799 @@ -186,7 +187,8 @@ static int ibmvtpm_crq_get_rtce_size(struct ibmvtpm_dev *ibmvtpm)
1800 crq.valid = (u8)IBMVTPM_VALID_CMD;
1801 crq.msg = (u8)VTPM_GET_RTCE_BUFFER_SIZE;
1802
1803 - rc = ibmvtpm_send_crq(ibmvtpm->vdev, buf[0], buf[1]);
1804 + rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(buf[0]),
1805 + cpu_to_be64(buf[1]));
1806 if (rc != H_SUCCESS)
1807 dev_err(ibmvtpm->dev,
1808 "ibmvtpm_crq_get_rtce_size failed rc=%d\n", rc);
1809 @@ -212,7 +214,8 @@ static int ibmvtpm_crq_get_version(struct ibmvtpm_dev *ibmvtpm)
1810 crq.valid = (u8)IBMVTPM_VALID_CMD;
1811 crq.msg = (u8)VTPM_GET_VERSION;
1812
1813 - rc = ibmvtpm_send_crq(ibmvtpm->vdev, buf[0], buf[1]);
1814 + rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(buf[0]),
1815 + cpu_to_be64(buf[1]));
1816 if (rc != H_SUCCESS)
1817 dev_err(ibmvtpm->dev,
1818 "ibmvtpm_crq_get_version failed rc=%d\n", rc);
1819 @@ -307,6 +310,14 @@ static int tpm_ibmvtpm_remove(struct vio_dev *vdev)
1820 static unsigned long tpm_ibmvtpm_get_desired_dma(struct vio_dev *vdev)
1821 {
1822 struct ibmvtpm_dev *ibmvtpm = ibmvtpm_get_data(&vdev->dev);
1823 +
1824 + /* ibmvtpm initializes at probe time, so the data we are
1825 + * asking for may not be set yet. Estimate that 4K required
1826 + * for TCE-mapped buffer in addition to CRQ.
1827 + */
1828 + if (!ibmvtpm)
1829 + return CRQ_RES_BUF_SIZE + PAGE_SIZE;
1830 +
1831 return CRQ_RES_BUF_SIZE + ibmvtpm->rtce_size;
1832 }
1833
1834 @@ -327,7 +338,8 @@ static int tpm_ibmvtpm_suspend(struct device *dev)
1835 crq.valid = (u8)IBMVTPM_VALID_CMD;
1836 crq.msg = (u8)VTPM_PREPARE_TO_SUSPEND;
1837
1838 - rc = ibmvtpm_send_crq(ibmvtpm->vdev, buf[0], buf[1]);
1839 + rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(buf[0]),
1840 + cpu_to_be64(buf[1]));
1841 if (rc != H_SUCCESS)
1842 dev_err(ibmvtpm->dev,
1843 "tpm_ibmvtpm_suspend failed rc=%d\n", rc);
1844 @@ -472,11 +484,11 @@ static void ibmvtpm_crq_process(struct ibmvtpm_crq *crq,
1845 case IBMVTPM_VALID_CMD:
1846 switch (crq->msg) {
1847 case VTPM_GET_RTCE_BUFFER_SIZE_RES:
1848 - if (crq->len <= 0) {
1849 + if (be16_to_cpu(crq->len) <= 0) {
1850 dev_err(ibmvtpm->dev, "Invalid rtce size\n");
1851 return;
1852 }
1853 - ibmvtpm->rtce_size = crq->len;
1854 + ibmvtpm->rtce_size = be16_to_cpu(crq->len);
1855 ibmvtpm->rtce_buf = kmalloc(ibmvtpm->rtce_size,
1856 GFP_KERNEL);
1857 if (!ibmvtpm->rtce_buf) {
1858 @@ -497,11 +509,11 @@ static void ibmvtpm_crq_process(struct ibmvtpm_crq *crq,
1859
1860 return;
1861 case VTPM_GET_VERSION_RES:
1862 - ibmvtpm->vtpm_version = crq->data;
1863 + ibmvtpm->vtpm_version = be32_to_cpu(crq->data);
1864 return;
1865 case VTPM_TPM_COMMAND_RES:
1866 /* len of the data in rtce buffer */
1867 - ibmvtpm->res_len = crq->len;
1868 + ibmvtpm->res_len = be16_to_cpu(crq->len);
1869 wake_up_interruptible(&ibmvtpm->wq);
1870 return;
1871 default:
1872 diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
1873 index 2c46734b266d..51350cd0847e 100644
1874 --- a/drivers/char/tpm/tpm_tis.c
1875 +++ b/drivers/char/tpm/tpm_tis.c
1876 @@ -75,6 +75,10 @@ enum tis_defaults {
1877 #define TPM_DID_VID(l) (0x0F00 | ((l) << 12))
1878 #define TPM_RID(l) (0x0F04 | ((l) << 12))
1879
1880 +struct priv_data {
1881 + bool irq_tested;
1882 +};
1883 +
1884 static LIST_HEAD(tis_chips);
1885 static DEFINE_MUTEX(tis_lock);
1886
1887 @@ -338,12 +342,27 @@ out_err:
1888 return rc;
1889 }
1890
1891 +static void disable_interrupts(struct tpm_chip *chip)
1892 +{
1893 + u32 intmask;
1894 +
1895 + intmask =
1896 + ioread32(chip->vendor.iobase +
1897 + TPM_INT_ENABLE(chip->vendor.locality));
1898 + intmask &= ~TPM_GLOBAL_INT_ENABLE;
1899 + iowrite32(intmask,
1900 + chip->vendor.iobase +
1901 + TPM_INT_ENABLE(chip->vendor.locality));
1902 + free_irq(chip->vendor.irq, chip);
1903 + chip->vendor.irq = 0;
1904 +}
1905 +
1906 /*
1907 * If interrupts are used (signaled by an irq set in the vendor structure)
1908 * tpm.c can skip polling for the data to be available as the interrupt is
1909 * waited for here
1910 */
1911 -static int tpm_tis_send(struct tpm_chip *chip, u8 *buf, size_t len)
1912 +static int tpm_tis_send_main(struct tpm_chip *chip, u8 *buf, size_t len)
1913 {
1914 int rc;
1915 u32 ordinal;
1916 @@ -373,6 +392,30 @@ out_err:
1917 return rc;
1918 }
1919
1920 +static int tpm_tis_send(struct tpm_chip *chip, u8 *buf, size_t len)
1921 +{
1922 + int rc, irq;
1923 + struct priv_data *priv = chip->vendor.priv;
1924 +
1925 + if (!chip->vendor.irq || priv->irq_tested)
1926 + return tpm_tis_send_main(chip, buf, len);
1927 +
1928 + /* Verify receipt of the expected IRQ */
1929 + irq = chip->vendor.irq;
1930 + chip->vendor.irq = 0;
1931 + rc = tpm_tis_send_main(chip, buf, len);
1932 + chip->vendor.irq = irq;
1933 + if (!priv->irq_tested)
1934 + msleep(1);
1935 + if (!priv->irq_tested) {
1936 + disable_interrupts(chip);
1937 + dev_err(chip->dev,
1938 + FW_BUG "TPM interrupt not working, polling instead\n");
1939 + }
1940 + priv->irq_tested = true;
1941 + return rc;
1942 +}
1943 +
1944 struct tis_vendor_timeout_override {
1945 u32 did_vid;
1946 unsigned long timeout_us[4];
1947 @@ -505,6 +548,7 @@ static irqreturn_t tis_int_handler(int dummy, void *dev_id)
1948 if (interrupt == 0)
1949 return IRQ_NONE;
1950
1951 + ((struct priv_data *)chip->vendor.priv)->irq_tested = true;
1952 if (interrupt & TPM_INTF_DATA_AVAIL_INT)
1953 wake_up_interruptible(&chip->vendor.read_queue);
1954 if (interrupt & TPM_INTF_LOCALITY_CHANGE_INT)
1955 @@ -534,9 +578,14 @@ static int tpm_tis_init(struct device *dev, resource_size_t start,
1956 u32 vendor, intfcaps, intmask;
1957 int rc, i, irq_s, irq_e, probe;
1958 struct tpm_chip *chip;
1959 + struct priv_data *priv;
1960
1961 + priv = devm_kzalloc(dev, sizeof(struct priv_data), GFP_KERNEL);
1962 + if (priv == NULL)
1963 + return -ENOMEM;
1964 if (!(chip = tpm_register_hardware(dev, &tpm_tis)))
1965 return -ENODEV;
1966 + chip->vendor.priv = priv;
1967
1968 chip->vendor.iobase = ioremap(start, len);
1969 if (!chip->vendor.iobase) {
1970 @@ -605,19 +654,6 @@ static int tpm_tis_init(struct device *dev, resource_size_t start,
1971 if (intfcaps & TPM_INTF_DATA_AVAIL_INT)
1972 dev_dbg(dev, "\tData Avail Int Support\n");
1973
1974 - /* get the timeouts before testing for irqs */
1975 - if (tpm_get_timeouts(chip)) {
1976 - dev_err(dev, "Could not get TPM timeouts and durations\n");
1977 - rc = -ENODEV;
1978 - goto out_err;
1979 - }
1980 -
1981 - if (tpm_do_selftest(chip)) {
1982 - dev_err(dev, "TPM self test failed\n");
1983 - rc = -ENODEV;
1984 - goto out_err;
1985 - }
1986 -
1987 /* INTERRUPT Setup */
1988 init_waitqueue_head(&chip->vendor.read_queue);
1989 init_waitqueue_head(&chip->vendor.int_queue);
1990 @@ -719,6 +755,18 @@ static int tpm_tis_init(struct device *dev, resource_size_t start,
1991 }
1992 }
1993
1994 + if (tpm_get_timeouts(chip)) {
1995 + dev_err(dev, "Could not get TPM timeouts and durations\n");
1996 + rc = -ENODEV;
1997 + goto out_err;
1998 + }
1999 +
2000 + if (tpm_do_selftest(chip)) {
2001 + dev_err(dev, "TPM self test failed\n");
2002 + rc = -ENODEV;
2003 + goto out_err;
2004 + }
2005 +
2006 INIT_LIST_HEAD(&chip->vendor.list);
2007 mutex_lock(&tis_lock);
2008 list_add(&chip->vendor.list, &tis_chips);
2009 diff --git a/drivers/clocksource/mtk_timer.c b/drivers/clocksource/mtk_timer.c
2010 index 32a3d25795d3..68ab42356d0e 100644
2011 --- a/drivers/clocksource/mtk_timer.c
2012 +++ b/drivers/clocksource/mtk_timer.c
2013 @@ -224,6 +224,8 @@ static void __init mtk_timer_init(struct device_node *node)
2014 }
2015 rate = clk_get_rate(clk);
2016
2017 + mtk_timer_global_reset(evt);
2018 +
2019 if (request_irq(evt->dev.irq, mtk_timer_interrupt,
2020 IRQF_TIMER | IRQF_IRQPOLL, "mtk_timer", evt)) {
2021 pr_warn("failed to setup irq %d\n", evt->dev.irq);
2022 @@ -232,8 +234,6 @@ static void __init mtk_timer_init(struct device_node *node)
2023
2024 evt->ticks_per_jiffy = DIV_ROUND_UP(rate, HZ);
2025
2026 - mtk_timer_global_reset(evt);
2027 -
2028 /* Configure clock source */
2029 mtk_timer_setup(evt, GPT_CLK_SRC, TIMER_CTRL_OP_FREERUN);
2030 clocksource_mmio_init(evt->gpt_base + TIMER_CNT_REG(GPT_CLK_SRC),
2031 @@ -241,10 +241,11 @@ static void __init mtk_timer_init(struct device_node *node)
2032
2033 /* Configure clock event */
2034 mtk_timer_setup(evt, GPT_CLK_EVT, TIMER_CTRL_OP_REPEAT);
2035 - mtk_timer_enable_irq(evt, GPT_CLK_EVT);
2036 -
2037 clockevents_config_and_register(&evt->dev, rate, 0x3,
2038 0xffffffff);
2039 +
2040 + mtk_timer_enable_irq(evt, GPT_CLK_EVT);
2041 +
2042 return;
2043
2044 err_clk_disable:
2045 diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
2046 index 4473eba1d6b0..e3bf702b5588 100644
2047 --- a/drivers/cpufreq/cpufreq.c
2048 +++ b/drivers/cpufreq/cpufreq.c
2049 @@ -1409,9 +1409,10 @@ static int __cpufreq_remove_dev_finish(struct device *dev,
2050 unsigned long flags;
2051 struct cpufreq_policy *policy;
2052
2053 - read_lock_irqsave(&cpufreq_driver_lock, flags);
2054 + write_lock_irqsave(&cpufreq_driver_lock, flags);
2055 policy = per_cpu(cpufreq_cpu_data, cpu);
2056 - read_unlock_irqrestore(&cpufreq_driver_lock, flags);
2057 + per_cpu(cpufreq_cpu_data, cpu) = NULL;
2058 + write_unlock_irqrestore(&cpufreq_driver_lock, flags);
2059
2060 if (!policy) {
2061 pr_debug("%s: No cpu_data found\n", __func__);
2062 @@ -1466,7 +1467,6 @@ static int __cpufreq_remove_dev_finish(struct device *dev,
2063 }
2064 }
2065
2066 - per_cpu(cpufreq_cpu_data, cpu) = NULL;
2067 return 0;
2068 }
2069
2070 diff --git a/drivers/cpufreq/s3c2416-cpufreq.c b/drivers/cpufreq/s3c2416-cpufreq.c
2071 index 2fd53eaaec20..d6d425773fa4 100644
2072 --- a/drivers/cpufreq/s3c2416-cpufreq.c
2073 +++ b/drivers/cpufreq/s3c2416-cpufreq.c
2074 @@ -263,7 +263,7 @@ out:
2075 }
2076
2077 #ifdef CONFIG_ARM_S3C2416_CPUFREQ_VCORESCALE
2078 -static void __init s3c2416_cpufreq_cfg_regulator(struct s3c2416_data *s3c_freq)
2079 +static void s3c2416_cpufreq_cfg_regulator(struct s3c2416_data *s3c_freq)
2080 {
2081 int count, v, i, found;
2082 struct cpufreq_frequency_table *pos;
2083 @@ -333,7 +333,7 @@ static struct notifier_block s3c2416_cpufreq_reboot_notifier = {
2084 .notifier_call = s3c2416_cpufreq_reboot_notifier_evt,
2085 };
2086
2087 -static int __init s3c2416_cpufreq_driver_init(struct cpufreq_policy *policy)
2088 +static int s3c2416_cpufreq_driver_init(struct cpufreq_policy *policy)
2089 {
2090 struct s3c2416_data *s3c_freq = &s3c2416_cpufreq;
2091 struct cpufreq_frequency_table *pos;
2092 diff --git a/drivers/cpufreq/s3c24xx-cpufreq.c b/drivers/cpufreq/s3c24xx-cpufreq.c
2093 index d00f1cee4509..733aa5153e74 100644
2094 --- a/drivers/cpufreq/s3c24xx-cpufreq.c
2095 +++ b/drivers/cpufreq/s3c24xx-cpufreq.c
2096 @@ -144,11 +144,6 @@ static void s3c_cpufreq_setfvco(struct s3c_cpufreq_config *cfg)
2097 (cfg->info->set_fvco)(cfg);
2098 }
2099
2100 -static inline void s3c_cpufreq_resume_clocks(void)
2101 -{
2102 - cpu_cur.info->resume_clocks();
2103 -}
2104 -
2105 static inline void s3c_cpufreq_updateclk(struct clk *clk,
2106 unsigned int freq)
2107 {
2108 @@ -417,9 +412,6 @@ static int s3c_cpufreq_resume(struct cpufreq_policy *policy)
2109
2110 last_target = ~0; /* invalidate last_target setting */
2111
2112 - /* first, find out what speed we resumed at. */
2113 - s3c_cpufreq_resume_clocks();
2114 -
2115 /* whilst we will be called later on, we try and re-set the
2116 * cpu frequencies as soon as possible so that we do not end
2117 * up resuming devices and then immediately having to re-set
2118 @@ -454,7 +446,7 @@ static struct cpufreq_driver s3c24xx_driver = {
2119 };
2120
2121
2122 -int __init s3c_cpufreq_register(struct s3c_cpufreq_info *info)
2123 +int s3c_cpufreq_register(struct s3c_cpufreq_info *info)
2124 {
2125 if (!info || !info->name) {
2126 printk(KERN_ERR "%s: failed to pass valid information\n",
2127 diff --git a/drivers/cpufreq/speedstep-lib.c b/drivers/cpufreq/speedstep-lib.c
2128 index 7047821a7f8a..4ab7a2156672 100644
2129 --- a/drivers/cpufreq/speedstep-lib.c
2130 +++ b/drivers/cpufreq/speedstep-lib.c
2131 @@ -400,6 +400,7 @@ unsigned int speedstep_get_freqs(enum speedstep_processor processor,
2132
2133 pr_debug("previous speed is %u\n", prev_speed);
2134
2135 + preempt_disable();
2136 local_irq_save(flags);
2137
2138 /* switch to low state */
2139 @@ -464,6 +465,8 @@ unsigned int speedstep_get_freqs(enum speedstep_processor processor,
2140
2141 out:
2142 local_irq_restore(flags);
2143 + preempt_enable();
2144 +
2145 return ret;
2146 }
2147 EXPORT_SYMBOL_GPL(speedstep_get_freqs);
2148 diff --git a/drivers/cpufreq/speedstep-smi.c b/drivers/cpufreq/speedstep-smi.c
2149 index 5fc96d5d656b..819229e824fb 100644
2150 --- a/drivers/cpufreq/speedstep-smi.c
2151 +++ b/drivers/cpufreq/speedstep-smi.c
2152 @@ -156,6 +156,7 @@ static void speedstep_set_state(unsigned int state)
2153 return;
2154
2155 /* Disable IRQs */
2156 + preempt_disable();
2157 local_irq_save(flags);
2158
2159 command = (smi_sig & 0xffffff00) | (smi_cmd & 0xff);
2160 @@ -166,9 +167,19 @@ static void speedstep_set_state(unsigned int state)
2161
2162 do {
2163 if (retry) {
2164 + /*
2165 + * We need to enable interrupts, otherwise the blockage
2166 + * won't resolve.
2167 + *
2168 + * We disable preemption so that other processes don't
2169 + * run. If other processes were running, they could
2170 + * submit more DMA requests, making the blockage worse.
2171 + */
2172 pr_debug("retry %u, previous result %u, waiting...\n",
2173 retry, result);
2174 + local_irq_enable();
2175 mdelay(retry * 50);
2176 + local_irq_disable();
2177 }
2178 retry++;
2179 __asm__ __volatile__(
2180 @@ -185,6 +196,7 @@ static void speedstep_set_state(unsigned int state)
2181
2182 /* enable IRQs */
2183 local_irq_restore(flags);
2184 + preempt_enable();
2185
2186 if (new_state == state)
2187 pr_debug("change to %u MHz succeeded after %u tries "
2188 diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c
2189 index bbd65149cdb2..c7236ba92b8e 100644
2190 --- a/drivers/edac/amd64_edac.c
2191 +++ b/drivers/edac/amd64_edac.c
2192 @@ -2039,14 +2039,20 @@ static void __log_bus_error(struct mem_ctl_info *mci, struct err_info *err,
2193
2194 static inline void decode_bus_error(int node_id, struct mce *m)
2195 {
2196 - struct mem_ctl_info *mci = mcis[node_id];
2197 - struct amd64_pvt *pvt = mci->pvt_info;
2198 + struct mem_ctl_info *mci;
2199 + struct amd64_pvt *pvt;
2200 u8 ecc_type = (m->status >> 45) & 0x3;
2201 u8 xec = XEC(m->status, 0x1f);
2202 u16 ec = EC(m->status);
2203 u64 sys_addr;
2204 struct err_info err;
2205
2206 + mci = edac_mc_find(node_id);
2207 + if (!mci)
2208 + return;
2209 +
2210 + pvt = mci->pvt_info;
2211 +
2212 /* Bail out early if this was an 'observed' error */
2213 if (PP(ec) == NBSL_PP_OBS)
2214 return;
2215 diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c
2216 index e9bb1af67c8d..3cdaac8944eb 100644
2217 --- a/drivers/edac/sb_edac.c
2218 +++ b/drivers/edac/sb_edac.c
2219 @@ -2297,7 +2297,7 @@ static int sbridge_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2220 rc = sbridge_get_all_devices(&num_mc, pci_dev_descr_ibridge_table);
2221 type = IVY_BRIDGE;
2222 break;
2223 - case PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_TA:
2224 + case PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_HA0:
2225 rc = sbridge_get_all_devices(&num_mc, pci_dev_descr_sbridge_table);
2226 type = SANDY_BRIDGE;
2227 break;
2228 @@ -2306,8 +2306,11 @@ static int sbridge_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2229 type = HASWELL;
2230 break;
2231 }
2232 - if (unlikely(rc < 0))
2233 + if (unlikely(rc < 0)) {
2234 + edac_dbg(0, "couldn't get all devices for 0x%x\n", pdev->device);
2235 goto fail0;
2236 + }
2237 +
2238 mc = 0;
2239
2240 list_for_each_entry(sbridge_dev, &sbridge_edac_list, list) {
2241 @@ -2320,7 +2323,7 @@ static int sbridge_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2242 goto fail1;
2243 }
2244
2245 - sbridge_printk(KERN_INFO, "Driver loaded.\n");
2246 + sbridge_printk(KERN_INFO, "%s\n", SBRIDGE_REVISION);
2247
2248 mutex_unlock(&sbridge_edac_lock);
2249 return 0;
2250 diff --git a/drivers/gpio/gpio-tps65912.c b/drivers/gpio/gpio-tps65912.c
2251 index 22052d84c63b..a8c783099af9 100644
2252 --- a/drivers/gpio/gpio-tps65912.c
2253 +++ b/drivers/gpio/gpio-tps65912.c
2254 @@ -26,9 +26,12 @@ struct tps65912_gpio_data {
2255 struct gpio_chip gpio_chip;
2256 };
2257
2258 +#define to_tgd(gc) container_of(gc, struct tps65912_gpio_data, gpio_chip)
2259 +
2260 static int tps65912_gpio_get(struct gpio_chip *gc, unsigned offset)
2261 {
2262 - struct tps65912 *tps65912 = container_of(gc, struct tps65912, gpio);
2263 + struct tps65912_gpio_data *tps65912_gpio = to_tgd(gc);
2264 + struct tps65912 *tps65912 = tps65912_gpio->tps65912;
2265 int val;
2266
2267 val = tps65912_reg_read(tps65912, TPS65912_GPIO1 + offset);
2268 @@ -42,7 +45,8 @@ static int tps65912_gpio_get(struct gpio_chip *gc, unsigned offset)
2269 static void tps65912_gpio_set(struct gpio_chip *gc, unsigned offset,
2270 int value)
2271 {
2272 - struct tps65912 *tps65912 = container_of(gc, struct tps65912, gpio);
2273 + struct tps65912_gpio_data *tps65912_gpio = to_tgd(gc);
2274 + struct tps65912 *tps65912 = tps65912_gpio->tps65912;
2275
2276 if (value)
2277 tps65912_set_bits(tps65912, TPS65912_GPIO1 + offset,
2278 @@ -55,7 +59,8 @@ static void tps65912_gpio_set(struct gpio_chip *gc, unsigned offset,
2279 static int tps65912_gpio_output(struct gpio_chip *gc, unsigned offset,
2280 int value)
2281 {
2282 - struct tps65912 *tps65912 = container_of(gc, struct tps65912, gpio);
2283 + struct tps65912_gpio_data *tps65912_gpio = to_tgd(gc);
2284 + struct tps65912 *tps65912 = tps65912_gpio->tps65912;
2285
2286 /* Set the initial value */
2287 tps65912_gpio_set(gc, offset, value);
2288 @@ -66,7 +71,8 @@ static int tps65912_gpio_output(struct gpio_chip *gc, unsigned offset,
2289
2290 static int tps65912_gpio_input(struct gpio_chip *gc, unsigned offset)
2291 {
2292 - struct tps65912 *tps65912 = container_of(gc, struct tps65912, gpio);
2293 + struct tps65912_gpio_data *tps65912_gpio = to_tgd(gc);
2294 + struct tps65912 *tps65912 = tps65912_gpio->tps65912;
2295
2296 return tps65912_clear_bits(tps65912, TPS65912_GPIO1 + offset,
2297 GPIO_CFG_MASK);
2298 diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c
2299 index 08261f2b3a82..26645a847bb8 100644
2300 --- a/drivers/gpio/gpiolib-of.c
2301 +++ b/drivers/gpio/gpiolib-of.c
2302 @@ -46,12 +46,13 @@ static int of_gpiochip_find_and_xlate(struct gpio_chip *gc, void *data)
2303
2304 ret = gc->of_xlate(gc, &gg_data->gpiospec, gg_data->flags);
2305 if (ret < 0) {
2306 - /* We've found the gpio chip, but the translation failed.
2307 - * Return true to stop looking and return the translation
2308 - * error via out_gpio
2309 + /* We've found a gpio chip, but the translation failed.
2310 + * Store translation error in out_gpio.
2311 + * Return false to keep looking, as more than one gpio chip
2312 + * could be registered per of-node.
2313 */
2314 gg_data->out_gpio = ERR_PTR(ret);
2315 - return true;
2316 + return false;
2317 }
2318
2319 gg_data->out_gpio = gpiochip_get_desc(gc, ret);
2320 diff --git a/drivers/hid/i2c-hid/i2c-hid.c b/drivers/hid/i2c-hid/i2c-hid.c
2321 index 80e33e0abc52..6d7c9c580ceb 100644
2322 --- a/drivers/hid/i2c-hid/i2c-hid.c
2323 +++ b/drivers/hid/i2c-hid/i2c-hid.c
2324 @@ -370,7 +370,10 @@ static int i2c_hid_hwreset(struct i2c_client *client)
2325 static void i2c_hid_get_input(struct i2c_hid *ihid)
2326 {
2327 int ret, ret_size;
2328 - int size = ihid->bufsize;
2329 + int size = le16_to_cpu(ihid->hdesc.wMaxInputLength);
2330 +
2331 + if (size > ihid->bufsize)
2332 + size = ihid->bufsize;
2333
2334 ret = i2c_master_recv(ihid->client, ihid->inbuf, size);
2335 if (ret != size) {
2336 diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
2337 index 40b35be34f8d..2f2f38f4d83c 100644
2338 --- a/drivers/md/raid1.c
2339 +++ b/drivers/md/raid1.c
2340 @@ -560,7 +560,7 @@ static int read_balance(struct r1conf *conf, struct r1bio *r1_bio, int *max_sect
2341 if (test_bit(WriteMostly, &rdev->flags)) {
2342 /* Don't balance among write-mostly, just
2343 * use the first as a last resort */
2344 - if (best_disk < 0) {
2345 + if (best_dist_disk < 0) {
2346 if (is_badblock(rdev, this_sector, sectors,
2347 &first_bad, &bad_sectors)) {
2348 if (first_bad < this_sector)
2349 @@ -569,7 +569,8 @@ static int read_balance(struct r1conf *conf, struct r1bio *r1_bio, int *max_sect
2350 best_good_sectors = first_bad - this_sector;
2351 } else
2352 best_good_sectors = sectors;
2353 - best_disk = disk;
2354 + best_dist_disk = disk;
2355 + best_pending_disk = disk;
2356 }
2357 continue;
2358 }
2359 diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
2360 index b98765f6f77f..8577cc7db47e 100644
2361 --- a/drivers/md/raid5.c
2362 +++ b/drivers/md/raid5.c
2363 @@ -3102,7 +3102,8 @@ static void handle_stripe_dirtying(struct r5conf *conf,
2364 * generate correct data from the parity.
2365 */
2366 if (conf->max_degraded == 2 ||
2367 - (recovery_cp < MaxSector && sh->sector >= recovery_cp)) {
2368 + (recovery_cp < MaxSector && sh->sector >= recovery_cp &&
2369 + s->failed == 0)) {
2370 /* Calculate the real rcw later - for now make it
2371 * look like rcw is cheaper
2372 */
2373 diff --git a/drivers/media/dvb-frontends/si2168.c b/drivers/media/dvb-frontends/si2168.c
2374 index 1cd93be281ed..64a759c017d4 100644
2375 --- a/drivers/media/dvb-frontends/si2168.c
2376 +++ b/drivers/media/dvb-frontends/si2168.c
2377 @@ -605,6 +605,8 @@ static const struct dvb_frontend_ops si2168_ops = {
2378 .delsys = {SYS_DVBT, SYS_DVBT2, SYS_DVBC_ANNEX_A},
2379 .info = {
2380 .name = "Silicon Labs Si2168",
2381 + .symbol_rate_min = 1000000,
2382 + .symbol_rate_max = 7200000,
2383 .caps = FE_CAN_FEC_1_2 |
2384 FE_CAN_FEC_2_3 |
2385 FE_CAN_FEC_3_4 |
2386 diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig
2387 index 3aac88f1d54a..736277236ba2 100644
2388 --- a/drivers/media/platform/Kconfig
2389 +++ b/drivers/media/platform/Kconfig
2390 @@ -56,10 +56,8 @@ config VIDEO_VIU
2391
2392 config VIDEO_TIMBERDALE
2393 tristate "Support for timberdale Video In/LogiWIN"
2394 - depends on VIDEO_V4L2 && I2C && DMADEVICES
2395 - depends on MFD_TIMBERDALE || COMPILE_TEST
2396 - select DMA_ENGINE
2397 - select TIMB_DMA
2398 + depends on VIDEO_V4L2 && I2C
2399 + depends on (MFD_TIMBERDALE && TIMB_DMA) || COMPILE_TEST
2400 select VIDEO_ADV7180
2401 select VIDEOBUF_DMA_CONTIG
2402 ---help---
2403 diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c
2404 index 8d3b74c5a717..fc369b033484 100644
2405 --- a/drivers/media/rc/rc-main.c
2406 +++ b/drivers/media/rc/rc-main.c
2407 @@ -1021,16 +1021,16 @@ static ssize_t store_protocols(struct device *device,
2408 goto out;
2409 }
2410
2411 - if (new_protocols == old_protocols) {
2412 - rc = len;
2413 - goto out;
2414 + if (new_protocols != old_protocols) {
2415 + *current_protocols = new_protocols;
2416 + IR_dprintk(1, "Protocols changed to 0x%llx\n",
2417 + (long long)new_protocols);
2418 }
2419
2420 - *current_protocols = new_protocols;
2421 - IR_dprintk(1, "Protocols changed to 0x%llx\n", (long long)new_protocols);
2422 -
2423 /*
2424 - * If the protocol is changed the filter needs updating.
2425 + * If a protocol change was attempted the filter may need updating, even
2426 + * if the actual protocol mask hasn't changed (since the driver may have
2427 + * cleared the filter).
2428 * Try setting the same filter with the new protocol (if any).
2429 * Fall back to clearing the filter.
2430 */
2431 diff --git a/drivers/media/usb/dvb-usb-v2/lmedm04.c b/drivers/media/usb/dvb-usb-v2/lmedm04.c
2432 index 9f2c5459b73a..2273ce78f5c8 100644
2433 --- a/drivers/media/usb/dvb-usb-v2/lmedm04.c
2434 +++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c
2435 @@ -344,15 +344,17 @@ static void lme2510_int_response(struct urb *lme_urb)
2436
2437 usb_submit_urb(lme_urb, GFP_ATOMIC);
2438
2439 - /* interrupt urb is due every 48 msecs while streaming
2440 - * add 12msecs for system lag */
2441 - st->int_urb_due = jiffies + msecs_to_jiffies(60);
2442 + /* Interrupt urb is due every 48 msecs while streaming the buffer
2443 + * stores up to 4 periods if missed. Allow 200 msec for next interrupt.
2444 + */
2445 + st->int_urb_due = jiffies + msecs_to_jiffies(200);
2446 }
2447
2448 static int lme2510_int_read(struct dvb_usb_adapter *adap)
2449 {
2450 struct dvb_usb_device *d = adap_to_d(adap);
2451 struct lme2510_state *lme_int = adap_to_priv(adap);
2452 + struct usb_host_endpoint *ep;
2453
2454 lme_int->lme_urb = usb_alloc_urb(0, GFP_ATOMIC);
2455
2456 @@ -374,6 +376,12 @@ static int lme2510_int_read(struct dvb_usb_adapter *adap)
2457 adap,
2458 8);
2459
2460 + /* Quirk of pipe reporting PIPE_BULK but behaves as interrupt */
2461 + ep = usb_pipe_endpoint(d->udev, lme_int->lme_urb->pipe);
2462 +
2463 + if (usb_endpoint_type(&ep->desc) == USB_ENDPOINT_XFER_BULK)
2464 + lme_int->lme_urb->pipe = usb_rcvbulkpipe(d->udev, 0xa),
2465 +
2466 lme_int->lme_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
2467
2468 usb_submit_urb(lme_int->lme_urb, GFP_ATOMIC);
2469 diff --git a/drivers/media/usb/em28xx/em28xx-audio.c b/drivers/media/usb/em28xx/em28xx-audio.c
2470 index 957c7ae30efe..1ead904a7043 100644
2471 --- a/drivers/media/usb/em28xx/em28xx-audio.c
2472 +++ b/drivers/media/usb/em28xx/em28xx-audio.c
2473 @@ -821,7 +821,7 @@ static int em28xx_audio_urb_init(struct em28xx *dev)
2474 if (urb_size > ep_size * npackets)
2475 npackets = DIV_ROUND_UP(urb_size, ep_size);
2476
2477 - em28xx_info("Number of URBs: %d, with %d packets and %d size",
2478 + em28xx_info("Number of URBs: %d, with %d packets and %d size\n",
2479 num_urb, npackets, urb_size);
2480
2481 /* Estimate the bytes per period */
2482 @@ -982,7 +982,7 @@ static int em28xx_audio_fini(struct em28xx *dev)
2483 return 0;
2484 }
2485
2486 - em28xx_info("Closing audio extension");
2487 + em28xx_info("Closing audio extension\n");
2488
2489 if (dev->adev.sndcard) {
2490 snd_card_disconnect(dev->adev.sndcard);
2491 @@ -1006,7 +1006,7 @@ static int em28xx_audio_suspend(struct em28xx *dev)
2492 if (dev->usb_audio_type != EM28XX_USB_AUDIO_VENDOR)
2493 return 0;
2494
2495 - em28xx_info("Suspending audio extension");
2496 + em28xx_info("Suspending audio extension\n");
2497 em28xx_deinit_isoc_audio(dev);
2498 atomic_set(&dev->adev.stream_started, 0);
2499 return 0;
2500 @@ -1020,7 +1020,7 @@ static int em28xx_audio_resume(struct em28xx *dev)
2501 if (dev->usb_audio_type != EM28XX_USB_AUDIO_VENDOR)
2502 return 0;
2503
2504 - em28xx_info("Resuming audio extension");
2505 + em28xx_info("Resuming audio extension\n");
2506 /* Nothing to do other than schedule_work() ?? */
2507 schedule_work(&dev->adev.wq_trigger);
2508 return 0;
2509 diff --git a/drivers/media/usb/em28xx/em28xx-core.c b/drivers/media/usb/em28xx/em28xx-core.c
2510 index 901cf2b952d7..84dd4aec70fb 100644
2511 --- a/drivers/media/usb/em28xx/em28xx-core.c
2512 +++ b/drivers/media/usb/em28xx/em28xx-core.c
2513 @@ -1122,7 +1122,7 @@ int em28xx_suspend_extension(struct em28xx *dev)
2514 {
2515 const struct em28xx_ops *ops = NULL;
2516
2517 - em28xx_info("Suspending extensions");
2518 + em28xx_info("Suspending extensions\n");
2519 mutex_lock(&em28xx_devlist_mutex);
2520 list_for_each_entry(ops, &em28xx_extension_devlist, next) {
2521 if (ops->suspend)
2522 @@ -1136,7 +1136,7 @@ int em28xx_resume_extension(struct em28xx *dev)
2523 {
2524 const struct em28xx_ops *ops = NULL;
2525
2526 - em28xx_info("Resuming extensions");
2527 + em28xx_info("Resuming extensions\n");
2528 mutex_lock(&em28xx_devlist_mutex);
2529 list_for_each_entry(ops, &em28xx_extension_devlist, next) {
2530 if (ops->resume)
2531 diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c
2532 index 9682c52d67d1..41a6864ab8d2 100644
2533 --- a/drivers/media/usb/em28xx/em28xx-dvb.c
2534 +++ b/drivers/media/usb/em28xx/em28xx-dvb.c
2535 @@ -1667,7 +1667,7 @@ static int em28xx_dvb_fini(struct em28xx *dev)
2536 if (!dev->dvb)
2537 return 0;
2538
2539 - em28xx_info("Closing DVB extension");
2540 + em28xx_info("Closing DVB extension\n");
2541
2542 dvb = dev->dvb;
2543 client = dvb->i2c_client_tuner;
2544 @@ -1718,17 +1718,17 @@ static int em28xx_dvb_suspend(struct em28xx *dev)
2545 if (!dev->board.has_dvb)
2546 return 0;
2547
2548 - em28xx_info("Suspending DVB extension");
2549 + em28xx_info("Suspending DVB extension\n");
2550 if (dev->dvb) {
2551 struct em28xx_dvb *dvb = dev->dvb;
2552
2553 if (dvb->fe[0]) {
2554 ret = dvb_frontend_suspend(dvb->fe[0]);
2555 - em28xx_info("fe0 suspend %d", ret);
2556 + em28xx_info("fe0 suspend %d\n", ret);
2557 }
2558 if (dvb->fe[1]) {
2559 dvb_frontend_suspend(dvb->fe[1]);
2560 - em28xx_info("fe1 suspend %d", ret);
2561 + em28xx_info("fe1 suspend %d\n", ret);
2562 }
2563 }
2564
2565 @@ -1745,18 +1745,18 @@ static int em28xx_dvb_resume(struct em28xx *dev)
2566 if (!dev->board.has_dvb)
2567 return 0;
2568
2569 - em28xx_info("Resuming DVB extension");
2570 + em28xx_info("Resuming DVB extension\n");
2571 if (dev->dvb) {
2572 struct em28xx_dvb *dvb = dev->dvb;
2573
2574 if (dvb->fe[0]) {
2575 ret = dvb_frontend_resume(dvb->fe[0]);
2576 - em28xx_info("fe0 resume %d", ret);
2577 + em28xx_info("fe0 resume %d\n", ret);
2578 }
2579
2580 if (dvb->fe[1]) {
2581 ret = dvb_frontend_resume(dvb->fe[1]);
2582 - em28xx_info("fe1 resume %d", ret);
2583 + em28xx_info("fe1 resume %d\n", ret);
2584 }
2585 }
2586
2587 diff --git a/drivers/media/usb/em28xx/em28xx-input.c b/drivers/media/usb/em28xx/em28xx-input.c
2588 index 23f8f6afa2e0..b31e275faa2e 100644
2589 --- a/drivers/media/usb/em28xx/em28xx-input.c
2590 +++ b/drivers/media/usb/em28xx/em28xx-input.c
2591 @@ -833,7 +833,7 @@ static int em28xx_ir_fini(struct em28xx *dev)
2592 return 0;
2593 }
2594
2595 - em28xx_info("Closing input extension");
2596 + em28xx_info("Closing input extension\n");
2597
2598 em28xx_shutdown_buttons(dev);
2599
2600 @@ -863,7 +863,7 @@ static int em28xx_ir_suspend(struct em28xx *dev)
2601 if (dev->is_audio_only)
2602 return 0;
2603
2604 - em28xx_info("Suspending input extension");
2605 + em28xx_info("Suspending input extension\n");
2606 if (ir)
2607 cancel_delayed_work_sync(&ir->work);
2608 cancel_delayed_work_sync(&dev->buttons_query_work);
2609 @@ -880,7 +880,7 @@ static int em28xx_ir_resume(struct em28xx *dev)
2610 if (dev->is_audio_only)
2611 return 0;
2612
2613 - em28xx_info("Resuming input extension");
2614 + em28xx_info("Resuming input extension\n");
2615 /* if suspend calls ir_raw_event_unregister(), the should call
2616 ir_raw_event_register() */
2617 if (ir)
2618 diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c
2619 index 03d5ece0319c..e0f4be8c5a19 100644
2620 --- a/drivers/media/usb/em28xx/em28xx-video.c
2621 +++ b/drivers/media/usb/em28xx/em28xx-video.c
2622 @@ -1956,7 +1956,7 @@ static int em28xx_v4l2_fini(struct em28xx *dev)
2623 if (v4l2 == NULL)
2624 return 0;
2625
2626 - em28xx_info("Closing video extension");
2627 + em28xx_info("Closing video extension\n");
2628
2629 mutex_lock(&dev->lock);
2630
2631 @@ -2005,7 +2005,7 @@ static int em28xx_v4l2_suspend(struct em28xx *dev)
2632 if (!dev->has_video)
2633 return 0;
2634
2635 - em28xx_info("Suspending video extension");
2636 + em28xx_info("Suspending video extension\n");
2637 em28xx_stop_urbs(dev);
2638 return 0;
2639 }
2640 @@ -2018,7 +2018,7 @@ static int em28xx_v4l2_resume(struct em28xx *dev)
2641 if (!dev->has_video)
2642 return 0;
2643
2644 - em28xx_info("Resuming video extension");
2645 + em28xx_info("Resuming video extension\n");
2646 /* what do we do here */
2647 return 0;
2648 }
2649 diff --git a/drivers/misc/mei/hw-me.c b/drivers/misc/mei/hw-me.c
2650 index 432aec8dd3ce..350a28af98aa 100644
2651 --- a/drivers/misc/mei/hw-me.c
2652 +++ b/drivers/misc/mei/hw-me.c
2653 @@ -242,7 +242,7 @@ static int mei_me_hw_reset(struct mei_device *dev, bool intr_enable)
2654 if ((hcsr & H_RST) == H_RST) {
2655 dev_warn(dev->dev, "H_RST is set = 0x%08X", hcsr);
2656 hcsr &= ~H_RST;
2657 - mei_me_reg_write(hw, H_CSR, hcsr);
2658 + mei_hcsr_set(hw, hcsr);
2659 hcsr = mei_hcsr_read(hw);
2660 }
2661
2662 @@ -335,6 +335,7 @@ static int mei_me_hw_ready_wait(struct mei_device *dev)
2663 return -ETIME;
2664 }
2665
2666 + mei_me_hw_reset_release(dev);
2667 dev->recvd_hw_ready = false;
2668 return 0;
2669 }
2670 @@ -729,9 +730,7 @@ irqreturn_t mei_me_irq_thread_handler(int irq, void *dev_id)
2671 /* check if we need to start the dev */
2672 if (!mei_host_is_ready(dev)) {
2673 if (mei_hw_is_ready(dev)) {
2674 - mei_me_hw_reset_release(dev);
2675 dev_dbg(dev->dev, "we need to start the dev.\n");
2676 -
2677 dev->recvd_hw_ready = true;
2678 wake_up(&dev->wait_hw_ready);
2679 } else {
2680 diff --git a/drivers/mmc/host/sdhci-pxav3.c b/drivers/mmc/host/sdhci-pxav3.c
2681 index 5036d7d39529..38251da7ba32 100644
2682 --- a/drivers/mmc/host/sdhci-pxav3.c
2683 +++ b/drivers/mmc/host/sdhci-pxav3.c
2684 @@ -112,6 +112,38 @@ static int mv_conf_mbus_windows(struct platform_device *pdev,
2685 return 0;
2686 }
2687
2688 +static int armada_38x_quirks(struct platform_device *pdev,
2689 + struct sdhci_host *host)
2690 +{
2691 + struct device_node *np = pdev->dev.of_node;
2692 +
2693 + host->quirks |= SDHCI_QUIRK_MISSING_CAPS;
2694 + /*
2695 + * According to erratum 'FE-2946959' both SDR50 and DDR50
2696 + * modes require specific clock adjustments in SDIO3
2697 + * Configuration register, if the adjustment is not done,
2698 + * remove them from the capabilities.
2699 + */
2700 + host->caps1 = sdhci_readl(host, SDHCI_CAPABILITIES_1);
2701 + host->caps1 &= ~(SDHCI_SUPPORT_SDR50 | SDHCI_SUPPORT_DDR50);
2702 +
2703 + /*
2704 + * According to erratum 'ERR-7878951' Armada 38x SDHCI
2705 + * controller has different capabilities than the ones shown
2706 + * in its registers
2707 + */
2708 + host->caps = sdhci_readl(host, SDHCI_CAPABILITIES);
2709 + if (of_property_read_bool(np, "no-1-8-v")) {
2710 + host->caps &= ~SDHCI_CAN_VDD_180;
2711 + host->mmc->caps &= ~MMC_CAP_1_8V_DDR;
2712 + } else {
2713 + host->caps &= ~SDHCI_CAN_VDD_330;
2714 + }
2715 + host->caps1 &= ~(SDHCI_SUPPORT_SDR104 | SDHCI_USE_SDR50_TUNING);
2716 +
2717 + return 0;
2718 +}
2719 +
2720 static void pxav3_reset(struct sdhci_host *host, u8 mask)
2721 {
2722 struct platform_device *pdev = to_platform_device(mmc_dev(host->mmc));
2723 @@ -261,8 +293,8 @@ static struct sdhci_pxa_platdata *pxav3_get_mmc_pdata(struct device *dev)
2724 if (!pdata)
2725 return NULL;
2726
2727 - of_property_read_u32(np, "mrvl,clk-delay-cycles", &clk_delay_cycles);
2728 - if (clk_delay_cycles > 0)
2729 + if (!of_property_read_u32(np, "mrvl,clk-delay-cycles",
2730 + &clk_delay_cycles))
2731 pdata->clk_delay_cycles = clk_delay_cycles;
2732
2733 return pdata;
2734 @@ -295,7 +327,13 @@ static int sdhci_pxav3_probe(struct platform_device *pdev)
2735 if (IS_ERR(host))
2736 return PTR_ERR(host);
2737
2738 + /* enable 1/8V DDR capable */
2739 + host->mmc->caps |= MMC_CAP_1_8V_DDR;
2740 +
2741 if (of_device_is_compatible(np, "marvell,armada-380-sdhci")) {
2742 + ret = armada_38x_quirks(pdev, host);
2743 + if (ret < 0)
2744 + goto err_clk_get;
2745 ret = mv_conf_mbus_windows(pdev, mv_mbus_dram_info());
2746 if (ret < 0)
2747 goto err_mbus_win;
2748 @@ -314,9 +352,6 @@ static int sdhci_pxav3_probe(struct platform_device *pdev)
2749 pltfm_host->clk = clk;
2750 clk_prepare_enable(clk);
2751
2752 - /* enable 1/8V DDR capable */
2753 - host->mmc->caps |= MMC_CAP_1_8V_DDR;
2754 -
2755 match = of_match_device(of_match_ptr(sdhci_pxav3_of_match), &pdev->dev);
2756 if (match) {
2757 ret = mmc_of_parse(host->mmc);
2758 @@ -355,10 +390,11 @@ static int sdhci_pxav3_probe(struct platform_device *pdev)
2759 }
2760 }
2761
2762 - pm_runtime_enable(&pdev->dev);
2763 - pm_runtime_get_sync(&pdev->dev);
2764 + pm_runtime_get_noresume(&pdev->dev);
2765 + pm_runtime_set_active(&pdev->dev);
2766 pm_runtime_set_autosuspend_delay(&pdev->dev, PXAV3_RPM_DELAY_MS);
2767 pm_runtime_use_autosuspend(&pdev->dev);
2768 + pm_runtime_enable(&pdev->dev);
2769 pm_suspend_ignore_children(&pdev->dev, 1);
2770
2771 ret = sdhci_add_host(host);
2772 @@ -381,8 +417,8 @@ static int sdhci_pxav3_probe(struct platform_device *pdev)
2773 return 0;
2774
2775 err_add_host:
2776 - pm_runtime_put_sync(&pdev->dev);
2777 pm_runtime_disable(&pdev->dev);
2778 + pm_runtime_put_noidle(&pdev->dev);
2779 err_of_parse:
2780 err_cd_req:
2781 clk_disable_unprepare(clk);
2782 diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
2783 index b6d2683da3a9..f71c22f8beea 100644
2784 --- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
2785 +++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
2786 @@ -668,9 +668,6 @@ static void iwl_mvm_cleanup_iterator(void *data, u8 *mac,
2787 mvmvif->uploaded = false;
2788 mvmvif->ap_sta_id = IWL_MVM_STATION_COUNT;
2789
2790 - /* does this make sense at all? */
2791 - mvmvif->color++;
2792 -
2793 spin_lock_bh(&mvm->time_event_lock);
2794 iwl_mvm_te_clear_data(mvm, &mvmvif->time_event_data);
2795 spin_unlock_bh(&mvm->time_event_lock);
2796 @@ -1014,7 +1011,7 @@ static int iwl_mvm_mac_add_interface(struct ieee80211_hw *hw,
2797
2798 ret = iwl_mvm_power_update_mac(mvm);
2799 if (ret)
2800 - goto out_release;
2801 + goto out_remove_mac;
2802
2803 /* beacon filtering */
2804 ret = iwl_mvm_disable_beacon_filter(mvm, vif, 0);
2805 diff --git a/drivers/net/wireless/iwlwifi/mvm/tx.c b/drivers/net/wireless/iwlwifi/mvm/tx.c
2806 index c6a517c771df..5928c9db49ce 100644
2807 --- a/drivers/net/wireless/iwlwifi/mvm/tx.c
2808 +++ b/drivers/net/wireless/iwlwifi/mvm/tx.c
2809 @@ -902,6 +902,11 @@ int iwl_mvm_rx_ba_notif(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb,
2810 sta_id = ba_notif->sta_id;
2811 tid = ba_notif->tid;
2812
2813 + if (WARN_ONCE(sta_id >= IWL_MVM_STATION_COUNT ||
2814 + tid >= IWL_MAX_TID_COUNT,
2815 + "sta_id %d tid %d", sta_id, tid))
2816 + return 0;
2817 +
2818 rcu_read_lock();
2819
2820 sta = rcu_dereference(mvm->fw_id_to_mac_id[sta_id]);
2821 diff --git a/drivers/net/wireless/iwlwifi/pcie/tx.c b/drivers/net/wireless/iwlwifi/pcie/tx.c
2822 index eb8e2984c5e9..62ea2b550832 100644
2823 --- a/drivers/net/wireless/iwlwifi/pcie/tx.c
2824 +++ b/drivers/net/wireless/iwlwifi/pcie/tx.c
2825 @@ -722,7 +722,12 @@ void iwl_trans_pcie_tx_reset(struct iwl_trans *trans)
2826 iwl_write_direct32(trans, FH_KW_MEM_ADDR_REG,
2827 trans_pcie->kw.dma >> 4);
2828
2829 - iwl_pcie_tx_start(trans, trans_pcie->scd_base_addr);
2830 + /*
2831 + * Send 0 as the scd_base_addr since the device may have be reset
2832 + * while we were in WoWLAN in which case SCD_SRAM_BASE_ADDR will
2833 + * contain garbage.
2834 + */
2835 + iwl_pcie_tx_start(trans, 0);
2836 }
2837
2838 /*
2839 diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c
2840 index c70efb9a6e78..e25faacf58b7 100644
2841 --- a/drivers/net/wireless/rtlwifi/pci.c
2842 +++ b/drivers/net/wireless/rtlwifi/pci.c
2843 @@ -816,11 +816,8 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw)
2844
2845 /* get a new skb - if fail, old one will be reused */
2846 new_skb = dev_alloc_skb(rtlpci->rxbuffersize);
2847 - if (unlikely(!new_skb)) {
2848 - pr_err("Allocation of new skb failed in %s\n",
2849 - __func__);
2850 + if (unlikely(!new_skb))
2851 goto no_new;
2852 - }
2853 if (rtlpriv->use_new_trx_flow) {
2854 buffer_desc =
2855 &rtlpci->rx_ring[rxring_idx].buffer_desc
2856 diff --git a/drivers/net/wireless/rtlwifi/pci.h b/drivers/net/wireless/rtlwifi/pci.h
2857 index 5e832306dba9..d4567d12e07e 100644
2858 --- a/drivers/net/wireless/rtlwifi/pci.h
2859 +++ b/drivers/net/wireless/rtlwifi/pci.h
2860 @@ -325,4 +325,11 @@ static inline void pci_write32_async(struct rtl_priv *rtlpriv,
2861 writel(val, (u8 __iomem *) rtlpriv->io.pci_mem_start + addr);
2862 }
2863
2864 +static inline u16 calc_fifo_space(u16 rp, u16 wp)
2865 +{
2866 + if (rp <= wp)
2867 + return RTL_PCI_MAX_RX_COUNT - 1 + rp - wp;
2868 + return rp - wp - 1;
2869 +}
2870 +
2871 #endif
2872 diff --git a/drivers/net/wireless/rtlwifi/rtl8192ee/fw.c b/drivers/net/wireless/rtlwifi/rtl8192ee/fw.c
2873 index 45c128b91f7f..c5d4b8013cde 100644
2874 --- a/drivers/net/wireless/rtlwifi/rtl8192ee/fw.c
2875 +++ b/drivers/net/wireless/rtlwifi/rtl8192ee/fw.c
2876 @@ -666,7 +666,6 @@ void rtl92ee_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished)
2877 struct sk_buff *skb = NULL;
2878
2879 u32 totalpacketlen;
2880 - bool rtstatus;
2881 u8 u1rsvdpageloc[5] = { 0 };
2882 bool b_dlok = false;
2883
2884 @@ -728,10 +727,7 @@ void rtl92ee_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished)
2885 memcpy((u8 *)skb_put(skb, totalpacketlen),
2886 &reserved_page_packet, totalpacketlen);
2887
2888 - rtstatus = rtl_cmd_send_packet(hw, skb);
2889 -
2890 - if (rtstatus)
2891 - b_dlok = true;
2892 + b_dlok = true;
2893
2894 if (b_dlok) {
2895 RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD ,
2896 diff --git a/drivers/net/wireless/rtlwifi/rtl8192ee/hw.c b/drivers/net/wireless/rtlwifi/rtl8192ee/hw.c
2897 index 1a87edca2c3f..b461b3128da5 100644
2898 --- a/drivers/net/wireless/rtlwifi/rtl8192ee/hw.c
2899 +++ b/drivers/net/wireless/rtlwifi/rtl8192ee/hw.c
2900 @@ -85,29 +85,6 @@ static void _rtl92ee_enable_bcn_sub_func(struct ieee80211_hw *hw)
2901 _rtl92ee_set_bcn_ctrl_reg(hw, 0, BIT(1));
2902 }
2903
2904 -static void _rtl92ee_return_beacon_queue_skb(struct ieee80211_hw *hw)
2905 -{
2906 - struct rtl_priv *rtlpriv = rtl_priv(hw);
2907 - struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
2908 - struct rtl8192_tx_ring *ring = &rtlpci->tx_ring[BEACON_QUEUE];
2909 - unsigned long flags;
2910 -
2911 - spin_lock_irqsave(&rtlpriv->locks.irq_th_lock, flags);
2912 - while (skb_queue_len(&ring->queue)) {
2913 - struct rtl_tx_buffer_desc *entry =
2914 - &ring->buffer_desc[ring->idx];
2915 - struct sk_buff *skb = __skb_dequeue(&ring->queue);
2916 -
2917 - pci_unmap_single(rtlpci->pdev,
2918 - rtlpriv->cfg->ops->get_desc(
2919 - (u8 *)entry, true, HW_DESC_TXBUFF_ADDR),
2920 - skb->len, PCI_DMA_TODEVICE);
2921 - kfree_skb(skb);
2922 - ring->idx = (ring->idx + 1) % ring->entries;
2923 - }
2924 - spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags);
2925 -}
2926 -
2927 static void _rtl92ee_disable_bcn_sub_func(struct ieee80211_hw *hw)
2928 {
2929 _rtl92ee_set_bcn_ctrl_reg(hw, BIT(1), 0);
2930 @@ -403,9 +380,6 @@ static void _rtl92ee_download_rsvd_page(struct ieee80211_hw *hw)
2931 rtl_write_byte(rtlpriv, REG_DWBCN0_CTRL + 2,
2932 bcnvalid_reg | BIT(0));
2933
2934 - /* Return Beacon TCB */
2935 - _rtl92ee_return_beacon_queue_skb(hw);
2936 -
2937 /* download rsvd page */
2938 rtl92ee_set_fw_rsvdpagepkt(hw, false);
2939
2940 @@ -1163,6 +1137,139 @@ void rtl92ee_enable_hw_security_config(struct ieee80211_hw *hw)
2941 rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_WPA_CONFIG, &sec_reg_value);
2942 }
2943
2944 +static bool _rtl8192ee_check_pcie_dma_hang(struct rtl_priv *rtlpriv)
2945 +{
2946 + u8 tmp;
2947 +
2948 + /* write reg 0x350 Bit[26]=1. Enable debug port. */
2949 + tmp = rtl_read_byte(rtlpriv, REG_BACKDOOR_DBI_DATA + 3);
2950 + if (!(tmp & BIT(2))) {
2951 + rtl_write_byte(rtlpriv, REG_BACKDOOR_DBI_DATA + 3,
2952 + tmp | BIT(2));
2953 + mdelay(100); /* Suggested by DD Justin_tsai. */
2954 + }
2955 +
2956 + /* read reg 0x350 Bit[25] if 1 : RX hang
2957 + * read reg 0x350 Bit[24] if 1 : TX hang
2958 + */
2959 + tmp = rtl_read_byte(rtlpriv, REG_BACKDOOR_DBI_DATA + 3);
2960 + if ((tmp & BIT(0)) || (tmp & BIT(1))) {
2961 + RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
2962 + "CheckPcieDMAHang8192EE(): true!!\n");
2963 + return true;
2964 + }
2965 + return false;
2966 +}
2967 +
2968 +static void _rtl8192ee_reset_pcie_interface_dma(struct rtl_priv *rtlpriv,
2969 + bool mac_power_on)
2970 +{
2971 + u8 tmp;
2972 + bool release_mac_rx_pause;
2973 + u8 backup_pcie_dma_pause;
2974 +
2975 + RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
2976 + "ResetPcieInterfaceDMA8192EE()\n");
2977 +
2978 + /* Revise Note: Follow the document "PCIe RX DMA Hang Reset Flow_v03"
2979 + * released by SD1 Alan.
2980 + */
2981 +
2982 + /* 1. disable register write lock
2983 + * write 0x1C bit[1:0] = 2'h0
2984 + * write 0xCC bit[2] = 1'b1
2985 + */
2986 + tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL);
2987 + tmp &= ~(BIT(1) | BIT(0));
2988 + rtl_write_byte(rtlpriv, REG_RSV_CTRL, tmp);
2989 + tmp = rtl_read_byte(rtlpriv, REG_PMC_DBG_CTRL2);
2990 + tmp |= BIT(2);
2991 + rtl_write_byte(rtlpriv, REG_PMC_DBG_CTRL2, tmp);
2992 +
2993 + /* 2. Check and pause TRX DMA
2994 + * write 0x284 bit[18] = 1'b1
2995 + * write 0x301 = 0xFF
2996 + */
2997 + tmp = rtl_read_byte(rtlpriv, REG_RXDMA_CONTROL);
2998 + if (tmp & BIT(2)) {
2999 + /* Already pause before the function for another reason. */
3000 + release_mac_rx_pause = false;
3001 + } else {
3002 + rtl_write_byte(rtlpriv, REG_RXDMA_CONTROL, (tmp | BIT(2)));
3003 + release_mac_rx_pause = true;
3004 + }
3005 +
3006 + backup_pcie_dma_pause = rtl_read_byte(rtlpriv, REG_PCIE_CTRL_REG + 1);
3007 + if (backup_pcie_dma_pause != 0xFF)
3008 + rtl_write_byte(rtlpriv, REG_PCIE_CTRL_REG + 1, 0xFF);
3009 +
3010 + if (mac_power_on) {
3011 + /* 3. reset TRX function
3012 + * write 0x100 = 0x00
3013 + */
3014 + rtl_write_byte(rtlpriv, REG_CR, 0);
3015 + }
3016 +
3017 + /* 4. Reset PCIe DMA
3018 + * write 0x003 bit[0] = 0
3019 + */
3020 + tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1);
3021 + tmp &= ~(BIT(0));
3022 + rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN + 1, tmp);
3023 +
3024 + /* 5. Enable PCIe DMA
3025 + * write 0x003 bit[0] = 1
3026 + */
3027 + tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1);
3028 + tmp |= BIT(0);
3029 + rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN + 1, tmp);
3030 +
3031 + if (mac_power_on) {
3032 + /* 6. enable TRX function
3033 + * write 0x100 = 0xFF
3034 + */
3035 + rtl_write_byte(rtlpriv, REG_CR, 0xFF);
3036 +
3037 + /* We should init LLT & RQPN and
3038 + * prepare Tx/Rx descrptor address later
3039 + * because MAC function is reset.
3040 + */
3041 + }
3042 +
3043 + /* 7. Restore PCIe autoload down bit
3044 + * write 0xF8 bit[17] = 1'b1
3045 + */
3046 + tmp = rtl_read_byte(rtlpriv, REG_MAC_PHY_CTRL_NORMAL + 2);
3047 + tmp |= BIT(1);
3048 + rtl_write_byte(rtlpriv, REG_MAC_PHY_CTRL_NORMAL + 2, tmp);
3049 +
3050 + /* In MAC power on state, BB and RF maybe in ON state,
3051 + * if we release TRx DMA here
3052 + * it will cause packets to be started to Tx/Rx,
3053 + * so we release Tx/Rx DMA later.
3054 + */
3055 + if (!mac_power_on) {
3056 + /* 8. release TRX DMA
3057 + * write 0x284 bit[18] = 1'b0
3058 + * write 0x301 = 0x00
3059 + */
3060 + if (release_mac_rx_pause) {
3061 + tmp = rtl_read_byte(rtlpriv, REG_RXDMA_CONTROL);
3062 + rtl_write_byte(rtlpriv, REG_RXDMA_CONTROL,
3063 + (tmp & (~BIT(2))));
3064 + }
3065 + rtl_write_byte(rtlpriv, REG_PCIE_CTRL_REG + 1,
3066 + backup_pcie_dma_pause);
3067 + }
3068 +
3069 + /* 9. lock system register
3070 + * write 0xCC bit[2] = 1'b0
3071 + */
3072 + tmp = rtl_read_byte(rtlpriv, REG_PMC_DBG_CTRL2);
3073 + tmp &= ~(BIT(2));
3074 + rtl_write_byte(rtlpriv, REG_PMC_DBG_CTRL2, tmp);
3075 +}
3076 +
3077 int rtl92ee_hw_init(struct ieee80211_hw *hw)
3078 {
3079 struct rtl_priv *rtlpriv = rtl_priv(hw);
3080 @@ -1188,6 +1295,13 @@ int rtl92ee_hw_init(struct ieee80211_hw *hw)
3081 rtlhal->fw_ps_state = FW_PS_STATE_ALL_ON_92E;
3082 }
3083
3084 + if (_rtl8192ee_check_pcie_dma_hang(rtlpriv)) {
3085 + RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, "92ee dma hang!\n");
3086 + _rtl8192ee_reset_pcie_interface_dma(rtlpriv,
3087 + rtlhal->mac_func_enable);
3088 + rtlhal->mac_func_enable = false;
3089 + }
3090 +
3091 rtstatus = _rtl92ee_init_mac(hw);
3092
3093 rtl_write_byte(rtlpriv, 0x577, 0x03);
3094 diff --git a/drivers/net/wireless/rtlwifi/rtl8192ee/reg.h b/drivers/net/wireless/rtlwifi/rtl8192ee/reg.h
3095 index 3f2a9596e7cd..1eaa1fab550d 100644
3096 --- a/drivers/net/wireless/rtlwifi/rtl8192ee/reg.h
3097 +++ b/drivers/net/wireless/rtlwifi/rtl8192ee/reg.h
3098 @@ -77,9 +77,11 @@
3099 #define REG_HIMRE 0x00B8
3100 #define REG_HISRE 0x00BC
3101
3102 +#define REG_PMC_DBG_CTRL2 0x00CC
3103 #define REG_EFUSE_ACCESS 0x00CF
3104 #define REG_HPON_FSM 0x00EC
3105 #define REG_SYS_CFG1 0x00F0
3106 +#define REG_MAC_PHY_CTRL_NORMAL 0x00F8
3107 #define REG_SYS_CFG2 0x00FC
3108
3109 #define REG_CR 0x0100
3110 diff --git a/drivers/net/wireless/rtlwifi/rtl8192ee/trx.c b/drivers/net/wireless/rtlwifi/rtl8192ee/trx.c
3111 index 2fcbef1d029f..00690040be37 100644
3112 --- a/drivers/net/wireless/rtlwifi/rtl8192ee/trx.c
3113 +++ b/drivers/net/wireless/rtlwifi/rtl8192ee/trx.c
3114 @@ -512,6 +512,10 @@ bool rtl92ee_rx_query_desc(struct ieee80211_hw *hw,
3115 struct ieee80211_hdr *hdr;
3116 u32 phystatus = GET_RX_DESC_PHYST(pdesc);
3117
3118 + if (GET_RX_STATUS_DESC_RPT_SEL(pdesc) == 0)
3119 + status->packet_report_type = NORMAL_RX;
3120 + else
3121 + status->packet_report_type = C2H_PACKET;
3122 status->length = (u16)GET_RX_DESC_PKT_LEN(pdesc);
3123 status->rx_drvinfo_size = (u8)GET_RX_DESC_DRV_INFO_SIZE(pdesc) *
3124 RX_DRV_INFO_SIZE_UNIT;
3125 @@ -654,14 +658,7 @@ u16 rtl92ee_rx_desc_buff_remained_cnt(struct ieee80211_hw *hw, u8 queue_index)
3126 if (!start_rx)
3127 return 0;
3128
3129 - if ((last_read_point > (RX_DESC_NUM_92E / 2)) &&
3130 - (read_point <= (RX_DESC_NUM_92E / 2))) {
3131 - remind_cnt = RX_DESC_NUM_92E - write_point;
3132 - } else {
3133 - remind_cnt = (read_point >= write_point) ?
3134 - (read_point - write_point) :
3135 - (RX_DESC_NUM_92E - write_point + read_point);
3136 - }
3137 + remind_cnt = calc_fifo_space(read_point, write_point);
3138
3139 if (remind_cnt == 0)
3140 return 0;
3141 @@ -1207,8 +1204,7 @@ bool rtl92ee_is_tx_desc_closed(struct ieee80211_hw *hw, u8 hw_queue, u16 index)
3142 static u8 stop_report_cnt;
3143 struct rtl8192_tx_ring *ring = &rtlpci->tx_ring[hw_queue];
3144
3145 - /*checking Read/Write Point each interrupt wastes CPU */
3146 - if (stop_report_cnt > 15 || !rtlpriv->link_info.busytraffic) {
3147 + {
3148 u16 point_diff = 0;
3149 u16 cur_tx_rp, cur_tx_wp;
3150 u32 tmpu32 = 0;
3151 diff --git a/drivers/net/wireless/rtlwifi/rtl8192ee/trx.h b/drivers/net/wireless/rtlwifi/rtl8192ee/trx.h
3152 index 6f9be1c7515c..8effef9b13dd 100644
3153 --- a/drivers/net/wireless/rtlwifi/rtl8192ee/trx.h
3154 +++ b/drivers/net/wireless/rtlwifi/rtl8192ee/trx.h
3155 @@ -542,6 +542,8 @@
3156 LE_BITS_TO_4BYTE(__pdesc+8, 12, 4)
3157 #define GET_RX_DESC_RX_IS_QOS(__pdesc) \
3158 LE_BITS_TO_4BYTE(__pdesc+8, 16, 1)
3159 +#define GET_RX_STATUS_DESC_RPT_SEL(__pdesc) \
3160 + LE_BITS_TO_4BYTE(__pdesc+8, 28, 1)
3161
3162 #define GET_RX_DESC_RXMCS(__pdesc) \
3163 LE_BITS_TO_4BYTE(__pdesc+12, 0, 7)
3164 diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
3165 index 2b3c89425bb5..b720e7816a72 100644
3166 --- a/drivers/pci/pci-driver.c
3167 +++ b/drivers/pci/pci-driver.c
3168 @@ -1389,7 +1389,7 @@ static int pci_uevent(struct device *dev, struct kobj_uevent_env *env)
3169 if (add_uevent_var(env, "PCI_SLOT_NAME=%s", pci_name(pdev)))
3170 return -ENOMEM;
3171
3172 - if (add_uevent_var(env, "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02x",
3173 + if (add_uevent_var(env, "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02X",
3174 pdev->vendor, pdev->device,
3175 pdev->subsystem_vendor, pdev->subsystem_device,
3176 (u8)(pdev->class >> 16), (u8)(pdev->class >> 8),
3177 diff --git a/drivers/pci/rom.c b/drivers/pci/rom.c
3178 index f955edb9bea7..eb0ad530dc43 100644
3179 --- a/drivers/pci/rom.c
3180 +++ b/drivers/pci/rom.c
3181 @@ -71,6 +71,7 @@ size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size)
3182 {
3183 void __iomem *image;
3184 int last_image;
3185 + unsigned length;
3186
3187 image = rom;
3188 do {
3189 @@ -93,9 +94,9 @@ size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size)
3190 if (readb(pds + 3) != 'R')
3191 break;
3192 last_image = readb(pds + 21) & 0x80;
3193 - /* this length is reliable */
3194 - image += readw(pds + 16) * 512;
3195 - } while (!last_image);
3196 + length = readw(pds + 16);
3197 + image += length * 512;
3198 + } while (length && !last_image);
3199
3200 /* never return a size larger than the PCI resource window */
3201 /* there are known ROMs that get the size wrong */
3202 diff --git a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c
3203 index ff765d8e1a09..ce364a41842a 100644
3204 --- a/drivers/platform/x86/samsung-laptop.c
3205 +++ b/drivers/platform/x86/samsung-laptop.c
3206 @@ -353,6 +353,7 @@ struct samsung_quirks {
3207 bool broken_acpi_video;
3208 bool four_kbd_backlight_levels;
3209 bool enable_kbd_backlight;
3210 + bool use_native_backlight;
3211 };
3212
3213 static struct samsung_quirks samsung_unknown = {};
3214 @@ -361,6 +362,10 @@ static struct samsung_quirks samsung_broken_acpi_video = {
3215 .broken_acpi_video = true,
3216 };
3217
3218 +static struct samsung_quirks samsung_use_native_backlight = {
3219 + .use_native_backlight = true,
3220 +};
3221 +
3222 static struct samsung_quirks samsung_np740u3e = {
3223 .four_kbd_backlight_levels = true,
3224 .enable_kbd_backlight = true,
3225 @@ -1507,7 +1512,7 @@ static struct dmi_system_id __initdata samsung_dmi_table[] = {
3226 DMI_MATCH(DMI_PRODUCT_NAME, "N150P"),
3227 DMI_MATCH(DMI_BOARD_NAME, "N150P"),
3228 },
3229 - .driver_data = &samsung_broken_acpi_video,
3230 + .driver_data = &samsung_use_native_backlight,
3231 },
3232 {
3233 .callback = samsung_dmi_matched,
3234 @@ -1517,7 +1522,7 @@ static struct dmi_system_id __initdata samsung_dmi_table[] = {
3235 DMI_MATCH(DMI_PRODUCT_NAME, "N145P/N250P/N260P"),
3236 DMI_MATCH(DMI_BOARD_NAME, "N145P/N250P/N260P"),
3237 },
3238 - .driver_data = &samsung_broken_acpi_video,
3239 + .driver_data = &samsung_use_native_backlight,
3240 },
3241 {
3242 .callback = samsung_dmi_matched,
3243 @@ -1557,7 +1562,7 @@ static struct dmi_system_id __initdata samsung_dmi_table[] = {
3244 DMI_MATCH(DMI_PRODUCT_NAME, "N250P"),
3245 DMI_MATCH(DMI_BOARD_NAME, "N250P"),
3246 },
3247 - .driver_data = &samsung_broken_acpi_video,
3248 + .driver_data = &samsung_use_native_backlight,
3249 },
3250 {
3251 .callback = samsung_dmi_matched,
3252 @@ -1616,6 +1621,15 @@ static int __init samsung_init(void)
3253 pr_info("Disabling ACPI video driver\n");
3254 acpi_video_unregister();
3255 }
3256 +
3257 + if (samsung->quirks->use_native_backlight) {
3258 + pr_info("Using native backlight driver\n");
3259 + /* Tell acpi-video to not handle the backlight */
3260 + acpi_video_dmi_promote_vendor();
3261 + acpi_video_unregister();
3262 + /* And also do not handle it ourselves */
3263 + samsung->handle_backlight = false;
3264 + }
3265 #endif
3266
3267 ret = samsung_platform_init(samsung);
3268 diff --git a/drivers/power/88pm860x_charger.c b/drivers/power/88pm860x_charger.c
3269 index de029bbc1cc1..5ccca8743ce6 100644
3270 --- a/drivers/power/88pm860x_charger.c
3271 +++ b/drivers/power/88pm860x_charger.c
3272 @@ -711,6 +711,7 @@ static int pm860x_charger_probe(struct platform_device *pdev)
3273 return 0;
3274
3275 out_irq:
3276 + power_supply_unregister(&info->usb);
3277 while (--i >= 0)
3278 free_irq(info->irq[i], info);
3279 out:
3280 diff --git a/drivers/power/bq24190_charger.c b/drivers/power/bq24190_charger.c
3281 index ad3ff8fbfbbb..e4c95e1a6733 100644
3282 --- a/drivers/power/bq24190_charger.c
3283 +++ b/drivers/power/bq24190_charger.c
3284 @@ -929,7 +929,7 @@ static void bq24190_charger_init(struct power_supply *charger)
3285 charger->properties = bq24190_charger_properties;
3286 charger->num_properties = ARRAY_SIZE(bq24190_charger_properties);
3287 charger->supplied_to = bq24190_charger_supplied_to;
3288 - charger->num_supplies = ARRAY_SIZE(bq24190_charger_supplied_to);
3289 + charger->num_supplicants = ARRAY_SIZE(bq24190_charger_supplied_to);
3290 charger->get_property = bq24190_charger_get_property;
3291 charger->set_property = bq24190_charger_set_property;
3292 charger->property_is_writeable = bq24190_charger_property_is_writeable;
3293 diff --git a/drivers/power/gpio-charger.c b/drivers/power/gpio-charger.c
3294 index 7536933d0ab9..e5deb11bf1d5 100644
3295 --- a/drivers/power/gpio-charger.c
3296 +++ b/drivers/power/gpio-charger.c
3297 @@ -168,7 +168,7 @@ static int gpio_charger_suspend(struct device *dev)
3298
3299 if (device_may_wakeup(dev))
3300 gpio_charger->wakeup_enabled =
3301 - enable_irq_wake(gpio_charger->irq);
3302 + !enable_irq_wake(gpio_charger->irq);
3303
3304 return 0;
3305 }
3306 @@ -178,7 +178,7 @@ static int gpio_charger_resume(struct device *dev)
3307 struct platform_device *pdev = to_platform_device(dev);
3308 struct gpio_charger *gpio_charger = platform_get_drvdata(pdev);
3309
3310 - if (gpio_charger->wakeup_enabled)
3311 + if (device_may_wakeup(dev) && gpio_charger->wakeup_enabled)
3312 disable_irq_wake(gpio_charger->irq);
3313 power_supply_changed(&gpio_charger->charger);
3314
3315 diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
3316 index 5e881e5e67b6..6e503802947a 100644
3317 --- a/drivers/scsi/megaraid/megaraid_sas_base.c
3318 +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
3319 @@ -3556,7 +3556,6 @@ static int megasas_create_frame_pool(struct megasas_instance *instance)
3320 int i;
3321 u32 max_cmd;
3322 u32 sge_sz;
3323 - u32 sgl_sz;
3324 u32 total_sz;
3325 u32 frame_count;
3326 struct megasas_cmd *cmd;
3327 @@ -3575,24 +3574,23 @@ static int megasas_create_frame_pool(struct megasas_instance *instance)
3328 }
3329
3330 /*
3331 - * Calculated the number of 64byte frames required for SGL
3332 - */
3333 - sgl_sz = sge_sz * instance->max_num_sge;
3334 - frame_count = (sgl_sz + MEGAMFI_FRAME_SIZE - 1) / MEGAMFI_FRAME_SIZE;
3335 - frame_count = 15;
3336 -
3337 - /*
3338 - * We need one extra frame for the MFI command
3339 + * For MFI controllers.
3340 + * max_num_sge = 60
3341 + * max_sge_sz = 16 byte (sizeof megasas_sge_skinny)
3342 + * Total 960 byte (15 MFI frame of 64 byte)
3343 + *
3344 + * Fusion adapter require only 3 extra frame.
3345 + * max_num_sge = 16 (defined as MAX_IOCTL_SGE)
3346 + * max_sge_sz = 12 byte (sizeof megasas_sge64)
3347 + * Total 192 byte (3 MFI frame of 64 byte)
3348 */
3349 - frame_count++;
3350 -
3351 + frame_count = instance->ctrl_context ? (3 + 1) : (15 + 1);
3352 total_sz = MEGAMFI_FRAME_SIZE * frame_count;
3353 /*
3354 * Use DMA pool facility provided by PCI layer
3355 */
3356 instance->frame_dma_pool = pci_pool_create("megasas frame pool",
3357 - instance->pdev, total_sz, 64,
3358 - 0);
3359 + instance->pdev, total_sz, 256, 0);
3360
3361 if (!instance->frame_dma_pool) {
3362 printk(KERN_DEBUG "megasas: failed to setup frame pool\n");
3363 diff --git a/drivers/scsi/megaraid/megaraid_sas_fp.c b/drivers/scsi/megaraid/megaraid_sas_fp.c
3364 index 0f66d0ef0b26..7d2d424bc8d0 100644
3365 --- a/drivers/scsi/megaraid/megaraid_sas_fp.c
3366 +++ b/drivers/scsi/megaraid/megaraid_sas_fp.c
3367 @@ -170,6 +170,7 @@ void MR_PopulateDrvRaidMap(struct megasas_instance *instance)
3368 struct MR_FW_RAID_MAP_ALL *fw_map_old = NULL;
3369 struct MR_FW_RAID_MAP *pFwRaidMap = NULL;
3370 int i;
3371 + u16 ld_count;
3372
3373
3374 struct MR_DRV_RAID_MAP_ALL *drv_map =
3375 @@ -189,9 +190,10 @@ void MR_PopulateDrvRaidMap(struct megasas_instance *instance)
3376 fw_map_old = (struct MR_FW_RAID_MAP_ALL *)
3377 fusion->ld_map[(instance->map_id & 1)];
3378 pFwRaidMap = &fw_map_old->raidMap;
3379 + ld_count = (u16)le32_to_cpu(pFwRaidMap->ldCount);
3380
3381 #if VD_EXT_DEBUG
3382 - for (i = 0; i < le16_to_cpu(pFwRaidMap->ldCount); i++) {
3383 + for (i = 0; i < ld_count; i++) {
3384 dev_dbg(&instance->pdev->dev, "(%d) :Index 0x%x "
3385 "Target Id 0x%x Seq Num 0x%x Size 0/%llx\n",
3386 instance->unique_id, i,
3387 @@ -203,12 +205,15 @@ void MR_PopulateDrvRaidMap(struct megasas_instance *instance)
3388
3389 memset(drv_map, 0, fusion->drv_map_sz);
3390 pDrvRaidMap->totalSize = pFwRaidMap->totalSize;
3391 - pDrvRaidMap->ldCount = (__le16)pFwRaidMap->ldCount;
3392 + pDrvRaidMap->ldCount = (__le16)cpu_to_le16(ld_count);
3393 pDrvRaidMap->fpPdIoTimeoutSec = pFwRaidMap->fpPdIoTimeoutSec;
3394 for (i = 0; i < MAX_RAIDMAP_LOGICAL_DRIVES + MAX_RAIDMAP_VIEWS; i++)
3395 pDrvRaidMap->ldTgtIdToLd[i] =
3396 (u8)pFwRaidMap->ldTgtIdToLd[i];
3397 - for (i = 0; i < le16_to_cpu(pDrvRaidMap->ldCount); i++) {
3398 + for (i = (MAX_RAIDMAP_LOGICAL_DRIVES + MAX_RAIDMAP_VIEWS);
3399 + i < MAX_LOGICAL_DRIVES_EXT; i++)
3400 + pDrvRaidMap->ldTgtIdToLd[i] = 0xff;
3401 + for (i = 0; i < ld_count; i++) {
3402 pDrvRaidMap->ldSpanMap[i] = pFwRaidMap->ldSpanMap[i];
3403 #if VD_EXT_DEBUG
3404 dev_dbg(&instance->pdev->dev,
3405 @@ -250,7 +255,7 @@ u8 MR_ValidateMapInfo(struct megasas_instance *instance)
3406 struct LD_LOAD_BALANCE_INFO *lbInfo;
3407 PLD_SPAN_INFO ldSpanInfo;
3408 struct MR_LD_RAID *raid;
3409 - int ldCount, num_lds;
3410 + u16 ldCount, num_lds;
3411 u16 ld;
3412 u32 expected_size;
3413
3414 @@ -354,7 +359,7 @@ static int getSpanInfo(struct MR_DRV_RAID_MAP_ALL *map,
3415
3416 for (ldCount = 0; ldCount < MAX_LOGICAL_DRIVES_EXT; ldCount++) {
3417 ld = MR_TargetIdToLdGet(ldCount, map);
3418 - if (ld >= MAX_LOGICAL_DRIVES_EXT)
3419 + if (ld >= (MAX_LOGICAL_DRIVES_EXT - 1))
3420 continue;
3421 raid = MR_LdRaidGet(ld, map);
3422 dev_dbg(&instance->pdev->dev, "LD %x: span_depth=%x\n",
3423 @@ -1155,7 +1160,7 @@ void mr_update_span_set(struct MR_DRV_RAID_MAP_ALL *map,
3424
3425 for (ldCount = 0; ldCount < MAX_LOGICAL_DRIVES_EXT; ldCount++) {
3426 ld = MR_TargetIdToLdGet(ldCount, map);
3427 - if (ld >= MAX_LOGICAL_DRIVES_EXT)
3428 + if (ld >= (MAX_LOGICAL_DRIVES_EXT - 1))
3429 continue;
3430 raid = MR_LdRaidGet(ld, map);
3431 for (element = 0; element < MAX_QUAD_DEPTH; element++) {
3432 diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
3433 index 9d9c27cd4687..554395634592 100644
3434 --- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
3435 +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
3436 @@ -101,6 +101,8 @@ megasas_enable_intr_fusion(struct megasas_instance *instance)
3437 {
3438 struct megasas_register_set __iomem *regs;
3439 regs = instance->reg_set;
3440 +
3441 + instance->mask_interrupts = 0;
3442 /* For Thunderbolt/Invader also clear intr on enable */
3443 writel(~0, &regs->outbound_intr_status);
3444 readl(&regs->outbound_intr_status);
3445 @@ -109,7 +111,6 @@ megasas_enable_intr_fusion(struct megasas_instance *instance)
3446
3447 /* Dummy readl to force pci flush */
3448 readl(&regs->outbound_intr_mask);
3449 - instance->mask_interrupts = 0;
3450 }
3451
3452 /**
3453 @@ -696,12 +697,11 @@ megasas_ioc_init_fusion(struct megasas_instance *instance)
3454 cpu_to_le32(lower_32_bits(ioc_init_handle));
3455 init_frame->data_xfer_len = cpu_to_le32(sizeof(struct MPI2_IOC_INIT_REQUEST));
3456
3457 - req_desc.Words = 0;
3458 + req_desc.u.low = cpu_to_le32(lower_32_bits(cmd->frame_phys_addr));
3459 + req_desc.u.high = cpu_to_le32(upper_32_bits(cmd->frame_phys_addr));
3460 req_desc.MFAIo.RequestFlags =
3461 (MEGASAS_REQ_DESCRIPT_FLAGS_MFA <<
3462 - MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT);
3463 - cpu_to_le32s((u32 *)&req_desc.MFAIo);
3464 - req_desc.Words |= cpu_to_le64(cmd->frame_phys_addr);
3465 + MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT);
3466
3467 /*
3468 * disable the intr before firing the init frame
3469 @@ -1753,9 +1753,19 @@ megasas_build_dcdb_fusion(struct megasas_instance *instance,
3470 if (scmd->device->channel < MEGASAS_MAX_PD_CHANNELS)
3471 goto NonFastPath;
3472
3473 + /*
3474 + * For older firmware, Driver should not access ldTgtIdToLd
3475 + * beyond index 127 and for Extended VD firmware, ldTgtIdToLd
3476 + * should not go beyond 255.
3477 + */
3478 +
3479 + if ((!fusion->fast_path_io) ||
3480 + (device_id >= instance->fw_supported_vd_count))
3481 + goto NonFastPath;
3482 +
3483 ld = MR_TargetIdToLdGet(device_id, local_map_ptr);
3484 - if ((ld >= instance->fw_supported_vd_count) ||
3485 - (!fusion->fast_path_io))
3486 +
3487 + if (ld >= instance->fw_supported_vd_count)
3488 goto NonFastPath;
3489
3490 raid = MR_LdRaidGet(ld, local_map_ptr);
3491 diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.h b/drivers/scsi/megaraid/megaraid_sas_fusion.h
3492 index 0d183d521bdd..a7f216f27ae3 100644
3493 --- a/drivers/scsi/megaraid/megaraid_sas_fusion.h
3494 +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.h
3495 @@ -304,14 +304,9 @@ struct MPI2_RAID_SCSI_IO_REQUEST {
3496 * MPT RAID MFA IO Descriptor.
3497 */
3498 struct MEGASAS_RAID_MFA_IO_REQUEST_DESCRIPTOR {
3499 -#if defined(__BIG_ENDIAN_BITFIELD)
3500 - u32 MessageAddress1:24; /* bits 31:8*/
3501 - u32 RequestFlags:8;
3502 -#else
3503 u32 RequestFlags:8;
3504 - u32 MessageAddress1:24; /* bits 31:8*/
3505 -#endif
3506 - u32 MessageAddress2; /* bits 61:32 */
3507 + u32 MessageAddress1:24;
3508 + u32 MessageAddress2;
3509 };
3510
3511 /* Default Request Descriptor */
3512 diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
3513 index 60354449d9ed..843594c2583d 100644
3514 --- a/drivers/scsi/sg.c
3515 +++ b/drivers/scsi/sg.c
3516 @@ -1376,6 +1376,17 @@ sg_rq_end_io(struct request *rq, int uptodate)
3517 }
3518 /* Rely on write phase to clean out srp status values, so no "else" */
3519
3520 + /*
3521 + * Free the request as soon as it is complete so that its resources
3522 + * can be reused without waiting for userspace to read() the
3523 + * result. But keep the associated bio (if any) around until
3524 + * blk_rq_unmap_user() can be called from user context.
3525 + */
3526 + srp->rq = NULL;
3527 + if (rq->cmd != rq->__cmd)
3528 + kfree(rq->cmd);
3529 + __blk_put_request(rq->q, rq);
3530 +
3531 write_lock_irqsave(&sfp->rq_list_lock, iflags);
3532 if (unlikely(srp->orphan)) {
3533 if (sfp->keep_orphan)
3534 @@ -1710,7 +1721,22 @@ sg_start_req(Sg_request *srp, unsigned char *cmd)
3535 return -ENOMEM;
3536 }
3537
3538 - rq = blk_get_request(q, rw, GFP_ATOMIC);
3539 + /*
3540 + * NOTE
3541 + *
3542 + * With scsi-mq enabled, there are a fixed number of preallocated
3543 + * requests equal in number to shost->can_queue. If all of the
3544 + * preallocated requests are already in use, then using GFP_ATOMIC with
3545 + * blk_get_request() will return -EWOULDBLOCK, whereas using GFP_KERNEL
3546 + * will cause blk_get_request() to sleep until an active command
3547 + * completes, freeing up a request. Neither option is ideal, but
3548 + * GFP_KERNEL is the better choice to prevent userspace from getting an
3549 + * unexpected EWOULDBLOCK.
3550 + *
3551 + * With scsi-mq disabled, blk_get_request() with GFP_KERNEL usually
3552 + * does not sleep except under memory pressure.
3553 + */
3554 + rq = blk_get_request(q, rw, GFP_KERNEL);
3555 if (IS_ERR(rq)) {
3556 kfree(long_cmdp);
3557 return PTR_ERR(rq);
3558 @@ -1803,10 +1829,10 @@ sg_finish_rem_req(Sg_request *srp)
3559 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
3560 "sg_finish_rem_req: res_used=%d\n",
3561 (int) srp->res_used));
3562 - if (srp->rq) {
3563 - if (srp->bio)
3564 - ret = blk_rq_unmap_user(srp->bio);
3565 + if (srp->bio)
3566 + ret = blk_rq_unmap_user(srp->bio);
3567
3568 + if (srp->rq) {
3569 if (srp->rq->cmd != srp->rq->__cmd)
3570 kfree(srp->rq->cmd);
3571 blk_put_request(srp->rq);
3572 diff --git a/drivers/target/iscsi/iscsi_target_tq.c b/drivers/target/iscsi/iscsi_target_tq.c
3573 index 601e9cc61e98..bb2890e79ca0 100644
3574 --- a/drivers/target/iscsi/iscsi_target_tq.c
3575 +++ b/drivers/target/iscsi/iscsi_target_tq.c
3576 @@ -24,36 +24,22 @@
3577 #include "iscsi_target_tq.h"
3578 #include "iscsi_target.h"
3579
3580 -static LIST_HEAD(active_ts_list);
3581 static LIST_HEAD(inactive_ts_list);
3582 -static DEFINE_SPINLOCK(active_ts_lock);
3583 static DEFINE_SPINLOCK(inactive_ts_lock);
3584 static DEFINE_SPINLOCK(ts_bitmap_lock);
3585
3586 -static void iscsi_add_ts_to_active_list(struct iscsi_thread_set *ts)
3587 -{
3588 - spin_lock(&active_ts_lock);
3589 - list_add_tail(&ts->ts_list, &active_ts_list);
3590 - iscsit_global->active_ts++;
3591 - spin_unlock(&active_ts_lock);
3592 -}
3593 -
3594 static void iscsi_add_ts_to_inactive_list(struct iscsi_thread_set *ts)
3595 {
3596 + if (!list_empty(&ts->ts_list)) {
3597 + WARN_ON(1);
3598 + return;
3599 + }
3600 spin_lock(&inactive_ts_lock);
3601 list_add_tail(&ts->ts_list, &inactive_ts_list);
3602 iscsit_global->inactive_ts++;
3603 spin_unlock(&inactive_ts_lock);
3604 }
3605
3606 -static void iscsi_del_ts_from_active_list(struct iscsi_thread_set *ts)
3607 -{
3608 - spin_lock(&active_ts_lock);
3609 - list_del(&ts->ts_list);
3610 - iscsit_global->active_ts--;
3611 - spin_unlock(&active_ts_lock);
3612 -}
3613 -
3614 static struct iscsi_thread_set *iscsi_get_ts_from_inactive_list(void)
3615 {
3616 struct iscsi_thread_set *ts;
3617 @@ -66,7 +52,7 @@ static struct iscsi_thread_set *iscsi_get_ts_from_inactive_list(void)
3618
3619 ts = list_first_entry(&inactive_ts_list, struct iscsi_thread_set, ts_list);
3620
3621 - list_del(&ts->ts_list);
3622 + list_del_init(&ts->ts_list);
3623 iscsit_global->inactive_ts--;
3624 spin_unlock(&inactive_ts_lock);
3625
3626 @@ -204,8 +190,6 @@ static void iscsi_deallocate_extra_thread_sets(void)
3627
3628 void iscsi_activate_thread_set(struct iscsi_conn *conn, struct iscsi_thread_set *ts)
3629 {
3630 - iscsi_add_ts_to_active_list(ts);
3631 -
3632 spin_lock_bh(&ts->ts_state_lock);
3633 conn->thread_set = ts;
3634 ts->conn = conn;
3635 @@ -397,7 +381,6 @@ struct iscsi_conn *iscsi_rx_thread_pre_handler(struct iscsi_thread_set *ts)
3636
3637 if (ts->delay_inactive && (--ts->thread_count == 0)) {
3638 spin_unlock_bh(&ts->ts_state_lock);
3639 - iscsi_del_ts_from_active_list(ts);
3640
3641 if (!iscsit_global->in_shutdown)
3642 iscsi_deallocate_extra_thread_sets();
3643 @@ -452,7 +435,6 @@ struct iscsi_conn *iscsi_tx_thread_pre_handler(struct iscsi_thread_set *ts)
3644
3645 if (ts->delay_inactive && (--ts->thread_count == 0)) {
3646 spin_unlock_bh(&ts->ts_state_lock);
3647 - iscsi_del_ts_from_active_list(ts);
3648
3649 if (!iscsit_global->in_shutdown)
3650 iscsi_deallocate_extra_thread_sets();
3651 diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c
3652 index 7c4447a5c0f4..082304dcbe8c 100644
3653 --- a/drivers/tty/pty.c
3654 +++ b/drivers/tty/pty.c
3655 @@ -210,6 +210,9 @@ static int pty_signal(struct tty_struct *tty, int sig)
3656 unsigned long flags;
3657 struct pid *pgrp;
3658
3659 + if (sig != SIGINT && sig != SIGQUIT && sig != SIGTSTP)
3660 + return -EINVAL;
3661 +
3662 if (tty->link) {
3663 spin_lock_irqsave(&tty->link->ctrl_lock, flags);
3664 pgrp = get_pid(tty->link->pgrp);
3665 diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
3666 index edde3eca055d..6ee5c6cefac0 100644
3667 --- a/drivers/tty/serial/atmel_serial.c
3668 +++ b/drivers/tty/serial/atmel_serial.c
3669 @@ -2577,7 +2577,7 @@ static int atmel_serial_probe(struct platform_device *pdev)
3670
3671 ret = atmel_init_port(port, pdev);
3672 if (ret)
3673 - goto err;
3674 + goto err_clear_bit;
3675
3676 if (!atmel_use_pdc_rx(&port->uart)) {
3677 ret = -ENOMEM;
3678 @@ -2626,6 +2626,8 @@ err_alloc_ring:
3679 clk_put(port->clk);
3680 port->clk = NULL;
3681 }
3682 +err_clear_bit:
3683 + clear_bit(port->uart.line, atmel_ports_in_use);
3684 err:
3685 return ret;
3686 }
3687 diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c
3688 index 6dd53af546a3..eb9bc7e1dbaa 100644
3689 --- a/drivers/tty/serial/fsl_lpuart.c
3690 +++ b/drivers/tty/serial/fsl_lpuart.c
3691 @@ -506,9 +506,6 @@ static inline void lpuart_prepare_rx(struct lpuart_port *sport)
3692
3693 spin_lock_irqsave(&sport->port.lock, flags);
3694
3695 - init_timer(&sport->lpuart_timer);
3696 - sport->lpuart_timer.function = lpuart_timer_func;
3697 - sport->lpuart_timer.data = (unsigned long)sport;
3698 sport->lpuart_timer.expires = jiffies + sport->dma_rx_timeout;
3699 add_timer(&sport->lpuart_timer);
3700
3701 @@ -758,18 +755,18 @@ out:
3702 static irqreturn_t lpuart_int(int irq, void *dev_id)
3703 {
3704 struct lpuart_port *sport = dev_id;
3705 - unsigned char sts;
3706 + unsigned char sts, crdma;
3707
3708 sts = readb(sport->port.membase + UARTSR1);
3709 + crdma = readb(sport->port.membase + UARTCR5);
3710
3711 - if (sts & UARTSR1_RDRF) {
3712 + if (sts & UARTSR1_RDRF && !(crdma & UARTCR5_RDMAS)) {
3713 if (sport->lpuart_dma_use)
3714 lpuart_prepare_rx(sport);
3715 else
3716 lpuart_rxint(irq, dev_id);
3717 }
3718 - if (sts & UARTSR1_TDRE &&
3719 - !(readb(sport->port.membase + UARTCR5) & UARTCR5_TDMAS)) {
3720 + if (sts & UARTSR1_TDRE && !(crdma & UARTCR5_TDMAS)) {
3721 if (sport->lpuart_dma_use)
3722 lpuart_pio_tx(sport);
3723 else
3724 @@ -1106,7 +1103,10 @@ static int lpuart_startup(struct uart_port *port)
3725 sport->lpuart_dma_use = false;
3726 } else {
3727 sport->lpuart_dma_use = true;
3728 + setup_timer(&sport->lpuart_timer, lpuart_timer_func,
3729 + (unsigned long)sport);
3730 temp = readb(port->membase + UARTCR5);
3731 + temp &= ~UARTCR5_RDMAS;
3732 writeb(temp | UARTCR5_TDMAS, port->membase + UARTCR5);
3733 }
3734
3735 @@ -1180,6 +1180,8 @@ static void lpuart_shutdown(struct uart_port *port)
3736 devm_free_irq(port->dev, port->irq, sport);
3737
3738 if (sport->lpuart_dma_use) {
3739 + del_timer_sync(&sport->lpuart_timer);
3740 +
3741 lpuart_dma_tx_free(port);
3742 lpuart_dma_rx_free(port);
3743 }
3744 diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
3745 index b33b00b386de..53c25bca7d05 100644
3746 --- a/drivers/tty/vt/vt.c
3747 +++ b/drivers/tty/vt/vt.c
3748 @@ -498,6 +498,7 @@ void invert_screen(struct vc_data *vc, int offset, int count, int viewed)
3749 #endif
3750 if (DO_UPDATE(vc))
3751 do_update_region(vc, (unsigned long) p, count);
3752 + notify_update(vc);
3753 }
3754
3755 /* used by selection: complement pointer position */
3756 @@ -514,6 +515,7 @@ void complement_pos(struct vc_data *vc, int offset)
3757 scr_writew(old, screenpos(vc, old_offset, 1));
3758 if (DO_UPDATE(vc))
3759 vc->vc_sw->con_putc(vc, old, oldy, oldx);
3760 + notify_update(vc);
3761 }
3762
3763 old_offset = offset;
3764 @@ -531,8 +533,8 @@ void complement_pos(struct vc_data *vc, int offset)
3765 oldy = (offset >> 1) / vc->vc_cols;
3766 vc->vc_sw->con_putc(vc, new, oldy, oldx);
3767 }
3768 + notify_update(vc);
3769 }
3770 -
3771 }
3772
3773 static void insert_char(struct vc_data *vc, unsigned int nr)
3774 diff --git a/drivers/usb/core/buffer.c b/drivers/usb/core/buffer.c
3775 index 684ef70dc09d..506b969ea7fd 100644
3776 --- a/drivers/usb/core/buffer.c
3777 +++ b/drivers/usb/core/buffer.c
3778 @@ -22,17 +22,25 @@
3779 */
3780
3781 /* FIXME tune these based on pool statistics ... */
3782 -static const size_t pool_max[HCD_BUFFER_POOLS] = {
3783 - /* platforms without dma-friendly caches might need to
3784 - * prevent cacheline sharing...
3785 - */
3786 - 32,
3787 - 128,
3788 - 512,
3789 - PAGE_SIZE / 2
3790 - /* bigger --> allocate pages */
3791 +static size_t pool_max[HCD_BUFFER_POOLS] = {
3792 + 32, 128, 512, 2048,
3793 };
3794
3795 +void __init usb_init_pool_max(void)
3796 +{
3797 + /*
3798 + * The pool_max values must never be smaller than
3799 + * ARCH_KMALLOC_MINALIGN.
3800 + */
3801 + if (ARCH_KMALLOC_MINALIGN <= 32)
3802 + ; /* Original value is okay */
3803 + else if (ARCH_KMALLOC_MINALIGN <= 64)
3804 + pool_max[0] = 64;
3805 + else if (ARCH_KMALLOC_MINALIGN <= 128)
3806 + pool_max[0] = 0; /* Don't use this pool */
3807 + else
3808 + BUILD_BUG(); /* We don't allow this */
3809 +}
3810
3811 /* SETUP primitives */
3812
3813 diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
3814 index 9bffd26cea05..d7a6d8bc510b 100644
3815 --- a/drivers/usb/core/driver.c
3816 +++ b/drivers/usb/core/driver.c
3817 @@ -275,21 +275,6 @@ static int usb_unbind_device(struct device *dev)
3818 return 0;
3819 }
3820
3821 -/*
3822 - * Cancel any pending scheduled resets
3823 - *
3824 - * [see usb_queue_reset_device()]
3825 - *
3826 - * Called after unconfiguring / when releasing interfaces. See
3827 - * comments in __usb_queue_reset_device() regarding
3828 - * udev->reset_running.
3829 - */
3830 -static void usb_cancel_queued_reset(struct usb_interface *iface)
3831 -{
3832 - if (iface->reset_running == 0)
3833 - cancel_work_sync(&iface->reset_ws);
3834 -}
3835 -
3836 /* called from driver core with dev locked */
3837 static int usb_probe_interface(struct device *dev)
3838 {
3839 @@ -380,7 +365,6 @@ static int usb_probe_interface(struct device *dev)
3840 usb_set_intfdata(intf, NULL);
3841 intf->needs_remote_wakeup = 0;
3842 intf->condition = USB_INTERFACE_UNBOUND;
3843 - usb_cancel_queued_reset(intf);
3844
3845 /* If the LPM disable succeeded, balance the ref counts. */
3846 if (!lpm_disable_error)
3847 @@ -425,7 +409,6 @@ static int usb_unbind_interface(struct device *dev)
3848 usb_disable_interface(udev, intf, false);
3849
3850 driver->disconnect(intf);
3851 - usb_cancel_queued_reset(intf);
3852
3853 /* Free streams */
3854 for (i = 0, j = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
3855 @@ -1801,6 +1784,18 @@ static int autosuspend_check(struct usb_device *udev)
3856 dev_dbg(&udev->dev, "remote wakeup needed for autosuspend\n");
3857 return -EOPNOTSUPP;
3858 }
3859 +
3860 + /*
3861 + * If the device is a direct child of the root hub and the HCD
3862 + * doesn't handle wakeup requests, don't allow autosuspend when
3863 + * wakeup is needed.
3864 + */
3865 + if (w && udev->parent == udev->bus->root_hub &&
3866 + bus_to_hcd(udev->bus)->cant_recv_wakeups) {
3867 + dev_dbg(&udev->dev, "HCD doesn't handle wakeup requests\n");
3868 + return -EOPNOTSUPP;
3869 + }
3870 +
3871 udev->do_remote_wakeup = w;
3872 return 0;
3873 }
3874 diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
3875 index a6efb4184f2b..0009fc847eee 100644
3876 --- a/drivers/usb/core/hcd.c
3877 +++ b/drivers/usb/core/hcd.c
3878 @@ -1618,6 +1618,7 @@ static int unlink1(struct usb_hcd *hcd, struct urb *urb, int status)
3879 int usb_hcd_unlink_urb (struct urb *urb, int status)
3880 {
3881 struct usb_hcd *hcd;
3882 + struct usb_device *udev = urb->dev;
3883 int retval = -EIDRM;
3884 unsigned long flags;
3885
3886 @@ -1629,20 +1630,19 @@ int usb_hcd_unlink_urb (struct urb *urb, int status)
3887 spin_lock_irqsave(&hcd_urb_unlink_lock, flags);
3888 if (atomic_read(&urb->use_count) > 0) {
3889 retval = 0;
3890 - usb_get_dev(urb->dev);
3891 + usb_get_dev(udev);
3892 }
3893 spin_unlock_irqrestore(&hcd_urb_unlink_lock, flags);
3894 if (retval == 0) {
3895 hcd = bus_to_hcd(urb->dev->bus);
3896 retval = unlink1(hcd, urb, status);
3897 - usb_put_dev(urb->dev);
3898 + if (retval == 0)
3899 + retval = -EINPROGRESS;
3900 + else if (retval != -EIDRM && retval != -EBUSY)
3901 + dev_dbg(&udev->dev, "hcd_unlink_urb %p fail %d\n",
3902 + urb, retval);
3903 + usb_put_dev(udev);
3904 }
3905 -
3906 - if (retval == 0)
3907 - retval = -EINPROGRESS;
3908 - else if (retval != -EIDRM && retval != -EBUSY)
3909 - dev_dbg(&urb->dev->dev, "hcd_unlink_urb %p fail %d\n",
3910 - urb, retval);
3911 return retval;
3912 }
3913
3914 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
3915 index b649fef2e35d..2246954d7df3 100644
3916 --- a/drivers/usb/core/hub.c
3917 +++ b/drivers/usb/core/hub.c
3918 @@ -5591,26 +5591,19 @@ EXPORT_SYMBOL_GPL(usb_reset_device);
3919 * possible; depending on how the driver attached to each interface
3920 * handles ->pre_reset(), the second reset might happen or not.
3921 *
3922 - * - If a driver is unbound and it had a pending reset, the reset will
3923 - * be cancelled.
3924 + * - If the reset is delayed so long that the interface is unbound from
3925 + * its driver, the reset will be skipped.
3926 *
3927 - * - This function can be called during .probe() or .disconnect()
3928 - * times. On return from .disconnect(), any pending resets will be
3929 - * cancelled.
3930 - *
3931 - * There is no no need to lock/unlock the @reset_ws as schedule_work()
3932 - * does its own.
3933 - *
3934 - * NOTE: We don't do any reference count tracking because it is not
3935 - * needed. The lifecycle of the work_struct is tied to the
3936 - * usb_interface. Before destroying the interface we cancel the
3937 - * work_struct, so the fact that work_struct is queued and or
3938 - * running means the interface (and thus, the device) exist and
3939 - * are referenced.
3940 + * - This function can be called during .probe(). It can also be called
3941 + * during .disconnect(), but doing so is pointless because the reset
3942 + * will not occur. If you really want to reset the device during
3943 + * .disconnect(), call usb_reset_device() directly -- but watch out
3944 + * for nested unbinding issues!
3945 */
3946 void usb_queue_reset_device(struct usb_interface *iface)
3947 {
3948 - schedule_work(&iface->reset_ws);
3949 + if (schedule_work(&iface->reset_ws))
3950 + usb_get_intf(iface);
3951 }
3952 EXPORT_SYMBOL_GPL(usb_queue_reset_device);
3953
3954 diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
3955 index f7b7713cfb2a..f368d2053da5 100644
3956 --- a/drivers/usb/core/message.c
3957 +++ b/drivers/usb/core/message.c
3958 @@ -1551,6 +1551,7 @@ static void usb_release_interface(struct device *dev)
3959 altsetting_to_usb_interface_cache(intf->altsetting);
3960
3961 kref_put(&intfc->ref, usb_release_interface_cache);
3962 + usb_put_dev(interface_to_usbdev(intf));
3963 kfree(intf);
3964 }
3965
3966 @@ -1626,24 +1627,6 @@ static struct usb_interface_assoc_descriptor *find_iad(struct usb_device *dev,
3967
3968 /*
3969 * Internal function to queue a device reset
3970 - *
3971 - * This is initialized into the workstruct in 'struct
3972 - * usb_device->reset_ws' that is launched by
3973 - * message.c:usb_set_configuration() when initializing each 'struct
3974 - * usb_interface'.
3975 - *
3976 - * It is safe to get the USB device without reference counts because
3977 - * the life cycle of @iface is bound to the life cycle of @udev. Then,
3978 - * this function will be ran only if @iface is alive (and before
3979 - * freeing it any scheduled instances of it will have been cancelled).
3980 - *
3981 - * We need to set a flag (usb_dev->reset_running) because when we call
3982 - * the reset, the interfaces might be unbound. The current interface
3983 - * cannot try to remove the queued work as it would cause a deadlock
3984 - * (you cannot remove your work from within your executing
3985 - * workqueue). This flag lets it know, so that
3986 - * usb_cancel_queued_reset() doesn't try to do it.
3987 - *
3988 * See usb_queue_reset_device() for more details
3989 */
3990 static void __usb_queue_reset_device(struct work_struct *ws)
3991 @@ -1655,11 +1638,10 @@ static void __usb_queue_reset_device(struct work_struct *ws)
3992
3993 rc = usb_lock_device_for_reset(udev, iface);
3994 if (rc >= 0) {
3995 - iface->reset_running = 1;
3996 usb_reset_device(udev);
3997 - iface->reset_running = 0;
3998 usb_unlock_device(udev);
3999 }
4000 + usb_put_intf(iface); /* Undo _get_ in usb_queue_reset_device() */
4001 }
4002
4003
4004 @@ -1854,6 +1836,7 @@ free_interfaces:
4005 dev_set_name(&intf->dev, "%d-%s:%d.%d",
4006 dev->bus->busnum, dev->devpath,
4007 configuration, alt->desc.bInterfaceNumber);
4008 + usb_get_dev(dev);
4009 }
4010 kfree(new_interfaces);
4011
4012 diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
4013 index 2dd2362198d2..29ee9363faa5 100644
4014 --- a/drivers/usb/core/usb.c
4015 +++ b/drivers/usb/core/usb.c
4016 @@ -1051,6 +1051,7 @@ static int __init usb_init(void)
4017 pr_info("%s: USB support disabled\n", usbcore_name);
4018 return 0;
4019 }
4020 + usb_init_pool_max();
4021
4022 retval = usb_debugfs_init();
4023 if (retval)
4024 diff --git a/drivers/usb/host/isp1760-hcd.c b/drivers/usb/host/isp1760-hcd.c
4025 index e752c3098f38..d2a856528471 100644
4026 --- a/drivers/usb/host/isp1760-hcd.c
4027 +++ b/drivers/usb/host/isp1760-hcd.c
4028 @@ -2247,6 +2247,9 @@ struct usb_hcd *isp1760_register(phys_addr_t res_start, resource_size_t res_len,
4029 hcd->rsrc_start = res_start;
4030 hcd->rsrc_len = res_len;
4031
4032 + /* This driver doesn't support wakeup requests */
4033 + hcd->cant_recv_wakeups = 1;
4034 +
4035 ret = usb_add_hcd(hcd, irq, irqflags);
4036 if (ret)
4037 goto err_unmap;
4038 diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
4039 index f4c56fc1a9f6..f40c856ff758 100644
4040 --- a/drivers/usb/serial/cp210x.c
4041 +++ b/drivers/usb/serial/cp210x.c
4042 @@ -56,6 +56,7 @@ static const struct usb_device_id id_table[] = {
4043 { USB_DEVICE(0x0846, 0x1100) }, /* NetGear Managed Switch M4100 series, M5300 series, M7100 series */
4044 { USB_DEVICE(0x08e6, 0x5501) }, /* Gemalto Prox-PU/CU contactless smartcard reader */
4045 { USB_DEVICE(0x08FD, 0x000A) }, /* Digianswer A/S , ZigBee/802.15.4 MAC Device */
4046 + { USB_DEVICE(0x0908, 0x01FF) }, /* Siemens RUGGEDCOM USB Serial Console */
4047 { USB_DEVICE(0x0BED, 0x1100) }, /* MEI (TM) Cashflow-SC Bill/Voucher Acceptor */
4048 { USB_DEVICE(0x0BED, 0x1101) }, /* MEI series 2000 Combo Acceptor */
4049 { USB_DEVICE(0x0FCF, 0x1003) }, /* Dynastream ANT development board */
4050 diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c
4051 index f8bb36f9d9ce..bf1940706422 100644
4052 --- a/drivers/xen/manage.c
4053 +++ b/drivers/xen/manage.c
4054 @@ -105,10 +105,16 @@ static void do_suspend(void)
4055
4056 err = freeze_processes();
4057 if (err) {
4058 - pr_err("%s: freeze failed %d\n", __func__, err);
4059 + pr_err("%s: freeze processes failed %d\n", __func__, err);
4060 goto out;
4061 }
4062
4063 + err = freeze_kernel_threads();
4064 + if (err) {
4065 + pr_err("%s: freeze kernel threads failed %d\n", __func__, err);
4066 + goto out_thaw;
4067 + }
4068 +
4069 err = dpm_suspend_start(PMSG_FREEZE);
4070 if (err) {
4071 pr_err("%s: dpm_suspend_start %d\n", __func__, err);
4072 diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c
4073 index 3e32146472a5..d30c6b246342 100644
4074 --- a/drivers/xen/xen-scsiback.c
4075 +++ b/drivers/xen/xen-scsiback.c
4076 @@ -712,12 +712,11 @@ static int prepare_pending_reqs(struct vscsibk_info *info,
4077 static int scsiback_do_cmd_fn(struct vscsibk_info *info)
4078 {
4079 struct vscsiif_back_ring *ring = &info->ring;
4080 - struct vscsiif_request *ring_req;
4081 + struct vscsiif_request ring_req;
4082 struct vscsibk_pend *pending_req;
4083 RING_IDX rc, rp;
4084 int err, more_to_do;
4085 uint32_t result;
4086 - uint8_t act;
4087
4088 rc = ring->req_cons;
4089 rp = ring->sring->req_prod;
4090 @@ -738,11 +737,10 @@ static int scsiback_do_cmd_fn(struct vscsibk_info *info)
4091 if (!pending_req)
4092 return 1;
4093
4094 - ring_req = RING_GET_REQUEST(ring, rc);
4095 + ring_req = *RING_GET_REQUEST(ring, rc);
4096 ring->req_cons = ++rc;
4097
4098 - act = ring_req->act;
4099 - err = prepare_pending_reqs(info, ring_req, pending_req);
4100 + err = prepare_pending_reqs(info, &ring_req, pending_req);
4101 if (err) {
4102 switch (err) {
4103 case -ENODEV:
4104 @@ -758,9 +756,9 @@ static int scsiback_do_cmd_fn(struct vscsibk_info *info)
4105 return 1;
4106 }
4107
4108 - switch (act) {
4109 + switch (ring_req.act) {
4110 case VSCSIIF_ACT_SCSI_CDB:
4111 - if (scsiback_gnttab_data_map(ring_req, pending_req)) {
4112 + if (scsiback_gnttab_data_map(&ring_req, pending_req)) {
4113 scsiback_fast_flush_area(pending_req);
4114 scsiback_do_resp_with_sense(NULL,
4115 DRIVER_ERROR << 24, 0, pending_req);
4116 @@ -771,7 +769,7 @@ static int scsiback_do_cmd_fn(struct vscsibk_info *info)
4117 break;
4118 case VSCSIIF_ACT_SCSI_ABORT:
4119 scsiback_device_action(pending_req, TMR_ABORT_TASK,
4120 - ring_req->ref_rqid);
4121 + ring_req.ref_rqid);
4122 break;
4123 case VSCSIIF_ACT_SCSI_RESET:
4124 scsiback_device_action(pending_req, TMR_LUN_RESET, 0);
4125 diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
4126 index d8fc0605b9d2..e1efcaa1b245 100644
4127 --- a/fs/binfmt_elf.c
4128 +++ b/fs/binfmt_elf.c
4129 @@ -554,11 +554,12 @@ out:
4130
4131 static unsigned long randomize_stack_top(unsigned long stack_top)
4132 {
4133 - unsigned int random_variable = 0;
4134 + unsigned long random_variable = 0;
4135
4136 if ((current->flags & PF_RANDOMIZE) &&
4137 !(current->personality & ADDR_NO_RANDOMIZE)) {
4138 - random_variable = get_random_int() & STACK_RND_MASK;
4139 + random_variable = (unsigned long) get_random_int();
4140 + random_variable &= STACK_RND_MASK;
4141 random_variable <<= PAGE_SHIFT;
4142 }
4143 #ifdef CONFIG_STACK_GROWSUP
4144 diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
4145 index 150822ee0a0b..c81ce0c7c1a9 100644
4146 --- a/fs/btrfs/ctree.c
4147 +++ b/fs/btrfs/ctree.c
4148 @@ -2609,32 +2609,23 @@ static int key_search(struct extent_buffer *b, struct btrfs_key *key,
4149 return 0;
4150 }
4151
4152 -int btrfs_find_item(struct btrfs_root *fs_root, struct btrfs_path *found_path,
4153 +int btrfs_find_item(struct btrfs_root *fs_root, struct btrfs_path *path,
4154 u64 iobjectid, u64 ioff, u8 key_type,
4155 struct btrfs_key *found_key)
4156 {
4157 int ret;
4158 struct btrfs_key key;
4159 struct extent_buffer *eb;
4160 - struct btrfs_path *path;
4161 +
4162 + ASSERT(path);
4163
4164 key.type = key_type;
4165 key.objectid = iobjectid;
4166 key.offset = ioff;
4167
4168 - if (found_path == NULL) {
4169 - path = btrfs_alloc_path();
4170 - if (!path)
4171 - return -ENOMEM;
4172 - } else
4173 - path = found_path;
4174 -
4175 ret = btrfs_search_slot(NULL, fs_root, &key, path, 0, 0);
4176 - if ((ret < 0) || (found_key == NULL)) {
4177 - if (path != found_path)
4178 - btrfs_free_path(path);
4179 + if ((ret < 0) || (found_key == NULL))
4180 return ret;
4181 - }
4182
4183 eb = path->nodes[0];
4184 if (ret && path->slots[0] >= btrfs_header_nritems(eb)) {
4185 diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
4186 index 97676731190c..b1709831b1a1 100644
4187 --- a/fs/btrfs/disk-io.c
4188 +++ b/fs/btrfs/disk-io.c
4189 @@ -1630,6 +1630,7 @@ struct btrfs_root *btrfs_get_fs_root(struct btrfs_fs_info *fs_info,
4190 bool check_ref)
4191 {
4192 struct btrfs_root *root;
4193 + struct btrfs_path *path;
4194 int ret;
4195
4196 if (location->objectid == BTRFS_ROOT_TREE_OBJECTID)
4197 @@ -1669,8 +1670,14 @@ again:
4198 if (ret)
4199 goto fail;
4200
4201 - ret = btrfs_find_item(fs_info->tree_root, NULL, BTRFS_ORPHAN_OBJECTID,
4202 + path = btrfs_alloc_path();
4203 + if (!path) {
4204 + ret = -ENOMEM;
4205 + goto fail;
4206 + }
4207 + ret = btrfs_find_item(fs_info->tree_root, path, BTRFS_ORPHAN_OBJECTID,
4208 location->objectid, BTRFS_ORPHAN_ITEM_KEY, NULL);
4209 + btrfs_free_path(path);
4210 if (ret < 0)
4211 goto fail;
4212 if (ret == 0)
4213 @@ -2496,7 +2503,7 @@ int open_ctree(struct super_block *sb,
4214 features |= BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO;
4215
4216 if (features & BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA)
4217 - printk(KERN_ERR "BTRFS: has skinny extents\n");
4218 + printk(KERN_INFO "BTRFS: has skinny extents\n");
4219
4220 /*
4221 * flag our filesystem as having big metadata blocks if
4222 diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
4223 index 7d96cc961663..ee1c60454a5f 100644
4224 --- a/fs/btrfs/tree-log.c
4225 +++ b/fs/btrfs/tree-log.c
4226 @@ -488,8 +488,20 @@ insert:
4227 src_item = (struct btrfs_inode_item *)src_ptr;
4228 dst_item = (struct btrfs_inode_item *)dst_ptr;
4229
4230 - if (btrfs_inode_generation(eb, src_item) == 0)
4231 + if (btrfs_inode_generation(eb, src_item) == 0) {
4232 + struct extent_buffer *dst_eb = path->nodes[0];
4233 +
4234 + if (S_ISREG(btrfs_inode_mode(eb, src_item)) &&
4235 + S_ISREG(btrfs_inode_mode(dst_eb, dst_item))) {
4236 + struct btrfs_map_token token;
4237 + u64 ino_size = btrfs_inode_size(eb, src_item);
4238 +
4239 + btrfs_init_map_token(&token);
4240 + btrfs_set_token_inode_size(dst_eb, dst_item,
4241 + ino_size, &token);
4242 + }
4243 goto no_copy;
4244 + }
4245
4246 if (overwrite_root &&
4247 S_ISDIR(btrfs_inode_mode(eb, src_item)) &&
4248 @@ -1257,10 +1269,19 @@ static int insert_orphan_item(struct btrfs_trans_handle *trans,
4249 struct btrfs_root *root, u64 offset)
4250 {
4251 int ret;
4252 - ret = btrfs_find_item(root, NULL, BTRFS_ORPHAN_OBJECTID,
4253 + struct btrfs_path *path;
4254 +
4255 + path = btrfs_alloc_path();
4256 + if (!path)
4257 + return -ENOMEM;
4258 +
4259 + ret = btrfs_find_item(root, path, BTRFS_ORPHAN_OBJECTID,
4260 offset, BTRFS_ORPHAN_ITEM_KEY, NULL);
4261 if (ret > 0)
4262 ret = btrfs_insert_orphan_item(trans, root, offset);
4263 +
4264 + btrfs_free_path(path);
4265 +
4266 return ret;
4267 }
4268
4269 @@ -3209,7 +3230,8 @@ static int drop_objectid_items(struct btrfs_trans_handle *trans,
4270 static void fill_inode_item(struct btrfs_trans_handle *trans,
4271 struct extent_buffer *leaf,
4272 struct btrfs_inode_item *item,
4273 - struct inode *inode, int log_inode_only)
4274 + struct inode *inode, int log_inode_only,
4275 + u64 logged_isize)
4276 {
4277 struct btrfs_map_token token;
4278
4279 @@ -3222,7 +3244,7 @@ static void fill_inode_item(struct btrfs_trans_handle *trans,
4280 * to say 'update this inode with these values'
4281 */
4282 btrfs_set_token_inode_generation(leaf, item, 0, &token);
4283 - btrfs_set_token_inode_size(leaf, item, 0, &token);
4284 + btrfs_set_token_inode_size(leaf, item, logged_isize, &token);
4285 } else {
4286 btrfs_set_token_inode_generation(leaf, item,
4287 BTRFS_I(inode)->generation,
4288 @@ -3274,7 +3296,7 @@ static int log_inode_item(struct btrfs_trans_handle *trans,
4289 return ret;
4290 inode_item = btrfs_item_ptr(path->nodes[0], path->slots[0],
4291 struct btrfs_inode_item);
4292 - fill_inode_item(trans, path->nodes[0], inode_item, inode, 0);
4293 + fill_inode_item(trans, path->nodes[0], inode_item, inode, 0, 0);
4294 btrfs_release_path(path);
4295 return 0;
4296 }
4297 @@ -3283,7 +3305,8 @@ static noinline int copy_items(struct btrfs_trans_handle *trans,
4298 struct inode *inode,
4299 struct btrfs_path *dst_path,
4300 struct btrfs_path *src_path, u64 *last_extent,
4301 - int start_slot, int nr, int inode_only)
4302 + int start_slot, int nr, int inode_only,
4303 + u64 logged_isize)
4304 {
4305 unsigned long src_offset;
4306 unsigned long dst_offset;
4307 @@ -3340,7 +3363,8 @@ static noinline int copy_items(struct btrfs_trans_handle *trans,
4308 dst_path->slots[0],
4309 struct btrfs_inode_item);
4310 fill_inode_item(trans, dst_path->nodes[0], inode_item,
4311 - inode, inode_only == LOG_INODE_EXISTS);
4312 + inode, inode_only == LOG_INODE_EXISTS,
4313 + logged_isize);
4314 } else {
4315 copy_extent_buffer(dst_path->nodes[0], src, dst_offset,
4316 src_offset, ins_sizes[i]);
4317 @@ -3886,6 +3910,33 @@ process:
4318 return ret;
4319 }
4320
4321 +static int logged_inode_size(struct btrfs_root *log, struct inode *inode,
4322 + struct btrfs_path *path, u64 *size_ret)
4323 +{
4324 + struct btrfs_key key;
4325 + int ret;
4326 +
4327 + key.objectid = btrfs_ino(inode);
4328 + key.type = BTRFS_INODE_ITEM_KEY;
4329 + key.offset = 0;
4330 +
4331 + ret = btrfs_search_slot(NULL, log, &key, path, 0, 0);
4332 + if (ret < 0) {
4333 + return ret;
4334 + } else if (ret > 0) {
4335 + *size_ret = i_size_read(inode);
4336 + } else {
4337 + struct btrfs_inode_item *item;
4338 +
4339 + item = btrfs_item_ptr(path->nodes[0], path->slots[0],
4340 + struct btrfs_inode_item);
4341 + *size_ret = btrfs_inode_size(path->nodes[0], item);
4342 + }
4343 +
4344 + btrfs_release_path(path);
4345 + return 0;
4346 +}
4347 +
4348 /* log a single inode in the tree log.
4349 * At least one parent directory for this inode must exist in the tree
4350 * or be logged already.
4351 @@ -3923,6 +3974,7 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans,
4352 bool fast_search = false;
4353 u64 ino = btrfs_ino(inode);
4354 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
4355 + u64 logged_isize = 0;
4356
4357 path = btrfs_alloc_path();
4358 if (!path)
4359 @@ -3976,6 +4028,25 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans,
4360 max_key_type = BTRFS_XATTR_ITEM_KEY;
4361 ret = drop_objectid_items(trans, log, path, ino, max_key_type);
4362 } else {
4363 + if (inode_only == LOG_INODE_EXISTS) {
4364 + /*
4365 + * Make sure the new inode item we write to the log has
4366 + * the same isize as the current one (if it exists).
4367 + * This is necessary to prevent data loss after log
4368 + * replay, and also to prevent doing a wrong expanding
4369 + * truncate - for e.g. create file, write 4K into offset
4370 + * 0, fsync, write 4K into offset 4096, add hard link,
4371 + * fsync some other file (to sync log), power fail - if
4372 + * we use the inode's current i_size, after log replay
4373 + * we get a 8Kb file, with the last 4Kb extent as a hole
4374 + * (zeroes), as if an expanding truncate happened,
4375 + * instead of getting a file of 4Kb only.
4376 + */
4377 + err = logged_inode_size(log, inode, path,
4378 + &logged_isize);
4379 + if (err)
4380 + goto out_unlock;
4381 + }
4382 if (test_and_clear_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
4383 &BTRFS_I(inode)->runtime_flags)) {
4384 clear_bit(BTRFS_INODE_COPY_EVERYTHING,
4385 @@ -4031,7 +4102,8 @@ again:
4386 }
4387
4388 ret = copy_items(trans, inode, dst_path, path, &last_extent,
4389 - ins_start_slot, ins_nr, inode_only);
4390 + ins_start_slot, ins_nr, inode_only,
4391 + logged_isize);
4392 if (ret < 0) {
4393 err = ret;
4394 goto out_unlock;
4395 @@ -4055,7 +4127,7 @@ next_slot:
4396 if (ins_nr) {
4397 ret = copy_items(trans, inode, dst_path, path,
4398 &last_extent, ins_start_slot,
4399 - ins_nr, inode_only);
4400 + ins_nr, inode_only, logged_isize);
4401 if (ret < 0) {
4402 err = ret;
4403 goto out_unlock;
4404 @@ -4076,7 +4148,8 @@ next_slot:
4405 }
4406 if (ins_nr) {
4407 ret = copy_items(trans, inode, dst_path, path, &last_extent,
4408 - ins_start_slot, ins_nr, inode_only);
4409 + ins_start_slot, ins_nr, inode_only,
4410 + logged_isize);
4411 if (ret < 0) {
4412 err = ret;
4413 goto out_unlock;
4414 diff --git a/fs/jffs2/scan.c b/fs/jffs2/scan.c
4415 index 7654e87b0428..9ad5ba4b299b 100644
4416 --- a/fs/jffs2/scan.c
4417 +++ b/fs/jffs2/scan.c
4418 @@ -510,6 +510,10 @@ static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblo
4419 sumlen = c->sector_size - je32_to_cpu(sm->offset);
4420 sumptr = buf + buf_size - sumlen;
4421
4422 + /* sm->offset maybe wrong but MAGIC maybe right */
4423 + if (sumlen > c->sector_size)
4424 + goto full_scan;
4425 +
4426 /* Now, make sure the summary itself is available */
4427 if (sumlen > buf_size) {
4428 /* Need to kmalloc for this. */
4429 @@ -544,6 +548,7 @@ static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblo
4430 }
4431 }
4432
4433 +full_scan:
4434 buf_ofs = jeb->offset;
4435
4436 if (!buf_size) {
4437 diff --git a/fs/lockd/mon.c b/fs/lockd/mon.c
4438 index 9106f42c472c..67bdc0bb9aea 100644
4439 --- a/fs/lockd/mon.c
4440 +++ b/fs/lockd/mon.c
4441 @@ -65,7 +65,7 @@ static inline struct sockaddr *nsm_addr(const struct nsm_handle *nsm)
4442 return (struct sockaddr *)&nsm->sm_addr;
4443 }
4444
4445 -static struct rpc_clnt *nsm_create(struct net *net)
4446 +static struct rpc_clnt *nsm_create(struct net *net, const char *nodename)
4447 {
4448 struct sockaddr_in sin = {
4449 .sin_family = AF_INET,
4450 @@ -77,6 +77,7 @@ static struct rpc_clnt *nsm_create(struct net *net)
4451 .address = (struct sockaddr *)&sin,
4452 .addrsize = sizeof(sin),
4453 .servername = "rpc.statd",
4454 + .nodename = nodename,
4455 .program = &nsm_program,
4456 .version = NSM_VERSION,
4457 .authflavor = RPC_AUTH_NULL,
4458 @@ -102,7 +103,7 @@ out:
4459 return clnt;
4460 }
4461
4462 -static struct rpc_clnt *nsm_client_get(struct net *net)
4463 +static struct rpc_clnt *nsm_client_get(struct net *net, const char *nodename)
4464 {
4465 struct rpc_clnt *clnt, *new;
4466 struct lockd_net *ln = net_generic(net, lockd_net_id);
4467 @@ -111,7 +112,7 @@ static struct rpc_clnt *nsm_client_get(struct net *net)
4468 if (clnt != NULL)
4469 goto out;
4470
4471 - clnt = new = nsm_create(net);
4472 + clnt = new = nsm_create(net, nodename);
4473 if (IS_ERR(clnt))
4474 goto out;
4475
4476 @@ -190,19 +191,23 @@ int nsm_monitor(const struct nlm_host *host)
4477 struct nsm_res res;
4478 int status;
4479 struct rpc_clnt *clnt;
4480 + const char *nodename = NULL;
4481
4482 dprintk("lockd: nsm_monitor(%s)\n", nsm->sm_name);
4483
4484 if (nsm->sm_monitored)
4485 return 0;
4486
4487 + if (host->h_rpcclnt)
4488 + nodename = host->h_rpcclnt->cl_nodename;
4489 +
4490 /*
4491 * Choose whether to record the caller_name or IP address of
4492 * this peer in the local rpc.statd's database.
4493 */
4494 nsm->sm_mon_name = nsm_use_hostnames ? nsm->sm_name : nsm->sm_addrbuf;
4495
4496 - clnt = nsm_client_get(host->net);
4497 + clnt = nsm_client_get(host->net, nodename);
4498 if (IS_ERR(clnt)) {
4499 status = PTR_ERR(clnt);
4500 dprintk("lockd: failed to create NSM upcall transport, "
4501 diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c
4502 index b8fb3a4ef649..351be9205bf8 100644
4503 --- a/fs/nfs/callback.c
4504 +++ b/fs/nfs/callback.c
4505 @@ -128,22 +128,24 @@ nfs41_callback_svc(void *vrqstp)
4506 if (try_to_freeze())
4507 continue;
4508
4509 - prepare_to_wait(&serv->sv_cb_waitq, &wq, TASK_INTERRUPTIBLE);
4510 + prepare_to_wait(&serv->sv_cb_waitq, &wq, TASK_UNINTERRUPTIBLE);
4511 spin_lock_bh(&serv->sv_cb_lock);
4512 if (!list_empty(&serv->sv_cb_list)) {
4513 req = list_first_entry(&serv->sv_cb_list,
4514 struct rpc_rqst, rq_bc_list);
4515 list_del(&req->rq_bc_list);
4516 spin_unlock_bh(&serv->sv_cb_lock);
4517 + finish_wait(&serv->sv_cb_waitq, &wq);
4518 dprintk("Invoking bc_svc_process()\n");
4519 error = bc_svc_process(serv, req, rqstp);
4520 dprintk("bc_svc_process() returned w/ error code= %d\n",
4521 error);
4522 } else {
4523 spin_unlock_bh(&serv->sv_cb_lock);
4524 - schedule();
4525 + /* schedule_timeout to game the hung task watchdog */
4526 + schedule_timeout(60 * HZ);
4527 + finish_wait(&serv->sv_cb_waitq, &wq);
4528 }
4529 - finish_wait(&serv->sv_cb_waitq, &wq);
4530 }
4531 return 0;
4532 }
4533 diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c
4534 index f4ccfe6521ec..02f8d09e119f 100644
4535 --- a/fs/nfs/callback_xdr.c
4536 +++ b/fs/nfs/callback_xdr.c
4537 @@ -464,8 +464,10 @@ static __be32 decode_cb_sequence_args(struct svc_rqst *rqstp,
4538
4539 for (i = 0; i < args->csa_nrclists; i++) {
4540 status = decode_rc_list(xdr, &args->csa_rclists[i]);
4541 - if (status)
4542 + if (status) {
4543 + args->csa_nrclists = i;
4544 goto out_free;
4545 + }
4546 }
4547 }
4548 status = 0;
4549 diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
4550 index 294692ff83b1..a094b0c34ac3 100644
4551 --- a/fs/nfs/direct.c
4552 +++ b/fs/nfs/direct.c
4553 @@ -242,7 +242,7 @@ static void nfs_direct_release_pages(struct page **pages, unsigned int npages)
4554 void nfs_init_cinfo_from_dreq(struct nfs_commit_info *cinfo,
4555 struct nfs_direct_req *dreq)
4556 {
4557 - cinfo->lock = &dreq->lock;
4558 + cinfo->lock = &dreq->inode->i_lock;
4559 cinfo->mds = &dreq->mds_cinfo;
4560 cinfo->ds = &dreq->ds_cinfo;
4561 cinfo->dreq = dreq;
4562 diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h
4563 index efaa31c70fbe..e1acc1c4ce65 100644
4564 --- a/fs/nfs/internal.h
4565 +++ b/fs/nfs/internal.h
4566 @@ -377,7 +377,7 @@ extern struct rpc_stat nfs_rpcstat;
4567
4568 extern int __init register_nfs_fs(void);
4569 extern void __exit unregister_nfs_fs(void);
4570 -extern void nfs_sb_active(struct super_block *sb);
4571 +extern bool nfs_sb_active(struct super_block *sb);
4572 extern void nfs_sb_deactive(struct super_block *sb);
4573
4574 /* namespace.c */
4575 @@ -495,6 +495,26 @@ extern int nfs41_walk_client_list(struct nfs_client *clp,
4576 struct nfs_client **result,
4577 struct rpc_cred *cred);
4578
4579 +static inline struct inode *nfs_igrab_and_active(struct inode *inode)
4580 +{
4581 + inode = igrab(inode);
4582 + if (inode != NULL && !nfs_sb_active(inode->i_sb)) {
4583 + iput(inode);
4584 + inode = NULL;
4585 + }
4586 + return inode;
4587 +}
4588 +
4589 +static inline void nfs_iput_and_deactive(struct inode *inode)
4590 +{
4591 + if (inode != NULL) {
4592 + struct super_block *sb = inode->i_sb;
4593 +
4594 + iput(inode);
4595 + nfs_sb_deactive(sb);
4596 + }
4597 +}
4598 +
4599 /*
4600 * Determine the device name as a string
4601 */
4602 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
4603 index 83f3a7d7466e..cd617076aeca 100644
4604 --- a/fs/nfs/nfs4proc.c
4605 +++ b/fs/nfs/nfs4proc.c
4606 @@ -5130,9 +5130,13 @@ static void nfs4_delegreturn_done(struct rpc_task *task, void *calldata)
4607 static void nfs4_delegreturn_release(void *calldata)
4608 {
4609 struct nfs4_delegreturndata *data = calldata;
4610 + struct inode *inode = data->inode;
4611
4612 - if (data->roc)
4613 - pnfs_roc_release(data->inode);
4614 + if (inode) {
4615 + if (data->roc)
4616 + pnfs_roc_release(inode);
4617 + nfs_iput_and_deactive(inode);
4618 + }
4619 kfree(calldata);
4620 }
4621
4622 @@ -5189,9 +5193,9 @@ static int _nfs4_proc_delegreturn(struct inode *inode, struct rpc_cred *cred, co
4623 nfs_fattr_init(data->res.fattr);
4624 data->timestamp = jiffies;
4625 data->rpc_status = 0;
4626 - data->inode = inode;
4627 - data->roc = list_empty(&NFS_I(inode)->open_files) ?
4628 - pnfs_roc(inode) : false;
4629 + data->inode = nfs_igrab_and_active(inode);
4630 + if (data->inode)
4631 + data->roc = nfs4_roc(inode);
4632
4633 task_setup_data.callback_data = data;
4634 msg.rpc_argp = &data->args;
4635 diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
4636 index 0a5dda4d85c2..883ee88e5f5e 100644
4637 --- a/fs/nfs/pnfs.c
4638 +++ b/fs/nfs/pnfs.c
4639 @@ -1445,19 +1445,19 @@ pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *pgio, struct nfs_page *r
4640 {
4641 u64 rd_size = req->wb_bytes;
4642
4643 - WARN_ON_ONCE(pgio->pg_lseg != NULL);
4644 -
4645 - if (pgio->pg_dreq == NULL)
4646 - rd_size = i_size_read(pgio->pg_inode) - req_offset(req);
4647 - else
4648 - rd_size = nfs_dreq_bytes_left(pgio->pg_dreq);
4649 -
4650 - pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
4651 - req->wb_context,
4652 - req_offset(req),
4653 - rd_size,
4654 - IOMODE_READ,
4655 - GFP_KERNEL);
4656 + if (pgio->pg_lseg == NULL) {
4657 + if (pgio->pg_dreq == NULL)
4658 + rd_size = i_size_read(pgio->pg_inode) - req_offset(req);
4659 + else
4660 + rd_size = nfs_dreq_bytes_left(pgio->pg_dreq);
4661 +
4662 + pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
4663 + req->wb_context,
4664 + req_offset(req),
4665 + rd_size,
4666 + IOMODE_READ,
4667 + GFP_KERNEL);
4668 + }
4669 /* If no lseg, fall back to read through mds */
4670 if (pgio->pg_lseg == NULL)
4671 nfs_pageio_reset_read_mds(pgio);
4672 @@ -1469,14 +1469,13 @@ void
4673 pnfs_generic_pg_init_write(struct nfs_pageio_descriptor *pgio,
4674 struct nfs_page *req, u64 wb_size)
4675 {
4676 - WARN_ON_ONCE(pgio->pg_lseg != NULL);
4677 -
4678 - pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
4679 - req->wb_context,
4680 - req_offset(req),
4681 - wb_size,
4682 - IOMODE_RW,
4683 - GFP_NOFS);
4684 + if (pgio->pg_lseg == NULL)
4685 + pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
4686 + req->wb_context,
4687 + req_offset(req),
4688 + wb_size,
4689 + IOMODE_RW,
4690 + GFP_NOFS);
4691 /* If no lseg, fall back to write through mds */
4692 if (pgio->pg_lseg == NULL)
4693 nfs_pageio_reset_write_mds(pgio);
4694 diff --git a/fs/nfs/super.c b/fs/nfs/super.c
4695 index 31a11b0e885d..368d9395d2e7 100644
4696 --- a/fs/nfs/super.c
4697 +++ b/fs/nfs/super.c
4698 @@ -405,12 +405,15 @@ void __exit unregister_nfs_fs(void)
4699 unregister_filesystem(&nfs_fs_type);
4700 }
4701
4702 -void nfs_sb_active(struct super_block *sb)
4703 +bool nfs_sb_active(struct super_block *sb)
4704 {
4705 struct nfs_server *server = NFS_SB(sb);
4706
4707 - if (atomic_inc_return(&server->active) == 1)
4708 - atomic_inc(&sb->s_active);
4709 + if (!atomic_inc_not_zero(&sb->s_active))
4710 + return false;
4711 + if (atomic_inc_return(&server->active) != 1)
4712 + atomic_dec(&sb->s_active);
4713 + return true;
4714 }
4715 EXPORT_SYMBOL_GPL(nfs_sb_active);
4716
4717 diff --git a/fs/ocfs2/quota_local.c b/fs/ocfs2/quota_local.c
4718 index 10b653930ee2..465223b7592e 100644
4719 --- a/fs/ocfs2/quota_local.c
4720 +++ b/fs/ocfs2/quota_local.c
4721 @@ -701,8 +701,8 @@ static int ocfs2_local_read_info(struct super_block *sb, int type)
4722 /* We don't need the lock and we have to acquire quota file locks
4723 * which will later depend on this lock */
4724 mutex_unlock(&sb_dqopt(sb)->dqio_mutex);
4725 - info->dqi_maxblimit = 0x7fffffffffffffffLL;
4726 - info->dqi_maxilimit = 0x7fffffffffffffffLL;
4727 + info->dqi_max_spc_limit = 0x7fffffffffffffffLL;
4728 + info->dqi_max_ino_limit = 0x7fffffffffffffffLL;
4729 oinfo = kmalloc(sizeof(struct ocfs2_mem_dqinfo), GFP_NOFS);
4730 if (!oinfo) {
4731 mlog(ML_ERROR, "failed to allocate memory for ocfs2 quota"
4732 diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
4733 index 4e0388cffe3d..e8972bcddfb4 100644
4734 --- a/fs/proc/task_mmu.c
4735 +++ b/fs/proc/task_mmu.c
4736 @@ -1034,7 +1034,7 @@ static int pagemap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end,
4737 struct vm_area_struct *vma;
4738 struct pagemapread *pm = walk->private;
4739 spinlock_t *ptl;
4740 - pte_t *pte;
4741 + pte_t *pte, *orig_pte;
4742 int err = 0;
4743
4744 /* find the first VMA at or above 'addr' */
4745 @@ -1095,15 +1095,19 @@ static int pagemap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end,
4746 BUG_ON(is_vm_hugetlb_page(vma));
4747
4748 /* Addresses in the VMA. */
4749 - for (; addr < min(end, vma->vm_end); addr += PAGE_SIZE) {
4750 + orig_pte = pte = pte_offset_map_lock(walk->mm, pmd, addr, &ptl);
4751 + for (; addr < min(end, vma->vm_end); pte++, addr += PAGE_SIZE) {
4752 pagemap_entry_t pme;
4753 - pte = pte_offset_map(pmd, addr);
4754 +
4755 pte_to_pagemap_entry(&pme, pm, vma, addr, *pte);
4756 - pte_unmap(pte);
4757 err = add_to_pagemap(addr, &pme, pm);
4758 if (err)
4759 - return err;
4760 + break;
4761 }
4762 + pte_unmap_unlock(orig_pte, ptl);
4763 +
4764 + if (err)
4765 + return err;
4766
4767 if (addr == end)
4768 break;
4769 diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c
4770 index 9340228aff6e..05fea2ac116c 100644
4771 --- a/fs/quota/dquot.c
4772 +++ b/fs/quota/dquot.c
4773 @@ -2380,16 +2380,6 @@ out:
4774 }
4775 EXPORT_SYMBOL(dquot_quota_on_mount);
4776
4777 -static inline qsize_t qbtos(qsize_t blocks)
4778 -{
4779 - return blocks << QIF_DQBLKSIZE_BITS;
4780 -}
4781 -
4782 -static inline qsize_t stoqb(qsize_t space)
4783 -{
4784 - return (space + QIF_DQBLKSIZE - 1) >> QIF_DQBLKSIZE_BITS;
4785 -}
4786 -
4787 /* Generic routine for getting common part of quota structure */
4788 static void do_get_dqblk(struct dquot *dquot, struct qc_dqblk *di)
4789 {
4790 @@ -2439,13 +2429,13 @@ static int do_set_dqblk(struct dquot *dquot, struct qc_dqblk *di)
4791 return -EINVAL;
4792
4793 if (((di->d_fieldmask & QC_SPC_SOFT) &&
4794 - stoqb(di->d_spc_softlimit) > dqi->dqi_maxblimit) ||
4795 + di->d_spc_softlimit > dqi->dqi_max_spc_limit) ||
4796 ((di->d_fieldmask & QC_SPC_HARD) &&
4797 - stoqb(di->d_spc_hardlimit) > dqi->dqi_maxblimit) ||
4798 + di->d_spc_hardlimit > dqi->dqi_max_spc_limit) ||
4799 ((di->d_fieldmask & QC_INO_SOFT) &&
4800 - (di->d_ino_softlimit > dqi->dqi_maxilimit)) ||
4801 + (di->d_ino_softlimit > dqi->dqi_max_ino_limit)) ||
4802 ((di->d_fieldmask & QC_INO_HARD) &&
4803 - (di->d_ino_hardlimit > dqi->dqi_maxilimit)))
4804 + (di->d_ino_hardlimit > dqi->dqi_max_ino_limit)))
4805 return -ERANGE;
4806
4807 spin_lock(&dq_data_lock);
4808 diff --git a/fs/quota/quota_v1.c b/fs/quota/quota_v1.c
4809 index 469c6848b322..8fe79beced5c 100644
4810 --- a/fs/quota/quota_v1.c
4811 +++ b/fs/quota/quota_v1.c
4812 @@ -169,8 +169,8 @@ static int v1_read_file_info(struct super_block *sb, int type)
4813 }
4814 ret = 0;
4815 /* limits are stored as unsigned 32-bit data */
4816 - dqopt->info[type].dqi_maxblimit = 0xffffffff;
4817 - dqopt->info[type].dqi_maxilimit = 0xffffffff;
4818 + dqopt->info[type].dqi_max_spc_limit = 0xffffffffULL << QUOTABLOCK_BITS;
4819 + dqopt->info[type].dqi_max_ino_limit = 0xffffffff;
4820 dqopt->info[type].dqi_igrace =
4821 dqblk.dqb_itime ? dqblk.dqb_itime : MAX_IQ_TIME;
4822 dqopt->info[type].dqi_bgrace =
4823 diff --git a/fs/quota/quota_v2.c b/fs/quota/quota_v2.c
4824 index 02751ec695c5..d1a8054bba9a 100644
4825 --- a/fs/quota/quota_v2.c
4826 +++ b/fs/quota/quota_v2.c
4827 @@ -117,12 +117,12 @@ static int v2_read_file_info(struct super_block *sb, int type)
4828 qinfo = info->dqi_priv;
4829 if (version == 0) {
4830 /* limits are stored as unsigned 32-bit data */
4831 - info->dqi_maxblimit = 0xffffffff;
4832 - info->dqi_maxilimit = 0xffffffff;
4833 + info->dqi_max_spc_limit = 0xffffffffULL << QUOTABLOCK_BITS;
4834 + info->dqi_max_ino_limit = 0xffffffff;
4835 } else {
4836 - /* used space is stored as unsigned 64-bit value */
4837 - info->dqi_maxblimit = 0xffffffffffffffffULL; /* 2^64-1 */
4838 - info->dqi_maxilimit = 0xffffffffffffffffULL;
4839 + /* used space is stored as unsigned 64-bit value in bytes */
4840 + info->dqi_max_spc_limit = 0xffffffffffffffffULL; /* 2^64-1 */
4841 + info->dqi_max_ino_limit = 0xffffffffffffffffULL;
4842 }
4843 info->dqi_bgrace = le32_to_cpu(dinfo.dqi_bgrace);
4844 info->dqi_igrace = le32_to_cpu(dinfo.dqi_igrace);
4845 diff --git a/fs/udf/inode.c b/fs/udf/inode.c
4846 index 5bc71d9a674a..7b72b7dd8906 100644
4847 --- a/fs/udf/inode.c
4848 +++ b/fs/udf/inode.c
4849 @@ -1288,6 +1288,7 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode)
4850 struct kernel_lb_addr *iloc = &iinfo->i_location;
4851 unsigned int link_count;
4852 unsigned int indirections = 0;
4853 + int bs = inode->i_sb->s_blocksize;
4854 int ret = -EIO;
4855
4856 reread:
4857 @@ -1374,38 +1375,35 @@ reread:
4858 if (fe->descTag.tagIdent == cpu_to_le16(TAG_IDENT_EFE)) {
4859 iinfo->i_efe = 1;
4860 iinfo->i_use = 0;
4861 - ret = udf_alloc_i_data(inode, inode->i_sb->s_blocksize -
4862 + ret = udf_alloc_i_data(inode, bs -
4863 sizeof(struct extendedFileEntry));
4864 if (ret)
4865 goto out;
4866 memcpy(iinfo->i_ext.i_data,
4867 bh->b_data + sizeof(struct extendedFileEntry),
4868 - inode->i_sb->s_blocksize -
4869 - sizeof(struct extendedFileEntry));
4870 + bs - sizeof(struct extendedFileEntry));
4871 } else if (fe->descTag.tagIdent == cpu_to_le16(TAG_IDENT_FE)) {
4872 iinfo->i_efe = 0;
4873 iinfo->i_use = 0;
4874 - ret = udf_alloc_i_data(inode, inode->i_sb->s_blocksize -
4875 - sizeof(struct fileEntry));
4876 + ret = udf_alloc_i_data(inode, bs - sizeof(struct fileEntry));
4877 if (ret)
4878 goto out;
4879 memcpy(iinfo->i_ext.i_data,
4880 bh->b_data + sizeof(struct fileEntry),
4881 - inode->i_sb->s_blocksize - sizeof(struct fileEntry));
4882 + bs - sizeof(struct fileEntry));
4883 } else if (fe->descTag.tagIdent == cpu_to_le16(TAG_IDENT_USE)) {
4884 iinfo->i_efe = 0;
4885 iinfo->i_use = 1;
4886 iinfo->i_lenAlloc = le32_to_cpu(
4887 ((struct unallocSpaceEntry *)bh->b_data)->
4888 lengthAllocDescs);
4889 - ret = udf_alloc_i_data(inode, inode->i_sb->s_blocksize -
4890 + ret = udf_alloc_i_data(inode, bs -
4891 sizeof(struct unallocSpaceEntry));
4892 if (ret)
4893 goto out;
4894 memcpy(iinfo->i_ext.i_data,
4895 bh->b_data + sizeof(struct unallocSpaceEntry),
4896 - inode->i_sb->s_blocksize -
4897 - sizeof(struct unallocSpaceEntry));
4898 + bs - sizeof(struct unallocSpaceEntry));
4899 return 0;
4900 }
4901
4902 @@ -1489,6 +1487,15 @@ reread:
4903 }
4904 inode->i_generation = iinfo->i_unique;
4905
4906 + /*
4907 + * Sanity check length of allocation descriptors and extended attrs to
4908 + * avoid integer overflows
4909 + */
4910 + if (iinfo->i_lenEAttr > bs || iinfo->i_lenAlloc > bs)
4911 + goto out;
4912 + /* Now do exact checks */
4913 + if (udf_file_entry_alloc_offset(inode) + iinfo->i_lenAlloc > bs)
4914 + goto out;
4915 /* Sanity checks for files in ICB so that we don't get confused later */
4916 if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) {
4917 /*
4918 @@ -1498,8 +1505,7 @@ reread:
4919 if (iinfo->i_lenAlloc != inode->i_size)
4920 goto out;
4921 /* File in ICB has to fit in there... */
4922 - if (inode->i_size > inode->i_sb->s_blocksize -
4923 - udf_file_entry_alloc_offset(inode))
4924 + if (inode->i_size > bs - udf_file_entry_alloc_offset(inode))
4925 goto out;
4926 }
4927
4928 diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
4929 index 79c981984dca..661666ecac22 100644
4930 --- a/fs/xfs/libxfs/xfs_bmap.c
4931 +++ b/fs/xfs/libxfs/xfs_bmap.c
4932 @@ -976,7 +976,11 @@ xfs_bmap_local_to_extents(
4933 *firstblock = args.fsbno;
4934 bp = xfs_btree_get_bufl(args.mp, tp, args.fsbno, 0);
4935
4936 - /* initialise the block and copy the data */
4937 + /*
4938 + * Initialise the block and copy the data
4939 + *
4940 + * Note: init_fn must set the buffer log item type correctly!
4941 + */
4942 init_fn(tp, bp, ip, ifp);
4943
4944 /* account for the change in fork size and log everything */
4945 diff --git a/fs/xfs/libxfs/xfs_symlink_remote.c b/fs/xfs/libxfs/xfs_symlink_remote.c
4946 index 5782f037eab4..a7dce9aea5b5 100644
4947 --- a/fs/xfs/libxfs/xfs_symlink_remote.c
4948 +++ b/fs/xfs/libxfs/xfs_symlink_remote.c
4949 @@ -180,6 +180,8 @@ xfs_symlink_local_to_remote(
4950 struct xfs_mount *mp = ip->i_mount;
4951 char *buf;
4952
4953 + xfs_trans_buf_set_type(tp, bp, XFS_BLFT_SYMLINK_BUF);
4954 +
4955 if (!xfs_sb_version_hascrc(&mp->m_sb)) {
4956 bp->b_ops = NULL;
4957 memcpy(bp->b_addr, ifp->if_u1.if_data, ifp->if_bytes);
4958 diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c
4959 index f15969543326..1a6c9b936789 100644
4960 --- a/fs/xfs/xfs_buf_item.c
4961 +++ b/fs/xfs/xfs_buf_item.c
4962 @@ -319,6 +319,10 @@ xfs_buf_item_format(
4963 ASSERT(atomic_read(&bip->bli_refcount) > 0);
4964 ASSERT((bip->bli_flags & XFS_BLI_LOGGED) ||
4965 (bip->bli_flags & XFS_BLI_STALE));
4966 + ASSERT((bip->bli_flags & XFS_BLI_STALE) ||
4967 + (xfs_blft_from_flags(&bip->__bli_format) > XFS_BLFT_UNKNOWN_BUF
4968 + && xfs_blft_from_flags(&bip->__bli_format) < XFS_BLFT_MAX_BUF));
4969 +
4970
4971 /*
4972 * If it is an inode buffer, transfer the in-memory state to the
4973 diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
4974 index 8ed049d1e332..3cc309a19ea8 100644
4975 --- a/fs/xfs/xfs_inode.c
4976 +++ b/fs/xfs/xfs_inode.c
4977 @@ -2000,6 +2000,7 @@ xfs_iunlink(
4978 agi->agi_unlinked[bucket_index] = cpu_to_be32(agino);
4979 offset = offsetof(xfs_agi_t, agi_unlinked) +
4980 (sizeof(xfs_agino_t) * bucket_index);
4981 + xfs_trans_buf_set_type(tp, agibp, XFS_BLFT_AGI_BUF);
4982 xfs_trans_log_buf(tp, agibp, offset,
4983 (offset + sizeof(xfs_agino_t) - 1));
4984 return 0;
4985 @@ -2091,6 +2092,7 @@ xfs_iunlink_remove(
4986 agi->agi_unlinked[bucket_index] = cpu_to_be32(next_agino);
4987 offset = offsetof(xfs_agi_t, agi_unlinked) +
4988 (sizeof(xfs_agino_t) * bucket_index);
4989 + xfs_trans_buf_set_type(tp, agibp, XFS_BLFT_AGI_BUF);
4990 xfs_trans_log_buf(tp, agibp, offset,
4991 (offset + sizeof(xfs_agino_t) - 1));
4992 } else {
4993 diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c
4994 index d68f23021af3..cf2bc2dd702e 100644
4995 --- a/fs/xfs/xfs_qm.c
4996 +++ b/fs/xfs/xfs_qm.c
4997 @@ -844,6 +844,11 @@ xfs_qm_reset_dqcounts(
4998 */
4999 xfs_dqcheck(mp, ddq, id+j, type, XFS_QMOPT_DQREPAIR,
5000 "xfs_quotacheck");
5001 + /*
5002 + * Reset type in case we are reusing group quota file for
5003 + * project quotas or vice versa
5004 + */
5005 + ddq->d_flags = type;
5006 ddq->d_bcount = 0;
5007 ddq->d_icount = 0;
5008 ddq->d_rtbcount = 0;
5009 diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c
5010 index 30e8e3410955..32dfdb5d3e6b 100644
5011 --- a/fs/xfs/xfs_trans.c
5012 +++ b/fs/xfs/xfs_trans.c
5013 @@ -474,6 +474,7 @@ xfs_trans_apply_sb_deltas(
5014 whole = 1;
5015 }
5016
5017 + xfs_trans_buf_set_type(tp, bp, XFS_BLFT_SB_BUF);
5018 if (whole)
5019 /*
5020 * Log the whole thing, the fields are noncontiguous.
5021 diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h
5022 index 1c804b057fb1..7ee1774edee5 100644
5023 --- a/include/linux/fsnotify.h
5024 +++ b/include/linux/fsnotify.h
5025 @@ -101,8 +101,10 @@ static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir,
5026 new_dir_mask |= FS_ISDIR;
5027 }
5028
5029 - fsnotify(old_dir, old_dir_mask, old_dir, FSNOTIFY_EVENT_INODE, old_name, fs_cookie);
5030 - fsnotify(new_dir, new_dir_mask, new_dir, FSNOTIFY_EVENT_INODE, new_name, fs_cookie);
5031 + fsnotify(old_dir, old_dir_mask, source, FSNOTIFY_EVENT_INODE, old_name,
5032 + fs_cookie);
5033 + fsnotify(new_dir, new_dir_mask, source, FSNOTIFY_EVENT_INODE, new_name,
5034 + fs_cookie);
5035
5036 if (target)
5037 fsnotify_link_count(target);
5038 diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
5039 index 47ebb4fafd87..d77a08d25223 100644
5040 --- a/include/linux/nfs_xdr.h
5041 +++ b/include/linux/nfs_xdr.h
5042 @@ -1328,7 +1328,7 @@ struct nfs_commit_completion_ops {
5043 };
5044
5045 struct nfs_commit_info {
5046 - spinlock_t *lock;
5047 + spinlock_t *lock; /* inode->i_lock */
5048 struct nfs_mds_commit_info *mds;
5049 struct pnfs_ds_commit_info *ds;
5050 struct nfs_direct_req *dreq; /* O_DIRECT request */
5051 diff --git a/include/linux/quota.h b/include/linux/quota.h
5052 index 224fb8154f8f..8b0877faa7f5 100644
5053 --- a/include/linux/quota.h
5054 +++ b/include/linux/quota.h
5055 @@ -211,8 +211,8 @@ struct mem_dqinfo {
5056 unsigned long dqi_flags;
5057 unsigned int dqi_bgrace;
5058 unsigned int dqi_igrace;
5059 - qsize_t dqi_maxblimit;
5060 - qsize_t dqi_maxilimit;
5061 + qsize_t dqi_max_spc_limit;
5062 + qsize_t dqi_max_ino_limit;
5063 void *dqi_priv;
5064 };
5065
5066 diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
5067 index 70736b98c721..b363a0f6dfe1 100644
5068 --- a/include/linux/sunrpc/clnt.h
5069 +++ b/include/linux/sunrpc/clnt.h
5070 @@ -57,7 +57,7 @@ struct rpc_clnt {
5071 const struct rpc_timeout *cl_timeout; /* Timeout strategy */
5072
5073 int cl_nodelen; /* nodename length */
5074 - char cl_nodename[UNX_MAXNODENAME];
5075 + char cl_nodename[UNX_MAXNODENAME+1];
5076 struct rpc_pipe_dir_head cl_pipedir_objects;
5077 struct rpc_clnt * cl_parent; /* Points to parent of clones */
5078 struct rpc_rtt cl_rtt_default;
5079 @@ -109,6 +109,7 @@ struct rpc_create_args {
5080 struct sockaddr *saddress;
5081 const struct rpc_timeout *timeout;
5082 const char *servername;
5083 + const char *nodename;
5084 const struct rpc_program *program;
5085 u32 prognumber; /* overrides program->number */
5086 u32 version;
5087 diff --git a/include/linux/usb.h b/include/linux/usb.h
5088 index 447a7e2fc19b..3827bffc11a7 100644
5089 --- a/include/linux/usb.h
5090 +++ b/include/linux/usb.h
5091 @@ -127,10 +127,6 @@ enum usb_interface_condition {
5092 * to the sysfs representation for that device.
5093 * @pm_usage_cnt: PM usage counter for this interface
5094 * @reset_ws: Used for scheduling resets from atomic context.
5095 - * @reset_running: set to 1 if the interface is currently running a
5096 - * queued reset so that usb_cancel_queued_reset() doesn't try to
5097 - * remove from the workqueue when running inside the worker
5098 - * thread. See __usb_queue_reset_device().
5099 * @resetting_device: USB core reset the device, so use alt setting 0 as
5100 * current; needs bandwidth alloc after reset.
5101 *
5102 @@ -181,7 +177,6 @@ struct usb_interface {
5103 unsigned needs_remote_wakeup:1; /* driver requires remote wakeup */
5104 unsigned needs_altsetting0:1; /* switch to altsetting 0 is pending */
5105 unsigned needs_binding:1; /* needs delayed unbind/rebind */
5106 - unsigned reset_running:1;
5107 unsigned resetting_device:1; /* true: bandwidth alloc after reset */
5108
5109 struct device dev; /* interface specific device info */
5110 diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h
5111 index cd96a2bc3388..2f48e1756cbd 100644
5112 --- a/include/linux/usb/hcd.h
5113 +++ b/include/linux/usb/hcd.h
5114 @@ -146,6 +146,8 @@ struct usb_hcd {
5115 unsigned amd_resume_bug:1; /* AMD remote wakeup quirk */
5116 unsigned can_do_streams:1; /* HC supports streams */
5117 unsigned tpl_support:1; /* OTG & EH TPL support */
5118 + unsigned cant_recv_wakeups:1;
5119 + /* wakeup requests from downstream aren't received */
5120
5121 unsigned int irq; /* irq allocated */
5122 void __iomem *regs; /* device memory/io */
5123 @@ -450,6 +452,7 @@ extern const struct dev_pm_ops usb_hcd_pci_pm_ops;
5124 #endif /* CONFIG_PCI */
5125
5126 /* pci-ish (pdev null is ok) buffer alloc/mapping support */
5127 +void usb_init_pool_max(void);
5128 int hcd_buffer_create(struct usb_hcd *hcd);
5129 void hcd_buffer_destroy(struct usb_hcd *hcd);
5130
5131 diff --git a/include/net/cipso_ipv4.h b/include/net/cipso_ipv4.h
5132 index a6fd939f202d..3ebb168b9afc 100644
5133 --- a/include/net/cipso_ipv4.h
5134 +++ b/include/net/cipso_ipv4.h
5135 @@ -121,13 +121,6 @@ extern int cipso_v4_rbm_strictvalid;
5136 #endif
5137
5138 /*
5139 - * Helper Functions
5140 - */
5141 -
5142 -#define CIPSO_V4_OPTEXIST(x) (IPCB(x)->opt.cipso != 0)
5143 -#define CIPSO_V4_OPTPTR(x) (skb_network_header(x) + IPCB(x)->opt.cipso)
5144 -
5145 -/*
5146 * DOI List Functions
5147 */
5148
5149 @@ -190,7 +183,7 @@ static inline int cipso_v4_doi_domhsh_remove(struct cipso_v4_doi *doi_def,
5150
5151 #ifdef CONFIG_NETLABEL
5152 void cipso_v4_cache_invalidate(void);
5153 -int cipso_v4_cache_add(const struct sk_buff *skb,
5154 +int cipso_v4_cache_add(const unsigned char *cipso_ptr,
5155 const struct netlbl_lsm_secattr *secattr);
5156 #else
5157 static inline void cipso_v4_cache_invalidate(void)
5158 @@ -198,7 +191,7 @@ static inline void cipso_v4_cache_invalidate(void)
5159 return;
5160 }
5161
5162 -static inline int cipso_v4_cache_add(const struct sk_buff *skb,
5163 +static inline int cipso_v4_cache_add(const unsigned char *cipso_ptr,
5164 const struct netlbl_lsm_secattr *secattr)
5165 {
5166 return 0;
5167 @@ -211,6 +204,8 @@ static inline int cipso_v4_cache_add(const struct sk_buff *skb,
5168
5169 #ifdef CONFIG_NETLABEL
5170 void cipso_v4_error(struct sk_buff *skb, int error, u32 gateway);
5171 +int cipso_v4_getattr(const unsigned char *cipso,
5172 + struct netlbl_lsm_secattr *secattr);
5173 int cipso_v4_sock_setattr(struct sock *sk,
5174 const struct cipso_v4_doi *doi_def,
5175 const struct netlbl_lsm_secattr *secattr);
5176 @@ -226,6 +221,7 @@ int cipso_v4_skbuff_setattr(struct sk_buff *skb,
5177 int cipso_v4_skbuff_delattr(struct sk_buff *skb);
5178 int cipso_v4_skbuff_getattr(const struct sk_buff *skb,
5179 struct netlbl_lsm_secattr *secattr);
5180 +unsigned char *cipso_v4_optptr(const struct sk_buff *skb);
5181 int cipso_v4_validate(const struct sk_buff *skb, unsigned char **option);
5182 #else
5183 static inline void cipso_v4_error(struct sk_buff *skb,
5184 @@ -235,6 +231,12 @@ static inline void cipso_v4_error(struct sk_buff *skb,
5185 return;
5186 }
5187
5188 +static inline int cipso_v4_getattr(const unsigned char *cipso,
5189 + struct netlbl_lsm_secattr *secattr)
5190 +{
5191 + return -ENOSYS;
5192 +}
5193 +
5194 static inline int cipso_v4_sock_setattr(struct sock *sk,
5195 const struct cipso_v4_doi *doi_def,
5196 const struct netlbl_lsm_secattr *secattr)
5197 @@ -282,6 +284,11 @@ static inline int cipso_v4_skbuff_getattr(const struct sk_buff *skb,
5198 return -ENOSYS;
5199 }
5200
5201 +static inline unsigned char *cipso_v4_optptr(const struct sk_buff *skb)
5202 +{
5203 + return NULL;
5204 +}
5205 +
5206 static inline int cipso_v4_validate(const struct sk_buff *skb,
5207 unsigned char **option)
5208 {
5209 diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c
5210 index 379650b984f8..6ffdc96059a0 100644
5211 --- a/kernel/debug/kdb/kdb_main.c
5212 +++ b/kernel/debug/kdb/kdb_main.c
5213 @@ -2535,7 +2535,7 @@ static int kdb_summary(int argc, const char **argv)
5214 #define K(x) ((x) << (PAGE_SHIFT - 10))
5215 kdb_printf("\nMemTotal: %8lu kB\nMemFree: %8lu kB\n"
5216 "Buffers: %8lu kB\n",
5217 - val.totalram, val.freeram, val.bufferram);
5218 + K(val.totalram), K(val.freeram), K(val.bufferram));
5219 return 0;
5220 }
5221
5222 diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c
5223 index 28bf91c60a0b..85fb3d632bd8 100644
5224 --- a/kernel/time/ntp.c
5225 +++ b/kernel/time/ntp.c
5226 @@ -633,10 +633,14 @@ int ntp_validate_timex(struct timex *txc)
5227 if ((txc->modes & ADJ_SETOFFSET) && (!capable(CAP_SYS_TIME)))
5228 return -EPERM;
5229
5230 - if (txc->modes & ADJ_FREQUENCY) {
5231 - if (LONG_MIN / PPM_SCALE > txc->freq)
5232 + /*
5233 + * Check for potential multiplication overflows that can
5234 + * only happen on 64-bit systems:
5235 + */
5236 + if ((txc->modes & ADJ_FREQUENCY) && (BITS_PER_LONG == 64)) {
5237 + if (LLONG_MIN / PPM_SCALE > txc->freq)
5238 return -EINVAL;
5239 - if (LONG_MAX / PPM_SCALE < txc->freq)
5240 + if (LLONG_MAX / PPM_SCALE < txc->freq)
5241 return -EINVAL;
5242 }
5243
5244 diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
5245 index a56e07c8d15b..f4fbbfcdf399 100644
5246 --- a/kernel/trace/ring_buffer.c
5247 +++ b/kernel/trace/ring_buffer.c
5248 @@ -450,7 +450,10 @@ int ring_buffer_print_page_header(struct trace_seq *s)
5249 struct rb_irq_work {
5250 struct irq_work work;
5251 wait_queue_head_t waiters;
5252 + wait_queue_head_t full_waiters;
5253 bool waiters_pending;
5254 + bool full_waiters_pending;
5255 + bool wakeup_full;
5256 };
5257
5258 /*
5259 @@ -532,6 +535,10 @@ static void rb_wake_up_waiters(struct irq_work *work)
5260 struct rb_irq_work *rbwork = container_of(work, struct rb_irq_work, work);
5261
5262 wake_up_all(&rbwork->waiters);
5263 + if (rbwork->wakeup_full) {
5264 + rbwork->wakeup_full = false;
5265 + wake_up_all(&rbwork->full_waiters);
5266 + }
5267 }
5268
5269 /**
5270 @@ -556,9 +563,11 @@ int ring_buffer_wait(struct ring_buffer *buffer, int cpu, bool full)
5271 * data in any cpu buffer, or a specific buffer, put the
5272 * caller on the appropriate wait queue.
5273 */
5274 - if (cpu == RING_BUFFER_ALL_CPUS)
5275 + if (cpu == RING_BUFFER_ALL_CPUS) {
5276 work = &buffer->irq_work;
5277 - else {
5278 + /* Full only makes sense on per cpu reads */
5279 + full = false;
5280 + } else {
5281 if (!cpumask_test_cpu(cpu, buffer->cpumask))
5282 return -ENODEV;
5283 cpu_buffer = buffer->buffers[cpu];
5284 @@ -567,7 +576,10 @@ int ring_buffer_wait(struct ring_buffer *buffer, int cpu, bool full)
5285
5286
5287 while (true) {
5288 - prepare_to_wait(&work->waiters, &wait, TASK_INTERRUPTIBLE);
5289 + if (full)
5290 + prepare_to_wait(&work->full_waiters, &wait, TASK_INTERRUPTIBLE);
5291 + else
5292 + prepare_to_wait(&work->waiters, &wait, TASK_INTERRUPTIBLE);
5293
5294 /*
5295 * The events can happen in critical sections where
5296 @@ -589,7 +601,10 @@ int ring_buffer_wait(struct ring_buffer *buffer, int cpu, bool full)
5297 * that is necessary is that the wake up happens after
5298 * a task has been queued. It's OK for spurious wake ups.
5299 */
5300 - work->waiters_pending = true;
5301 + if (full)
5302 + work->full_waiters_pending = true;
5303 + else
5304 + work->waiters_pending = true;
5305
5306 if (signal_pending(current)) {
5307 ret = -EINTR;
5308 @@ -618,7 +633,10 @@ int ring_buffer_wait(struct ring_buffer *buffer, int cpu, bool full)
5309 schedule();
5310 }
5311
5312 - finish_wait(&work->waiters, &wait);
5313 + if (full)
5314 + finish_wait(&work->full_waiters, &wait);
5315 + else
5316 + finish_wait(&work->waiters, &wait);
5317
5318 return ret;
5319 }
5320 @@ -1233,6 +1251,7 @@ rb_allocate_cpu_buffer(struct ring_buffer *buffer, int nr_pages, int cpu)
5321 init_completion(&cpu_buffer->update_done);
5322 init_irq_work(&cpu_buffer->irq_work.work, rb_wake_up_waiters);
5323 init_waitqueue_head(&cpu_buffer->irq_work.waiters);
5324 + init_waitqueue_head(&cpu_buffer->irq_work.full_waiters);
5325
5326 bpage = kzalloc_node(ALIGN(sizeof(*bpage), cache_line_size()),
5327 GFP_KERNEL, cpu_to_node(cpu));
5328 @@ -2804,6 +2823,8 @@ static void rb_commit(struct ring_buffer_per_cpu *cpu_buffer,
5329 static __always_inline void
5330 rb_wakeups(struct ring_buffer *buffer, struct ring_buffer_per_cpu *cpu_buffer)
5331 {
5332 + bool pagebusy;
5333 +
5334 if (buffer->irq_work.waiters_pending) {
5335 buffer->irq_work.waiters_pending = false;
5336 /* irq_work_queue() supplies it's own memory barriers */
5337 @@ -2815,6 +2836,15 @@ rb_wakeups(struct ring_buffer *buffer, struct ring_buffer_per_cpu *cpu_buffer)
5338 /* irq_work_queue() supplies it's own memory barriers */
5339 irq_work_queue(&cpu_buffer->irq_work.work);
5340 }
5341 +
5342 + pagebusy = cpu_buffer->reader_page == cpu_buffer->commit_page;
5343 +
5344 + if (!pagebusy && cpu_buffer->irq_work.full_waiters_pending) {
5345 + cpu_buffer->irq_work.wakeup_full = true;
5346 + cpu_buffer->irq_work.full_waiters_pending = false;
5347 + /* irq_work_queue() supplies it's own memory barriers */
5348 + irq_work_queue(&cpu_buffer->irq_work.work);
5349 + }
5350 }
5351
5352 /**
5353 diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
5354 index 426962b04183..72c71345db81 100644
5355 --- a/kernel/trace/trace.c
5356 +++ b/kernel/trace/trace.c
5357 @@ -4916,7 +4916,7 @@ tracing_mark_write(struct file *filp, const char __user *ubuf,
5358 *fpos += written;
5359
5360 out_unlock:
5361 - for (i = 0; i < nr_pages; i++){
5362 + for (i = nr_pages - 1; i >= 0; i--) {
5363 kunmap_atomic(map_page[i]);
5364 put_page(pages[i]);
5365 }
5366 diff --git a/mm/hugetlb.c b/mm/hugetlb.c
5367 index 9fd722769927..f08fec71ec5a 100644
5368 --- a/mm/hugetlb.c
5369 +++ b/mm/hugetlb.c
5370 @@ -3659,6 +3659,8 @@ follow_huge_pmd(struct mm_struct *mm, unsigned long address,
5371 {
5372 struct page *page;
5373
5374 + if (!pmd_present(*pmd))
5375 + return NULL;
5376 page = pte_page(*(pte_t *)pmd);
5377 if (page)
5378 page += ((address & ~PMD_MASK) >> PAGE_SHIFT);
5379 diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
5380 index f09b6b65cf6b..9ebc394ea5e5 100644
5381 --- a/net/bluetooth/smp.c
5382 +++ b/net/bluetooth/smp.c
5383 @@ -1392,8 +1392,12 @@ static int smp_cmd_ident_addr_info(struct l2cap_conn *conn,
5384 * implementations are not known of and in order to not over
5385 * complicate our implementation, simply pretend that we never
5386 * received an IRK for such a device.
5387 + *
5388 + * The Identity Address must also be a Static Random or Public
5389 + * Address, which hci_is_identity_address() checks for.
5390 */
5391 - if (!bacmp(&info->bdaddr, BDADDR_ANY)) {
5392 + if (!bacmp(&info->bdaddr, BDADDR_ANY) ||
5393 + !hci_is_identity_address(&info->bdaddr, info->addr_type)) {
5394 BT_ERR("Ignoring IRK with no identity address");
5395 goto distribute;
5396 }
5397 diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
5398 index 6f164289bde8..b0cf1f287aed 100644
5399 --- a/net/ceph/osd_client.c
5400 +++ b/net/ceph/osd_client.c
5401 @@ -1006,14 +1006,24 @@ static void put_osd(struct ceph_osd *osd)
5402 */
5403 static void __remove_osd(struct ceph_osd_client *osdc, struct ceph_osd *osd)
5404 {
5405 - dout("__remove_osd %p\n", osd);
5406 + dout("%s %p osd%d\n", __func__, osd, osd->o_osd);
5407 WARN_ON(!list_empty(&osd->o_requests));
5408 WARN_ON(!list_empty(&osd->o_linger_requests));
5409
5410 - rb_erase(&osd->o_node, &osdc->osds);
5411 list_del_init(&osd->o_osd_lru);
5412 - ceph_con_close(&osd->o_con);
5413 - put_osd(osd);
5414 + rb_erase(&osd->o_node, &osdc->osds);
5415 + RB_CLEAR_NODE(&osd->o_node);
5416 +}
5417 +
5418 +static void remove_osd(struct ceph_osd_client *osdc, struct ceph_osd *osd)
5419 +{
5420 + dout("%s %p osd%d\n", __func__, osd, osd->o_osd);
5421 +
5422 + if (!RB_EMPTY_NODE(&osd->o_node)) {
5423 + ceph_con_close(&osd->o_con);
5424 + __remove_osd(osdc, osd);
5425 + put_osd(osd);
5426 + }
5427 }
5428
5429 static void remove_all_osds(struct ceph_osd_client *osdc)
5430 @@ -1023,7 +1033,7 @@ static void remove_all_osds(struct ceph_osd_client *osdc)
5431 while (!RB_EMPTY_ROOT(&osdc->osds)) {
5432 struct ceph_osd *osd = rb_entry(rb_first(&osdc->osds),
5433 struct ceph_osd, o_node);
5434 - __remove_osd(osdc, osd);
5435 + remove_osd(osdc, osd);
5436 }
5437 mutex_unlock(&osdc->request_mutex);
5438 }
5439 @@ -1064,7 +1074,7 @@ static void remove_old_osds(struct ceph_osd_client *osdc)
5440 list_for_each_entry_safe(osd, nosd, &osdc->osd_lru, o_osd_lru) {
5441 if (time_before(jiffies, osd->lru_ttl))
5442 break;
5443 - __remove_osd(osdc, osd);
5444 + remove_osd(osdc, osd);
5445 }
5446 mutex_unlock(&osdc->request_mutex);
5447 }
5448 @@ -1079,8 +1089,7 @@ static int __reset_osd(struct ceph_osd_client *osdc, struct ceph_osd *osd)
5449 dout("__reset_osd %p osd%d\n", osd, osd->o_osd);
5450 if (list_empty(&osd->o_requests) &&
5451 list_empty(&osd->o_linger_requests)) {
5452 - __remove_osd(osdc, osd);
5453 -
5454 + remove_osd(osdc, osd);
5455 return -ENODEV;
5456 }
5457
5458 @@ -1884,6 +1893,7 @@ static void reset_changed_osds(struct ceph_osd_client *osdc)
5459 {
5460 struct rb_node *p, *n;
5461
5462 + dout("%s %p\n", __func__, osdc);
5463 for (p = rb_first(&osdc->osds); p; p = n) {
5464 struct ceph_osd *osd = rb_entry(p, struct ceph_osd, o_node);
5465
5466 diff --git a/net/ipv4/cipso_ipv4.c b/net/ipv4/cipso_ipv4.c
5467 index 4715f25dfe03..bc7c9662a904 100644
5468 --- a/net/ipv4/cipso_ipv4.c
5469 +++ b/net/ipv4/cipso_ipv4.c
5470 @@ -376,20 +376,18 @@ static int cipso_v4_cache_check(const unsigned char *key,
5471 * negative values on failure.
5472 *
5473 */
5474 -int cipso_v4_cache_add(const struct sk_buff *skb,
5475 +int cipso_v4_cache_add(const unsigned char *cipso_ptr,
5476 const struct netlbl_lsm_secattr *secattr)
5477 {
5478 int ret_val = -EPERM;
5479 u32 bkt;
5480 struct cipso_v4_map_cache_entry *entry = NULL;
5481 struct cipso_v4_map_cache_entry *old_entry = NULL;
5482 - unsigned char *cipso_ptr;
5483 u32 cipso_ptr_len;
5484
5485 if (!cipso_v4_cache_enabled || cipso_v4_cache_bucketsize <= 0)
5486 return 0;
5487
5488 - cipso_ptr = CIPSO_V4_OPTPTR(skb);
5489 cipso_ptr_len = cipso_ptr[1];
5490
5491 entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
5492 @@ -1577,6 +1575,33 @@ static int cipso_v4_parsetag_loc(const struct cipso_v4_doi *doi_def,
5493 }
5494
5495 /**
5496 + * cipso_v4_optptr - Find the CIPSO option in the packet
5497 + * @skb: the packet
5498 + *
5499 + * Description:
5500 + * Parse the packet's IP header looking for a CIPSO option. Returns a pointer
5501 + * to the start of the CIPSO option on success, NULL if one if not found.
5502 + *
5503 + */
5504 +unsigned char *cipso_v4_optptr(const struct sk_buff *skb)
5505 +{
5506 + const struct iphdr *iph = ip_hdr(skb);
5507 + unsigned char *optptr = (unsigned char *)&(ip_hdr(skb)[1]);
5508 + int optlen;
5509 + int taglen;
5510 +
5511 + for (optlen = iph->ihl*4 - sizeof(struct iphdr); optlen > 0; ) {
5512 + if (optptr[0] == IPOPT_CIPSO)
5513 + return optptr;
5514 + taglen = optptr[1];
5515 + optlen -= taglen;
5516 + optptr += taglen;
5517 + }
5518 +
5519 + return NULL;
5520 +}
5521 +
5522 +/**
5523 * cipso_v4_validate - Validate a CIPSO option
5524 * @option: the start of the option, on error it is set to point to the error
5525 *
5526 @@ -2117,8 +2142,8 @@ void cipso_v4_req_delattr(struct request_sock *req)
5527 * on success and negative values on failure.
5528 *
5529 */
5530 -static int cipso_v4_getattr(const unsigned char *cipso,
5531 - struct netlbl_lsm_secattr *secattr)
5532 +int cipso_v4_getattr(const unsigned char *cipso,
5533 + struct netlbl_lsm_secattr *secattr)
5534 {
5535 int ret_val = -ENOMSG;
5536 u32 doi;
5537 @@ -2303,22 +2328,6 @@ int cipso_v4_skbuff_delattr(struct sk_buff *skb)
5538 return 0;
5539 }
5540
5541 -/**
5542 - * cipso_v4_skbuff_getattr - Get the security attributes from the CIPSO option
5543 - * @skb: the packet
5544 - * @secattr: the security attributes
5545 - *
5546 - * Description:
5547 - * Parse the given packet's CIPSO option and return the security attributes.
5548 - * Returns zero on success and negative values on failure.
5549 - *
5550 - */
5551 -int cipso_v4_skbuff_getattr(const struct sk_buff *skb,
5552 - struct netlbl_lsm_secattr *secattr)
5553 -{
5554 - return cipso_v4_getattr(CIPSO_V4_OPTPTR(skb), secattr);
5555 -}
5556 -
5557 /*
5558 * Setup Functions
5559 */
5560 diff --git a/net/netlabel/netlabel_kapi.c b/net/netlabel/netlabel_kapi.c
5561 index a845cd4cf21e..28cddc85b700 100644
5562 --- a/net/netlabel/netlabel_kapi.c
5563 +++ b/net/netlabel/netlabel_kapi.c
5564 @@ -1065,10 +1065,12 @@ int netlbl_skbuff_getattr(const struct sk_buff *skb,
5565 u16 family,
5566 struct netlbl_lsm_secattr *secattr)
5567 {
5568 + unsigned char *ptr;
5569 +
5570 switch (family) {
5571 case AF_INET:
5572 - if (CIPSO_V4_OPTEXIST(skb) &&
5573 - cipso_v4_skbuff_getattr(skb, secattr) == 0)
5574 + ptr = cipso_v4_optptr(skb);
5575 + if (ptr && cipso_v4_getattr(ptr, secattr) == 0)
5576 return 0;
5577 break;
5578 #if IS_ENABLED(CONFIG_IPV6)
5579 @@ -1094,7 +1096,7 @@ int netlbl_skbuff_getattr(const struct sk_buff *skb,
5580 */
5581 void netlbl_skbuff_err(struct sk_buff *skb, int error, int gateway)
5582 {
5583 - if (CIPSO_V4_OPTEXIST(skb))
5584 + if (cipso_v4_optptr(skb))
5585 cipso_v4_error(skb, error, gateway);
5586 }
5587
5588 @@ -1126,11 +1128,14 @@ void netlbl_cache_invalidate(void)
5589 int netlbl_cache_add(const struct sk_buff *skb,
5590 const struct netlbl_lsm_secattr *secattr)
5591 {
5592 + unsigned char *ptr;
5593 +
5594 if ((secattr->flags & NETLBL_SECATTR_CACHE) == 0)
5595 return -ENOMSG;
5596
5597 - if (CIPSO_V4_OPTEXIST(skb))
5598 - return cipso_v4_cache_add(skb, secattr);
5599 + ptr = cipso_v4_optptr(skb);
5600 + if (ptr)
5601 + return cipso_v4_cache_add(ptr, secattr);
5602
5603 return -ENOMSG;
5604 }
5605 diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
5606 index 9acd6ce88db7..ae46f0198608 100644
5607 --- a/net/sunrpc/clnt.c
5608 +++ b/net/sunrpc/clnt.c
5609 @@ -286,10 +286,8 @@ static struct rpc_xprt *rpc_clnt_set_transport(struct rpc_clnt *clnt,
5610
5611 static void rpc_clnt_set_nodename(struct rpc_clnt *clnt, const char *nodename)
5612 {
5613 - clnt->cl_nodelen = strlen(nodename);
5614 - if (clnt->cl_nodelen > UNX_MAXNODENAME)
5615 - clnt->cl_nodelen = UNX_MAXNODENAME;
5616 - memcpy(clnt->cl_nodename, nodename, clnt->cl_nodelen);
5617 + clnt->cl_nodelen = strlcpy(clnt->cl_nodename,
5618 + nodename, sizeof(clnt->cl_nodename));
5619 }
5620
5621 static int rpc_client_register(struct rpc_clnt *clnt,
5622 @@ -360,6 +358,7 @@ static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args,
5623 const struct rpc_version *version;
5624 struct rpc_clnt *clnt = NULL;
5625 const struct rpc_timeout *timeout;
5626 + const char *nodename = args->nodename;
5627 int err;
5628
5629 /* sanity check the name before trying to print it */
5630 @@ -415,8 +414,10 @@ static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args,
5631
5632 atomic_set(&clnt->cl_count, 1);
5633
5634 + if (nodename == NULL)
5635 + nodename = utsname()->nodename;
5636 /* save the nodename */
5637 - rpc_clnt_set_nodename(clnt, utsname()->nodename);
5638 + rpc_clnt_set_nodename(clnt, nodename);
5639
5640 err = rpc_client_register(clnt, args->authflavor, args->client_name);
5641 if (err)
5642 @@ -571,6 +572,7 @@ static struct rpc_clnt *__rpc_clone_client(struct rpc_create_args *args,
5643 if (xprt == NULL)
5644 goto out_err;
5645 args->servername = xprt->servername;
5646 + args->nodename = clnt->cl_nodename;
5647
5648 new = rpc_new_client(args, xprt, clnt);
5649 if (IS_ERR(new)) {
5650 diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c
5651 index 1891a1022c17..74b75c3ce39d 100644
5652 --- a/net/sunrpc/rpcb_clnt.c
5653 +++ b/net/sunrpc/rpcb_clnt.c
5654 @@ -355,7 +355,8 @@ out:
5655 return result;
5656 }
5657
5658 -static struct rpc_clnt *rpcb_create(struct net *net, const char *hostname,
5659 +static struct rpc_clnt *rpcb_create(struct net *net, const char *nodename,
5660 + const char *hostname,
5661 struct sockaddr *srvaddr, size_t salen,
5662 int proto, u32 version)
5663 {
5664 @@ -365,6 +366,7 @@ static struct rpc_clnt *rpcb_create(struct net *net, const char *hostname,
5665 .address = srvaddr,
5666 .addrsize = salen,
5667 .servername = hostname,
5668 + .nodename = nodename,
5669 .program = &rpcb_program,
5670 .version = version,
5671 .authflavor = RPC_AUTH_UNIX,
5672 @@ -740,7 +742,9 @@ void rpcb_getport_async(struct rpc_task *task)
5673 dprintk("RPC: %5u %s: trying rpcbind version %u\n",
5674 task->tk_pid, __func__, bind_version);
5675
5676 - rpcb_clnt = rpcb_create(xprt->xprt_net, xprt->servername, sap, salen,
5677 + rpcb_clnt = rpcb_create(xprt->xprt_net,
5678 + clnt->cl_nodename,
5679 + xprt->servername, sap, salen,
5680 xprt->prot, bind_version);
5681 if (IS_ERR(rpcb_clnt)) {
5682 status = PTR_ERR(rpcb_clnt);
5683 diff --git a/security/smack/smack.h b/security/smack/smack.h
5684 index b828a379377c..b48359c0da32 100644
5685 --- a/security/smack/smack.h
5686 +++ b/security/smack/smack.h
5687 @@ -298,6 +298,16 @@ static inline struct smack_known *smk_of_task(const struct task_smack *tsp)
5688 return tsp->smk_task;
5689 }
5690
5691 +static inline struct smack_known *smk_of_task_struct(const struct task_struct *t)
5692 +{
5693 + struct smack_known *skp;
5694 +
5695 + rcu_read_lock();
5696 + skp = smk_of_task(__task_cred(t)->security);
5697 + rcu_read_unlock();
5698 + return skp;
5699 +}
5700 +
5701 /*
5702 * Present a pointer to the forked smack label entry in an task blob.
5703 */
5704 diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
5705 index d515ec25ae9f..9d3c64af1ca9 100644
5706 --- a/security/smack/smack_lsm.c
5707 +++ b/security/smack/smack_lsm.c
5708 @@ -43,8 +43,6 @@
5709 #include <linux/binfmts.h>
5710 #include "smack.h"
5711
5712 -#define task_security(task) (task_cred_xxx((task), security))
5713 -
5714 #define TRANS_TRUE "TRUE"
5715 #define TRANS_TRUE_SIZE 4
5716
5717 @@ -119,7 +117,7 @@ static int smk_bu_current(char *note, struct smack_known *oskp,
5718 static int smk_bu_task(struct task_struct *otp, int mode, int rc)
5719 {
5720 struct task_smack *tsp = current_security();
5721 - struct task_smack *otsp = task_security(otp);
5722 + struct smack_known *smk_task = smk_of_task_struct(otp);
5723 char acc[SMK_NUM_ACCESS_TYPE + 1];
5724
5725 if (rc <= 0)
5726 @@ -127,7 +125,7 @@ static int smk_bu_task(struct task_struct *otp, int mode, int rc)
5727
5728 smk_bu_mode(mode, acc);
5729 pr_info("Smack Bringup: (%s %s %s) %s to %s\n",
5730 - tsp->smk_task->smk_known, otsp->smk_task->smk_known, acc,
5731 + tsp->smk_task->smk_known, smk_task->smk_known, acc,
5732 current->comm, otp->comm);
5733 return 0;
5734 }
5735 @@ -344,7 +342,8 @@ static int smk_ptrace_rule_check(struct task_struct *tracer,
5736 saip = &ad;
5737 }
5738
5739 - tsp = task_security(tracer);
5740 + rcu_read_lock();
5741 + tsp = __task_cred(tracer)->security;
5742 tracer_known = smk_of_task(tsp);
5743
5744 if ((mode & PTRACE_MODE_ATTACH) &&
5745 @@ -364,11 +363,14 @@ static int smk_ptrace_rule_check(struct task_struct *tracer,
5746 tracee_known->smk_known,
5747 0, rc, saip);
5748
5749 + rcu_read_unlock();
5750 return rc;
5751 }
5752
5753 /* In case of rule==SMACK_PTRACE_DEFAULT or mode==PTRACE_MODE_READ */
5754 rc = smk_tskacc(tsp, tracee_known, smk_ptrace_mode(mode), saip);
5755 +
5756 + rcu_read_unlock();
5757 return rc;
5758 }
5759
5760 @@ -395,7 +397,7 @@ static int smack_ptrace_access_check(struct task_struct *ctp, unsigned int mode)
5761 if (rc != 0)
5762 return rc;
5763
5764 - skp = smk_of_task(task_security(ctp));
5765 + skp = smk_of_task_struct(ctp);
5766
5767 rc = smk_ptrace_rule_check(current, skp, mode, __func__);
5768 return rc;
5769 @@ -1825,7 +1827,7 @@ static int smk_curacc_on_task(struct task_struct *p, int access,
5770 const char *caller)
5771 {
5772 struct smk_audit_info ad;
5773 - struct smack_known *skp = smk_of_task(task_security(p));
5774 + struct smack_known *skp = smk_of_task_struct(p);
5775 int rc;
5776
5777 smk_ad_init(&ad, caller, LSM_AUDIT_DATA_TASK);
5778 @@ -1878,7 +1880,7 @@ static int smack_task_getsid(struct task_struct *p)
5779 */
5780 static void smack_task_getsecid(struct task_struct *p, u32 *secid)
5781 {
5782 - struct smack_known *skp = smk_of_task(task_security(p));
5783 + struct smack_known *skp = smk_of_task_struct(p);
5784
5785 *secid = skp->smk_secid;
5786 }
5787 @@ -1985,7 +1987,7 @@ static int smack_task_kill(struct task_struct *p, struct siginfo *info,
5788 {
5789 struct smk_audit_info ad;
5790 struct smack_known *skp;
5791 - struct smack_known *tkp = smk_of_task(task_security(p));
5792 + struct smack_known *tkp = smk_of_task_struct(p);
5793 int rc;
5794
5795 smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_TASK);
5796 @@ -2039,7 +2041,7 @@ static int smack_task_wait(struct task_struct *p)
5797 static void smack_task_to_inode(struct task_struct *p, struct inode *inode)
5798 {
5799 struct inode_smack *isp = inode->i_security;
5800 - struct smack_known *skp = smk_of_task(task_security(p));
5801 + struct smack_known *skp = smk_of_task_struct(p);
5802
5803 isp->smk_inode = skp;
5804 }
5805 @@ -3199,7 +3201,7 @@ unlockandout:
5806 */
5807 static int smack_getprocattr(struct task_struct *p, char *name, char **value)
5808 {
5809 - struct smack_known *skp = smk_of_task(task_security(p));
5810 + struct smack_known *skp = smk_of_task_struct(p);
5811 char *cp;
5812 int slen;
5813
5814 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
5815 index c879c3709eae..50762cf62b2d 100644
5816 --- a/sound/pci/hda/patch_realtek.c
5817 +++ b/sound/pci/hda/patch_realtek.c
5818 @@ -4805,6 +4805,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
5819 SND_PCI_QUIRK(0x103c, 0x18e6, "HP", ALC269_FIXUP_HP_GPIO_LED),
5820 SND_PCI_QUIRK(0x103c, 0x218b, "HP", ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED),
5821 /* ALC282 */
5822 + SND_PCI_QUIRK(0x103c, 0x21f9, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
5823 SND_PCI_QUIRK(0x103c, 0x2210, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
5824 SND_PCI_QUIRK(0x103c, 0x2214, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
5825 SND_PCI_QUIRK(0x103c, 0x2236, "HP", ALC269_FIXUP_HP_LINE1_MIC1_LED),
5826 diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
5827 index 605d14003d25..6d36c5b78805 100644
5828 --- a/sound/pci/hda/patch_sigmatel.c
5829 +++ b/sound/pci/hda/patch_sigmatel.c
5830 @@ -99,6 +99,7 @@ enum {
5831 STAC_HP_ENVY_BASS,
5832 STAC_HP_BNB13_EQ,
5833 STAC_HP_ENVY_TS_BASS,
5834 + STAC_92HD83XXX_GPIO10_EAPD,
5835 STAC_92HD83XXX_MODELS
5836 };
5837
5838 @@ -2141,6 +2142,19 @@ static void stac92hd83xxx_fixup_headset_jack(struct hda_codec *codec,
5839 spec->headset_jack = 1;
5840 }
5841
5842 +static void stac92hd83xxx_fixup_gpio10_eapd(struct hda_codec *codec,
5843 + const struct hda_fixup *fix,
5844 + int action)
5845 +{
5846 + struct sigmatel_spec *spec = codec->spec;
5847 +
5848 + if (action != HDA_FIXUP_ACT_PRE_PROBE)
5849 + return;
5850 + spec->eapd_mask = spec->gpio_mask = spec->gpio_dir =
5851 + spec->gpio_data = 0x10;
5852 + spec->eapd_switch = 0;
5853 +}
5854 +
5855 static const struct hda_verb hp_bnb13_eq_verbs[] = {
5856 /* 44.1KHz base */
5857 { 0x22, 0x7A6, 0x3E },
5858 @@ -2656,6 +2670,10 @@ static const struct hda_fixup stac92hd83xxx_fixups[] = {
5859 {}
5860 },
5861 },
5862 + [STAC_92HD83XXX_GPIO10_EAPD] = {
5863 + .type = HDA_FIXUP_FUNC,
5864 + .v.func = stac92hd83xxx_fixup_gpio10_eapd,
5865 + },
5866 };
5867
5868 static const struct hda_model_fixup stac92hd83xxx_models[] = {
5869 @@ -2861,6 +2879,8 @@ static const struct snd_pci_quirk stac92hd83xxx_fixup_tbl[] = {
5870 SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x148a,
5871 "HP Mini", STAC_92HD83XXX_HP_LED),
5872 SND_PCI_QUIRK_VENDOR(PCI_VENDOR_ID_HP, "HP", STAC_92HD83XXX_HP),
5873 + SND_PCI_QUIRK(PCI_VENDOR_ID_TOSHIBA, 0xfa91,
5874 + "Toshiba Satellite S50D", STAC_92HD83XXX_GPIO10_EAPD),
5875 {} /* terminator */
5876 };
5877
5878 diff --git a/sound/pci/riptide/riptide.c b/sound/pci/riptide/riptide.c
5879 index 6abc2ac8fffb..e76857277695 100644
5880 --- a/sound/pci/riptide/riptide.c
5881 +++ b/sound/pci/riptide/riptide.c
5882 @@ -2030,32 +2030,43 @@ snd_riptide_joystick_probe(struct pci_dev *pci, const struct pci_device_id *id)
5883 {
5884 static int dev;
5885 struct gameport *gameport;
5886 + int ret;
5887
5888 if (dev >= SNDRV_CARDS)
5889 return -ENODEV;
5890 +
5891 if (!enable[dev]) {
5892 - dev++;
5893 - return -ENOENT;
5894 + ret = -ENOENT;
5895 + goto inc_dev;
5896 }
5897
5898 - if (!joystick_port[dev++])
5899 - return 0;
5900 + if (!joystick_port[dev]) {
5901 + ret = 0;
5902 + goto inc_dev;
5903 + }
5904
5905 gameport = gameport_allocate_port();
5906 - if (!gameport)
5907 - return -ENOMEM;
5908 + if (!gameport) {
5909 + ret = -ENOMEM;
5910 + goto inc_dev;
5911 + }
5912 if (!request_region(joystick_port[dev], 8, "Riptide gameport")) {
5913 snd_printk(KERN_WARNING
5914 "Riptide: cannot grab gameport 0x%x\n",
5915 joystick_port[dev]);
5916 gameport_free_port(gameport);
5917 - return -EBUSY;
5918 + ret = -EBUSY;
5919 + goto inc_dev;
5920 }
5921
5922 gameport->io = joystick_port[dev];
5923 gameport_register_port(gameport);
5924 pci_set_drvdata(pci, gameport);
5925 - return 0;
5926 +
5927 + ret = 0;
5928 +inc_dev:
5929 + dev++;
5930 + return ret;
5931 }
5932
5933 static void snd_riptide_joystick_remove(struct pci_dev *pci)
5934 diff --git a/sound/pci/rme9652/hdspm.c b/sound/pci/rme9652/hdspm.c
5935 index 52d86af3ef2d..fcf91ee0328d 100644
5936 --- a/sound/pci/rme9652/hdspm.c
5937 +++ b/sound/pci/rme9652/hdspm.c
5938 @@ -6114,6 +6114,9 @@ static int snd_hdspm_playback_open(struct snd_pcm_substream *substream)
5939 snd_pcm_hw_constraint_minmax(runtime,
5940 SNDRV_PCM_HW_PARAM_PERIOD_SIZE,
5941 64, 8192);
5942 + snd_pcm_hw_constraint_minmax(runtime,
5943 + SNDRV_PCM_HW_PARAM_PERIODS,
5944 + 2, 2);
5945 break;
5946 }
5947
5948 @@ -6188,6 +6191,9 @@ static int snd_hdspm_capture_open(struct snd_pcm_substream *substream)
5949 snd_pcm_hw_constraint_minmax(runtime,
5950 SNDRV_PCM_HW_PARAM_PERIOD_SIZE,
5951 64, 8192);
5952 + snd_pcm_hw_constraint_minmax(runtime,
5953 + SNDRV_PCM_HW_PARAM_PERIODS,
5954 + 2, 2);
5955 break;
5956 }
5957
5958 diff --git a/sound/soc/codecs/rt5670.c b/sound/soc/codecs/rt5670.c
5959 index 9bd8b4f63303..7134f9ebf2f3 100644
5960 --- a/sound/soc/codecs/rt5670.c
5961 +++ b/sound/soc/codecs/rt5670.c
5962 @@ -2439,6 +2439,7 @@ static struct snd_soc_codec_driver soc_codec_dev_rt5670 = {
5963 static const struct regmap_config rt5670_regmap = {
5964 .reg_bits = 8,
5965 .val_bits = 16,
5966 + .use_single_rw = true,
5967 .max_register = RT5670_VENDOR_ID2 + 1 + (ARRAY_SIZE(rt5670_ranges) *
5968 RT5670_PR_SPACING),
5969 .volatile_reg = rt5670_volatile_register,
5970 diff --git a/sound/soc/davinci/Kconfig b/sound/soc/davinci/Kconfig
5971 index 8e948c63f3d9..2b81ca418d2a 100644
5972 --- a/sound/soc/davinci/Kconfig
5973 +++ b/sound/soc/davinci/Kconfig
5974 @@ -58,13 +58,12 @@ choice
5975 depends on MACH_DAVINCI_DM365_EVM
5976
5977 config SND_DM365_AIC3X_CODEC
5978 - bool "Audio Codec - AIC3101"
5979 + tristate "Audio Codec - AIC3101"
5980 help
5981 Say Y if you want to add support for AIC3101 audio codec
5982
5983 config SND_DM365_VOICE_CODEC
5984 tristate "Voice Codec - CQ93VC"
5985 - depends on SND_DAVINCI_SOC
5986 select MFD_DAVINCI_VOICECODEC
5987 select SND_DAVINCI_SOC_VCIF
5988 select SND_SOC_CQ0093VC
5989 diff --git a/sound/soc/pxa/mioa701_wm9713.c b/sound/soc/pxa/mioa701_wm9713.c
5990 index 595eee341e90..a08a877fc10c 100644
5991 --- a/sound/soc/pxa/mioa701_wm9713.c
5992 +++ b/sound/soc/pxa/mioa701_wm9713.c
5993 @@ -81,7 +81,7 @@ static int rear_amp_power(struct snd_soc_codec *codec, int power)
5994 static int rear_amp_event(struct snd_soc_dapm_widget *widget,
5995 struct snd_kcontrol *kctl, int event)
5996 {
5997 - struct snd_soc_codec *codec = widget->codec;
5998 + struct snd_soc_codec *codec = widget->dapm->card->rtd[0].codec;
5999
6000 return rear_amp_power(codec, SND_SOC_DAPM_EVENT_ON(event));
6001 }
6002 diff --git a/tools/perf/util/cloexec.c b/tools/perf/util/cloexec.c
6003 index 47b78b3f0325..6da965bdbc2c 100644
6004 --- a/tools/perf/util/cloexec.c
6005 +++ b/tools/perf/util/cloexec.c
6006 @@ -25,6 +25,10 @@ static int perf_flag_probe(void)
6007 if (cpu < 0)
6008 cpu = 0;
6009
6010 + /*
6011 + * Using -1 for the pid is a workaround to avoid gratuitous jump label
6012 + * changes.
6013 + */
6014 while (1) {
6015 /* check cloexec flag */
6016 fd = sys_perf_event_open(&attr, pid, cpu, -1,
6017 @@ -47,16 +51,24 @@ static int perf_flag_probe(void)
6018 err, strerror_r(err, sbuf, sizeof(sbuf)));
6019
6020 /* not supported, confirm error related to PERF_FLAG_FD_CLOEXEC */
6021 - fd = sys_perf_event_open(&attr, pid, cpu, -1, 0);
6022 + while (1) {
6023 + fd = sys_perf_event_open(&attr, pid, cpu, -1, 0);
6024 + if (fd < 0 && pid == -1 && errno == EACCES) {
6025 + pid = 0;
6026 + continue;
6027 + }
6028 + break;
6029 + }
6030 err = errno;
6031
6032 + if (fd >= 0)
6033 + close(fd);
6034 +
6035 if (WARN_ONCE(fd < 0 && err != EBUSY,
6036 "perf_event_open(..., 0) failed unexpectedly with error %d (%s)\n",
6037 err, strerror_r(err, sbuf, sizeof(sbuf))))
6038 return -1;
6039
6040 - close(fd);
6041 -
6042 return 0;
6043 }
6044