Annotation of /trunk/kernel26-alx/patches-3.10/0138-3.10.39-all-fixes.patch
Parent Directory | Revision Log
Revision 2672 -
(hide annotations)
(download)
Tue Jul 21 16:46:35 2015 UTC (8 years, 10 months ago) by niro
File size: 94052 byte(s)
Tue Jul 21 16:46:35 2015 UTC (8 years, 10 months ago) by niro
File size: 94052 byte(s)
-3.10.84-alx-r1
1 | niro | 2672 | diff --git a/Documentation/video4linux/gspca.txt b/Documentation/video4linux/gspca.txt |
2 | index 1e6b6531bbcc..d2ba80bb7af5 100644 | ||
3 | --- a/Documentation/video4linux/gspca.txt | ||
4 | +++ b/Documentation/video4linux/gspca.txt | ||
5 | @@ -55,6 +55,7 @@ zc3xx 0458:700f Genius VideoCam Web V2 | ||
6 | sonixj 0458:7025 Genius Eye 311Q | ||
7 | sn9c20x 0458:7029 Genius Look 320s | ||
8 | sonixj 0458:702e Genius Slim 310 NB | ||
9 | +sn9c20x 0458:7045 Genius Look 1320 V2 | ||
10 | sn9c20x 0458:704a Genius Slim 1320 | ||
11 | sn9c20x 0458:704c Genius i-Look 1321 | ||
12 | sn9c20x 045e:00f4 LifeCam VX-6000 (SN9C20x + OV9650) | ||
13 | diff --git a/Makefile b/Makefile | ||
14 | index bd51b50a567b..1e07514be6f8 100644 | ||
15 | --- a/Makefile | ||
16 | +++ b/Makefile | ||
17 | @@ -1,6 +1,6 @@ | ||
18 | VERSION = 3 | ||
19 | PATCHLEVEL = 10 | ||
20 | -SUBLEVEL = 38 | ||
21 | +SUBLEVEL = 39 | ||
22 | EXTRAVERSION = | ||
23 | NAME = TOSSUG Baby Fish | ||
24 | |||
25 | diff --git a/arch/arm/boot/dts/armada-370-xp.dtsi b/arch/arm/boot/dts/armada-370-xp.dtsi | ||
26 | index 4d12d2347c15..ddd068bb1457 100644 | ||
27 | --- a/arch/arm/boot/dts/armada-370-xp.dtsi | ||
28 | +++ b/arch/arm/boot/dts/armada-370-xp.dtsi | ||
29 | @@ -92,6 +92,7 @@ | ||
30 | #size-cells = <0>; | ||
31 | compatible = "marvell,orion-mdio"; | ||
32 | reg = <0x72004 0x4>; | ||
33 | + clocks = <&gateclk 4>; | ||
34 | }; | ||
35 | |||
36 | ethernet@70000 { | ||
37 | diff --git a/arch/arm/boot/dts/exynos5250-arndale.dts b/arch/arm/boot/dts/exynos5250-arndale.dts | ||
38 | index 02cfc76d002f..b64cb43a7295 100644 | ||
39 | --- a/arch/arm/boot/dts/exynos5250-arndale.dts | ||
40 | +++ b/arch/arm/boot/dts/exynos5250-arndale.dts | ||
41 | @@ -263,6 +263,7 @@ | ||
42 | regulator-name = "vdd_g3d"; | ||
43 | regulator-min-microvolt = <1000000>; | ||
44 | regulator-max-microvolt = <1000000>; | ||
45 | + regulator-always-on; | ||
46 | regulator-boot-on; | ||
47 | op_mode = <1>; | ||
48 | }; | ||
49 | diff --git a/arch/arm/include/asm/div64.h b/arch/arm/include/asm/div64.h | ||
50 | index fe92ccf1d0b0..a66061aef29c 100644 | ||
51 | --- a/arch/arm/include/asm/div64.h | ||
52 | +++ b/arch/arm/include/asm/div64.h | ||
53 | @@ -156,7 +156,7 @@ | ||
54 | /* Select the best insn combination to perform the */ \ | ||
55 | /* actual __m * __n / (__p << 64) operation. */ \ | ||
56 | if (!__c) { \ | ||
57 | - asm ( "umull %Q0, %R0, %1, %Q2\n\t" \ | ||
58 | + asm ( "umull %Q0, %R0, %Q1, %Q2\n\t" \ | ||
59 | "mov %Q0, #0" \ | ||
60 | : "=&r" (__res) \ | ||
61 | : "r" (__m), "r" (__n) \ | ||
62 | diff --git a/arch/arm/include/asm/futex.h b/arch/arm/include/asm/futex.h | ||
63 | index e42cf597f6e6..2aff798fbef4 100644 | ||
64 | --- a/arch/arm/include/asm/futex.h | ||
65 | +++ b/arch/arm/include/asm/futex.h | ||
66 | @@ -3,11 +3,6 @@ | ||
67 | |||
68 | #ifdef __KERNEL__ | ||
69 | |||
70 | -#if defined(CONFIG_CPU_USE_DOMAINS) && defined(CONFIG_SMP) | ||
71 | -/* ARM doesn't provide unprivileged exclusive memory accessors */ | ||
72 | -#include <asm-generic/futex.h> | ||
73 | -#else | ||
74 | - | ||
75 | #include <linux/futex.h> | ||
76 | #include <linux/uaccess.h> | ||
77 | #include <asm/errno.h> | ||
78 | @@ -164,6 +159,5 @@ futex_atomic_op_inuser (int encoded_op, u32 __user *uaddr) | ||
79 | return ret; | ||
80 | } | ||
81 | |||
82 | -#endif /* !(CPU_USE_DOMAINS && SMP) */ | ||
83 | #endif /* __KERNEL__ */ | ||
84 | #endif /* _ASM_ARM_FUTEX_H */ | ||
85 | diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h | ||
86 | index 652b56086de7..d070741b2b37 100644 | ||
87 | --- a/arch/arm/include/asm/io.h | ||
88 | +++ b/arch/arm/include/asm/io.h | ||
89 | @@ -130,16 +130,16 @@ static inline u32 __raw_readl(const volatile void __iomem *addr) | ||
90 | */ | ||
91 | extern void __iomem *__arm_ioremap_pfn_caller(unsigned long, unsigned long, | ||
92 | size_t, unsigned int, void *); | ||
93 | -extern void __iomem *__arm_ioremap_caller(unsigned long, size_t, unsigned int, | ||
94 | +extern void __iomem *__arm_ioremap_caller(phys_addr_t, size_t, unsigned int, | ||
95 | void *); | ||
96 | |||
97 | extern void __iomem *__arm_ioremap_pfn(unsigned long, unsigned long, size_t, unsigned int); | ||
98 | -extern void __iomem *__arm_ioremap(unsigned long, size_t, unsigned int); | ||
99 | -extern void __iomem *__arm_ioremap_exec(unsigned long, size_t, bool cached); | ||
100 | +extern void __iomem *__arm_ioremap(phys_addr_t, size_t, unsigned int); | ||
101 | +extern void __iomem *__arm_ioremap_exec(phys_addr_t, size_t, bool cached); | ||
102 | extern void __iounmap(volatile void __iomem *addr); | ||
103 | extern void __arm_iounmap(volatile void __iomem *addr); | ||
104 | |||
105 | -extern void __iomem * (*arch_ioremap_caller)(unsigned long, size_t, | ||
106 | +extern void __iomem * (*arch_ioremap_caller)(phys_addr_t, size_t, | ||
107 | unsigned int, void *); | ||
108 | extern void (*arch_iounmap)(volatile void __iomem *); | ||
109 | |||
110 | diff --git a/arch/arm/include/asm/pgtable-2level.h b/arch/arm/include/asm/pgtable-2level.h | ||
111 | index f97ee02386ee..c98c9c89b95c 100644 | ||
112 | --- a/arch/arm/include/asm/pgtable-2level.h | ||
113 | +++ b/arch/arm/include/asm/pgtable-2level.h | ||
114 | @@ -140,6 +140,7 @@ | ||
115 | #define L_PTE_MT_DEV_NONSHARED (_AT(pteval_t, 0x0c) << 2) /* 1100 */ | ||
116 | #define L_PTE_MT_DEV_WC (_AT(pteval_t, 0x09) << 2) /* 1001 */ | ||
117 | #define L_PTE_MT_DEV_CACHED (_AT(pteval_t, 0x0b) << 2) /* 1011 */ | ||
118 | +#define L_PTE_MT_VECTORS (_AT(pteval_t, 0x0f) << 2) /* 1111 */ | ||
119 | #define L_PTE_MT_MASK (_AT(pteval_t, 0x0f) << 2) | ||
120 | |||
121 | #ifndef __ASSEMBLY__ | ||
122 | diff --git a/arch/arm/include/asm/unistd.h b/arch/arm/include/asm/unistd.h | ||
123 | index 141baa3f9a72..cbd61977c996 100644 | ||
124 | --- a/arch/arm/include/asm/unistd.h | ||
125 | +++ b/arch/arm/include/asm/unistd.h | ||
126 | @@ -48,6 +48,5 @@ | ||
127 | */ | ||
128 | #define __IGNORE_fadvise64_64 | ||
129 | #define __IGNORE_migrate_pages | ||
130 | -#define __IGNORE_kcmp | ||
131 | |||
132 | #endif /* __ASM_ARM_UNISTD_H */ | ||
133 | diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c | ||
134 | index 163b160c69e9..c3ef920823b6 100644 | ||
135 | --- a/arch/arm/kernel/machine_kexec.c | ||
136 | +++ b/arch/arm/kernel/machine_kexec.c | ||
137 | @@ -169,3 +169,10 @@ void machine_kexec(struct kimage *image) | ||
138 | |||
139 | soft_restart(reboot_code_buffer_phys); | ||
140 | } | ||
141 | + | ||
142 | +void arch_crash_save_vmcoreinfo(void) | ||
143 | +{ | ||
144 | +#ifdef CONFIG_ARM_LPAE | ||
145 | + VMCOREINFO_CONFIG(ARM_LPAE); | ||
146 | +#endif | ||
147 | +} | ||
148 | diff --git a/arch/arm/mach-ebsa110/core.c b/arch/arm/mach-ebsa110/core.c | ||
149 | index b13cc74114db..8a53f346cdb3 100644 | ||
150 | --- a/arch/arm/mach-ebsa110/core.c | ||
151 | +++ b/arch/arm/mach-ebsa110/core.c | ||
152 | @@ -116,7 +116,7 @@ static void __init ebsa110_map_io(void) | ||
153 | iotable_init(ebsa110_io_desc, ARRAY_SIZE(ebsa110_io_desc)); | ||
154 | } | ||
155 | |||
156 | -static void __iomem *ebsa110_ioremap_caller(unsigned long cookie, size_t size, | ||
157 | +static void __iomem *ebsa110_ioremap_caller(phys_addr_t cookie, size_t size, | ||
158 | unsigned int flags, void *caller) | ||
159 | { | ||
160 | return (void __iomem *)cookie; | ||
161 | diff --git a/arch/arm/mach-imx/mm-imx3.c b/arch/arm/mach-imx/mm-imx3.c | ||
162 | index e0e69a682174..eed32ca0b8ab 100644 | ||
163 | --- a/arch/arm/mach-imx/mm-imx3.c | ||
164 | +++ b/arch/arm/mach-imx/mm-imx3.c | ||
165 | @@ -65,7 +65,7 @@ static void imx3_idle(void) | ||
166 | : "=r" (reg)); | ||
167 | } | ||
168 | |||
169 | -static void __iomem *imx3_ioremap_caller(unsigned long phys_addr, size_t size, | ||
170 | +static void __iomem *imx3_ioremap_caller(phys_addr_t phys_addr, size_t size, | ||
171 | unsigned int mtype, void *caller) | ||
172 | { | ||
173 | if (mtype == MT_DEVICE) { | ||
174 | diff --git a/arch/arm/mach-iop13xx/io.c b/arch/arm/mach-iop13xx/io.c | ||
175 | index 183dc8b5511b..faaf7d4482c5 100644 | ||
176 | --- a/arch/arm/mach-iop13xx/io.c | ||
177 | +++ b/arch/arm/mach-iop13xx/io.c | ||
178 | @@ -23,7 +23,7 @@ | ||
179 | |||
180 | #include "pci.h" | ||
181 | |||
182 | -static void __iomem *__iop13xx_ioremap_caller(unsigned long cookie, | ||
183 | +static void __iomem *__iop13xx_ioremap_caller(phys_addr_t cookie, | ||
184 | size_t size, unsigned int mtype, void *caller) | ||
185 | { | ||
186 | void __iomem * retval; | ||
187 | diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c | ||
188 | index 6600cff6bd92..d7223b3b81f3 100644 | ||
189 | --- a/arch/arm/mach-ixp4xx/common.c | ||
190 | +++ b/arch/arm/mach-ixp4xx/common.c | ||
191 | @@ -559,7 +559,7 @@ void ixp4xx_restart(char mode, const char *cmd) | ||
192 | * fallback to the default. | ||
193 | */ | ||
194 | |||
195 | -static void __iomem *ixp4xx_ioremap_caller(unsigned long addr, size_t size, | ||
196 | +static void __iomem *ixp4xx_ioremap_caller(phys_addr_t addr, size_t size, | ||
197 | unsigned int mtype, void *caller) | ||
198 | { | ||
199 | if (!is_pci_memory(addr)) | ||
200 | diff --git a/arch/arm/mach-msm/common.h b/arch/arm/mach-msm/common.h | ||
201 | index ce8215a269e5..421cf7751a80 100644 | ||
202 | --- a/arch/arm/mach-msm/common.h | ||
203 | +++ b/arch/arm/mach-msm/common.h | ||
204 | @@ -23,7 +23,7 @@ extern void msm_map_msm8x60_io(void); | ||
205 | extern void msm_map_msm8960_io(void); | ||
206 | extern void msm_map_qsd8x50_io(void); | ||
207 | |||
208 | -extern void __iomem *__msm_ioremap_caller(unsigned long phys_addr, size_t size, | ||
209 | +extern void __iomem *__msm_ioremap_caller(phys_addr_t phys_addr, size_t size, | ||
210 | unsigned int mtype, void *caller); | ||
211 | |||
212 | extern struct smp_operations msm_smp_ops; | ||
213 | diff --git a/arch/arm/mach-msm/io.c b/arch/arm/mach-msm/io.c | ||
214 | index 123ef9cbce1b..fd65b6d42cde 100644 | ||
215 | --- a/arch/arm/mach-msm/io.c | ||
216 | +++ b/arch/arm/mach-msm/io.c | ||
217 | @@ -172,7 +172,7 @@ void __init msm_map_msm7x30_io(void) | ||
218 | } | ||
219 | #endif /* CONFIG_ARCH_MSM7X30 */ | ||
220 | |||
221 | -void __iomem *__msm_ioremap_caller(unsigned long phys_addr, size_t size, | ||
222 | +void __iomem *__msm_ioremap_caller(phys_addr_t phys_addr, size_t size, | ||
223 | unsigned int mtype, void *caller) | ||
224 | { | ||
225 | if (mtype == MT_DEVICE) { | ||
226 | diff --git a/arch/arm/mach-omap2/irq.c b/arch/arm/mach-omap2/irq.c | ||
227 | index e022a869bff2..6037a9a01ed5 100644 | ||
228 | --- a/arch/arm/mach-omap2/irq.c | ||
229 | +++ b/arch/arm/mach-omap2/irq.c | ||
230 | @@ -222,6 +222,7 @@ void __init ti81xx_init_irq(void) | ||
231 | static inline void omap_intc_handle_irq(void __iomem *base_addr, struct pt_regs *regs) | ||
232 | { | ||
233 | u32 irqnr; | ||
234 | + int handled_irq = 0; | ||
235 | |||
236 | do { | ||
237 | irqnr = readl_relaxed(base_addr + 0x98); | ||
238 | @@ -249,8 +250,15 @@ out: | ||
239 | if (irqnr) { | ||
240 | irqnr = irq_find_mapping(domain, irqnr); | ||
241 | handle_IRQ(irqnr, regs); | ||
242 | + handled_irq = 1; | ||
243 | } | ||
244 | } while (irqnr); | ||
245 | + | ||
246 | + /* If an irq is masked or deasserted while active, we will | ||
247 | + * keep ending up here with no irq handled. So remove it from | ||
248 | + * the INTC with an ack.*/ | ||
249 | + if (!handled_irq) | ||
250 | + omap_ack_irq(NULL); | ||
251 | } | ||
252 | |||
253 | asmlinkage void __exception_irq_entry omap2_intc_handle_irq(struct pt_regs *regs) | ||
254 | diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | ||
255 | index 9f6238c9dfc9..8691c8cbe2c7 100644 | ||
256 | --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | ||
257 | +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | ||
258 | @@ -1955,7 +1955,7 @@ static struct omap_hwmod_irq_info omap3xxx_usb_host_hs_irqs[] = { | ||
259 | static struct omap_hwmod omap3xxx_usb_host_hs_hwmod = { | ||
260 | .name = "usb_host_hs", | ||
261 | .class = &omap3xxx_usb_host_hs_hwmod_class, | ||
262 | - .clkdm_name = "l3_init_clkdm", | ||
263 | + .clkdm_name = "usbhost_clkdm", | ||
264 | .mpu_irqs = omap3xxx_usb_host_hs_irqs, | ||
265 | .main_clk = "usbhost_48m_fck", | ||
266 | .prcm = { | ||
267 | @@ -2040,7 +2040,7 @@ static struct omap_hwmod_irq_info omap3xxx_usb_tll_hs_irqs[] = { | ||
268 | static struct omap_hwmod omap3xxx_usb_tll_hs_hwmod = { | ||
269 | .name = "usb_tll_hs", | ||
270 | .class = &omap3xxx_usb_tll_hs_hwmod_class, | ||
271 | - .clkdm_name = "l3_init_clkdm", | ||
272 | + .clkdm_name = "core_l4_clkdm", | ||
273 | .mpu_irqs = omap3xxx_usb_tll_hs_irqs, | ||
274 | .main_clk = "usbtll_fck", | ||
275 | .prcm = { | ||
276 | diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h | ||
277 | index 7bdd22afce69..d4d0fce325c7 100644 | ||
278 | --- a/arch/arm/mach-omap2/pm.h | ||
279 | +++ b/arch/arm/mach-omap2/pm.h | ||
280 | @@ -103,7 +103,7 @@ static inline void enable_omap3630_toggle_l2_on_restore(void) { } | ||
281 | |||
282 | #define PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD (1 << 0) | ||
283 | |||
284 | -#if defined(CONFIG_ARCH_OMAP4) | ||
285 | +#if defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP4) | ||
286 | extern u16 pm44xx_errata; | ||
287 | #define IS_PM44XX_ERRATUM(id) (pm44xx_errata & (id)) | ||
288 | #else | ||
289 | diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig | ||
290 | index 08c9fe917d1f..c21082d664ed 100644 | ||
291 | --- a/arch/arm/mm/Kconfig | ||
292 | +++ b/arch/arm/mm/Kconfig | ||
293 | @@ -436,7 +436,6 @@ config CPU_32v5 | ||
294 | |||
295 | config CPU_32v6 | ||
296 | bool | ||
297 | - select CPU_USE_DOMAINS if CPU_V6 && MMU | ||
298 | select TLS_REG_EMUL if !CPU_32v6K && !MMU | ||
299 | |||
300 | config CPU_32v6K | ||
301 | @@ -651,7 +650,7 @@ config ARM_VIRT_EXT | ||
302 | |||
303 | config SWP_EMULATE | ||
304 | bool "Emulate SWP/SWPB instructions" | ||
305 | - depends on !CPU_USE_DOMAINS && CPU_V7 | ||
306 | + depends on CPU_V7 | ||
307 | default y if SMP | ||
308 | select HAVE_PROC_CPU if PROC_FS | ||
309 | help | ||
310 | diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c | ||
311 | index 04d9006eab1f..f123d6eb074b 100644 | ||
312 | --- a/arch/arm/mm/ioremap.c | ||
313 | +++ b/arch/arm/mm/ioremap.c | ||
314 | @@ -331,10 +331,10 @@ void __iomem * __arm_ioremap_pfn_caller(unsigned long pfn, | ||
315 | return (void __iomem *) (offset + addr); | ||
316 | } | ||
317 | |||
318 | -void __iomem *__arm_ioremap_caller(unsigned long phys_addr, size_t size, | ||
319 | +void __iomem *__arm_ioremap_caller(phys_addr_t phys_addr, size_t size, | ||
320 | unsigned int mtype, void *caller) | ||
321 | { | ||
322 | - unsigned long last_addr; | ||
323 | + phys_addr_t last_addr; | ||
324 | unsigned long offset = phys_addr & ~PAGE_MASK; | ||
325 | unsigned long pfn = __phys_to_pfn(phys_addr); | ||
326 | |||
327 | @@ -367,12 +367,12 @@ __arm_ioremap_pfn(unsigned long pfn, unsigned long offset, size_t size, | ||
328 | } | ||
329 | EXPORT_SYMBOL(__arm_ioremap_pfn); | ||
330 | |||
331 | -void __iomem * (*arch_ioremap_caller)(unsigned long, size_t, | ||
332 | +void __iomem * (*arch_ioremap_caller)(phys_addr_t, size_t, | ||
333 | unsigned int, void *) = | ||
334 | __arm_ioremap_caller; | ||
335 | |||
336 | void __iomem * | ||
337 | -__arm_ioremap(unsigned long phys_addr, size_t size, unsigned int mtype) | ||
338 | +__arm_ioremap(phys_addr_t phys_addr, size_t size, unsigned int mtype) | ||
339 | { | ||
340 | return arch_ioremap_caller(phys_addr, size, mtype, | ||
341 | __builtin_return_address(0)); | ||
342 | @@ -387,7 +387,7 @@ EXPORT_SYMBOL(__arm_ioremap); | ||
343 | * CONFIG_GENERIC_ALLOCATOR for allocating external memory. | ||
344 | */ | ||
345 | void __iomem * | ||
346 | -__arm_ioremap_exec(unsigned long phys_addr, size_t size, bool cached) | ||
347 | +__arm_ioremap_exec(phys_addr_t phys_addr, size_t size, bool cached) | ||
348 | { | ||
349 | unsigned int mtype; | ||
350 | |||
351 | diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c | ||
352 | index daf336fe0be8..fb3c446af9e5 100644 | ||
353 | --- a/arch/arm/mm/mmu.c | ||
354 | +++ b/arch/arm/mm/mmu.c | ||
355 | @@ -459,6 +459,16 @@ static void __init build_mem_type_table(void) | ||
356 | hyp_device_pgprot = s2_device_pgprot = mem_types[MT_DEVICE].prot_pte; | ||
357 | |||
358 | /* | ||
359 | + * We don't use domains on ARMv6 (since this causes problems with | ||
360 | + * v6/v7 kernels), so we must use a separate memory type for user | ||
361 | + * r/o, kernel r/w to map the vectors page. | ||
362 | + */ | ||
363 | +#ifndef CONFIG_ARM_LPAE | ||
364 | + if (cpu_arch == CPU_ARCH_ARMv6) | ||
365 | + vecs_pgprot |= L_PTE_MT_VECTORS; | ||
366 | +#endif | ||
367 | + | ||
368 | + /* | ||
369 | * ARMv6 and above have extended page tables. | ||
370 | */ | ||
371 | if (cpu_arch >= CPU_ARCH_ARMv6 && (cr & CR_XP)) { | ||
372 | diff --git a/arch/arm/mm/nommu.c b/arch/arm/mm/nommu.c | ||
373 | index eb5293a69a84..7fe0524a5449 100644 | ||
374 | --- a/arch/arm/mm/nommu.c | ||
375 | +++ b/arch/arm/mm/nommu.c | ||
376 | @@ -87,16 +87,16 @@ void __iomem *__arm_ioremap_pfn_caller(unsigned long pfn, unsigned long offset, | ||
377 | return __arm_ioremap_pfn(pfn, offset, size, mtype); | ||
378 | } | ||
379 | |||
380 | -void __iomem *__arm_ioremap(unsigned long phys_addr, size_t size, | ||
381 | +void __iomem *__arm_ioremap(phys_addr_t phys_addr, size_t size, | ||
382 | unsigned int mtype) | ||
383 | { | ||
384 | return (void __iomem *)phys_addr; | ||
385 | } | ||
386 | EXPORT_SYMBOL(__arm_ioremap); | ||
387 | |||
388 | -void __iomem * (*arch_ioremap_caller)(unsigned long, size_t, unsigned int, void *); | ||
389 | +void __iomem * (*arch_ioremap_caller)(phys_addr_t, size_t, unsigned int, void *); | ||
390 | |||
391 | -void __iomem *__arm_ioremap_caller(unsigned long phys_addr, size_t size, | ||
392 | +void __iomem *__arm_ioremap_caller(phys_addr_t phys_addr, size_t size, | ||
393 | unsigned int mtype, void *caller) | ||
394 | { | ||
395 | return __arm_ioremap(phys_addr, size, mtype); | ||
396 | diff --git a/arch/arm/mm/proc-macros.S b/arch/arm/mm/proc-macros.S | ||
397 | index e3c48a3fe063..ee1d80593958 100644 | ||
398 | --- a/arch/arm/mm/proc-macros.S | ||
399 | +++ b/arch/arm/mm/proc-macros.S | ||
400 | @@ -112,13 +112,9 @@ | ||
401 | * 100x 1 0 1 r/o no acc | ||
402 | * 10x0 1 0 1 r/o no acc | ||
403 | * 1011 0 0 1 r/w no acc | ||
404 | - * 110x 0 1 0 r/w r/o | ||
405 | - * 11x0 0 1 0 r/w r/o | ||
406 | - * 1111 0 1 1 r/w r/w | ||
407 | - * | ||
408 | - * If !CONFIG_CPU_USE_DOMAINS, the following permissions are changed: | ||
409 | * 110x 1 1 1 r/o r/o | ||
410 | * 11x0 1 1 1 r/o r/o | ||
411 | + * 1111 0 1 1 r/w r/w | ||
412 | */ | ||
413 | .macro armv6_mt_table pfx | ||
414 | \pfx\()_mt_table: | ||
415 | @@ -137,7 +133,7 @@ | ||
416 | .long PTE_EXT_TEX(2) @ L_PTE_MT_DEV_NONSHARED | ||
417 | .long 0x00 @ unused | ||
418 | .long 0x00 @ unused | ||
419 | - .long 0x00 @ unused | ||
420 | + .long PTE_CACHEABLE | PTE_BUFFERABLE | PTE_EXT_APX @ L_PTE_MT_VECTORS | ||
421 | .endm | ||
422 | |||
423 | .macro armv6_set_pte_ext pfx | ||
424 | @@ -158,24 +154,21 @@ | ||
425 | |||
426 | tst r1, #L_PTE_USER | ||
427 | orrne r3, r3, #PTE_EXT_AP1 | ||
428 | -#ifdef CONFIG_CPU_USE_DOMAINS | ||
429 | - @ allow kernel read/write access to read-only user pages | ||
430 | tstne r3, #PTE_EXT_APX | ||
431 | - bicne r3, r3, #PTE_EXT_APX | PTE_EXT_AP0 | ||
432 | -#endif | ||
433 | + | ||
434 | + @ user read-only -> kernel read-only | ||
435 | + bicne r3, r3, #PTE_EXT_AP0 | ||
436 | |||
437 | tst r1, #L_PTE_XN | ||
438 | orrne r3, r3, #PTE_EXT_XN | ||
439 | |||
440 | - orr r3, r3, r2 | ||
441 | + eor r3, r3, r2 | ||
442 | |||
443 | tst r1, #L_PTE_YOUNG | ||
444 | tstne r1, #L_PTE_PRESENT | ||
445 | moveq r3, #0 | ||
446 | -#ifndef CONFIG_CPU_USE_DOMAINS | ||
447 | tstne r1, #L_PTE_NONE | ||
448 | movne r3, #0 | ||
449 | -#endif | ||
450 | |||
451 | str r3, [r0] | ||
452 | mcr p15, 0, r0, c7, c10, 1 @ flush_pte | ||
453 | diff --git a/arch/arm/mm/proc-v7-2level.S b/arch/arm/mm/proc-v7-2level.S | ||
454 | index b3997c70af32..bb20ba0f7bc7 100644 | ||
455 | --- a/arch/arm/mm/proc-v7-2level.S | ||
456 | +++ b/arch/arm/mm/proc-v7-2level.S | ||
457 | @@ -90,21 +90,14 @@ ENTRY(cpu_v7_set_pte_ext) | ||
458 | |||
459 | tst r1, #L_PTE_USER | ||
460 | orrne r3, r3, #PTE_EXT_AP1 | ||
461 | -#ifdef CONFIG_CPU_USE_DOMAINS | ||
462 | - @ allow kernel read/write access to read-only user pages | ||
463 | - tstne r3, #PTE_EXT_APX | ||
464 | - bicne r3, r3, #PTE_EXT_APX | PTE_EXT_AP0 | ||
465 | -#endif | ||
466 | |||
467 | tst r1, #L_PTE_XN | ||
468 | orrne r3, r3, #PTE_EXT_XN | ||
469 | |||
470 | tst r1, #L_PTE_YOUNG | ||
471 | tstne r1, #L_PTE_VALID | ||
472 | -#ifndef CONFIG_CPU_USE_DOMAINS | ||
473 | eorne r1, r1, #L_PTE_NONE | ||
474 | tstne r1, #L_PTE_NONE | ||
475 | -#endif | ||
476 | moveq r3, #0 | ||
477 | |||
478 | ARM( str r3, [r0, #2048]! ) | ||
479 | diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h | ||
480 | index e9a1a1d81892..3a710d7b14ce 100644 | ||
481 | --- a/arch/arm64/include/asm/pgtable.h | ||
482 | +++ b/arch/arm64/include/asm/pgtable.h | ||
483 | @@ -161,7 +161,7 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, | ||
484 | pte_t *ptep, pte_t pte) | ||
485 | { | ||
486 | if (pte_valid_user(pte)) { | ||
487 | - if (pte_exec(pte)) | ||
488 | + if (!pte_special(pte) && pte_exec(pte)) | ||
489 | __sync_icache_dcache(pte, addr); | ||
490 | if (!pte_dirty(pte)) | ||
491 | pte = pte_wrprotect(pte); | ||
492 | @@ -182,11 +182,11 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, | ||
493 | * Mark the prot value as uncacheable and unbufferable. | ||
494 | */ | ||
495 | #define pgprot_noncached(prot) \ | ||
496 | - __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_DEVICE_nGnRnE)) | ||
497 | + __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_DEVICE_nGnRnE) | PTE_PXN | PTE_UXN) | ||
498 | #define pgprot_writecombine(prot) \ | ||
499 | - __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_NORMAL_NC)) | ||
500 | + __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_NORMAL_NC) | PTE_PXN | PTE_UXN) | ||
501 | #define pgprot_dmacoherent(prot) \ | ||
502 | - __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_NORMAL_NC)) | ||
503 | + __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_NORMAL_NC) | PTE_PXN | PTE_UXN) | ||
504 | #define __HAVE_PHYS_MEM_ACCESS_PROT | ||
505 | struct file; | ||
506 | extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, | ||
507 | diff --git a/arch/s390/include/asm/ccwdev.h b/arch/s390/include/asm/ccwdev.h | ||
508 | index f201af8be580..31b5ca8f8c3d 100644 | ||
509 | --- a/arch/s390/include/asm/ccwdev.h | ||
510 | +++ b/arch/s390/include/asm/ccwdev.h | ||
511 | @@ -219,7 +219,7 @@ extern void ccw_device_get_id(struct ccw_device *, struct ccw_dev_id *); | ||
512 | #define to_ccwdev(n) container_of(n, struct ccw_device, dev) | ||
513 | #define to_ccwdrv(n) container_of(n, struct ccw_driver, driver) | ||
514 | |||
515 | -extern struct ccw_device *ccw_device_probe_console(void); | ||
516 | +extern struct ccw_device *ccw_device_probe_console(struct ccw_driver *); | ||
517 | extern void ccw_device_wait_idle(struct ccw_device *); | ||
518 | extern int ccw_device_force_console(struct ccw_device *); | ||
519 | |||
520 | diff --git a/arch/sh/kernel/dumpstack.c b/arch/sh/kernel/dumpstack.c | ||
521 | index b959f5592604..8dfe645bcc4b 100644 | ||
522 | --- a/arch/sh/kernel/dumpstack.c | ||
523 | +++ b/arch/sh/kernel/dumpstack.c | ||
524 | @@ -115,7 +115,7 @@ static int print_trace_stack(void *data, char *name) | ||
525 | */ | ||
526 | static void print_trace_address(void *data, unsigned long addr, int reliable) | ||
527 | { | ||
528 | - printk(data); | ||
529 | + printk("%s", (char *)data); | ||
530 | printk_address(addr, reliable); | ||
531 | } | ||
532 | |||
533 | diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c | ||
534 | index d606463aa6d6..1308beed7abe 100644 | ||
535 | --- a/arch/x86/boot/compressed/eboot.c | ||
536 | +++ b/arch/x86/boot/compressed/eboot.c | ||
537 | @@ -865,6 +865,9 @@ fail: | ||
538 | * Because the x86 boot code expects to be passed a boot_params we | ||
539 | * need to create one ourselves (usually the bootloader would create | ||
540 | * one for us). | ||
541 | + * | ||
542 | + * The caller is responsible for filling out ->code32_start in the | ||
543 | + * returned boot_params. | ||
544 | */ | ||
545 | struct boot_params *make_boot_params(void *handle, efi_system_table_t *_table) | ||
546 | { | ||
547 | @@ -921,8 +924,6 @@ struct boot_params *make_boot_params(void *handle, efi_system_table_t *_table) | ||
548 | hdr->vid_mode = 0xffff; | ||
549 | hdr->boot_flag = 0xAA55; | ||
550 | |||
551 | - hdr->code32_start = (__u64)(unsigned long)image->image_base; | ||
552 | - | ||
553 | hdr->type_of_loader = 0x21; | ||
554 | |||
555 | /* Convert unicode cmdline to ascii */ | ||
556 | diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S | ||
557 | index 1e3184f6072f..abb988a54c69 100644 | ||
558 | --- a/arch/x86/boot/compressed/head_32.S | ||
559 | +++ b/arch/x86/boot/compressed/head_32.S | ||
560 | @@ -50,6 +50,13 @@ ENTRY(efi_pe_entry) | ||
561 | pushl %eax | ||
562 | pushl %esi | ||
563 | pushl %ecx | ||
564 | + | ||
565 | + call reloc | ||
566 | +reloc: | ||
567 | + popl %ecx | ||
568 | + subl reloc, %ecx | ||
569 | + movl %ecx, BP_code32_start(%eax) | ||
570 | + | ||
571 | sub $0x4, %esp | ||
572 | |||
573 | ENTRY(efi_stub_entry) | ||
574 | @@ -63,12 +70,7 @@ ENTRY(efi_stub_entry) | ||
575 | hlt | ||
576 | jmp 1b | ||
577 | 2: | ||
578 | - call 3f | ||
579 | -3: | ||
580 | - popl %eax | ||
581 | - subl $3b, %eax | ||
582 | - subl BP_pref_address(%esi), %eax | ||
583 | - add BP_code32_start(%esi), %eax | ||
584 | + movl BP_code32_start(%esi), %eax | ||
585 | leal preferred_addr(%eax), %eax | ||
586 | jmp *%eax | ||
587 | |||
588 | diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S | ||
589 | index 16f24e6dad79..92059b8f3f7b 100644 | ||
590 | --- a/arch/x86/boot/compressed/head_64.S | ||
591 | +++ b/arch/x86/boot/compressed/head_64.S | ||
592 | @@ -217,6 +217,8 @@ ENTRY(efi_pe_entry) | ||
593 | cmpq $0,%rax | ||
594 | je 1f | ||
595 | mov %rax, %rdx | ||
596 | + leaq startup_32(%rip), %rax | ||
597 | + movl %eax, BP_code32_start(%rdx) | ||
598 | popq %rsi | ||
599 | popq %rdi | ||
600 | |||
601 | @@ -230,12 +232,7 @@ ENTRY(efi_stub_entry) | ||
602 | hlt | ||
603 | jmp 1b | ||
604 | 2: | ||
605 | - call 3f | ||
606 | -3: | ||
607 | - popq %rax | ||
608 | - subq $3b, %rax | ||
609 | - subq BP_pref_address(%rsi), %rax | ||
610 | - add BP_code32_start(%esi), %eax | ||
611 | + movl BP_code32_start(%esi), %eax | ||
612 | leaq preferred_addr(%rax), %rax | ||
613 | jmp *%rax | ||
614 | |||
615 | diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c | ||
616 | index e6253195a301..1ffc32dbe450 100644 | ||
617 | --- a/arch/x86/kernel/ftrace.c | ||
618 | +++ b/arch/x86/kernel/ftrace.c | ||
619 | @@ -659,8 +659,8 @@ ftrace_modify_code(unsigned long ip, unsigned const char *old_code, | ||
620 | ret = -EPERM; | ||
621 | goto out; | ||
622 | } | ||
623 | - run_sync(); | ||
624 | out: | ||
625 | + run_sync(); | ||
626 | return ret; | ||
627 | |||
628 | fail_update: | ||
629 | diff --git a/arch/x86/kernel/ldt.c b/arch/x86/kernel/ldt.c | ||
630 | index ebc987398923..af1d14a9ebda 100644 | ||
631 | --- a/arch/x86/kernel/ldt.c | ||
632 | +++ b/arch/x86/kernel/ldt.c | ||
633 | @@ -229,6 +229,17 @@ static int write_ldt(void __user *ptr, unsigned long bytecount, int oldmode) | ||
634 | } | ||
635 | } | ||
636 | |||
637 | + /* | ||
638 | + * On x86-64 we do not support 16-bit segments due to | ||
639 | + * IRET leaking the high bits of the kernel stack address. | ||
640 | + */ | ||
641 | +#ifdef CONFIG_X86_64 | ||
642 | + if (!ldt_info.seg_32bit) { | ||
643 | + error = -EINVAL; | ||
644 | + goto out_unlock; | ||
645 | + } | ||
646 | +#endif | ||
647 | + | ||
648 | fill_ldt(&ldt, &ldt_info); | ||
649 | if (oldmode) | ||
650 | ldt.avl = 0; | ||
651 | diff --git a/drivers/block/mtip32xx/mtip32xx.c b/drivers/block/mtip32xx/mtip32xx.c | ||
652 | index 20dd52a2f92f..6e514583aa76 100644 | ||
653 | --- a/drivers/block/mtip32xx/mtip32xx.c | ||
654 | +++ b/drivers/block/mtip32xx/mtip32xx.c | ||
655 | @@ -4040,6 +4040,7 @@ skip_create_disk: | ||
656 | blk_queue_max_hw_sectors(dd->queue, 0xffff); | ||
657 | blk_queue_max_segment_size(dd->queue, 0x400000); | ||
658 | blk_queue_io_min(dd->queue, 4096); | ||
659 | + blk_queue_bounce_limit(dd->queue, dd->pdev->dma_mask); | ||
660 | |||
661 | /* | ||
662 | * write back cache is not supported in the device. FUA depends on | ||
663 | diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-buffer.c | ||
664 | index aaadd32f9f0d..d344cf3ac9e3 100644 | ||
665 | --- a/drivers/iio/industrialio-buffer.c | ||
666 | +++ b/drivers/iio/industrialio-buffer.c | ||
667 | @@ -119,7 +119,8 @@ static ssize_t iio_scan_el_show(struct device *dev, | ||
668 | int ret; | ||
669 | struct iio_dev *indio_dev = dev_to_iio_dev(dev); | ||
670 | |||
671 | - ret = test_bit(to_iio_dev_attr(attr)->address, | ||
672 | + /* Ensure ret is 0 or 1. */ | ||
673 | + ret = !!test_bit(to_iio_dev_attr(attr)->address, | ||
674 | indio_dev->buffer->scan_mask); | ||
675 | |||
676 | return sprintf(buf, "%d\n", ret); | ||
677 | @@ -762,7 +763,8 @@ int iio_scan_mask_query(struct iio_dev *indio_dev, | ||
678 | if (!buffer->scan_mask) | ||
679 | return 0; | ||
680 | |||
681 | - return test_bit(bit, buffer->scan_mask); | ||
682 | + /* Ensure return value is 0 or 1. */ | ||
683 | + return !!test_bit(bit, buffer->scan_mask); | ||
684 | }; | ||
685 | EXPORT_SYMBOL_GPL(iio_scan_mask_query); | ||
686 | |||
687 | diff --git a/drivers/infiniband/hw/ehca/ehca_cq.c b/drivers/infiniband/hw/ehca/ehca_cq.c | ||
688 | index 212150c25ea0..8cc837537768 100644 | ||
689 | --- a/drivers/infiniband/hw/ehca/ehca_cq.c | ||
690 | +++ b/drivers/infiniband/hw/ehca/ehca_cq.c | ||
691 | @@ -283,6 +283,7 @@ struct ib_cq *ehca_create_cq(struct ib_device *device, int cqe, int comp_vector, | ||
692 | (my_cq->galpas.user.fw_handle & (PAGE_SIZE - 1)); | ||
693 | if (ib_copy_to_udata(udata, &resp, sizeof(resp))) { | ||
694 | ehca_err(device, "Copy to udata failed."); | ||
695 | + cq = ERR_PTR(-EFAULT); | ||
696 | goto create_cq_exit4; | ||
697 | } | ||
698 | } | ||
699 | diff --git a/drivers/infiniband/hw/ipath/ipath_diag.c b/drivers/infiniband/hw/ipath/ipath_diag.c | ||
700 | index 714293b78518..e2f9a51f4a38 100644 | ||
701 | --- a/drivers/infiniband/hw/ipath/ipath_diag.c | ||
702 | +++ b/drivers/infiniband/hw/ipath/ipath_diag.c | ||
703 | @@ -326,7 +326,7 @@ static ssize_t ipath_diagpkt_write(struct file *fp, | ||
704 | size_t count, loff_t *off) | ||
705 | { | ||
706 | u32 __iomem *piobuf; | ||
707 | - u32 plen, clen, pbufn; | ||
708 | + u32 plen, pbufn, maxlen_reserve; | ||
709 | struct ipath_diag_pkt odp; | ||
710 | struct ipath_diag_xpkt dp; | ||
711 | u32 *tmpbuf = NULL; | ||
712 | @@ -335,51 +335,29 @@ static ssize_t ipath_diagpkt_write(struct file *fp, | ||
713 | u64 val; | ||
714 | u32 l_state, lt_state; /* LinkState, LinkTrainingState */ | ||
715 | |||
716 | - if (count < sizeof(odp)) { | ||
717 | - ret = -EINVAL; | ||
718 | - goto bail; | ||
719 | - } | ||
720 | |||
721 | if (count == sizeof(dp)) { | ||
722 | if (copy_from_user(&dp, data, sizeof(dp))) { | ||
723 | ret = -EFAULT; | ||
724 | goto bail; | ||
725 | } | ||
726 | - } else if (copy_from_user(&odp, data, sizeof(odp))) { | ||
727 | - ret = -EFAULT; | ||
728 | + } else if (count == sizeof(odp)) { | ||
729 | + if (copy_from_user(&odp, data, sizeof(odp))) { | ||
730 | + ret = -EFAULT; | ||
731 | + goto bail; | ||
732 | + } | ||
733 | + } else { | ||
734 | + ret = -EINVAL; | ||
735 | goto bail; | ||
736 | } | ||
737 | |||
738 | - /* | ||
739 | - * Due to padding/alignment issues (lessened with new struct) | ||
740 | - * the old and new structs are the same length. We need to | ||
741 | - * disambiguate them, which we can do because odp.len has never | ||
742 | - * been less than the total of LRH+BTH+DETH so far, while | ||
743 | - * dp.unit (same offset) unit is unlikely to get that high. | ||
744 | - * Similarly, dp.data, the pointer to user at the same offset | ||
745 | - * as odp.unit, is almost certainly at least one (512byte)page | ||
746 | - * "above" NULL. The if-block below can be omitted if compatibility | ||
747 | - * between a new driver and older diagnostic code is unimportant. | ||
748 | - * compatibility the other direction (new diags, old driver) is | ||
749 | - * handled in the diagnostic code, with a warning. | ||
750 | - */ | ||
751 | - if (dp.unit >= 20 && dp.data < 512) { | ||
752 | - /* very probable version mismatch. Fix it up */ | ||
753 | - memcpy(&odp, &dp, sizeof(odp)); | ||
754 | - /* We got a legacy dp, copy elements to dp */ | ||
755 | - dp.unit = odp.unit; | ||
756 | - dp.data = odp.data; | ||
757 | - dp.len = odp.len; | ||
758 | - dp.pbc_wd = 0; /* Indicate we need to compute PBC wd */ | ||
759 | - } | ||
760 | - | ||
761 | /* send count must be an exact number of dwords */ | ||
762 | if (dp.len & 3) { | ||
763 | ret = -EINVAL; | ||
764 | goto bail; | ||
765 | } | ||
766 | |||
767 | - clen = dp.len >> 2; | ||
768 | + plen = dp.len >> 2; | ||
769 | |||
770 | dd = ipath_lookup(dp.unit); | ||
771 | if (!dd || !(dd->ipath_flags & IPATH_PRESENT) || | ||
772 | @@ -422,16 +400,22 @@ static ssize_t ipath_diagpkt_write(struct file *fp, | ||
773 | goto bail; | ||
774 | } | ||
775 | |||
776 | - /* need total length before first word written */ | ||
777 | - /* +1 word is for the qword padding */ | ||
778 | - plen = sizeof(u32) + dp.len; | ||
779 | - | ||
780 | - if ((plen + 4) > dd->ipath_ibmaxlen) { | ||
781 | + /* | ||
782 | + * need total length before first word written, plus 2 Dwords. One Dword | ||
783 | + * is for padding so we get the full user data when not aligned on | ||
784 | + * a word boundary. The other Dword is to make sure we have room for the | ||
785 | + * ICRC which gets tacked on later. | ||
786 | + */ | ||
787 | + maxlen_reserve = 2 * sizeof(u32); | ||
788 | + if (dp.len > dd->ipath_ibmaxlen - maxlen_reserve) { | ||
789 | ipath_dbg("Pkt len 0x%x > ibmaxlen %x\n", | ||
790 | - plen - 4, dd->ipath_ibmaxlen); | ||
791 | + dp.len, dd->ipath_ibmaxlen); | ||
792 | ret = -EINVAL; | ||
793 | - goto bail; /* before writing pbc */ | ||
794 | + goto bail; | ||
795 | } | ||
796 | + | ||
797 | + plen = sizeof(u32) + dp.len; | ||
798 | + | ||
799 | tmpbuf = vmalloc(plen); | ||
800 | if (!tmpbuf) { | ||
801 | dev_info(&dd->pcidev->dev, "Unable to allocate tmp buffer, " | ||
802 | @@ -473,11 +457,11 @@ static ssize_t ipath_diagpkt_write(struct file *fp, | ||
803 | */ | ||
804 | if (dd->ipath_flags & IPATH_PIO_FLUSH_WC) { | ||
805 | ipath_flush_wc(); | ||
806 | - __iowrite32_copy(piobuf + 2, tmpbuf, clen - 1); | ||
807 | + __iowrite32_copy(piobuf + 2, tmpbuf, plen - 1); | ||
808 | ipath_flush_wc(); | ||
809 | - __raw_writel(tmpbuf[clen - 1], piobuf + clen + 1); | ||
810 | + __raw_writel(tmpbuf[plen - 1], piobuf + plen + 1); | ||
811 | } else | ||
812 | - __iowrite32_copy(piobuf + 2, tmpbuf, clen); | ||
813 | + __iowrite32_copy(piobuf + 2, tmpbuf, plen); | ||
814 | |||
815 | ipath_flush_wc(); | ||
816 | |||
817 | diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infiniband/hw/mthca/mthca_provider.c | ||
818 | index 5b71d43bd89c..42dde06fdb91 100644 | ||
819 | --- a/drivers/infiniband/hw/mthca/mthca_provider.c | ||
820 | +++ b/drivers/infiniband/hw/mthca/mthca_provider.c | ||
821 | @@ -695,6 +695,7 @@ static struct ib_cq *mthca_create_cq(struct ib_device *ibdev, int entries, | ||
822 | |||
823 | if (context && ib_copy_to_udata(udata, &cq->cqn, sizeof (__u32))) { | ||
824 | mthca_free_cq(to_mdev(ibdev), cq); | ||
825 | + err = -EFAULT; | ||
826 | goto err_free; | ||
827 | } | ||
828 | |||
829 | diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c | ||
830 | index 8f67fe2e91e6..7510a3c80757 100644 | ||
831 | --- a/drivers/infiniband/hw/nes/nes_verbs.c | ||
832 | +++ b/drivers/infiniband/hw/nes/nes_verbs.c | ||
833 | @@ -1186,7 +1186,7 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd, | ||
834 | nes_free_resource(nesadapter, nesadapter->allocated_qps, qp_num); | ||
835 | kfree(nesqp->allocated_buffer); | ||
836 | nes_debug(NES_DBG_QP, "ib_copy_from_udata() Failed \n"); | ||
837 | - return NULL; | ||
838 | + return ERR_PTR(-EFAULT); | ||
839 | } | ||
840 | if (req.user_wqe_buffers) { | ||
841 | virt_wqs = 1; | ||
842 | diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c | ||
843 | index 6c66a728a37f..64953dfa9d8a 100644 | ||
844 | --- a/drivers/infiniband/ulp/srpt/ib_srpt.c | ||
845 | +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c | ||
846 | @@ -1078,6 +1078,7 @@ static void srpt_unmap_sg_to_ib_sge(struct srpt_rdma_ch *ch, | ||
847 | static int srpt_map_sg_to_ib_sge(struct srpt_rdma_ch *ch, | ||
848 | struct srpt_send_ioctx *ioctx) | ||
849 | { | ||
850 | + struct ib_device *dev = ch->sport->sdev->device; | ||
851 | struct se_cmd *cmd; | ||
852 | struct scatterlist *sg, *sg_orig; | ||
853 | int sg_cnt; | ||
854 | @@ -1124,7 +1125,7 @@ static int srpt_map_sg_to_ib_sge(struct srpt_rdma_ch *ch, | ||
855 | |||
856 | db = ioctx->rbufs; | ||
857 | tsize = cmd->data_length; | ||
858 | - dma_len = sg_dma_len(&sg[0]); | ||
859 | + dma_len = ib_sg_dma_len(dev, &sg[0]); | ||
860 | riu = ioctx->rdma_ius; | ||
861 | |||
862 | /* | ||
863 | @@ -1155,7 +1156,8 @@ static int srpt_map_sg_to_ib_sge(struct srpt_rdma_ch *ch, | ||
864 | ++j; | ||
865 | if (j < count) { | ||
866 | sg = sg_next(sg); | ||
867 | - dma_len = sg_dma_len(sg); | ||
868 | + dma_len = ib_sg_dma_len( | ||
869 | + dev, sg); | ||
870 | } | ||
871 | } | ||
872 | } else { | ||
873 | @@ -1192,8 +1194,8 @@ static int srpt_map_sg_to_ib_sge(struct srpt_rdma_ch *ch, | ||
874 | tsize = cmd->data_length; | ||
875 | riu = ioctx->rdma_ius; | ||
876 | sg = sg_orig; | ||
877 | - dma_len = sg_dma_len(&sg[0]); | ||
878 | - dma_addr = sg_dma_address(&sg[0]); | ||
879 | + dma_len = ib_sg_dma_len(dev, &sg[0]); | ||
880 | + dma_addr = ib_sg_dma_address(dev, &sg[0]); | ||
881 | |||
882 | /* this second loop is really mapped sg_addres to rdma_iu->ib_sge */ | ||
883 | for (i = 0, j = 0; | ||
884 | @@ -1216,8 +1218,10 @@ static int srpt_map_sg_to_ib_sge(struct srpt_rdma_ch *ch, | ||
885 | ++j; | ||
886 | if (j < count) { | ||
887 | sg = sg_next(sg); | ||
888 | - dma_len = sg_dma_len(sg); | ||
889 | - dma_addr = sg_dma_address(sg); | ||
890 | + dma_len = ib_sg_dma_len( | ||
891 | + dev, sg); | ||
892 | + dma_addr = ib_sg_dma_address( | ||
893 | + dev, sg); | ||
894 | } | ||
895 | } | ||
896 | } else { | ||
897 | diff --git a/drivers/media/dvb-frontends/m88rs2000.c b/drivers/media/dvb-frontends/m88rs2000.c | ||
898 | index 02699c111019..c7a1c8eba475 100644 | ||
899 | --- a/drivers/media/dvb-frontends/m88rs2000.c | ||
900 | +++ b/drivers/media/dvb-frontends/m88rs2000.c | ||
901 | @@ -712,6 +712,22 @@ static int m88rs2000_get_frontend(struct dvb_frontend *fe) | ||
902 | return 0; | ||
903 | } | ||
904 | |||
905 | +static int m88rs2000_get_tune_settings(struct dvb_frontend *fe, | ||
906 | + struct dvb_frontend_tune_settings *tune) | ||
907 | +{ | ||
908 | + struct dtv_frontend_properties *c = &fe->dtv_property_cache; | ||
909 | + | ||
910 | + if (c->symbol_rate > 3000000) | ||
911 | + tune->min_delay_ms = 2000; | ||
912 | + else | ||
913 | + tune->min_delay_ms = 3000; | ||
914 | + | ||
915 | + tune->step_size = c->symbol_rate / 16000; | ||
916 | + tune->max_drift = c->symbol_rate / 2000; | ||
917 | + | ||
918 | + return 0; | ||
919 | +} | ||
920 | + | ||
921 | static int m88rs2000_i2c_gate_ctrl(struct dvb_frontend *fe, int enable) | ||
922 | { | ||
923 | struct m88rs2000_state *state = fe->demodulator_priv; | ||
924 | @@ -743,7 +759,7 @@ static struct dvb_frontend_ops m88rs2000_ops = { | ||
925 | .symbol_rate_tolerance = 500, /* ppm */ | ||
926 | .caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | | ||
927 | FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | | ||
928 | - FE_CAN_QPSK | | ||
929 | + FE_CAN_QPSK | FE_CAN_INVERSION_AUTO | | ||
930 | FE_CAN_FEC_AUTO | ||
931 | }, | ||
932 | |||
933 | @@ -763,6 +779,7 @@ static struct dvb_frontend_ops m88rs2000_ops = { | ||
934 | |||
935 | .set_frontend = m88rs2000_set_frontend, | ||
936 | .get_frontend = m88rs2000_get_frontend, | ||
937 | + .get_tune_settings = m88rs2000_get_tune_settings, | ||
938 | }; | ||
939 | |||
940 | struct dvb_frontend *m88rs2000_attach(const struct m88rs2000_config *config, | ||
941 | diff --git a/drivers/media/pci/saa7134/saa7134-cards.c b/drivers/media/pci/saa7134/saa7134-cards.c | ||
942 | index d45e7f6ff332..e87a734637a9 100644 | ||
943 | --- a/drivers/media/pci/saa7134/saa7134-cards.c | ||
944 | +++ b/drivers/media/pci/saa7134/saa7134-cards.c | ||
945 | @@ -8045,8 +8045,8 @@ int saa7134_board_init2(struct saa7134_dev *dev) | ||
946 | break; | ||
947 | } /* switch() */ | ||
948 | |||
949 | - /* initialize tuner */ | ||
950 | - if (TUNER_ABSENT != dev->tuner_type) { | ||
951 | + /* initialize tuner (don't do this when resuming) */ | ||
952 | + if (!dev->insuspend && TUNER_ABSENT != dev->tuner_type) { | ||
953 | int has_demod = (dev->tda9887_conf & TDA9887_PRESENT); | ||
954 | |||
955 | /* Note: radio tuner address is always filled in, | ||
956 | diff --git a/drivers/media/platform/omap3isp/isppreview.c b/drivers/media/platform/omap3isp/isppreview.c | ||
957 | index cd8831aebdeb..e2e4610d5550 100644 | ||
958 | --- a/drivers/media/platform/omap3isp/isppreview.c | ||
959 | +++ b/drivers/media/platform/omap3isp/isppreview.c | ||
960 | @@ -1079,6 +1079,7 @@ static void preview_config_input_format(struct isp_prev_device *prev, | ||
961 | */ | ||
962 | static void preview_config_input_size(struct isp_prev_device *prev, u32 active) | ||
963 | { | ||
964 | + const struct v4l2_mbus_framefmt *format = &prev->formats[PREV_PAD_SINK]; | ||
965 | struct isp_device *isp = to_isp_device(prev); | ||
966 | unsigned int sph = prev->crop.left; | ||
967 | unsigned int eph = prev->crop.left + prev->crop.width - 1; | ||
968 | @@ -1086,6 +1087,14 @@ static void preview_config_input_size(struct isp_prev_device *prev, u32 active) | ||
969 | unsigned int elv = prev->crop.top + prev->crop.height - 1; | ||
970 | u32 features; | ||
971 | |||
972 | + if (format->code != V4L2_MBUS_FMT_Y8_1X8 && | ||
973 | + format->code != V4L2_MBUS_FMT_Y10_1X10) { | ||
974 | + sph -= 2; | ||
975 | + eph += 2; | ||
976 | + slv -= 2; | ||
977 | + elv += 2; | ||
978 | + } | ||
979 | + | ||
980 | features = (prev->params.params[0].features & active) | ||
981 | | (prev->params.params[1].features & ~active); | ||
982 | |||
983 | diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c | ||
984 | index b22f8fed8127..c4d669648dc7 100644 | ||
985 | --- a/drivers/media/usb/em28xx/em28xx-dvb.c | ||
986 | +++ b/drivers/media/usb/em28xx/em28xx-dvb.c | ||
987 | @@ -673,7 +673,8 @@ static void pctv_520e_init(struct em28xx *dev) | ||
988 | static int em28xx_pctv_290e_set_lna(struct dvb_frontend *fe) | ||
989 | { | ||
990 | struct dtv_frontend_properties *c = &fe->dtv_property_cache; | ||
991 | - struct em28xx *dev = fe->dvb->priv; | ||
992 | + struct em28xx_i2c_bus *i2c_bus = fe->dvb->priv; | ||
993 | + struct em28xx *dev = i2c_bus->dev; | ||
994 | #ifdef CONFIG_GPIOLIB | ||
995 | struct em28xx_dvb *dvb = dev->dvb; | ||
996 | int ret; | ||
997 | diff --git a/drivers/media/usb/gspca/sn9c20x.c b/drivers/media/usb/gspca/sn9c20x.c | ||
998 | index ead9a1f58513..8b59e5d37bae 100644 | ||
999 | --- a/drivers/media/usb/gspca/sn9c20x.c | ||
1000 | +++ b/drivers/media/usb/gspca/sn9c20x.c | ||
1001 | @@ -2394,6 +2394,7 @@ static const struct usb_device_id device_table[] = { | ||
1002 | {USB_DEVICE(0x045e, 0x00f4), SN9C20X(OV9650, 0x30, 0)}, | ||
1003 | {USB_DEVICE(0x145f, 0x013d), SN9C20X(OV7660, 0x21, 0)}, | ||
1004 | {USB_DEVICE(0x0458, 0x7029), SN9C20X(HV7131R, 0x11, 0)}, | ||
1005 | + {USB_DEVICE(0x0458, 0x7045), SN9C20X(MT9M112, 0x5d, LED_REVERSE)}, | ||
1006 | {USB_DEVICE(0x0458, 0x704a), SN9C20X(MT9M112, 0x5d, 0)}, | ||
1007 | {USB_DEVICE(0x0458, 0x704c), SN9C20X(MT9M112, 0x5d, 0)}, | ||
1008 | {USB_DEVICE(0xa168, 0x0610), SN9C20X(HV7131R, 0x11, 0)}, | ||
1009 | diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c | ||
1010 | index 3394c3432011..e1c5bf3ea112 100644 | ||
1011 | --- a/drivers/media/usb/uvc/uvc_video.c | ||
1012 | +++ b/drivers/media/usb/uvc/uvc_video.c | ||
1013 | @@ -1846,7 +1846,25 @@ int uvc_video_enable(struct uvc_streaming *stream, int enable) | ||
1014 | |||
1015 | if (!enable) { | ||
1016 | uvc_uninit_video(stream, 1); | ||
1017 | - usb_set_interface(stream->dev->udev, stream->intfnum, 0); | ||
1018 | + if (stream->intf->num_altsetting > 1) { | ||
1019 | + usb_set_interface(stream->dev->udev, | ||
1020 | + stream->intfnum, 0); | ||
1021 | + } else { | ||
1022 | + /* UVC doesn't specify how to inform a bulk-based device | ||
1023 | + * when the video stream is stopped. Windows sends a | ||
1024 | + * CLEAR_FEATURE(HALT) request to the video streaming | ||
1025 | + * bulk endpoint, mimic the same behaviour. | ||
1026 | + */ | ||
1027 | + unsigned int epnum = stream->header.bEndpointAddress | ||
1028 | + & USB_ENDPOINT_NUMBER_MASK; | ||
1029 | + unsigned int dir = stream->header.bEndpointAddress | ||
1030 | + & USB_ENDPOINT_DIR_MASK; | ||
1031 | + unsigned int pipe; | ||
1032 | + | ||
1033 | + pipe = usb_sndbulkpipe(stream->dev->udev, epnum) | dir; | ||
1034 | + usb_clear_halt(stream->dev->udev, pipe); | ||
1035 | + } | ||
1036 | + | ||
1037 | uvc_queue_enable(&stream->queue, 0); | ||
1038 | uvc_video_clock_cleanup(stream); | ||
1039 | return 0; | ||
1040 | diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c | ||
1041 | index f1295519f285..f56b729581e7 100644 | ||
1042 | --- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c | ||
1043 | +++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c | ||
1044 | @@ -787,8 +787,8 @@ static int put_v4l2_subdev_edid32(struct v4l2_subdev_edid *kp, struct v4l2_subde | ||
1045 | #define VIDIOC_DQBUF32 _IOWR('V', 17, struct v4l2_buffer32) | ||
1046 | #define VIDIOC_ENUMSTD32 _IOWR('V', 25, struct v4l2_standard32) | ||
1047 | #define VIDIOC_ENUMINPUT32 _IOWR('V', 26, struct v4l2_input32) | ||
1048 | -#define VIDIOC_SUBDEV_G_EDID32 _IOWR('V', 63, struct v4l2_subdev_edid32) | ||
1049 | -#define VIDIOC_SUBDEV_S_EDID32 _IOWR('V', 64, struct v4l2_subdev_edid32) | ||
1050 | +#define VIDIOC_SUBDEV_G_EDID32 _IOWR('V', 40, struct v4l2_subdev_edid32) | ||
1051 | +#define VIDIOC_SUBDEV_S_EDID32 _IOWR('V', 41, struct v4l2_subdev_edid32) | ||
1052 | #define VIDIOC_TRY_FMT32 _IOWR('V', 64, struct v4l2_format32) | ||
1053 | #define VIDIOC_G_EXT_CTRLS32 _IOWR('V', 71, struct v4l2_ext_controls32) | ||
1054 | #define VIDIOC_S_EXT_CTRLS32 _IOWR('V', 72, struct v4l2_ext_controls32) | ||
1055 | diff --git a/drivers/mfd/88pm860x-core.c b/drivers/mfd/88pm860x-core.c | ||
1056 | index 31ca55548ef9..30cf7eef2a8f 100644 | ||
1057 | --- a/drivers/mfd/88pm860x-core.c | ||
1058 | +++ b/drivers/mfd/88pm860x-core.c | ||
1059 | @@ -1179,12 +1179,18 @@ static int pm860x_probe(struct i2c_client *client, | ||
1060 | chip->companion_addr = pdata->companion_addr; | ||
1061 | chip->companion = i2c_new_dummy(chip->client->adapter, | ||
1062 | chip->companion_addr); | ||
1063 | + if (!chip->companion) { | ||
1064 | + dev_err(&client->dev, | ||
1065 | + "Failed to allocate I2C companion device\n"); | ||
1066 | + return -ENODEV; | ||
1067 | + } | ||
1068 | chip->regmap_companion = regmap_init_i2c(chip->companion, | ||
1069 | &pm860x_regmap_config); | ||
1070 | if (IS_ERR(chip->regmap_companion)) { | ||
1071 | ret = PTR_ERR(chip->regmap_companion); | ||
1072 | dev_err(&chip->companion->dev, | ||
1073 | "Failed to allocate register map: %d\n", ret); | ||
1074 | + i2c_unregister_device(chip->companion); | ||
1075 | return ret; | ||
1076 | } | ||
1077 | i2c_set_clientdata(chip->companion, chip); | ||
1078 | diff --git a/drivers/mfd/max77686.c b/drivers/mfd/max77686.c | ||
1079 | index 8290c2382395..1b6f45a14109 100644 | ||
1080 | --- a/drivers/mfd/max77686.c | ||
1081 | +++ b/drivers/mfd/max77686.c | ||
1082 | @@ -121,6 +121,10 @@ static int max77686_i2c_probe(struct i2c_client *i2c, | ||
1083 | dev_info(max77686->dev, "device found\n"); | ||
1084 | |||
1085 | max77686->rtc = i2c_new_dummy(i2c->adapter, I2C_ADDR_RTC); | ||
1086 | + if (!max77686->rtc) { | ||
1087 | + dev_err(max77686->dev, "Failed to allocate I2C device for RTC\n"); | ||
1088 | + return -ENODEV; | ||
1089 | + } | ||
1090 | i2c_set_clientdata(max77686->rtc, max77686); | ||
1091 | |||
1092 | max77686_irq_init(max77686); | ||
1093 | diff --git a/drivers/mfd/max77693.c b/drivers/mfd/max77693.c | ||
1094 | index 9e60fed5ff82..299970f99588 100644 | ||
1095 | --- a/drivers/mfd/max77693.c | ||
1096 | +++ b/drivers/mfd/max77693.c | ||
1097 | @@ -149,9 +149,18 @@ static int max77693_i2c_probe(struct i2c_client *i2c, | ||
1098 | dev_info(max77693->dev, "device ID: 0x%x\n", reg_data); | ||
1099 | |||
1100 | max77693->muic = i2c_new_dummy(i2c->adapter, I2C_ADDR_MUIC); | ||
1101 | + if (!max77693->muic) { | ||
1102 | + dev_err(max77693->dev, "Failed to allocate I2C device for MUIC\n"); | ||
1103 | + return -ENODEV; | ||
1104 | + } | ||
1105 | i2c_set_clientdata(max77693->muic, max77693); | ||
1106 | |||
1107 | max77693->haptic = i2c_new_dummy(i2c->adapter, I2C_ADDR_HAPTIC); | ||
1108 | + if (!max77693->haptic) { | ||
1109 | + dev_err(max77693->dev, "Failed to allocate I2C device for Haptic\n"); | ||
1110 | + ret = -ENODEV; | ||
1111 | + goto err_i2c_haptic; | ||
1112 | + } | ||
1113 | i2c_set_clientdata(max77693->haptic, max77693); | ||
1114 | |||
1115 | /* | ||
1116 | @@ -187,8 +196,9 @@ err_mfd: | ||
1117 | max77693_irq_exit(max77693); | ||
1118 | err_irq: | ||
1119 | err_regmap_muic: | ||
1120 | - i2c_unregister_device(max77693->muic); | ||
1121 | i2c_unregister_device(max77693->haptic); | ||
1122 | +err_i2c_haptic: | ||
1123 | + i2c_unregister_device(max77693->muic); | ||
1124 | return ret; | ||
1125 | } | ||
1126 | |||
1127 | diff --git a/drivers/mfd/max8925-i2c.c b/drivers/mfd/max8925-i2c.c | ||
1128 | index 92bbebd31598..c94d3337bdfd 100644 | ||
1129 | --- a/drivers/mfd/max8925-i2c.c | ||
1130 | +++ b/drivers/mfd/max8925-i2c.c | ||
1131 | @@ -180,9 +180,18 @@ static int max8925_probe(struct i2c_client *client, | ||
1132 | mutex_init(&chip->io_lock); | ||
1133 | |||
1134 | chip->rtc = i2c_new_dummy(chip->i2c->adapter, RTC_I2C_ADDR); | ||
1135 | + if (!chip->rtc) { | ||
1136 | + dev_err(chip->dev, "Failed to allocate I2C device for RTC\n"); | ||
1137 | + return -ENODEV; | ||
1138 | + } | ||
1139 | i2c_set_clientdata(chip->rtc, chip); | ||
1140 | |||
1141 | chip->adc = i2c_new_dummy(chip->i2c->adapter, ADC_I2C_ADDR); | ||
1142 | + if (!chip->adc) { | ||
1143 | + dev_err(chip->dev, "Failed to allocate I2C device for ADC\n"); | ||
1144 | + i2c_unregister_device(chip->rtc); | ||
1145 | + return -ENODEV; | ||
1146 | + } | ||
1147 | i2c_set_clientdata(chip->adc, chip); | ||
1148 | |||
1149 | device_init_wakeup(&client->dev, 1); | ||
1150 | diff --git a/drivers/mfd/max8997.c b/drivers/mfd/max8997.c | ||
1151 | index 14714058f2d2..ea1defbcf2cb 100644 | ||
1152 | --- a/drivers/mfd/max8997.c | ||
1153 | +++ b/drivers/mfd/max8997.c | ||
1154 | @@ -218,10 +218,26 @@ static int max8997_i2c_probe(struct i2c_client *i2c, | ||
1155 | mutex_init(&max8997->iolock); | ||
1156 | |||
1157 | max8997->rtc = i2c_new_dummy(i2c->adapter, I2C_ADDR_RTC); | ||
1158 | + if (!max8997->rtc) { | ||
1159 | + dev_err(max8997->dev, "Failed to allocate I2C device for RTC\n"); | ||
1160 | + return -ENODEV; | ||
1161 | + } | ||
1162 | i2c_set_clientdata(max8997->rtc, max8997); | ||
1163 | + | ||
1164 | max8997->haptic = i2c_new_dummy(i2c->adapter, I2C_ADDR_HAPTIC); | ||
1165 | + if (!max8997->haptic) { | ||
1166 | + dev_err(max8997->dev, "Failed to allocate I2C device for Haptic\n"); | ||
1167 | + ret = -ENODEV; | ||
1168 | + goto err_i2c_haptic; | ||
1169 | + } | ||
1170 | i2c_set_clientdata(max8997->haptic, max8997); | ||
1171 | + | ||
1172 | max8997->muic = i2c_new_dummy(i2c->adapter, I2C_ADDR_MUIC); | ||
1173 | + if (!max8997->muic) { | ||
1174 | + dev_err(max8997->dev, "Failed to allocate I2C device for MUIC\n"); | ||
1175 | + ret = -ENODEV; | ||
1176 | + goto err_i2c_muic; | ||
1177 | + } | ||
1178 | i2c_set_clientdata(max8997->muic, max8997); | ||
1179 | |||
1180 | pm_runtime_set_active(max8997->dev); | ||
1181 | @@ -248,7 +264,9 @@ static int max8997_i2c_probe(struct i2c_client *i2c, | ||
1182 | err_mfd: | ||
1183 | mfd_remove_devices(max8997->dev); | ||
1184 | i2c_unregister_device(max8997->muic); | ||
1185 | +err_i2c_muic: | ||
1186 | i2c_unregister_device(max8997->haptic); | ||
1187 | +err_i2c_haptic: | ||
1188 | i2c_unregister_device(max8997->rtc); | ||
1189 | err: | ||
1190 | kfree(max8997); | ||
1191 | diff --git a/drivers/mfd/max8998.c b/drivers/mfd/max8998.c | ||
1192 | index d7218cc90945..8381a76c69c0 100644 | ||
1193 | --- a/drivers/mfd/max8998.c | ||
1194 | +++ b/drivers/mfd/max8998.c | ||
1195 | @@ -152,6 +152,10 @@ static int max8998_i2c_probe(struct i2c_client *i2c, | ||
1196 | mutex_init(&max8998->iolock); | ||
1197 | |||
1198 | max8998->rtc = i2c_new_dummy(i2c->adapter, RTC_I2C_ADDR); | ||
1199 | + if (!max8998->rtc) { | ||
1200 | + dev_err(&i2c->dev, "Failed to allocate I2C device for RTC\n"); | ||
1201 | + return -ENODEV; | ||
1202 | + } | ||
1203 | i2c_set_clientdata(max8998->rtc, max8998); | ||
1204 | |||
1205 | max8998_irq_init(max8998); | ||
1206 | diff --git a/drivers/mfd/sec-core.c b/drivers/mfd/sec-core.c | ||
1207 | index 77ee26ef5941..81cfe8817fe0 100644 | ||
1208 | --- a/drivers/mfd/sec-core.c | ||
1209 | +++ b/drivers/mfd/sec-core.c | ||
1210 | @@ -199,6 +199,10 @@ static int sec_pmic_probe(struct i2c_client *i2c, | ||
1211 | } | ||
1212 | |||
1213 | sec_pmic->rtc = i2c_new_dummy(i2c->adapter, RTC_I2C_ADDR); | ||
1214 | + if (!sec_pmic->rtc) { | ||
1215 | + dev_err(&i2c->dev, "Failed to allocate I2C for RTC\n"); | ||
1216 | + return -ENODEV; | ||
1217 | + } | ||
1218 | i2c_set_clientdata(sec_pmic->rtc, sec_pmic); | ||
1219 | |||
1220 | if (pdata && pdata->cfg_pmic_irq) | ||
1221 | diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c | ||
1222 | index d79277204835..de87eafbeb05 100644 | ||
1223 | --- a/drivers/mfd/tps65910.c | ||
1224 | +++ b/drivers/mfd/tps65910.c | ||
1225 | @@ -254,8 +254,10 @@ static int tps65910_irq_init(struct tps65910 *tps65910, int irq, | ||
1226 | ret = regmap_add_irq_chip(tps65910->regmap, tps65910->chip_irq, | ||
1227 | IRQF_ONESHOT, pdata->irq_base, | ||
1228 | tps6591x_irqs_chip, &tps65910->irq_data); | ||
1229 | - if (ret < 0) | ||
1230 | + if (ret < 0) { | ||
1231 | dev_warn(tps65910->dev, "Failed to add irq_chip %d\n", ret); | ||
1232 | + tps65910->chip_irq = 0; | ||
1233 | + } | ||
1234 | return ret; | ||
1235 | } | ||
1236 | |||
1237 | diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-regs.h | ||
1238 | index 66f411a6e8ea..cabc04383685 100644 | ||
1239 | --- a/drivers/misc/mei/hw-me-regs.h | ||
1240 | +++ b/drivers/misc/mei/hw-me-regs.h | ||
1241 | @@ -115,6 +115,11 @@ | ||
1242 | #define MEI_DEV_ID_LPT_HR 0x8CBA /* Lynx Point H Refresh */ | ||
1243 | |||
1244 | #define MEI_DEV_ID_WPT_LP 0x9CBA /* Wildcat Point LP */ | ||
1245 | + | ||
1246 | +/* Host Firmware Status Registers in PCI Config Space */ | ||
1247 | +#define PCI_CFG_HFS_1 0x40 | ||
1248 | +#define PCI_CFG_HFS_2 0x48 | ||
1249 | + | ||
1250 | /* | ||
1251 | * MEI HW Section | ||
1252 | */ | ||
1253 | diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c | ||
1254 | index 371c65ae6be6..3c9e257982e3 100644 | ||
1255 | --- a/drivers/misc/mei/pci-me.c | ||
1256 | +++ b/drivers/misc/mei/pci-me.c | ||
1257 | @@ -105,15 +105,31 @@ static bool mei_me_quirk_probe(struct pci_dev *pdev, | ||
1258 | const struct pci_device_id *ent) | ||
1259 | { | ||
1260 | u32 reg; | ||
1261 | - if (ent->device == MEI_DEV_ID_PBG_1) { | ||
1262 | - pci_read_config_dword(pdev, 0x48, ®); | ||
1263 | - /* make sure that bit 9 is up and bit 10 is down */ | ||
1264 | - if ((reg & 0x600) == 0x200) { | ||
1265 | - dev_info(&pdev->dev, "Device doesn't have valid ME Interface\n"); | ||
1266 | - return false; | ||
1267 | - } | ||
1268 | + /* Cougar Point || Patsburg */ | ||
1269 | + if (ent->device == MEI_DEV_ID_CPT_1 || | ||
1270 | + ent->device == MEI_DEV_ID_PBG_1) { | ||
1271 | + pci_read_config_dword(pdev, PCI_CFG_HFS_2, ®); | ||
1272 | + /* make sure that bit 9 (NM) is up and bit 10 (DM) is down */ | ||
1273 | + if ((reg & 0x600) == 0x200) | ||
1274 | + goto no_mei; | ||
1275 | } | ||
1276 | + | ||
1277 | + /* Lynx Point */ | ||
1278 | + if (ent->device == MEI_DEV_ID_LPT_H || | ||
1279 | + ent->device == MEI_DEV_ID_LPT_W || | ||
1280 | + ent->device == MEI_DEV_ID_LPT_HR) { | ||
1281 | + /* Read ME FW Status check for SPS Firmware */ | ||
1282 | + pci_read_config_dword(pdev, PCI_CFG_HFS_1, ®); | ||
1283 | + /* if bits [19:16] = 15, running SPS Firmware */ | ||
1284 | + if ((reg & 0xf0000) == 0xf0000) | ||
1285 | + goto no_mei; | ||
1286 | + } | ||
1287 | + | ||
1288 | return true; | ||
1289 | + | ||
1290 | +no_mei: | ||
1291 | + dev_info(&pdev->dev, "Device doesn't have valid ME Interface\n"); | ||
1292 | + return false; | ||
1293 | } | ||
1294 | /** | ||
1295 | * mei_probe - Device Initialization Routine | ||
1296 | diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c | ||
1297 | index eb5d22795c47..bb86494e2b7b 100644 | ||
1298 | --- a/drivers/s390/char/con3215.c | ||
1299 | +++ b/drivers/s390/char/con3215.c | ||
1300 | @@ -922,7 +922,7 @@ static int __init con3215_init(void) | ||
1301 | raw3215_freelist = req; | ||
1302 | } | ||
1303 | |||
1304 | - cdev = ccw_device_probe_console(); | ||
1305 | + cdev = ccw_device_probe_console(&raw3215_ccw_driver); | ||
1306 | if (IS_ERR(cdev)) | ||
1307 | return -ENODEV; | ||
1308 | |||
1309 | diff --git a/drivers/s390/char/con3270.c b/drivers/s390/char/con3270.c | ||
1310 | index 699fd3e363df..bb6b0df50b33 100644 | ||
1311 | --- a/drivers/s390/char/con3270.c | ||
1312 | +++ b/drivers/s390/char/con3270.c | ||
1313 | @@ -576,7 +576,6 @@ static struct console con3270 = { | ||
1314 | static int __init | ||
1315 | con3270_init(void) | ||
1316 | { | ||
1317 | - struct ccw_device *cdev; | ||
1318 | struct raw3270 *rp; | ||
1319 | void *cbuf; | ||
1320 | int i; | ||
1321 | @@ -591,10 +590,7 @@ con3270_init(void) | ||
1322 | cpcmd("TERM AUTOCR OFF", NULL, 0, NULL); | ||
1323 | } | ||
1324 | |||
1325 | - cdev = ccw_device_probe_console(); | ||
1326 | - if (IS_ERR(cdev)) | ||
1327 | - return -ENODEV; | ||
1328 | - rp = raw3270_setup_console(cdev); | ||
1329 | + rp = raw3270_setup_console(); | ||
1330 | if (IS_ERR(rp)) | ||
1331 | return PTR_ERR(rp); | ||
1332 | |||
1333 | diff --git a/drivers/s390/char/raw3270.c b/drivers/s390/char/raw3270.c | ||
1334 | index 24a08e8f19e1..651d1f5da7c4 100644 | ||
1335 | --- a/drivers/s390/char/raw3270.c | ||
1336 | +++ b/drivers/s390/char/raw3270.c | ||
1337 | @@ -776,16 +776,24 @@ raw3270_setup_device(struct ccw_device *cdev, struct raw3270 *rp, char *ascebc) | ||
1338 | } | ||
1339 | |||
1340 | #ifdef CONFIG_TN3270_CONSOLE | ||
1341 | +/* Tentative definition - see below for actual definition. */ | ||
1342 | +static struct ccw_driver raw3270_ccw_driver; | ||
1343 | + | ||
1344 | /* | ||
1345 | * Setup 3270 device configured as console. | ||
1346 | */ | ||
1347 | -struct raw3270 __init *raw3270_setup_console(struct ccw_device *cdev) | ||
1348 | +struct raw3270 __init *raw3270_setup_console(void) | ||
1349 | { | ||
1350 | + struct ccw_device *cdev; | ||
1351 | unsigned long flags; | ||
1352 | struct raw3270 *rp; | ||
1353 | char *ascebc; | ||
1354 | int rc; | ||
1355 | |||
1356 | + cdev = ccw_device_probe_console(&raw3270_ccw_driver); | ||
1357 | + if (IS_ERR(cdev)) | ||
1358 | + return ERR_CAST(cdev); | ||
1359 | + | ||
1360 | rp = kzalloc(sizeof(struct raw3270), GFP_KERNEL | GFP_DMA); | ||
1361 | ascebc = kzalloc(256, GFP_KERNEL); | ||
1362 | rc = raw3270_setup_device(cdev, rp, ascebc); | ||
1363 | diff --git a/drivers/s390/char/raw3270.h b/drivers/s390/char/raw3270.h | ||
1364 | index 7b73ff8c1bd7..359276a88396 100644 | ||
1365 | --- a/drivers/s390/char/raw3270.h | ||
1366 | +++ b/drivers/s390/char/raw3270.h | ||
1367 | @@ -190,7 +190,7 @@ raw3270_put_view(struct raw3270_view *view) | ||
1368 | wake_up(&raw3270_wait_queue); | ||
1369 | } | ||
1370 | |||
1371 | -struct raw3270 *raw3270_setup_console(struct ccw_device *cdev); | ||
1372 | +struct raw3270 *raw3270_setup_console(void); | ||
1373 | void raw3270_wait_cons_dev(struct raw3270 *); | ||
1374 | |||
1375 | /* Notifier for device addition/removal */ | ||
1376 | diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c | ||
1377 | index 1ab5f6c36d9b..8d04a9a88cc4 100644 | ||
1378 | --- a/drivers/s390/cio/device.c | ||
1379 | +++ b/drivers/s390/cio/device.c | ||
1380 | @@ -1610,7 +1610,7 @@ out_unlock: | ||
1381 | return rc; | ||
1382 | } | ||
1383 | |||
1384 | -struct ccw_device *ccw_device_probe_console(void) | ||
1385 | +struct ccw_device *ccw_device_probe_console(struct ccw_driver *drv) | ||
1386 | { | ||
1387 | struct io_subchannel_private *io_priv; | ||
1388 | struct ccw_device *cdev; | ||
1389 | @@ -1632,6 +1632,7 @@ struct ccw_device *ccw_device_probe_console(void) | ||
1390 | kfree(io_priv); | ||
1391 | return cdev; | ||
1392 | } | ||
1393 | + cdev->drv = drv; | ||
1394 | set_io_private(sch, io_priv); | ||
1395 | ret = ccw_device_console_enable(cdev, sch); | ||
1396 | if (ret) { | ||
1397 | diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c | ||
1398 | index 278c9fa62067..1822cb9ec623 100644 | ||
1399 | --- a/drivers/scsi/arcmsr/arcmsr_hba.c | ||
1400 | +++ b/drivers/scsi/arcmsr/arcmsr_hba.c | ||
1401 | @@ -2501,16 +2501,15 @@ static int arcmsr_polling_ccbdone(struct AdapterControlBlock *acb, | ||
1402 | static int arcmsr_iop_confirm(struct AdapterControlBlock *acb) | ||
1403 | { | ||
1404 | uint32_t cdb_phyaddr, cdb_phyaddr_hi32; | ||
1405 | - dma_addr_t dma_coherent_handle; | ||
1406 | + | ||
1407 | /* | ||
1408 | ******************************************************************** | ||
1409 | ** here we need to tell iop 331 our freeccb.HighPart | ||
1410 | ** if freeccb.HighPart is not zero | ||
1411 | ******************************************************************** | ||
1412 | */ | ||
1413 | - dma_coherent_handle = acb->dma_coherent_handle; | ||
1414 | - cdb_phyaddr = (uint32_t)(dma_coherent_handle); | ||
1415 | - cdb_phyaddr_hi32 = (uint32_t)((cdb_phyaddr >> 16) >> 16); | ||
1416 | + cdb_phyaddr = lower_32_bits(acb->dma_coherent_handle); | ||
1417 | + cdb_phyaddr_hi32 = upper_32_bits(acb->dma_coherent_handle); | ||
1418 | acb->cdb_phyaddr_hi32 = cdb_phyaddr_hi32; | ||
1419 | /* | ||
1420 | *********************************************************************** | ||
1421 | diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c | ||
1422 | index ad72c1d85111..66c495d21016 100644 | ||
1423 | --- a/drivers/scsi/qla2xxx/qla_os.c | ||
1424 | +++ b/drivers/scsi/qla2xxx/qla_os.c | ||
1425 | @@ -2553,7 +2553,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) | ||
1426 | ha->flags.enable_64bit_addressing ? "enable" : | ||
1427 | "disable"); | ||
1428 | ret = qla2x00_mem_alloc(ha, req_length, rsp_length, &req, &rsp); | ||
1429 | - if (!ret) { | ||
1430 | + if (ret) { | ||
1431 | ql_log_pci(ql_log_fatal, pdev, 0x0031, | ||
1432 | "Failed to allocate memory for adapter, aborting.\n"); | ||
1433 | |||
1434 | @@ -3458,10 +3458,10 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len, | ||
1435 | else { | ||
1436 | qla2x00_set_reserved_loop_ids(ha); | ||
1437 | ql_dbg_pci(ql_dbg_init, ha->pdev, 0x0123, | ||
1438 | - "loop_id_map=%p. \n", ha->loop_id_map); | ||
1439 | + "loop_id_map=%p.\n", ha->loop_id_map); | ||
1440 | } | ||
1441 | |||
1442 | - return 1; | ||
1443 | + return 0; | ||
1444 | |||
1445 | fail_async_pd: | ||
1446 | dma_pool_free(ha->s_dma_pool, ha->ex_init_cb, ha->ex_init_cb_dma); | ||
1447 | diff --git a/drivers/staging/rtl8712/rtl871x_recv.c b/drivers/staging/rtl8712/rtl871x_recv.c | ||
1448 | index 23ec684b60e1..274c359279ef 100644 | ||
1449 | --- a/drivers/staging/rtl8712/rtl871x_recv.c | ||
1450 | +++ b/drivers/staging/rtl8712/rtl871x_recv.c | ||
1451 | @@ -254,7 +254,7 @@ union recv_frame *r8712_portctrl(struct _adapter *adapter, | ||
1452 | struct sta_info *psta; | ||
1453 | struct sta_priv *pstapriv; | ||
1454 | union recv_frame *prtnframe; | ||
1455 | - u16 ether_type = 0; | ||
1456 | + u16 ether_type; | ||
1457 | |||
1458 | pstapriv = &adapter->stapriv; | ||
1459 | ptr = get_recvframe_data(precv_frame); | ||
1460 | @@ -263,15 +263,14 @@ union recv_frame *r8712_portctrl(struct _adapter *adapter, | ||
1461 | psta = r8712_get_stainfo(pstapriv, psta_addr); | ||
1462 | auth_alg = adapter->securitypriv.AuthAlgrthm; | ||
1463 | if (auth_alg == 2) { | ||
1464 | + /* get ether_type */ | ||
1465 | + ptr = ptr + pfhdr->attrib.hdrlen + LLC_HEADER_SIZE; | ||
1466 | + memcpy(ðer_type, ptr, 2); | ||
1467 | + ether_type = ntohs((unsigned short)ether_type); | ||
1468 | + | ||
1469 | if ((psta != NULL) && (psta->ieee8021x_blocked)) { | ||
1470 | /* blocked | ||
1471 | * only accept EAPOL frame */ | ||
1472 | - prtnframe = precv_frame; | ||
1473 | - /*get ether_type */ | ||
1474 | - ptr = ptr + pfhdr->attrib.hdrlen + | ||
1475 | - pfhdr->attrib.iv_len + LLC_HEADER_SIZE; | ||
1476 | - memcpy(ðer_type, ptr, 2); | ||
1477 | - ether_type = ntohs((unsigned short)ether_type); | ||
1478 | if (ether_type == 0x888e) | ||
1479 | prtnframe = precv_frame; | ||
1480 | else { | ||
1481 | diff --git a/drivers/staging/serqt_usb2/serqt_usb2.c b/drivers/staging/serqt_usb2/serqt_usb2.c | ||
1482 | index 8a6e5ea476e1..380d9d707109 100644 | ||
1483 | --- a/drivers/staging/serqt_usb2/serqt_usb2.c | ||
1484 | +++ b/drivers/staging/serqt_usb2/serqt_usb2.c | ||
1485 | @@ -725,7 +725,7 @@ static int qt_startup(struct usb_serial *serial) | ||
1486 | goto startup_error; | ||
1487 | } | ||
1488 | |||
1489 | - switch (serial->dev->descriptor.idProduct) { | ||
1490 | + switch (le16_to_cpu(serial->dev->descriptor.idProduct)) { | ||
1491 | case QUATECH_DSU100: | ||
1492 | case QUATECH_QSU100: | ||
1493 | case QUATECH_ESU100A: | ||
1494 | diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c | ||
1495 | index 5232ac7b0745..58c479d13b57 100644 | ||
1496 | --- a/drivers/target/iscsi/iscsi_target.c | ||
1497 | +++ b/drivers/target/iscsi/iscsi_target.c | ||
1498 | @@ -2454,6 +2454,7 @@ static void iscsit_build_conn_drop_async_message(struct iscsi_conn *conn) | ||
1499 | { | ||
1500 | struct iscsi_cmd *cmd; | ||
1501 | struct iscsi_conn *conn_p; | ||
1502 | + bool found = false; | ||
1503 | |||
1504 | /* | ||
1505 | * Only send a Asynchronous Message on connections whos network | ||
1506 | @@ -2462,11 +2463,12 @@ static void iscsit_build_conn_drop_async_message(struct iscsi_conn *conn) | ||
1507 | list_for_each_entry(conn_p, &conn->sess->sess_conn_list, conn_list) { | ||
1508 | if (conn_p->conn_state == TARG_CONN_STATE_LOGGED_IN) { | ||
1509 | iscsit_inc_conn_usage_count(conn_p); | ||
1510 | + found = true; | ||
1511 | break; | ||
1512 | } | ||
1513 | } | ||
1514 | |||
1515 | - if (!conn_p) | ||
1516 | + if (!found) | ||
1517 | return; | ||
1518 | |||
1519 | cmd = iscsit_allocate_cmd(conn_p, GFP_ATOMIC); | ||
1520 | diff --git a/drivers/target/tcm_fc/tfc_sess.c b/drivers/target/tcm_fc/tfc_sess.c | ||
1521 | index 4859505ae2ed..639fdb395fb7 100644 | ||
1522 | --- a/drivers/target/tcm_fc/tfc_sess.c | ||
1523 | +++ b/drivers/target/tcm_fc/tfc_sess.c | ||
1524 | @@ -68,6 +68,7 @@ static struct ft_tport *ft_tport_create(struct fc_lport *lport) | ||
1525 | |||
1526 | if (tport) { | ||
1527 | tport->tpg = tpg; | ||
1528 | + tpg->tport = tport; | ||
1529 | return tport; | ||
1530 | } | ||
1531 | |||
1532 | diff --git a/drivers/tty/hvc/hvc_console.c b/drivers/tty/hvc/hvc_console.c | ||
1533 | index eb255e807c06..a2a2645b296c 100644 | ||
1534 | --- a/drivers/tty/hvc/hvc_console.c | ||
1535 | +++ b/drivers/tty/hvc/hvc_console.c | ||
1536 | @@ -31,6 +31,7 @@ | ||
1537 | #include <linux/list.h> | ||
1538 | #include <linux/module.h> | ||
1539 | #include <linux/major.h> | ||
1540 | +#include <linux/atomic.h> | ||
1541 | #include <linux/sysrq.h> | ||
1542 | #include <linux/tty.h> | ||
1543 | #include <linux/tty_flip.h> | ||
1544 | @@ -70,6 +71,9 @@ static struct task_struct *hvc_task; | ||
1545 | /* Picks up late kicks after list walk but before schedule() */ | ||
1546 | static int hvc_kicked; | ||
1547 | |||
1548 | +/* hvc_init is triggered from hvc_alloc, i.e. only when actually used */ | ||
1549 | +static atomic_t hvc_needs_init __read_mostly = ATOMIC_INIT(-1); | ||
1550 | + | ||
1551 | static int hvc_init(void); | ||
1552 | |||
1553 | #ifdef CONFIG_MAGIC_SYSRQ | ||
1554 | @@ -842,7 +846,7 @@ struct hvc_struct *hvc_alloc(uint32_t vtermno, int data, | ||
1555 | int i; | ||
1556 | |||
1557 | /* We wait until a driver actually comes along */ | ||
1558 | - if (!hvc_driver) { | ||
1559 | + if (atomic_inc_not_zero(&hvc_needs_init)) { | ||
1560 | int err = hvc_init(); | ||
1561 | if (err) | ||
1562 | return ERR_PTR(err); | ||
1563 | diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c | ||
1564 | index 6eab440e1542..4ed35231e552 100644 | ||
1565 | --- a/drivers/usb/core/driver.c | ||
1566 | +++ b/drivers/usb/core/driver.c | ||
1567 | @@ -953,8 +953,7 @@ EXPORT_SYMBOL_GPL(usb_deregister); | ||
1568 | * it doesn't support pre_reset/post_reset/reset_resume or | ||
1569 | * because it doesn't support suspend/resume. | ||
1570 | * | ||
1571 | - * The caller must hold @intf's device's lock, but not its pm_mutex | ||
1572 | - * and not @intf->dev.sem. | ||
1573 | + * The caller must hold @intf's device's lock, but not @intf's lock. | ||
1574 | */ | ||
1575 | void usb_forced_unbind_intf(struct usb_interface *intf) | ||
1576 | { | ||
1577 | @@ -967,16 +966,37 @@ void usb_forced_unbind_intf(struct usb_interface *intf) | ||
1578 | intf->needs_binding = 1; | ||
1579 | } | ||
1580 | |||
1581 | +/* | ||
1582 | + * Unbind drivers for @udev's marked interfaces. These interfaces have | ||
1583 | + * the needs_binding flag set, for example by usb_resume_interface(). | ||
1584 | + * | ||
1585 | + * The caller must hold @udev's device lock. | ||
1586 | + */ | ||
1587 | +static void unbind_marked_interfaces(struct usb_device *udev) | ||
1588 | +{ | ||
1589 | + struct usb_host_config *config; | ||
1590 | + int i; | ||
1591 | + struct usb_interface *intf; | ||
1592 | + | ||
1593 | + config = udev->actconfig; | ||
1594 | + if (config) { | ||
1595 | + for (i = 0; i < config->desc.bNumInterfaces; ++i) { | ||
1596 | + intf = config->interface[i]; | ||
1597 | + if (intf->dev.driver && intf->needs_binding) | ||
1598 | + usb_forced_unbind_intf(intf); | ||
1599 | + } | ||
1600 | + } | ||
1601 | +} | ||
1602 | + | ||
1603 | /* Delayed forced unbinding of a USB interface driver and scan | ||
1604 | * for rebinding. | ||
1605 | * | ||
1606 | - * The caller must hold @intf's device's lock, but not its pm_mutex | ||
1607 | - * and not @intf->dev.sem. | ||
1608 | + * The caller must hold @intf's device's lock, but not @intf's lock. | ||
1609 | * | ||
1610 | * Note: Rebinds will be skipped if a system sleep transition is in | ||
1611 | * progress and the PM "complete" callback hasn't occurred yet. | ||
1612 | */ | ||
1613 | -void usb_rebind_intf(struct usb_interface *intf) | ||
1614 | +static void usb_rebind_intf(struct usb_interface *intf) | ||
1615 | { | ||
1616 | int rc; | ||
1617 | |||
1618 | @@ -993,68 +1013,66 @@ void usb_rebind_intf(struct usb_interface *intf) | ||
1619 | } | ||
1620 | } | ||
1621 | |||
1622 | -#ifdef CONFIG_PM | ||
1623 | - | ||
1624 | -/* Unbind drivers for @udev's interfaces that don't support suspend/resume | ||
1625 | - * There is no check for reset_resume here because it can be determined | ||
1626 | - * only during resume whether reset_resume is needed. | ||
1627 | +/* | ||
1628 | + * Rebind drivers to @udev's marked interfaces. These interfaces have | ||
1629 | + * the needs_binding flag set. | ||
1630 | * | ||
1631 | * The caller must hold @udev's device lock. | ||
1632 | */ | ||
1633 | -static void unbind_no_pm_drivers_interfaces(struct usb_device *udev) | ||
1634 | +static void rebind_marked_interfaces(struct usb_device *udev) | ||
1635 | { | ||
1636 | struct usb_host_config *config; | ||
1637 | int i; | ||
1638 | struct usb_interface *intf; | ||
1639 | - struct usb_driver *drv; | ||
1640 | |||
1641 | config = udev->actconfig; | ||
1642 | if (config) { | ||
1643 | for (i = 0; i < config->desc.bNumInterfaces; ++i) { | ||
1644 | intf = config->interface[i]; | ||
1645 | - | ||
1646 | - if (intf->dev.driver) { | ||
1647 | - drv = to_usb_driver(intf->dev.driver); | ||
1648 | - if (!drv->suspend || !drv->resume) | ||
1649 | - usb_forced_unbind_intf(intf); | ||
1650 | - } | ||
1651 | + if (intf->needs_binding) | ||
1652 | + usb_rebind_intf(intf); | ||
1653 | } | ||
1654 | } | ||
1655 | } | ||
1656 | |||
1657 | -/* Unbind drivers for @udev's interfaces that failed to support reset-resume. | ||
1658 | - * These interfaces have the needs_binding flag set by usb_resume_interface(). | ||
1659 | +/* | ||
1660 | + * Unbind all of @udev's marked interfaces and then rebind all of them. | ||
1661 | + * This ordering is necessary because some drivers claim several interfaces | ||
1662 | + * when they are first probed. | ||
1663 | * | ||
1664 | * The caller must hold @udev's device lock. | ||
1665 | */ | ||
1666 | -static void unbind_no_reset_resume_drivers_interfaces(struct usb_device *udev) | ||
1667 | +void usb_unbind_and_rebind_marked_interfaces(struct usb_device *udev) | ||
1668 | { | ||
1669 | - struct usb_host_config *config; | ||
1670 | - int i; | ||
1671 | - struct usb_interface *intf; | ||
1672 | - | ||
1673 | - config = udev->actconfig; | ||
1674 | - if (config) { | ||
1675 | - for (i = 0; i < config->desc.bNumInterfaces; ++i) { | ||
1676 | - intf = config->interface[i]; | ||
1677 | - if (intf->dev.driver && intf->needs_binding) | ||
1678 | - usb_forced_unbind_intf(intf); | ||
1679 | - } | ||
1680 | - } | ||
1681 | + unbind_marked_interfaces(udev); | ||
1682 | + rebind_marked_interfaces(udev); | ||
1683 | } | ||
1684 | |||
1685 | -static void do_rebind_interfaces(struct usb_device *udev) | ||
1686 | +#ifdef CONFIG_PM | ||
1687 | + | ||
1688 | +/* Unbind drivers for @udev's interfaces that don't support suspend/resume | ||
1689 | + * There is no check for reset_resume here because it can be determined | ||
1690 | + * only during resume whether reset_resume is needed. | ||
1691 | + * | ||
1692 | + * The caller must hold @udev's device lock. | ||
1693 | + */ | ||
1694 | +static void unbind_no_pm_drivers_interfaces(struct usb_device *udev) | ||
1695 | { | ||
1696 | struct usb_host_config *config; | ||
1697 | int i; | ||
1698 | struct usb_interface *intf; | ||
1699 | + struct usb_driver *drv; | ||
1700 | |||
1701 | config = udev->actconfig; | ||
1702 | if (config) { | ||
1703 | for (i = 0; i < config->desc.bNumInterfaces; ++i) { | ||
1704 | intf = config->interface[i]; | ||
1705 | - if (intf->needs_binding) | ||
1706 | - usb_rebind_intf(intf); | ||
1707 | + | ||
1708 | + if (intf->dev.driver) { | ||
1709 | + drv = to_usb_driver(intf->dev.driver); | ||
1710 | + if (!drv->suspend || !drv->resume) | ||
1711 | + usb_forced_unbind_intf(intf); | ||
1712 | + } | ||
1713 | } | ||
1714 | } | ||
1715 | } | ||
1716 | @@ -1379,7 +1397,7 @@ int usb_resume_complete(struct device *dev) | ||
1717 | * whose needs_binding flag is set | ||
1718 | */ | ||
1719 | if (udev->state != USB_STATE_NOTATTACHED) | ||
1720 | - do_rebind_interfaces(udev); | ||
1721 | + rebind_marked_interfaces(udev); | ||
1722 | return 0; | ||
1723 | } | ||
1724 | |||
1725 | @@ -1401,7 +1419,7 @@ int usb_resume(struct device *dev, pm_message_t msg) | ||
1726 | pm_runtime_disable(dev); | ||
1727 | pm_runtime_set_active(dev); | ||
1728 | pm_runtime_enable(dev); | ||
1729 | - unbind_no_reset_resume_drivers_interfaces(udev); | ||
1730 | + unbind_marked_interfaces(udev); | ||
1731 | } | ||
1732 | |||
1733 | /* Avoid PM error messages for devices disconnected while suspended | ||
1734 | diff --git a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c | ||
1735 | index caeb8d6d39fb..4676917e2b1f 100644 | ||
1736 | --- a/drivers/usb/core/hcd-pci.c | ||
1737 | +++ b/drivers/usb/core/hcd-pci.c | ||
1738 | @@ -75,7 +75,7 @@ static void for_each_companion(struct pci_dev *pdev, struct usb_hcd *hcd, | ||
1739 | PCI_SLOT(companion->devfn) != slot) | ||
1740 | continue; | ||
1741 | companion_hcd = pci_get_drvdata(companion); | ||
1742 | - if (!companion_hcd) | ||
1743 | + if (!companion_hcd || !companion_hcd->self.root_hub) | ||
1744 | continue; | ||
1745 | fn(pdev, hcd, companion, companion_hcd); | ||
1746 | } | ||
1747 | diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c | ||
1748 | index 3a2eb4cc8959..a036e03ae1b3 100644 | ||
1749 | --- a/drivers/usb/core/hub.c | ||
1750 | +++ b/drivers/usb/core/hub.c | ||
1751 | @@ -5252,10 +5252,11 @@ int usb_reset_device(struct usb_device *udev) | ||
1752 | else if (cintf->condition == | ||
1753 | USB_INTERFACE_BOUND) | ||
1754 | rebind = 1; | ||
1755 | + if (rebind) | ||
1756 | + cintf->needs_binding = 1; | ||
1757 | } | ||
1758 | - if (ret == 0 && rebind) | ||
1759 | - usb_rebind_intf(cintf); | ||
1760 | } | ||
1761 | + usb_unbind_and_rebind_marked_interfaces(udev); | ||
1762 | } | ||
1763 | |||
1764 | usb_autosuspend_device(udev); | ||
1765 | diff --git a/drivers/usb/core/usb.h b/drivers/usb/core/usb.h | ||
1766 | index 823857767a16..0923add72b59 100644 | ||
1767 | --- a/drivers/usb/core/usb.h | ||
1768 | +++ b/drivers/usb/core/usb.h | ||
1769 | @@ -55,7 +55,7 @@ extern int usb_match_one_id_intf(struct usb_device *dev, | ||
1770 | extern int usb_match_device(struct usb_device *dev, | ||
1771 | const struct usb_device_id *id); | ||
1772 | extern void usb_forced_unbind_intf(struct usb_interface *intf); | ||
1773 | -extern void usb_rebind_intf(struct usb_interface *intf); | ||
1774 | +extern void usb_unbind_and_rebind_marked_interfaces(struct usb_device *udev); | ||
1775 | |||
1776 | extern int usb_hub_claim_port(struct usb_device *hdev, unsigned port, | ||
1777 | struct dev_state *owner); | ||
1778 | diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h | ||
1779 | index 27dad993b007..7ab3c9985253 100644 | ||
1780 | --- a/drivers/usb/dwc3/core.h | ||
1781 | +++ b/drivers/usb/dwc3/core.h | ||
1782 | @@ -836,15 +836,15 @@ struct dwc3_event_depevt { | ||
1783 | * 12 - VndrDevTstRcved | ||
1784 | * @reserved15_12: Reserved, not used | ||
1785 | * @event_info: Information about this event | ||
1786 | - * @reserved31_24: Reserved, not used | ||
1787 | + * @reserved31_25: Reserved, not used | ||
1788 | */ | ||
1789 | struct dwc3_event_devt { | ||
1790 | u32 one_bit:1; | ||
1791 | u32 device_event:7; | ||
1792 | u32 type:4; | ||
1793 | u32 reserved15_12:4; | ||
1794 | - u32 event_info:8; | ||
1795 | - u32 reserved31_24:8; | ||
1796 | + u32 event_info:9; | ||
1797 | + u32 reserved31_25:7; | ||
1798 | } __packed; | ||
1799 | |||
1800 | /** | ||
1801 | diff --git a/drivers/usb/gadget/tcm_usb_gadget.c b/drivers/usb/gadget/tcm_usb_gadget.c | ||
1802 | index 7cacd6ae818e..e4d8d79a4993 100644 | ||
1803 | --- a/drivers/usb/gadget/tcm_usb_gadget.c | ||
1804 | +++ b/drivers/usb/gadget/tcm_usb_gadget.c | ||
1805 | @@ -1614,7 +1614,7 @@ static struct se_wwn *usbg_make_tport( | ||
1806 | return ERR_PTR(-ENOMEM); | ||
1807 | } | ||
1808 | tport->tport_wwpn = wwpn; | ||
1809 | - snprintf(tport->tport_name, sizeof(tport->tport_name), wnn_name); | ||
1810 | + snprintf(tport->tport_name, sizeof(tport->tport_name), "%s", wnn_name); | ||
1811 | return &tport->tport_wwn; | ||
1812 | } | ||
1813 | |||
1814 | diff --git a/drivers/usb/gadget/zero.c b/drivers/usb/gadget/zero.c | ||
1815 | index 0deb9d6cde26..d31814c7238f 100644 | ||
1816 | --- a/drivers/usb/gadget/zero.c | ||
1817 | +++ b/drivers/usb/gadget/zero.c | ||
1818 | @@ -280,7 +280,7 @@ static int __init zero_bind(struct usb_composite_dev *cdev) | ||
1819 | ss_opts->isoc_interval = gzero_options.isoc_interval; | ||
1820 | ss_opts->isoc_maxpacket = gzero_options.isoc_maxpacket; | ||
1821 | ss_opts->isoc_mult = gzero_options.isoc_mult; | ||
1822 | - ss_opts->isoc_maxburst = gzero_options.isoc_maxpacket; | ||
1823 | + ss_opts->isoc_maxburst = gzero_options.isoc_maxburst; | ||
1824 | ss_opts->bulk_buflen = gzero_options.bulk_buflen; | ||
1825 | |||
1826 | func_ss = usb_get_function(func_inst_ss); | ||
1827 | diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c | ||
1828 | index 3581416a24d8..a736d82695cb 100644 | ||
1829 | --- a/drivers/usb/host/xhci-pci.c | ||
1830 | +++ b/drivers/usb/host/xhci-pci.c | ||
1831 | @@ -114,9 +114,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) | ||
1832 | xhci->quirks |= XHCI_TRUST_TX_LENGTH; | ||
1833 | } | ||
1834 | if (pdev->vendor == PCI_VENDOR_ID_RENESAS && | ||
1835 | - pdev->device == 0x0015 && | ||
1836 | - pdev->subsystem_vendor == PCI_VENDOR_ID_SAMSUNG && | ||
1837 | - pdev->subsystem_device == 0xc0cd) | ||
1838 | + pdev->device == 0x0015) | ||
1839 | xhci->quirks |= XHCI_RESET_ON_RESUME; | ||
1840 | if (pdev->vendor == PCI_VENDOR_ID_VIA) | ||
1841 | xhci->quirks |= XHCI_RESET_ON_RESUME; | ||
1842 | @@ -161,6 +159,10 @@ static int xhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) | ||
1843 | struct usb_hcd *hcd; | ||
1844 | |||
1845 | driver = (struct hc_driver *)id->driver_data; | ||
1846 | + | ||
1847 | + /* Prevent runtime suspending between USB-2 and USB-3 initialization */ | ||
1848 | + pm_runtime_get_noresume(&dev->dev); | ||
1849 | + | ||
1850 | /* Register the USB 2.0 roothub. | ||
1851 | * FIXME: USB core must know to register the USB 2.0 roothub first. | ||
1852 | * This is sort of silly, because we could just set the HCD driver flags | ||
1853 | @@ -170,7 +172,7 @@ static int xhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) | ||
1854 | retval = usb_hcd_pci_probe(dev, id); | ||
1855 | |||
1856 | if (retval) | ||
1857 | - return retval; | ||
1858 | + goto put_runtime_pm; | ||
1859 | |||
1860 | /* USB 2.0 roothub is stored in the PCI device now. */ | ||
1861 | hcd = dev_get_drvdata(&dev->dev); | ||
1862 | @@ -199,12 +201,17 @@ static int xhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) | ||
1863 | if (xhci->quirks & XHCI_LPM_SUPPORT) | ||
1864 | hcd_to_bus(xhci->shared_hcd)->root_hub->lpm_capable = 1; | ||
1865 | |||
1866 | + /* USB-2 and USB-3 roothubs initialized, allow runtime pm suspend */ | ||
1867 | + pm_runtime_put_noidle(&dev->dev); | ||
1868 | + | ||
1869 | return 0; | ||
1870 | |||
1871 | put_usb3_hcd: | ||
1872 | usb_put_hcd(xhci->shared_hcd); | ||
1873 | dealloc_usb2_hcd: | ||
1874 | usb_hcd_pci_remove(dev); | ||
1875 | +put_runtime_pm: | ||
1876 | + pm_runtime_put_noidle(&dev->dev); | ||
1877 | return retval; | ||
1878 | } | ||
1879 | |||
1880 | diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c | ||
1881 | index a90819b83224..4b46de842175 100644 | ||
1882 | --- a/drivers/usb/host/xhci.c | ||
1883 | +++ b/drivers/usb/host/xhci.c | ||
1884 | @@ -394,16 +394,16 @@ static int xhci_try_enable_msi(struct usb_hcd *hcd) | ||
1885 | |||
1886 | #else | ||
1887 | |||
1888 | -static int xhci_try_enable_msi(struct usb_hcd *hcd) | ||
1889 | +static inline int xhci_try_enable_msi(struct usb_hcd *hcd) | ||
1890 | { | ||
1891 | return 0; | ||
1892 | } | ||
1893 | |||
1894 | -static void xhci_cleanup_msix(struct xhci_hcd *xhci) | ||
1895 | +static inline void xhci_cleanup_msix(struct xhci_hcd *xhci) | ||
1896 | { | ||
1897 | } | ||
1898 | |||
1899 | -static void xhci_msix_sync_irqs(struct xhci_hcd *xhci) | ||
1900 | +static inline void xhci_msix_sync_irqs(struct xhci_hcd *xhci) | ||
1901 | { | ||
1902 | } | ||
1903 | |||
1904 | diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c | ||
1905 | index 37a261a6bb6a..da0caf3f4b27 100644 | ||
1906 | --- a/drivers/usb/musb/musb_core.c | ||
1907 | +++ b/drivers/usb/musb/musb_core.c | ||
1908 | @@ -440,7 +440,6 @@ void musb_hnp_stop(struct musb *musb) | ||
1909 | static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb, | ||
1910 | u8 devctl) | ||
1911 | { | ||
1912 | - struct usb_otg *otg = musb->xceiv->otg; | ||
1913 | irqreturn_t handled = IRQ_NONE; | ||
1914 | |||
1915 | dev_dbg(musb->controller, "<== DevCtl=%02x, int_usb=0x%x\n", devctl, | ||
1916 | @@ -655,7 +654,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb, | ||
1917 | break; | ||
1918 | case OTG_STATE_B_PERIPHERAL: | ||
1919 | musb_g_suspend(musb); | ||
1920 | - musb->is_active = otg->gadget->b_hnp_enable; | ||
1921 | + musb->is_active = musb->g.b_hnp_enable; | ||
1922 | if (musb->is_active) { | ||
1923 | musb->xceiv->state = OTG_STATE_B_WAIT_ACON; | ||
1924 | dev_dbg(musb->controller, "HNP: Setting timer for b_ase0_brst\n"); | ||
1925 | @@ -671,7 +670,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb, | ||
1926 | break; | ||
1927 | case OTG_STATE_A_HOST: | ||
1928 | musb->xceiv->state = OTG_STATE_A_SUSPEND; | ||
1929 | - musb->is_active = otg->host->b_hnp_enable; | ||
1930 | + musb->is_active = musb_to_hcd(musb)->self.b_hnp_enable; | ||
1931 | break; | ||
1932 | case OTG_STATE_B_HOST: | ||
1933 | /* Transition to B_PERIPHERAL, see 6.8.2.6 p 44 */ | ||
1934 | diff --git a/drivers/usb/phy/phy-ulpi.c b/drivers/usb/phy/phy-ulpi.c | ||
1935 | index 217339dd7a90..17ea3f271bd8 100644 | ||
1936 | --- a/drivers/usb/phy/phy-ulpi.c | ||
1937 | +++ b/drivers/usb/phy/phy-ulpi.c | ||
1938 | @@ -47,6 +47,8 @@ struct ulpi_info { | ||
1939 | static struct ulpi_info ulpi_ids[] = { | ||
1940 | ULPI_INFO(ULPI_ID(0x04cc, 0x1504), "NXP ISP1504"), | ||
1941 | ULPI_INFO(ULPI_ID(0x0424, 0x0006), "SMSC USB331x"), | ||
1942 | + ULPI_INFO(ULPI_ID(0x0424, 0x0007), "SMSC USB3320"), | ||
1943 | + ULPI_INFO(ULPI_ID(0x0451, 0x1507), "TI TUSB1210"), | ||
1944 | }; | ||
1945 | |||
1946 | static int ulpi_set_otg_flags(struct usb_phy *phy) | ||
1947 | diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c | ||
1948 | index 4471f464ca26..a0b58e252073 100644 | ||
1949 | --- a/drivers/usb/serial/pl2303.c | ||
1950 | +++ b/drivers/usb/serial/pl2303.c | ||
1951 | @@ -82,6 +82,9 @@ static const struct usb_device_id id_table[] = { | ||
1952 | { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) }, | ||
1953 | { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) }, | ||
1954 | { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) }, | ||
1955 | + { USB_DEVICE(HP_VENDOR_ID, HP_LD960_PRODUCT_ID) }, | ||
1956 | + { USB_DEVICE(HP_VENDOR_ID, HP_LCM220_PRODUCT_ID) }, | ||
1957 | + { USB_DEVICE(HP_VENDOR_ID, HP_LCM960_PRODUCT_ID) }, | ||
1958 | { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) }, | ||
1959 | { USB_DEVICE(ZEAGLE_VENDOR_ID, ZEAGLE_N2ITION3_PRODUCT_ID) }, | ||
1960 | { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) }, | ||
1961 | diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h | ||
1962 | index c38b8c00c06f..42bc082896ac 100644 | ||
1963 | --- a/drivers/usb/serial/pl2303.h | ||
1964 | +++ b/drivers/usb/serial/pl2303.h | ||
1965 | @@ -121,8 +121,11 @@ | ||
1966 | #define SUPERIAL_VENDOR_ID 0x5372 | ||
1967 | #define SUPERIAL_PRODUCT_ID 0x2303 | ||
1968 | |||
1969 | -/* Hewlett-Packard LD220-HP POS Pole Display */ | ||
1970 | +/* Hewlett-Packard POS Pole Displays */ | ||
1971 | #define HP_VENDOR_ID 0x03f0 | ||
1972 | +#define HP_LD960_PRODUCT_ID 0x0b39 | ||
1973 | +#define HP_LCM220_PRODUCT_ID 0x3139 | ||
1974 | +#define HP_LCM960_PRODUCT_ID 0x3239 | ||
1975 | #define HP_LD220_PRODUCT_ID 0x3524 | ||
1976 | |||
1977 | /* Cressi Edy (diving computer) PC interface */ | ||
1978 | diff --git a/drivers/w1/w1_netlink.c b/drivers/w1/w1_netlink.c | ||
1979 | index 40788c925d1c..73705aff53cb 100644 | ||
1980 | --- a/drivers/w1/w1_netlink.c | ||
1981 | +++ b/drivers/w1/w1_netlink.c | ||
1982 | @@ -54,28 +54,29 @@ static void w1_send_slave(struct w1_master *dev, u64 rn) | ||
1983 | struct w1_netlink_msg *hdr = (struct w1_netlink_msg *)(msg + 1); | ||
1984 | struct w1_netlink_cmd *cmd = (struct w1_netlink_cmd *)(hdr + 1); | ||
1985 | int avail; | ||
1986 | + u64 *data; | ||
1987 | |||
1988 | /* update kernel slave list */ | ||
1989 | w1_slave_found(dev, rn); | ||
1990 | |||
1991 | avail = dev->priv_size - cmd->len; | ||
1992 | |||
1993 | - if (avail > 8) { | ||
1994 | - u64 *data = (void *)(cmd + 1) + cmd->len; | ||
1995 | + if (avail < 8) { | ||
1996 | + msg->ack++; | ||
1997 | + cn_netlink_send(msg, 0, GFP_KERNEL); | ||
1998 | |||
1999 | - *data = rn; | ||
2000 | - cmd->len += 8; | ||
2001 | - hdr->len += 8; | ||
2002 | - msg->len += 8; | ||
2003 | - return; | ||
2004 | + msg->len = sizeof(struct w1_netlink_msg) + | ||
2005 | + sizeof(struct w1_netlink_cmd); | ||
2006 | + hdr->len = sizeof(struct w1_netlink_cmd); | ||
2007 | + cmd->len = 0; | ||
2008 | } | ||
2009 | |||
2010 | - msg->ack++; | ||
2011 | - cn_netlink_send(msg, 0, GFP_KERNEL); | ||
2012 | + data = (void *)(cmd + 1) + cmd->len; | ||
2013 | |||
2014 | - msg->len = sizeof(struct w1_netlink_msg) + sizeof(struct w1_netlink_cmd); | ||
2015 | - hdr->len = sizeof(struct w1_netlink_cmd); | ||
2016 | - cmd->len = 0; | ||
2017 | + *data = rn; | ||
2018 | + cmd->len += 8; | ||
2019 | + hdr->len += 8; | ||
2020 | + msg->len += 8; | ||
2021 | } | ||
2022 | |||
2023 | static int w1_process_search_command(struct w1_master *dev, struct cn_msg *msg, | ||
2024 | diff --git a/fs/ext4/file.c b/fs/ext4/file.c | ||
2025 | index b19f0a457f32..4635788e14bf 100644 | ||
2026 | --- a/fs/ext4/file.c | ||
2027 | +++ b/fs/ext4/file.c | ||
2028 | @@ -82,7 +82,7 @@ ext4_unaligned_aio(struct inode *inode, const struct iovec *iov, | ||
2029 | size_t count = iov_length(iov, nr_segs); | ||
2030 | loff_t final_size = pos + count; | ||
2031 | |||
2032 | - if (pos >= inode->i_size) | ||
2033 | + if (pos >= i_size_read(inode)) | ||
2034 | return 0; | ||
2035 | |||
2036 | if ((pos & blockmask) || (final_size & blockmask)) | ||
2037 | diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c | ||
2038 | index 1423c4816a47..298e9c8da364 100644 | ||
2039 | --- a/fs/ext4/xattr.c | ||
2040 | +++ b/fs/ext4/xattr.c | ||
2041 | @@ -517,8 +517,8 @@ static void ext4_xattr_update_super_block(handle_t *handle, | ||
2042 | } | ||
2043 | |||
2044 | /* | ||
2045 | - * Release the xattr block BH: If the reference count is > 1, decrement | ||
2046 | - * it; otherwise free the block. | ||
2047 | + * Release the xattr block BH: If the reference count is > 1, decrement it; | ||
2048 | + * otherwise free the block. | ||
2049 | */ | ||
2050 | static void | ||
2051 | ext4_xattr_release_block(handle_t *handle, struct inode *inode, | ||
2052 | @@ -538,16 +538,31 @@ ext4_xattr_release_block(handle_t *handle, struct inode *inode, | ||
2053 | if (ce) | ||
2054 | mb_cache_entry_free(ce); | ||
2055 | get_bh(bh); | ||
2056 | + unlock_buffer(bh); | ||
2057 | ext4_free_blocks(handle, inode, bh, 0, 1, | ||
2058 | EXT4_FREE_BLOCKS_METADATA | | ||
2059 | EXT4_FREE_BLOCKS_FORGET); | ||
2060 | - unlock_buffer(bh); | ||
2061 | } else { | ||
2062 | le32_add_cpu(&BHDR(bh)->h_refcount, -1); | ||
2063 | if (ce) | ||
2064 | mb_cache_entry_release(ce); | ||
2065 | + /* | ||
2066 | + * Beware of this ugliness: Releasing of xattr block references | ||
2067 | + * from different inodes can race and so we have to protect | ||
2068 | + * from a race where someone else frees the block (and releases | ||
2069 | + * its journal_head) before we are done dirtying the buffer. In | ||
2070 | + * nojournal mode this race is harmless and we actually cannot | ||
2071 | + * call ext4_handle_dirty_xattr_block() with locked buffer as | ||
2072 | + * that function can call sync_dirty_buffer() so for that case | ||
2073 | + * we handle the dirtying after unlocking the buffer. | ||
2074 | + */ | ||
2075 | + if (ext4_handle_valid(handle)) | ||
2076 | + error = ext4_handle_dirty_xattr_block(handle, inode, | ||
2077 | + bh); | ||
2078 | unlock_buffer(bh); | ||
2079 | - error = ext4_handle_dirty_xattr_block(handle, inode, bh); | ||
2080 | + if (!ext4_handle_valid(handle)) | ||
2081 | + error = ext4_handle_dirty_xattr_block(handle, inode, | ||
2082 | + bh); | ||
2083 | if (IS_SYNC(inode)) | ||
2084 | ext4_handle_sync(handle); | ||
2085 | dquot_free_block(inode, EXT4_C2B(EXT4_SB(inode->i_sb), 1)); | ||
2086 | diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c | ||
2087 | index 7f05cd140de3..3eaa6e30a2dc 100644 | ||
2088 | --- a/fs/nfsd/nfs4callback.c | ||
2089 | +++ b/fs/nfsd/nfs4callback.c | ||
2090 | @@ -637,9 +637,11 @@ static struct rpc_cred *get_backchannel_cred(struct nfs4_client *clp, struct rpc | ||
2091 | |||
2092 | static int setup_callback_client(struct nfs4_client *clp, struct nfs4_cb_conn *conn, struct nfsd4_session *ses) | ||
2093 | { | ||
2094 | + int maxtime = max_cb_time(clp->net); | ||
2095 | struct rpc_timeout timeparms = { | ||
2096 | - .to_initval = max_cb_time(clp->net), | ||
2097 | + .to_initval = maxtime, | ||
2098 | .to_retries = 0, | ||
2099 | + .to_maxval = maxtime, | ||
2100 | }; | ||
2101 | struct rpc_create_args args = { | ||
2102 | .net = clp->net, | ||
2103 | diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c | ||
2104 | index 27d74a294515..f7d7d04674fb 100644 | ||
2105 | --- a/fs/nfsd/nfs4proc.c | ||
2106 | +++ b/fs/nfsd/nfs4proc.c | ||
2107 | @@ -1307,6 +1307,12 @@ nfsd4_proc_compound(struct svc_rqst *rqstp, | ||
2108 | /* If op is non-idempotent */ | ||
2109 | if (opdesc->op_flags & OP_MODIFIES_SOMETHING) { | ||
2110 | plen = opdesc->op_rsize_bop(rqstp, op); | ||
2111 | + /* | ||
2112 | + * If there's still another operation, make sure | ||
2113 | + * we'll have space to at least encode an error: | ||
2114 | + */ | ||
2115 | + if (resp->opcnt < args->opcnt) | ||
2116 | + plen += COMPOUND_ERR_SLACK_SPACE; | ||
2117 | op->status = nfsd4_check_resp_size(resp, plen); | ||
2118 | } | ||
2119 | |||
2120 | @@ -1471,7 +1477,8 @@ static inline u32 nfsd4_setattr_rsize(struct svc_rqst *rqstp, struct nfsd4_op *o | ||
2121 | |||
2122 | static inline u32 nfsd4_setclientid_rsize(struct svc_rqst *rqstp, struct nfsd4_op *op) | ||
2123 | { | ||
2124 | - return (op_encode_hdr_size + 2 + 1024) * sizeof(__be32); | ||
2125 | + return (op_encode_hdr_size + 2 + XDR_QUADLEN(NFS4_VERIFIER_SIZE)) * | ||
2126 | + sizeof(__be32); | ||
2127 | } | ||
2128 | |||
2129 | static inline u32 nfsd4_write_rsize(struct svc_rqst *rqstp, struct nfsd4_op *op) | ||
2130 | diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c | ||
2131 | index 316ec843dec2..442509285ca9 100644 | ||
2132 | --- a/fs/nfsd/nfs4state.c | ||
2133 | +++ b/fs/nfsd/nfs4state.c | ||
2134 | @@ -4958,7 +4958,6 @@ nfs4_state_destroy_net(struct net *net) | ||
2135 | int i; | ||
2136 | struct nfs4_client *clp = NULL; | ||
2137 | struct nfsd_net *nn = net_generic(net, nfsd_net_id); | ||
2138 | - struct rb_node *node, *tmp; | ||
2139 | |||
2140 | for (i = 0; i < CLIENT_HASH_SIZE; i++) { | ||
2141 | while (!list_empty(&nn->conf_id_hashtbl[i])) { | ||
2142 | @@ -4967,13 +4966,11 @@ nfs4_state_destroy_net(struct net *net) | ||
2143 | } | ||
2144 | } | ||
2145 | |||
2146 | - node = rb_first(&nn->unconf_name_tree); | ||
2147 | - while (node != NULL) { | ||
2148 | - tmp = node; | ||
2149 | - node = rb_next(tmp); | ||
2150 | - clp = rb_entry(tmp, struct nfs4_client, cl_namenode); | ||
2151 | - rb_erase(tmp, &nn->unconf_name_tree); | ||
2152 | - destroy_client(clp); | ||
2153 | + for (i = 0; i < CLIENT_HASH_SIZE; i++) { | ||
2154 | + while (!list_empty(&nn->unconf_id_hashtbl[i])) { | ||
2155 | + clp = list_entry(nn->unconf_id_hashtbl[i].next, struct nfs4_client, cl_idhash); | ||
2156 | + destroy_client(clp); | ||
2157 | + } | ||
2158 | } | ||
2159 | |||
2160 | kfree(nn->sessionid_hashtbl); | ||
2161 | diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c | ||
2162 | index 582321a978b0..5188a38fef06 100644 | ||
2163 | --- a/fs/nfsd/nfs4xdr.c | ||
2164 | +++ b/fs/nfsd/nfs4xdr.c | ||
2165 | @@ -2401,6 +2401,8 @@ out_acl: | ||
2166 | WRITE64(stat.ino); | ||
2167 | } | ||
2168 | if (bmval2 & FATTR4_WORD2_SUPPATTR_EXCLCREAT) { | ||
2169 | + if ((buflen -= 16) < 0) | ||
2170 | + goto out_resource; | ||
2171 | WRITE32(3); | ||
2172 | WRITE32(NFSD_SUPPATTR_EXCLCREAT_WORD0); | ||
2173 | WRITE32(NFSD_SUPPATTR_EXCLCREAT_WORD1); | ||
2174 | @@ -3382,6 +3384,9 @@ nfsd4_encode_test_stateid(struct nfsd4_compoundres *resp, __be32 nfserr, | ||
2175 | struct nfsd4_test_stateid_id *stateid, *next; | ||
2176 | __be32 *p; | ||
2177 | |||
2178 | + if (nfserr) | ||
2179 | + return nfserr; | ||
2180 | + | ||
2181 | RESERVE_SPACE(4 + (4 * test_stateid->ts_num_ids)); | ||
2182 | *p++ = htonl(test_stateid->ts_num_ids); | ||
2183 | |||
2184 | diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c | ||
2185 | index 7f555179bf81..f34d9de802ab 100644 | ||
2186 | --- a/fs/nfsd/nfsctl.c | ||
2187 | +++ b/fs/nfsd/nfsctl.c | ||
2188 | @@ -699,6 +699,11 @@ static ssize_t __write_ports_addfd(char *buf, struct net *net) | ||
2189 | if (err != 0 || fd < 0) | ||
2190 | return -EINVAL; | ||
2191 | |||
2192 | + if (svc_alien_sock(net, fd)) { | ||
2193 | + printk(KERN_ERR "%s: socket net is different to NFSd's one\n", __func__); | ||
2194 | + return -EINVAL; | ||
2195 | + } | ||
2196 | + | ||
2197 | err = nfsd_create_serv(net); | ||
2198 | if (err != 0) | ||
2199 | return err; | ||
2200 | diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c | ||
2201 | index 62fd6616801d..d9b298cbfe5c 100644 | ||
2202 | --- a/fs/nfsd/vfs.c | ||
2203 | +++ b/fs/nfsd/vfs.c | ||
2204 | @@ -406,6 +406,7 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap, | ||
2205 | umode_t ftype = 0; | ||
2206 | __be32 err; | ||
2207 | int host_err; | ||
2208 | + bool get_write_count; | ||
2209 | int size_change = 0; | ||
2210 | |||
2211 | if (iap->ia_valid & (ATTR_ATIME | ATTR_MTIME | ATTR_SIZE)) | ||
2212 | @@ -413,10 +414,18 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap, | ||
2213 | if (iap->ia_valid & ATTR_SIZE) | ||
2214 | ftype = S_IFREG; | ||
2215 | |||
2216 | + /* Callers that do fh_verify should do the fh_want_write: */ | ||
2217 | + get_write_count = !fhp->fh_dentry; | ||
2218 | + | ||
2219 | /* Get inode */ | ||
2220 | err = fh_verify(rqstp, fhp, ftype, accmode); | ||
2221 | if (err) | ||
2222 | goto out; | ||
2223 | + if (get_write_count) { | ||
2224 | + host_err = fh_want_write(fhp); | ||
2225 | + if (host_err) | ||
2226 | + return nfserrno(host_err); | ||
2227 | + } | ||
2228 | |||
2229 | dentry = fhp->fh_dentry; | ||
2230 | inode = dentry->d_inode; | ||
2231 | diff --git a/fs/ocfs2/buffer_head_io.c b/fs/ocfs2/buffer_head_io.c | ||
2232 | index 5d18ad10c27f..4f66e007dae1 100644 | ||
2233 | --- a/fs/ocfs2/buffer_head_io.c | ||
2234 | +++ b/fs/ocfs2/buffer_head_io.c | ||
2235 | @@ -90,7 +90,6 @@ int ocfs2_write_block(struct ocfs2_super *osb, struct buffer_head *bh, | ||
2236 | * information for this bh as it's not marked locally | ||
2237 | * uptodate. */ | ||
2238 | ret = -EIO; | ||
2239 | - put_bh(bh); | ||
2240 | mlog_errno(ret); | ||
2241 | } | ||
2242 | |||
2243 | @@ -420,7 +419,6 @@ int ocfs2_write_super_or_backup(struct ocfs2_super *osb, | ||
2244 | |||
2245 | if (!buffer_uptodate(bh)) { | ||
2246 | ret = -EIO; | ||
2247 | - put_bh(bh); | ||
2248 | mlog_errno(ret); | ||
2249 | } | ||
2250 | |||
2251 | diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c | ||
2252 | index e68588e6b1e8..9bd981cd3142 100644 | ||
2253 | --- a/fs/ocfs2/dlm/dlmrecovery.c | ||
2254 | +++ b/fs/ocfs2/dlm/dlmrecovery.c | ||
2255 | @@ -540,7 +540,10 @@ master_here: | ||
2256 | /* success! see if any other nodes need recovery */ | ||
2257 | mlog(0, "DONE mastering recovery of %s:%u here(this=%u)!\n", | ||
2258 | dlm->name, dlm->reco.dead_node, dlm->node_num); | ||
2259 | - dlm_reset_recovery(dlm); | ||
2260 | + spin_lock(&dlm->spinlock); | ||
2261 | + __dlm_reset_recovery(dlm); | ||
2262 | + dlm->reco.state &= ~DLM_RECO_STATE_FINALIZE; | ||
2263 | + spin_unlock(&dlm->spinlock); | ||
2264 | } | ||
2265 | dlm_end_recovery(dlm); | ||
2266 | |||
2267 | @@ -698,6 +701,14 @@ static int dlm_remaster_locks(struct dlm_ctxt *dlm, u8 dead_node) | ||
2268 | if (all_nodes_done) { | ||
2269 | int ret; | ||
2270 | |||
2271 | + /* Set this flag on recovery master to avoid | ||
2272 | + * a new recovery for another dead node start | ||
2273 | + * before the recovery is not done. That may | ||
2274 | + * cause recovery hung.*/ | ||
2275 | + spin_lock(&dlm->spinlock); | ||
2276 | + dlm->reco.state |= DLM_RECO_STATE_FINALIZE; | ||
2277 | + spin_unlock(&dlm->spinlock); | ||
2278 | + | ||
2279 | /* all nodes are now in DLM_RECO_NODE_DATA_DONE state | ||
2280 | * just send a finalize message to everyone and | ||
2281 | * clean up */ | ||
2282 | @@ -1751,13 +1762,13 @@ static int dlm_process_recovery_data(struct dlm_ctxt *dlm, | ||
2283 | struct dlm_migratable_lockres *mres) | ||
2284 | { | ||
2285 | struct dlm_migratable_lock *ml; | ||
2286 | - struct list_head *queue; | ||
2287 | + struct list_head *queue, *iter; | ||
2288 | struct list_head *tmpq = NULL; | ||
2289 | struct dlm_lock *newlock = NULL; | ||
2290 | struct dlm_lockstatus *lksb = NULL; | ||
2291 | int ret = 0; | ||
2292 | int i, j, bad; | ||
2293 | - struct dlm_lock *lock = NULL; | ||
2294 | + struct dlm_lock *lock; | ||
2295 | u8 from = O2NM_MAX_NODES; | ||
2296 | unsigned int added = 0; | ||
2297 | __be64 c; | ||
2298 | @@ -1792,14 +1803,16 @@ static int dlm_process_recovery_data(struct dlm_ctxt *dlm, | ||
2299 | /* MIGRATION ONLY! */ | ||
2300 | BUG_ON(!(mres->flags & DLM_MRES_MIGRATION)); | ||
2301 | |||
2302 | + lock = NULL; | ||
2303 | spin_lock(&res->spinlock); | ||
2304 | for (j = DLM_GRANTED_LIST; j <= DLM_BLOCKED_LIST; j++) { | ||
2305 | tmpq = dlm_list_idx_to_ptr(res, j); | ||
2306 | - list_for_each_entry(lock, tmpq, list) { | ||
2307 | - if (lock->ml.cookie != ml->cookie) | ||
2308 | - lock = NULL; | ||
2309 | - else | ||
2310 | + list_for_each(iter, tmpq) { | ||
2311 | + lock = list_entry(iter, | ||
2312 | + struct dlm_lock, list); | ||
2313 | + if (lock->ml.cookie == ml->cookie) | ||
2314 | break; | ||
2315 | + lock = NULL; | ||
2316 | } | ||
2317 | if (lock) | ||
2318 | break; | ||
2319 | @@ -2867,8 +2880,8 @@ int dlm_finalize_reco_handler(struct o2net_msg *msg, u32 len, void *data, | ||
2320 | BUG(); | ||
2321 | } | ||
2322 | dlm->reco.state &= ~DLM_RECO_STATE_FINALIZE; | ||
2323 | + __dlm_reset_recovery(dlm); | ||
2324 | spin_unlock(&dlm->spinlock); | ||
2325 | - dlm_reset_recovery(dlm); | ||
2326 | dlm_kick_recovery_thread(dlm); | ||
2327 | break; | ||
2328 | default: | ||
2329 | diff --git a/fs/reiserfs/dir.c b/fs/reiserfs/dir.c | ||
2330 | index 6c2d136561cb..2b96b59f75da 100644 | ||
2331 | --- a/fs/reiserfs/dir.c | ||
2332 | +++ b/fs/reiserfs/dir.c | ||
2333 | @@ -128,6 +128,7 @@ int reiserfs_readdir_dentry(struct dentry *dentry, void *dirent, | ||
2334 | char *d_name; | ||
2335 | off_t d_off; | ||
2336 | ino_t d_ino; | ||
2337 | + loff_t cur_pos = deh_offset(deh); | ||
2338 | |||
2339 | if (!de_visible(deh)) | ||
2340 | /* it is hidden entry */ | ||
2341 | @@ -200,8 +201,9 @@ int reiserfs_readdir_dentry(struct dentry *dentry, void *dirent, | ||
2342 | if (local_buf != small_buf) { | ||
2343 | kfree(local_buf); | ||
2344 | } | ||
2345 | - // next entry should be looked for with such offset | ||
2346 | - next_pos = deh_offset(deh) + 1; | ||
2347 | + | ||
2348 | + /* deh_offset(deh) may be invalid now. */ | ||
2349 | + next_pos = cur_pos + 1; | ||
2350 | |||
2351 | if (item_moved(&tmp_ih, &path_to_entry)) { | ||
2352 | set_cpu_key_k_offset(&pos_key, | ||
2353 | diff --git a/fs/xfs/xfs_da_btree.c b/fs/xfs/xfs_da_btree.c | ||
2354 | index eca6f9d8a263..79ddbaf93206 100644 | ||
2355 | --- a/fs/xfs/xfs_da_btree.c | ||
2356 | +++ b/fs/xfs/xfs_da_btree.c | ||
2357 | @@ -1334,7 +1334,7 @@ xfs_da3_fixhashpath( | ||
2358 | node = blk->bp->b_addr; | ||
2359 | xfs_da3_node_hdr_from_disk(&nodehdr, node); | ||
2360 | btree = xfs_da3_node_tree_p(node); | ||
2361 | - if (be32_to_cpu(btree->hashval) == lasthash) | ||
2362 | + if (be32_to_cpu(btree[blk->index].hashval) == lasthash) | ||
2363 | break; | ||
2364 | blk->hashval = lasthash; | ||
2365 | btree[blk->index].hashval = cpu_to_be32(lasthash); | ||
2366 | diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h | ||
2367 | index 62fd1b756e99..947009ed5996 100644 | ||
2368 | --- a/include/linux/sunrpc/svcsock.h | ||
2369 | +++ b/include/linux/sunrpc/svcsock.h | ||
2370 | @@ -56,6 +56,7 @@ int svc_recv(struct svc_rqst *, long); | ||
2371 | int svc_send(struct svc_rqst *); | ||
2372 | void svc_drop(struct svc_rqst *); | ||
2373 | void svc_sock_update_bufs(struct svc_serv *serv); | ||
2374 | +bool svc_alien_sock(struct net *net, int fd); | ||
2375 | int svc_addsock(struct svc_serv *serv, const int fd, | ||
2376 | char *name_return, const size_t len); | ||
2377 | void svc_init_xprt_sock(void); | ||
2378 | diff --git a/kernel/sysctl.c b/kernel/sysctl.c | ||
2379 | index 9edcf456e0fc..ed6c01626acd 100644 | ||
2380 | --- a/kernel/sysctl.c | ||
2381 | +++ b/kernel/sysctl.c | ||
2382 | @@ -144,6 +144,11 @@ static int min_percpu_pagelist_fract = 8; | ||
2383 | static int ngroups_max = NGROUPS_MAX; | ||
2384 | static const int cap_last_cap = CAP_LAST_CAP; | ||
2385 | |||
2386 | +/*this is needed for proc_doulongvec_minmax of sysctl_hung_task_timeout_secs */ | ||
2387 | +#ifdef CONFIG_DETECT_HUNG_TASK | ||
2388 | +static unsigned long hung_task_timeout_max = (LONG_MAX/HZ); | ||
2389 | +#endif | ||
2390 | + | ||
2391 | #ifdef CONFIG_INOTIFY_USER | ||
2392 | #include <linux/inotify.h> | ||
2393 | #endif | ||
2394 | @@ -966,6 +971,7 @@ static struct ctl_table kern_table[] = { | ||
2395 | .maxlen = sizeof(unsigned long), | ||
2396 | .mode = 0644, | ||
2397 | .proc_handler = proc_dohung_task_timeout_secs, | ||
2398 | + .extra2 = &hung_task_timeout_max, | ||
2399 | }, | ||
2400 | { | ||
2401 | .procname = "hung_task_warnings", | ||
2402 | diff --git a/mm/hugetlb.c b/mm/hugetlb.c | ||
2403 | index aa3b9a63394b..8a7f27b42131 100644 | ||
2404 | --- a/mm/hugetlb.c | ||
2405 | +++ b/mm/hugetlb.c | ||
2406 | @@ -1487,6 +1487,7 @@ static unsigned long set_max_huge_pages(struct hstate *h, unsigned long count, | ||
2407 | while (min_count < persistent_huge_pages(h)) { | ||
2408 | if (!free_pool_huge_page(h, nodes_allowed, 0)) | ||
2409 | break; | ||
2410 | + cond_resched_lock(&hugetlb_lock); | ||
2411 | } | ||
2412 | while (count < persistent_huge_pages(h)) { | ||
2413 | if (!adjust_pool_surplus(h, nodes_allowed, 1)) | ||
2414 | diff --git a/mm/mlock.c b/mm/mlock.c | ||
2415 | index 79b7cf7d1bca..713e462c0776 100644 | ||
2416 | --- a/mm/mlock.c | ||
2417 | +++ b/mm/mlock.c | ||
2418 | @@ -76,6 +76,7 @@ void clear_page_mlock(struct page *page) | ||
2419 | */ | ||
2420 | void mlock_vma_page(struct page *page) | ||
2421 | { | ||
2422 | + /* Serialize with page migration */ | ||
2423 | BUG_ON(!PageLocked(page)); | ||
2424 | |||
2425 | if (!TestSetPageMlocked(page)) { | ||
2426 | @@ -106,6 +107,7 @@ unsigned int munlock_vma_page(struct page *page) | ||
2427 | { | ||
2428 | unsigned int page_mask = 0; | ||
2429 | |||
2430 | + /* For try_to_munlock() and to serialize with page migration */ | ||
2431 | BUG_ON(!PageLocked(page)); | ||
2432 | |||
2433 | if (TestClearPageMlocked(page)) { | ||
2434 | diff --git a/mm/rmap.c b/mm/rmap.c | ||
2435 | index 3f6077461aea..fbf0040a7342 100644 | ||
2436 | --- a/mm/rmap.c | ||
2437 | +++ b/mm/rmap.c | ||
2438 | @@ -1390,9 +1390,19 @@ static int try_to_unmap_cluster(unsigned long cursor, unsigned int *mapcount, | ||
2439 | BUG_ON(!page || PageAnon(page)); | ||
2440 | |||
2441 | if (locked_vma) { | ||
2442 | - mlock_vma_page(page); /* no-op if already mlocked */ | ||
2443 | - if (page == check_page) | ||
2444 | + if (page == check_page) { | ||
2445 | + /* we know we have check_page locked */ | ||
2446 | + mlock_vma_page(page); | ||
2447 | ret = SWAP_MLOCK; | ||
2448 | + } else if (trylock_page(page)) { | ||
2449 | + /* | ||
2450 | + * If we can lock the page, perform mlock. | ||
2451 | + * Otherwise leave the page alone, it will be | ||
2452 | + * eventually encountered again later. | ||
2453 | + */ | ||
2454 | + mlock_vma_page(page); | ||
2455 | + unlock_page(page); | ||
2456 | + } | ||
2457 | continue; /* don't unmap */ | ||
2458 | } | ||
2459 | |||
2460 | diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c | ||
2461 | index 305374d4fb98..422759bae60d 100644 | ||
2462 | --- a/net/sunrpc/svcsock.c | ||
2463 | +++ b/net/sunrpc/svcsock.c | ||
2464 | @@ -1393,6 +1393,22 @@ static struct svc_sock *svc_setup_socket(struct svc_serv *serv, | ||
2465 | return svsk; | ||
2466 | } | ||
2467 | |||
2468 | +bool svc_alien_sock(struct net *net, int fd) | ||
2469 | +{ | ||
2470 | + int err; | ||
2471 | + struct socket *sock = sockfd_lookup(fd, &err); | ||
2472 | + bool ret = false; | ||
2473 | + | ||
2474 | + if (!sock) | ||
2475 | + goto out; | ||
2476 | + if (sock_net(sock->sk) != net) | ||
2477 | + ret = true; | ||
2478 | + sockfd_put(sock); | ||
2479 | +out: | ||
2480 | + return ret; | ||
2481 | +} | ||
2482 | +EXPORT_SYMBOL_GPL(svc_alien_sock); | ||
2483 | + | ||
2484 | /** | ||
2485 | * svc_addsock - add a listener socket to an RPC service | ||
2486 | * @serv: pointer to RPC service to which to add a new listener | ||
2487 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c | ||
2488 | index 34548589f419..7de7cf1ec852 100644 | ||
2489 | --- a/sound/pci/hda/patch_realtek.c | ||
2490 | +++ b/sound/pci/hda/patch_realtek.c | ||
2491 | @@ -937,6 +937,7 @@ static int alc_codec_rename_from_preset(struct hda_codec *codec) | ||
2492 | |||
2493 | static const struct snd_pci_quirk beep_white_list[] = { | ||
2494 | SND_PCI_QUIRK(0x1043, 0x103c, "ASUS", 1), | ||
2495 | + SND_PCI_QUIRK(0x1043, 0x115d, "ASUS", 1), | ||
2496 | SND_PCI_QUIRK(0x1043, 0x829f, "ASUS", 1), | ||
2497 | SND_PCI_QUIRK(0x1043, 0x8376, "EeePC", 1), | ||
2498 | SND_PCI_QUIRK(0x1043, 0x83ce, "EeePC", 1), | ||
2499 | @@ -2858,8 +2859,9 @@ static void alc269_fixup_mic_mute_hook(void *private_data, int enabled) | ||
2500 | |||
2501 | if (spec->mute_led_polarity) | ||
2502 | enabled = !enabled; | ||
2503 | - pinval = AC_PINCTL_IN_EN | | ||
2504 | - (enabled ? AC_PINCTL_VREF_HIZ : AC_PINCTL_VREF_80); | ||
2505 | + pinval = snd_hda_codec_get_pin_target(codec, spec->mute_led_nid); | ||
2506 | + pinval &= ~AC_PINCTL_VREFEN; | ||
2507 | + pinval |= enabled ? AC_PINCTL_VREF_HIZ : AC_PINCTL_VREF_80; | ||
2508 | if (spec->mute_led_nid) | ||
2509 | snd_hda_set_pin_ctl_cache(codec, spec->mute_led_nid, pinval); | ||
2510 | } | ||
2511 | @@ -3901,6 +3903,7 @@ static int patch_alc269(struct hda_codec *codec) | ||
2512 | spec->codec_variant = ALC269_TYPE_ALC284; | ||
2513 | break; | ||
2514 | case 0x10ec0286: | ||
2515 | + case 0x10ec0288: | ||
2516 | spec->codec_variant = ALC269_TYPE_ALC286; | ||
2517 | break; | ||
2518 | case 0x10ec0255: | ||
2519 | @@ -4643,6 +4646,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = { | ||
2520 | { .id = 0x10ec0283, .name = "ALC283", .patch = patch_alc269 }, | ||
2521 | { .id = 0x10ec0284, .name = "ALC284", .patch = patch_alc269 }, | ||
2522 | { .id = 0x10ec0286, .name = "ALC286", .patch = patch_alc269 }, | ||
2523 | + { .id = 0x10ec0288, .name = "ALC288", .patch = patch_alc269 }, | ||
2524 | { .id = 0x10ec0290, .name = "ALC290", .patch = patch_alc269 }, | ||
2525 | { .id = 0x10ec0292, .name = "ALC292", .patch = patch_alc269 }, | ||
2526 | { .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660", | ||
2527 | diff --git a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c | ||
2528 | index 806407a3973e..e6b70e35f628 100644 | ||
2529 | --- a/sound/pci/ice1712/ice1712.c | ||
2530 | +++ b/sound/pci/ice1712/ice1712.c | ||
2531 | @@ -685,9 +685,10 @@ static snd_pcm_uframes_t snd_ice1712_playback_pointer(struct snd_pcm_substream * | ||
2532 | if (!(snd_ice1712_read(ice, ICE1712_IREG_PBK_CTRL) & 1)) | ||
2533 | return 0; | ||
2534 | ptr = runtime->buffer_size - inw(ice->ddma_port + 4); | ||
2535 | + ptr = bytes_to_frames(substream->runtime, ptr); | ||
2536 | if (ptr == runtime->buffer_size) | ||
2537 | ptr = 0; | ||
2538 | - return bytes_to_frames(substream->runtime, ptr); | ||
2539 | + return ptr; | ||
2540 | } | ||
2541 | |||
2542 | static snd_pcm_uframes_t snd_ice1712_playback_ds_pointer(struct snd_pcm_substream *substream) | ||
2543 | @@ -704,9 +705,10 @@ static snd_pcm_uframes_t snd_ice1712_playback_ds_pointer(struct snd_pcm_substrea | ||
2544 | addr = ICE1712_DSC_ADDR0; | ||
2545 | ptr = snd_ice1712_ds_read(ice, substream->number * 2, addr) - | ||
2546 | ice->playback_con_virt_addr[substream->number]; | ||
2547 | + ptr = bytes_to_frames(substream->runtime, ptr); | ||
2548 | if (ptr == substream->runtime->buffer_size) | ||
2549 | ptr = 0; | ||
2550 | - return bytes_to_frames(substream->runtime, ptr); | ||
2551 | + return ptr; | ||
2552 | } | ||
2553 | |||
2554 | static snd_pcm_uframes_t snd_ice1712_capture_pointer(struct snd_pcm_substream *substream) | ||
2555 | @@ -717,9 +719,10 @@ static snd_pcm_uframes_t snd_ice1712_capture_pointer(struct snd_pcm_substream *s | ||
2556 | if (!(snd_ice1712_read(ice, ICE1712_IREG_CAP_CTRL) & 1)) | ||
2557 | return 0; | ||
2558 | ptr = inl(ICEREG(ice, CONCAP_ADDR)) - ice->capture_con_virt_addr; | ||
2559 | + ptr = bytes_to_frames(substream->runtime, ptr); | ||
2560 | if (ptr == substream->runtime->buffer_size) | ||
2561 | ptr = 0; | ||
2562 | - return bytes_to_frames(substream->runtime, ptr); | ||
2563 | + return ptr; | ||
2564 | } | ||
2565 | |||
2566 | static const struct snd_pcm_hardware snd_ice1712_playback = { | ||
2567 | @@ -1113,9 +1116,10 @@ static snd_pcm_uframes_t snd_ice1712_playback_pro_pointer(struct snd_pcm_substre | ||
2568 | if (!(inl(ICEMT(ice, PLAYBACK_CONTROL)) & ICE1712_PLAYBACK_START)) | ||
2569 | return 0; | ||
2570 | ptr = ice->playback_pro_size - (inw(ICEMT(ice, PLAYBACK_SIZE)) << 2); | ||
2571 | + ptr = bytes_to_frames(substream->runtime, ptr); | ||
2572 | if (ptr == substream->runtime->buffer_size) | ||
2573 | ptr = 0; | ||
2574 | - return bytes_to_frames(substream->runtime, ptr); | ||
2575 | + return ptr; | ||
2576 | } | ||
2577 | |||
2578 | static snd_pcm_uframes_t snd_ice1712_capture_pro_pointer(struct snd_pcm_substream *substream) | ||
2579 | @@ -1126,9 +1130,10 @@ static snd_pcm_uframes_t snd_ice1712_capture_pro_pointer(struct snd_pcm_substrea | ||
2580 | if (!(inl(ICEMT(ice, PLAYBACK_CONTROL)) & ICE1712_CAPTURE_START_SHADOW)) | ||
2581 | return 0; | ||
2582 | ptr = ice->capture_pro_size - (inw(ICEMT(ice, CAPTURE_SIZE)) << 2); | ||
2583 | + ptr = bytes_to_frames(substream->runtime, ptr); | ||
2584 | if (ptr == substream->runtime->buffer_size) | ||
2585 | ptr = 0; | ||
2586 | - return bytes_to_frames(substream->runtime, ptr); | ||
2587 | + return ptr; | ||
2588 | } | ||
2589 | |||
2590 | static const struct snd_pcm_hardware snd_ice1712_playback_pro = { | ||
2591 | diff --git a/sound/soc/codecs/cs42l51.c b/sound/soc/codecs/cs42l51.c | ||
2592 | index 1e0fa3b5f79a..e1dfebbea650 100644 | ||
2593 | --- a/sound/soc/codecs/cs42l51.c | ||
2594 | +++ b/sound/soc/codecs/cs42l51.c | ||
2595 | @@ -124,9 +124,8 @@ static int cs42l51_set_chan_mix(struct snd_kcontrol *kcontrol, | ||
2596 | |||
2597 | static const DECLARE_TLV_DB_SCALE(adc_pcm_tlv, -5150, 50, 0); | ||
2598 | static const DECLARE_TLV_DB_SCALE(tone_tlv, -1050, 150, 0); | ||
2599 | -/* This is a lie. after -102 db, it stays at -102 */ | ||
2600 | -/* maybe a range would be better */ | ||
2601 | -static const DECLARE_TLV_DB_SCALE(aout_tlv, -11550, 50, 0); | ||
2602 | + | ||
2603 | +static const DECLARE_TLV_DB_SCALE(aout_tlv, -10200, 50, 0); | ||
2604 | |||
2605 | static const DECLARE_TLV_DB_SCALE(boost_tlv, 1600, 1600, 0); | ||
2606 | static const char *chan_mix[] = { | ||
2607 | @@ -141,7 +140,7 @@ static const struct soc_enum cs42l51_chan_mix = | ||
2608 | static const struct snd_kcontrol_new cs42l51_snd_controls[] = { | ||
2609 | SOC_DOUBLE_R_SX_TLV("PCM Playback Volume", | ||
2610 | CS42L51_PCMA_VOL, CS42L51_PCMB_VOL, | ||
2611 | - 6, 0x19, 0x7F, adc_pcm_tlv), | ||
2612 | + 0, 0x19, 0x7F, adc_pcm_tlv), | ||
2613 | SOC_DOUBLE_R("PCM Playback Switch", | ||
2614 | CS42L51_PCMA_VOL, CS42L51_PCMB_VOL, 7, 1, 1), | ||
2615 | SOC_DOUBLE_R_SX_TLV("Analog Playback Volume", | ||
2616 | @@ -149,7 +148,7 @@ static const struct snd_kcontrol_new cs42l51_snd_controls[] = { | ||
2617 | 0, 0x34, 0xE4, aout_tlv), | ||
2618 | SOC_DOUBLE_R_SX_TLV("ADC Mixer Volume", | ||
2619 | CS42L51_ADCA_VOL, CS42L51_ADCB_VOL, | ||
2620 | - 6, 0x19, 0x7F, adc_pcm_tlv), | ||
2621 | + 0, 0x19, 0x7F, adc_pcm_tlv), | ||
2622 | SOC_DOUBLE_R("ADC Mixer Switch", | ||
2623 | CS42L51_ADCA_VOL, CS42L51_ADCB_VOL, 7, 1, 1), | ||
2624 | SOC_SINGLE("Playback Deemphasis Switch", CS42L51_DAC_CTL, 3, 1, 0), | ||
2625 | diff --git a/sound/soc/codecs/cs42l52.c b/sound/soc/codecs/cs42l52.c | ||
2626 | index ee25f325d65c..b99af6362de6 100644 | ||
2627 | --- a/sound/soc/codecs/cs42l52.c | ||
2628 | +++ b/sound/soc/codecs/cs42l52.c | ||
2629 | @@ -350,7 +350,7 @@ static const char * const right_swap_text[] = { | ||
2630 | static const unsigned int swap_values[] = { 0, 1, 3 }; | ||
2631 | |||
2632 | static const struct soc_enum adca_swap_enum = | ||
2633 | - SOC_VALUE_ENUM_SINGLE(CS42L52_ADC_PCM_MIXER, 2, 1, | ||
2634 | + SOC_VALUE_ENUM_SINGLE(CS42L52_ADC_PCM_MIXER, 2, 3, | ||
2635 | ARRAY_SIZE(left_swap_text), | ||
2636 | left_swap_text, | ||
2637 | swap_values); | ||
2638 | @@ -359,7 +359,7 @@ static const struct snd_kcontrol_new adca_mixer = | ||
2639 | SOC_DAPM_ENUM("Route", adca_swap_enum); | ||
2640 | |||
2641 | static const struct soc_enum pcma_swap_enum = | ||
2642 | - SOC_VALUE_ENUM_SINGLE(CS42L52_ADC_PCM_MIXER, 6, 1, | ||
2643 | + SOC_VALUE_ENUM_SINGLE(CS42L52_ADC_PCM_MIXER, 6, 3, | ||
2644 | ARRAY_SIZE(left_swap_text), | ||
2645 | left_swap_text, | ||
2646 | swap_values); | ||
2647 | @@ -368,7 +368,7 @@ static const struct snd_kcontrol_new pcma_mixer = | ||
2648 | SOC_DAPM_ENUM("Route", pcma_swap_enum); | ||
2649 | |||
2650 | static const struct soc_enum adcb_swap_enum = | ||
2651 | - SOC_VALUE_ENUM_SINGLE(CS42L52_ADC_PCM_MIXER, 0, 1, | ||
2652 | + SOC_VALUE_ENUM_SINGLE(CS42L52_ADC_PCM_MIXER, 0, 3, | ||
2653 | ARRAY_SIZE(right_swap_text), | ||
2654 | right_swap_text, | ||
2655 | swap_values); | ||
2656 | @@ -377,7 +377,7 @@ static const struct snd_kcontrol_new adcb_mixer = | ||
2657 | SOC_DAPM_ENUM("Route", adcb_swap_enum); | ||
2658 | |||
2659 | static const struct soc_enum pcmb_swap_enum = | ||
2660 | - SOC_VALUE_ENUM_SINGLE(CS42L52_ADC_PCM_MIXER, 4, 1, | ||
2661 | + SOC_VALUE_ENUM_SINGLE(CS42L52_ADC_PCM_MIXER, 4, 3, | ||
2662 | ARRAY_SIZE(right_swap_text), | ||
2663 | right_swap_text, | ||
2664 | swap_values); | ||
2665 | diff --git a/sound/soc/codecs/cs42l73.c b/sound/soc/codecs/cs42l73.c | ||
2666 | index 3b20c86cdb01..eade6e2d883d 100644 | ||
2667 | --- a/sound/soc/codecs/cs42l73.c | ||
2668 | +++ b/sound/soc/codecs/cs42l73.c | ||
2669 | @@ -325,7 +325,7 @@ static const char * const cs42l73_mono_mix_texts[] = { | ||
2670 | static const unsigned int cs42l73_mono_mix_values[] = { 0, 1, 2 }; | ||
2671 | |||
2672 | static const struct soc_enum spk_asp_enum = | ||
2673 | - SOC_VALUE_ENUM_SINGLE(CS42L73_MMIXCTL, 6, 1, | ||
2674 | + SOC_VALUE_ENUM_SINGLE(CS42L73_MMIXCTL, 6, 3, | ||
2675 | ARRAY_SIZE(cs42l73_mono_mix_texts), | ||
2676 | cs42l73_mono_mix_texts, | ||
2677 | cs42l73_mono_mix_values); | ||
2678 | @@ -343,7 +343,7 @@ static const struct snd_kcontrol_new spk_xsp_mixer = | ||
2679 | SOC_DAPM_ENUM("Route", spk_xsp_enum); | ||
2680 | |||
2681 | static const struct soc_enum esl_asp_enum = | ||
2682 | - SOC_VALUE_ENUM_SINGLE(CS42L73_MMIXCTL, 2, 5, | ||
2683 | + SOC_VALUE_ENUM_SINGLE(CS42L73_MMIXCTL, 2, 3, | ||
2684 | ARRAY_SIZE(cs42l73_mono_mix_texts), | ||
2685 | cs42l73_mono_mix_texts, | ||
2686 | cs42l73_mono_mix_values); | ||
2687 | @@ -352,7 +352,7 @@ static const struct snd_kcontrol_new esl_asp_mixer = | ||
2688 | SOC_DAPM_ENUM("Route", esl_asp_enum); | ||
2689 | |||
2690 | static const struct soc_enum esl_xsp_enum = | ||
2691 | - SOC_VALUE_ENUM_SINGLE(CS42L73_MMIXCTL, 0, 7, | ||
2692 | + SOC_VALUE_ENUM_SINGLE(CS42L73_MMIXCTL, 0, 3, | ||
2693 | ARRAY_SIZE(cs42l73_mono_mix_texts), | ||
2694 | cs42l73_mono_mix_texts, | ||
2695 | cs42l73_mono_mix_values); |