Contents of /trunk/kernel-alx/patches-3.10/0124-3.10.25-all-fixes.patch
Parent Directory | Revision Log
Revision 2360 -
(show annotations)
(download)
Fri Dec 27 12:14:31 2013 UTC (10 years, 8 months ago) by niro
File size: 88639 byte(s)
Fri Dec 27 12:14:31 2013 UTC (10 years, 8 months ago) by niro
File size: 88639 byte(s)
-linux-3.10.25
1 | diff --git a/Makefile b/Makefile |
2 | index ae6ccebf8af4..cd97e9a25410 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,6 +1,6 @@ |
6 | VERSION = 3 |
7 | PATCHLEVEL = 10 |
8 | -SUBLEVEL = 24 |
9 | +SUBLEVEL = 25 |
10 | EXTRAVERSION = |
11 | NAME = TOSSUG Baby Fish |
12 | |
13 | diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c |
14 | index ab1fe3bb31f0..ac4c2e5e17e4 100644 |
15 | --- a/arch/arm/kernel/process.c |
16 | +++ b/arch/arm/kernel/process.c |
17 | @@ -408,6 +408,7 @@ EXPORT_SYMBOL(dump_fpu); |
18 | unsigned long get_wchan(struct task_struct *p) |
19 | { |
20 | struct stackframe frame; |
21 | + unsigned long stack_page; |
22 | int count = 0; |
23 | if (!p || p == current || p->state == TASK_RUNNING) |
24 | return 0; |
25 | @@ -416,9 +417,11 @@ unsigned long get_wchan(struct task_struct *p) |
26 | frame.sp = thread_saved_sp(p); |
27 | frame.lr = 0; /* recovered from the stack */ |
28 | frame.pc = thread_saved_pc(p); |
29 | + stack_page = (unsigned long)task_stack_page(p); |
30 | do { |
31 | - int ret = unwind_frame(&frame); |
32 | - if (ret < 0) |
33 | + if (frame.sp < stack_page || |
34 | + frame.sp >= stack_page + THREAD_SIZE || |
35 | + unwind_frame(&frame) < 0) |
36 | return 0; |
37 | if (!in_sched_functions(frame.pc)) |
38 | return frame.pc; |
39 | diff --git a/arch/arm/kernel/stacktrace.c b/arch/arm/kernel/stacktrace.c |
40 | index 00f79e59985b..af4e8c8a5422 100644 |
41 | --- a/arch/arm/kernel/stacktrace.c |
42 | +++ b/arch/arm/kernel/stacktrace.c |
43 | @@ -31,7 +31,7 @@ int notrace unwind_frame(struct stackframe *frame) |
44 | high = ALIGN(low, THREAD_SIZE); |
45 | |
46 | /* check current frame pointer is within bounds */ |
47 | - if (fp < (low + 12) || fp + 4 >= high) |
48 | + if (fp < low + 12 || fp > high - 4) |
49 | return -EINVAL; |
50 | |
51 | /* restore the registers from the stack frame */ |
52 | diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c |
53 | index 7341eff63f56..44c609a1ec5d 100644 |
54 | --- a/arch/arm/mach-omap2/omap_hwmod.c |
55 | +++ b/arch/arm/mach-omap2/omap_hwmod.c |
56 | @@ -399,7 +399,7 @@ static int _set_clockactivity(struct omap_hwmod *oh, u8 clockact, u32 *v) |
57 | } |
58 | |
59 | /** |
60 | - * _set_softreset: set OCP_SYSCONFIG.CLOCKACTIVITY bits in @v |
61 | + * _set_softreset: set OCP_SYSCONFIG.SOFTRESET bit in @v |
62 | * @oh: struct omap_hwmod * |
63 | * @v: pointer to register contents to modify |
64 | * |
65 | @@ -427,6 +427,36 @@ static int _set_softreset(struct omap_hwmod *oh, u32 *v) |
66 | } |
67 | |
68 | /** |
69 | + * _clear_softreset: clear OCP_SYSCONFIG.SOFTRESET bit in @v |
70 | + * @oh: struct omap_hwmod * |
71 | + * @v: pointer to register contents to modify |
72 | + * |
73 | + * Clear the SOFTRESET bit in @v for hwmod @oh. Returns -EINVAL upon |
74 | + * error or 0 upon success. |
75 | + */ |
76 | +static int _clear_softreset(struct omap_hwmod *oh, u32 *v) |
77 | +{ |
78 | + u32 softrst_mask; |
79 | + |
80 | + if (!oh->class->sysc || |
81 | + !(oh->class->sysc->sysc_flags & SYSC_HAS_SOFTRESET)) |
82 | + return -EINVAL; |
83 | + |
84 | + if (!oh->class->sysc->sysc_fields) { |
85 | + WARN(1, |
86 | + "omap_hwmod: %s: sysc_fields absent for sysconfig class\n", |
87 | + oh->name); |
88 | + return -EINVAL; |
89 | + } |
90 | + |
91 | + softrst_mask = (0x1 << oh->class->sysc->sysc_fields->srst_shift); |
92 | + |
93 | + *v &= ~softrst_mask; |
94 | + |
95 | + return 0; |
96 | +} |
97 | + |
98 | +/** |
99 | * _wait_softreset_complete - wait for an OCP softreset to complete |
100 | * @oh: struct omap_hwmod * to wait on |
101 | * |
102 | @@ -1909,6 +1939,12 @@ static int _ocp_softreset(struct omap_hwmod *oh) |
103 | ret = _set_softreset(oh, &v); |
104 | if (ret) |
105 | goto dis_opt_clks; |
106 | + |
107 | + _write_sysconfig(v, oh); |
108 | + ret = _clear_softreset(oh, &v); |
109 | + if (ret) |
110 | + goto dis_opt_clks; |
111 | + |
112 | _write_sysconfig(v, oh); |
113 | |
114 | if (oh->class->sysc->srst_udelay) |
115 | @@ -3148,6 +3184,11 @@ int omap_hwmod_softreset(struct omap_hwmod *oh) |
116 | goto error; |
117 | _write_sysconfig(v, oh); |
118 | |
119 | + ret = _clear_softreset(oh, &v); |
120 | + if (ret) |
121 | + goto error; |
122 | + _write_sysconfig(v, oh); |
123 | + |
124 | error: |
125 | return ret; |
126 | } |
127 | diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c |
128 | index 31c7126eb3bb..02b1b10537bc 100644 |
129 | --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c |
130 | +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c |
131 | @@ -1930,7 +1930,8 @@ static struct omap_hwmod_class_sysconfig omap3xxx_usb_host_hs_sysc = { |
132 | .syss_offs = 0x0014, |
133 | .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY | |
134 | SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP | |
135 | - SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE), |
136 | + SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE | |
137 | + SYSS_HAS_RESET_STATUS), |
138 | .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | |
139 | MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART), |
140 | .sysc_fields = &omap_hwmod_sysc_type1, |
141 | @@ -2008,15 +2009,7 @@ static struct omap_hwmod omap3xxx_usb_host_hs_hwmod = { |
142 | * hence HWMOD_SWSUP_MSTANDBY |
143 | */ |
144 | |
145 | - /* |
146 | - * During system boot; If the hwmod framework resets the module |
147 | - * the module will have smart idle settings; which can lead to deadlock |
148 | - * (above Errata Id:i660); so, dont reset the module during boot; |
149 | - * Use HWMOD_INIT_NO_RESET. |
150 | - */ |
151 | - |
152 | - .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY | |
153 | - HWMOD_INIT_NO_RESET, |
154 | + .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY, |
155 | }; |
156 | |
157 | /* |
158 | diff --git a/arch/arm/mach-pxa/reset.c b/arch/arm/mach-pxa/reset.c |
159 | index 3fab583755d4..0616390b857f 100644 |
160 | --- a/arch/arm/mach-pxa/reset.c |
161 | +++ b/arch/arm/mach-pxa/reset.c |
162 | @@ -13,6 +13,7 @@ |
163 | |
164 | #include <mach/regs-ost.h> |
165 | #include <mach/reset.h> |
166 | +#include <mach/smemc.h> |
167 | |
168 | unsigned int reset_status; |
169 | EXPORT_SYMBOL(reset_status); |
170 | @@ -81,6 +82,12 @@ static void do_hw_reset(void) |
171 | writel_relaxed(OSSR_M3, OSSR); |
172 | /* ... in 100 ms */ |
173 | writel_relaxed(readl_relaxed(OSCR) + 368640, OSMR3); |
174 | + /* |
175 | + * SDRAM hangs on watchdog reset on Marvell PXA270 (erratum 71) |
176 | + * we put SDRAM into self-refresh to prevent that |
177 | + */ |
178 | + while (1) |
179 | + writel_relaxed(MDREFR_SLFRSH, MDREFR); |
180 | } |
181 | |
182 | void pxa_restart(char mode, const char *cmd) |
183 | @@ -104,4 +111,3 @@ void pxa_restart(char mode, const char *cmd) |
184 | break; |
185 | } |
186 | } |
187 | - |
188 | diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c |
189 | index 3d91d2e5bf3a..d91fcf403cee 100644 |
190 | --- a/arch/arm/mach-pxa/tosa.c |
191 | +++ b/arch/arm/mach-pxa/tosa.c |
192 | @@ -424,57 +424,57 @@ static struct platform_device tosa_power_device = { |
193 | * Tosa Keyboard |
194 | */ |
195 | static const uint32_t tosakbd_keymap[] = { |
196 | - KEY(0, 2, KEY_W), |
197 | - KEY(0, 6, KEY_K), |
198 | - KEY(0, 7, KEY_BACKSPACE), |
199 | - KEY(0, 8, KEY_P), |
200 | - KEY(1, 1, KEY_Q), |
201 | - KEY(1, 2, KEY_E), |
202 | - KEY(1, 3, KEY_T), |
203 | - KEY(1, 4, KEY_Y), |
204 | - KEY(1, 6, KEY_O), |
205 | - KEY(1, 7, KEY_I), |
206 | - KEY(1, 8, KEY_COMMA), |
207 | - KEY(2, 1, KEY_A), |
208 | - KEY(2, 2, KEY_D), |
209 | - KEY(2, 3, KEY_G), |
210 | - KEY(2, 4, KEY_U), |
211 | - KEY(2, 6, KEY_L), |
212 | - KEY(2, 7, KEY_ENTER), |
213 | - KEY(2, 8, KEY_DOT), |
214 | - KEY(3, 1, KEY_Z), |
215 | - KEY(3, 2, KEY_C), |
216 | - KEY(3, 3, KEY_V), |
217 | - KEY(3, 4, KEY_J), |
218 | - KEY(3, 5, TOSA_KEY_ADDRESSBOOK), |
219 | - KEY(3, 6, TOSA_KEY_CANCEL), |
220 | - KEY(3, 7, TOSA_KEY_CENTER), |
221 | - KEY(3, 8, TOSA_KEY_OK), |
222 | - KEY(3, 9, KEY_LEFTSHIFT), |
223 | - KEY(4, 1, KEY_S), |
224 | - KEY(4, 2, KEY_R), |
225 | - KEY(4, 3, KEY_B), |
226 | - KEY(4, 4, KEY_N), |
227 | - KEY(4, 5, TOSA_KEY_CALENDAR), |
228 | - KEY(4, 6, TOSA_KEY_HOMEPAGE), |
229 | - KEY(4, 7, KEY_LEFTCTRL), |
230 | - KEY(4, 8, TOSA_KEY_LIGHT), |
231 | - KEY(4, 10, KEY_RIGHTSHIFT), |
232 | - KEY(5, 1, KEY_TAB), |
233 | - KEY(5, 2, KEY_SLASH), |
234 | - KEY(5, 3, KEY_H), |
235 | - KEY(5, 4, KEY_M), |
236 | - KEY(5, 5, TOSA_KEY_MENU), |
237 | - KEY(5, 7, KEY_UP), |
238 | - KEY(5, 11, TOSA_KEY_FN), |
239 | - KEY(6, 1, KEY_X), |
240 | - KEY(6, 2, KEY_F), |
241 | - KEY(6, 3, KEY_SPACE), |
242 | - KEY(6, 4, KEY_APOSTROPHE), |
243 | - KEY(6, 5, TOSA_KEY_MAIL), |
244 | - KEY(6, 6, KEY_LEFT), |
245 | - KEY(6, 7, KEY_DOWN), |
246 | - KEY(6, 8, KEY_RIGHT), |
247 | + KEY(0, 1, KEY_W), |
248 | + KEY(0, 5, KEY_K), |
249 | + KEY(0, 6, KEY_BACKSPACE), |
250 | + KEY(0, 7, KEY_P), |
251 | + KEY(1, 0, KEY_Q), |
252 | + KEY(1, 1, KEY_E), |
253 | + KEY(1, 2, KEY_T), |
254 | + KEY(1, 3, KEY_Y), |
255 | + KEY(1, 5, KEY_O), |
256 | + KEY(1, 6, KEY_I), |
257 | + KEY(1, 7, KEY_COMMA), |
258 | + KEY(2, 0, KEY_A), |
259 | + KEY(2, 1, KEY_D), |
260 | + KEY(2, 2, KEY_G), |
261 | + KEY(2, 3, KEY_U), |
262 | + KEY(2, 5, KEY_L), |
263 | + KEY(2, 6, KEY_ENTER), |
264 | + KEY(2, 7, KEY_DOT), |
265 | + KEY(3, 0, KEY_Z), |
266 | + KEY(3, 1, KEY_C), |
267 | + KEY(3, 2, KEY_V), |
268 | + KEY(3, 3, KEY_J), |
269 | + KEY(3, 4, TOSA_KEY_ADDRESSBOOK), |
270 | + KEY(3, 5, TOSA_KEY_CANCEL), |
271 | + KEY(3, 6, TOSA_KEY_CENTER), |
272 | + KEY(3, 7, TOSA_KEY_OK), |
273 | + KEY(3, 8, KEY_LEFTSHIFT), |
274 | + KEY(4, 0, KEY_S), |
275 | + KEY(4, 1, KEY_R), |
276 | + KEY(4, 2, KEY_B), |
277 | + KEY(4, 3, KEY_N), |
278 | + KEY(4, 4, TOSA_KEY_CALENDAR), |
279 | + KEY(4, 5, TOSA_KEY_HOMEPAGE), |
280 | + KEY(4, 6, KEY_LEFTCTRL), |
281 | + KEY(4, 7, TOSA_KEY_LIGHT), |
282 | + KEY(4, 9, KEY_RIGHTSHIFT), |
283 | + KEY(5, 0, KEY_TAB), |
284 | + KEY(5, 1, KEY_SLASH), |
285 | + KEY(5, 2, KEY_H), |
286 | + KEY(5, 3, KEY_M), |
287 | + KEY(5, 4, TOSA_KEY_MENU), |
288 | + KEY(5, 6, KEY_UP), |
289 | + KEY(5, 10, TOSA_KEY_FN), |
290 | + KEY(6, 0, KEY_X), |
291 | + KEY(6, 1, KEY_F), |
292 | + KEY(6, 2, KEY_SPACE), |
293 | + KEY(6, 3, KEY_APOSTROPHE), |
294 | + KEY(6, 4, TOSA_KEY_MAIL), |
295 | + KEY(6, 5, KEY_LEFT), |
296 | + KEY(6, 6, KEY_DOWN), |
297 | + KEY(6, 7, KEY_RIGHT), |
298 | }; |
299 | |
300 | static struct matrix_keymap_data tosakbd_keymap_data = { |
301 | diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c |
302 | index caf92ecb37d6..23129d1005db 100644 |
303 | --- a/arch/mips/mm/dma-default.c |
304 | +++ b/arch/mips/mm/dma-default.c |
305 | @@ -50,16 +50,20 @@ static inline struct page *dma_addr_to_page(struct device *dev, |
306 | } |
307 | |
308 | /* |
309 | + * The affected CPUs below in 'cpu_needs_post_dma_flush()' can |
310 | + * speculatively fill random cachelines with stale data at any time, |
311 | + * requiring an extra flush post-DMA. |
312 | + * |
313 | * Warning on the terminology - Linux calls an uncached area coherent; |
314 | * MIPS terminology calls memory areas with hardware maintained coherency |
315 | * coherent. |
316 | */ |
317 | - |
318 | -static inline int cpu_is_noncoherent_r10000(struct device *dev) |
319 | +static inline int cpu_needs_post_dma_flush(struct device *dev) |
320 | { |
321 | return !plat_device_is_coherent(dev) && |
322 | (current_cpu_type() == CPU_R10000 || |
323 | - current_cpu_type() == CPU_R12000); |
324 | + current_cpu_type() == CPU_R12000 || |
325 | + current_cpu_type() == CPU_BMIPS5000); |
326 | } |
327 | |
328 | static gfp_t massage_gfp_flags(const struct device *dev, gfp_t gfp) |
329 | @@ -230,7 +234,7 @@ static inline void __dma_sync(struct page *page, |
330 | static void mips_dma_unmap_page(struct device *dev, dma_addr_t dma_addr, |
331 | size_t size, enum dma_data_direction direction, struct dma_attrs *attrs) |
332 | { |
333 | - if (cpu_is_noncoherent_r10000(dev)) |
334 | + if (cpu_needs_post_dma_flush(dev)) |
335 | __dma_sync(dma_addr_to_page(dev, dma_addr), |
336 | dma_addr & ~PAGE_MASK, size, direction); |
337 | |
338 | @@ -281,7 +285,7 @@ static void mips_dma_unmap_sg(struct device *dev, struct scatterlist *sg, |
339 | static void mips_dma_sync_single_for_cpu(struct device *dev, |
340 | dma_addr_t dma_handle, size_t size, enum dma_data_direction direction) |
341 | { |
342 | - if (cpu_is_noncoherent_r10000(dev)) |
343 | + if (cpu_needs_post_dma_flush(dev)) |
344 | __dma_sync(dma_addr_to_page(dev, dma_handle), |
345 | dma_handle & ~PAGE_MASK, size, direction); |
346 | } |
347 | @@ -302,7 +306,7 @@ static void mips_dma_sync_sg_for_cpu(struct device *dev, |
348 | |
349 | /* Make sure that gcc doesn't leave the empty loop body. */ |
350 | for (i = 0; i < nelems; i++, sg++) { |
351 | - if (cpu_is_noncoherent_r10000(dev)) |
352 | + if (cpu_needs_post_dma_flush(dev)) |
353 | __dma_sync(sg_page(sg), sg->offset, sg->length, |
354 | direction); |
355 | } |
356 | diff --git a/arch/powerpc/include/asm/pgalloc-32.h b/arch/powerpc/include/asm/pgalloc-32.h |
357 | index 27b2386f738a..842846c1b711 100644 |
358 | --- a/arch/powerpc/include/asm/pgalloc-32.h |
359 | +++ b/arch/powerpc/include/asm/pgalloc-32.h |
360 | @@ -84,10 +84,8 @@ static inline void pgtable_free_tlb(struct mmu_gather *tlb, |
361 | static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table, |
362 | unsigned long address) |
363 | { |
364 | - struct page *page = page_address(table); |
365 | - |
366 | tlb_flush_pgtable(tlb, address); |
367 | - pgtable_page_dtor(page); |
368 | - pgtable_free_tlb(tlb, page, 0); |
369 | + pgtable_page_dtor(table); |
370 | + pgtable_free_tlb(tlb, page_address(table), 0); |
371 | } |
372 | #endif /* _ASM_POWERPC_PGALLOC_32_H */ |
373 | diff --git a/arch/powerpc/include/asm/pgalloc-64.h b/arch/powerpc/include/asm/pgalloc-64.h |
374 | index b66ae722a8e9..64aaf016b478 100644 |
375 | --- a/arch/powerpc/include/asm/pgalloc-64.h |
376 | +++ b/arch/powerpc/include/asm/pgalloc-64.h |
377 | @@ -144,11 +144,9 @@ static inline void pgtable_free_tlb(struct mmu_gather *tlb, |
378 | static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table, |
379 | unsigned long address) |
380 | { |
381 | - struct page *page = page_address(table); |
382 | - |
383 | tlb_flush_pgtable(tlb, address); |
384 | - pgtable_page_dtor(page); |
385 | - pgtable_free_tlb(tlb, page, 0); |
386 | + pgtable_page_dtor(table); |
387 | + pgtable_free_tlb(tlb, page_address(table), 0); |
388 | } |
389 | |
390 | #else /* if CONFIG_PPC_64K_PAGES */ |
391 | diff --git a/arch/x86/Makefile b/arch/x86/Makefile |
392 | index d5cf85057d63..412189d2bff9 100644 |
393 | --- a/arch/x86/Makefile |
394 | +++ b/arch/x86/Makefile |
395 | @@ -31,8 +31,8 @@ ifeq ($(CONFIG_X86_32),y) |
396 | |
397 | KBUILD_CFLAGS += -msoft-float -mregparm=3 -freg-struct-return |
398 | |
399 | - # Don't autogenerate SSE instructions |
400 | - KBUILD_CFLAGS += -mno-sse |
401 | + # Don't autogenerate MMX or SSE instructions |
402 | + KBUILD_CFLAGS += -mno-mmx -mno-sse |
403 | |
404 | # Never want PIC in a 32-bit kernel, prevent breakage with GCC built |
405 | # with nonstandard options |
406 | @@ -60,8 +60,8 @@ else |
407 | KBUILD_AFLAGS += -m64 |
408 | KBUILD_CFLAGS += -m64 |
409 | |
410 | - # Don't autogenerate SSE instructions |
411 | - KBUILD_CFLAGS += -mno-sse |
412 | + # Don't autogenerate MMX or SSE instructions |
413 | + KBUILD_CFLAGS += -mno-mmx -mno-sse |
414 | |
415 | # Use -mpreferred-stack-boundary=3 if supported. |
416 | KBUILD_CFLAGS += $(call cc-option,-mpreferred-stack-boundary=3) |
417 | diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile |
418 | index 379814bc41e3..6cf0111783d3 100644 |
419 | --- a/arch/x86/boot/Makefile |
420 | +++ b/arch/x86/boot/Makefile |
421 | @@ -53,18 +53,18 @@ $(obj)/cpustr.h: $(obj)/mkcpustr FORCE |
422 | |
423 | # How to compile the 16-bit code. Note we always compile for -march=i386, |
424 | # that way we can complain to the user if the CPU is insufficient. |
425 | -KBUILD_CFLAGS := $(USERINCLUDE) -g -Os -D_SETUP -D__KERNEL__ \ |
426 | +KBUILD_CFLAGS := $(USERINCLUDE) -m32 -g -Os -D_SETUP -D__KERNEL__ \ |
427 | -DDISABLE_BRANCH_PROFILING \ |
428 | -Wall -Wstrict-prototypes \ |
429 | -march=i386 -mregparm=3 \ |
430 | -include $(srctree)/$(src)/code16gcc.h \ |
431 | -fno-strict-aliasing -fomit-frame-pointer -fno-pic \ |
432 | + -mno-mmx -mno-sse \ |
433 | $(call cc-option, -ffreestanding) \ |
434 | $(call cc-option, -fno-toplevel-reorder,\ |
435 | - $(call cc-option, -fno-unit-at-a-time)) \ |
436 | + $(call cc-option, -fno-unit-at-a-time)) \ |
437 | $(call cc-option, -fno-stack-protector) \ |
438 | $(call cc-option, -mpreferred-stack-boundary=2) |
439 | -KBUILD_CFLAGS += $(call cc-option, -m32) |
440 | KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__ |
441 | GCOV_PROFILE := n |
442 | |
443 | diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile |
444 | index 5ef205c5f37b..7194d9f094bc 100644 |
445 | --- a/arch/x86/boot/compressed/Makefile |
446 | +++ b/arch/x86/boot/compressed/Makefile |
447 | @@ -12,6 +12,7 @@ KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING |
448 | cflags-$(CONFIG_X86_32) := -march=i386 |
449 | cflags-$(CONFIG_X86_64) := -mcmodel=small |
450 | KBUILD_CFLAGS += $(cflags-y) |
451 | +KBUILD_CFLAGS += -mno-mmx -mno-sse |
452 | KBUILD_CFLAGS += $(call cc-option,-ffreestanding) |
453 | KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector) |
454 | |
455 | diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c |
456 | index 0eee2c8b64d1..0987c638db11 100644 |
457 | --- a/arch/x86/kvm/lapic.c |
458 | +++ b/arch/x86/kvm/lapic.c |
459 | @@ -153,6 +153,8 @@ static inline int kvm_apic_id(struct kvm_lapic *apic) |
460 | return (kvm_apic_get_reg(apic, APIC_ID) >> 24) & 0xff; |
461 | } |
462 | |
463 | +#define KVM_X2APIC_CID_BITS 0 |
464 | + |
465 | static void recalculate_apic_map(struct kvm *kvm) |
466 | { |
467 | struct kvm_apic_map *new, *old = NULL; |
468 | @@ -190,7 +192,8 @@ static void recalculate_apic_map(struct kvm *kvm) |
469 | if (apic_x2apic_mode(apic)) { |
470 | new->ldr_bits = 32; |
471 | new->cid_shift = 16; |
472 | - new->cid_mask = new->lid_mask = 0xffff; |
473 | + new->cid_mask = (1 << KVM_X2APIC_CID_BITS) - 1; |
474 | + new->lid_mask = 0xffff; |
475 | } else if (kvm_apic_sw_enabled(apic) && |
476 | !new->cid_mask /* flat mode */ && |
477 | kvm_apic_get_reg(apic, APIC_DFR) == APIC_DFR_CLUSTER) { |
478 | @@ -855,7 +858,8 @@ static u32 apic_get_tmcct(struct kvm_lapic *apic) |
479 | ASSERT(apic != NULL); |
480 | |
481 | /* if initial count is 0, current count should also be 0 */ |
482 | - if (kvm_apic_get_reg(apic, APIC_TMICT) == 0) |
483 | + if (kvm_apic_get_reg(apic, APIC_TMICT) == 0 || |
484 | + apic->lapic_timer.period == 0) |
485 | return 0; |
486 | |
487 | remaining = hrtimer_get_remaining(&apic->lapic_timer.timer); |
488 | @@ -1705,7 +1709,6 @@ static void apic_sync_pv_eoi_from_guest(struct kvm_vcpu *vcpu, |
489 | void kvm_lapic_sync_from_vapic(struct kvm_vcpu *vcpu) |
490 | { |
491 | u32 data; |
492 | - void *vapic; |
493 | |
494 | if (test_bit(KVM_APIC_PV_EOI_PENDING, &vcpu->arch.apic_attention)) |
495 | apic_sync_pv_eoi_from_guest(vcpu, vcpu->arch.apic); |
496 | @@ -1713,9 +1716,8 @@ void kvm_lapic_sync_from_vapic(struct kvm_vcpu *vcpu) |
497 | if (!test_bit(KVM_APIC_CHECK_VAPIC, &vcpu->arch.apic_attention)) |
498 | return; |
499 | |
500 | - vapic = kmap_atomic(vcpu->arch.apic->vapic_page); |
501 | - data = *(u32 *)(vapic + offset_in_page(vcpu->arch.apic->vapic_addr)); |
502 | - kunmap_atomic(vapic); |
503 | + kvm_read_guest_cached(vcpu->kvm, &vcpu->arch.apic->vapic_cache, &data, |
504 | + sizeof(u32)); |
505 | |
506 | apic_set_tpr(vcpu->arch.apic, data & 0xff); |
507 | } |
508 | @@ -1751,7 +1753,6 @@ void kvm_lapic_sync_to_vapic(struct kvm_vcpu *vcpu) |
509 | u32 data, tpr; |
510 | int max_irr, max_isr; |
511 | struct kvm_lapic *apic = vcpu->arch.apic; |
512 | - void *vapic; |
513 | |
514 | apic_sync_pv_eoi_to_guest(vcpu, apic); |
515 | |
516 | @@ -1767,18 +1768,24 @@ void kvm_lapic_sync_to_vapic(struct kvm_vcpu *vcpu) |
517 | max_isr = 0; |
518 | data = (tpr & 0xff) | ((max_isr & 0xf0) << 8) | (max_irr << 24); |
519 | |
520 | - vapic = kmap_atomic(vcpu->arch.apic->vapic_page); |
521 | - *(u32 *)(vapic + offset_in_page(vcpu->arch.apic->vapic_addr)) = data; |
522 | - kunmap_atomic(vapic); |
523 | + kvm_write_guest_cached(vcpu->kvm, &vcpu->arch.apic->vapic_cache, &data, |
524 | + sizeof(u32)); |
525 | } |
526 | |
527 | -void kvm_lapic_set_vapic_addr(struct kvm_vcpu *vcpu, gpa_t vapic_addr) |
528 | +int kvm_lapic_set_vapic_addr(struct kvm_vcpu *vcpu, gpa_t vapic_addr) |
529 | { |
530 | - vcpu->arch.apic->vapic_addr = vapic_addr; |
531 | - if (vapic_addr) |
532 | + if (vapic_addr) { |
533 | + if (kvm_gfn_to_hva_cache_init(vcpu->kvm, |
534 | + &vcpu->arch.apic->vapic_cache, |
535 | + vapic_addr, sizeof(u32))) |
536 | + return -EINVAL; |
537 | __set_bit(KVM_APIC_CHECK_VAPIC, &vcpu->arch.apic_attention); |
538 | - else |
539 | + } else { |
540 | __clear_bit(KVM_APIC_CHECK_VAPIC, &vcpu->arch.apic_attention); |
541 | + } |
542 | + |
543 | + vcpu->arch.apic->vapic_addr = vapic_addr; |
544 | + return 0; |
545 | } |
546 | |
547 | int kvm_x2apic_msr_write(struct kvm_vcpu *vcpu, u32 msr, u64 data) |
548 | diff --git a/arch/x86/kvm/lapic.h b/arch/x86/kvm/lapic.h |
549 | index c730ac9fe801..c8b0d0d2da5c 100644 |
550 | --- a/arch/x86/kvm/lapic.h |
551 | +++ b/arch/x86/kvm/lapic.h |
552 | @@ -34,7 +34,7 @@ struct kvm_lapic { |
553 | */ |
554 | void *regs; |
555 | gpa_t vapic_addr; |
556 | - struct page *vapic_page; |
557 | + struct gfn_to_hva_cache vapic_cache; |
558 | unsigned long pending_events; |
559 | unsigned int sipi_vector; |
560 | }; |
561 | @@ -76,7 +76,7 @@ void kvm_set_lapic_tscdeadline_msr(struct kvm_vcpu *vcpu, u64 data); |
562 | void kvm_apic_write_nodecode(struct kvm_vcpu *vcpu, u32 offset); |
563 | void kvm_apic_set_eoi_accelerated(struct kvm_vcpu *vcpu, int vector); |
564 | |
565 | -void kvm_lapic_set_vapic_addr(struct kvm_vcpu *vcpu, gpa_t vapic_addr); |
566 | +int kvm_lapic_set_vapic_addr(struct kvm_vcpu *vcpu, gpa_t vapic_addr); |
567 | void kvm_lapic_sync_from_vapic(struct kvm_vcpu *vcpu); |
568 | void kvm_lapic_sync_to_vapic(struct kvm_vcpu *vcpu); |
569 | |
570 | diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c |
571 | index e8ba99c34180..ad6a01605aaa 100644 |
572 | --- a/arch/x86/kvm/x86.c |
573 | +++ b/arch/x86/kvm/x86.c |
574 | @@ -3138,8 +3138,7 @@ long kvm_arch_vcpu_ioctl(struct file *filp, |
575 | r = -EFAULT; |
576 | if (copy_from_user(&va, argp, sizeof va)) |
577 | goto out; |
578 | - r = 0; |
579 | - kvm_lapic_set_vapic_addr(vcpu, va.vapic_addr); |
580 | + r = kvm_lapic_set_vapic_addr(vcpu, va.vapic_addr); |
581 | break; |
582 | } |
583 | case KVM_X86_SETUP_MCE: { |
584 | @@ -5539,36 +5538,6 @@ static void post_kvm_run_save(struct kvm_vcpu *vcpu) |
585 | !kvm_event_needs_reinjection(vcpu); |
586 | } |
587 | |
588 | -static int vapic_enter(struct kvm_vcpu *vcpu) |
589 | -{ |
590 | - struct kvm_lapic *apic = vcpu->arch.apic; |
591 | - struct page *page; |
592 | - |
593 | - if (!apic || !apic->vapic_addr) |
594 | - return 0; |
595 | - |
596 | - page = gfn_to_page(vcpu->kvm, apic->vapic_addr >> PAGE_SHIFT); |
597 | - if (is_error_page(page)) |
598 | - return -EFAULT; |
599 | - |
600 | - vcpu->arch.apic->vapic_page = page; |
601 | - return 0; |
602 | -} |
603 | - |
604 | -static void vapic_exit(struct kvm_vcpu *vcpu) |
605 | -{ |
606 | - struct kvm_lapic *apic = vcpu->arch.apic; |
607 | - int idx; |
608 | - |
609 | - if (!apic || !apic->vapic_addr) |
610 | - return; |
611 | - |
612 | - idx = srcu_read_lock(&vcpu->kvm->srcu); |
613 | - kvm_release_page_dirty(apic->vapic_page); |
614 | - mark_page_dirty(vcpu->kvm, apic->vapic_addr >> PAGE_SHIFT); |
615 | - srcu_read_unlock(&vcpu->kvm->srcu, idx); |
616 | -} |
617 | - |
618 | static void update_cr8_intercept(struct kvm_vcpu *vcpu) |
619 | { |
620 | int max_irr, tpr; |
621 | @@ -5889,11 +5858,6 @@ static int __vcpu_run(struct kvm_vcpu *vcpu) |
622 | struct kvm *kvm = vcpu->kvm; |
623 | |
624 | vcpu->srcu_idx = srcu_read_lock(&kvm->srcu); |
625 | - r = vapic_enter(vcpu); |
626 | - if (r) { |
627 | - srcu_read_unlock(&kvm->srcu, vcpu->srcu_idx); |
628 | - return r; |
629 | - } |
630 | |
631 | r = 1; |
632 | while (r > 0) { |
633 | @@ -5951,8 +5915,6 @@ static int __vcpu_run(struct kvm_vcpu *vcpu) |
634 | |
635 | srcu_read_unlock(&kvm->srcu, vcpu->srcu_idx); |
636 | |
637 | - vapic_exit(vcpu); |
638 | - |
639 | return r; |
640 | } |
641 | |
642 | diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c |
643 | index 91ac654ff4ea..3474a2ccd8b1 100644 |
644 | --- a/arch/x86/platform/efi/efi.c |
645 | +++ b/arch/x86/platform/efi/efi.c |
646 | @@ -766,13 +766,6 @@ void __init efi_init(void) |
647 | |
648 | set_bit(EFI_MEMMAP, &x86_efi_facility); |
649 | |
650 | -#ifdef CONFIG_X86_32 |
651 | - if (efi_is_native()) { |
652 | - x86_platform.get_wallclock = efi_get_time; |
653 | - x86_platform.set_wallclock = efi_set_rtc_mmss; |
654 | - } |
655 | -#endif |
656 | - |
657 | #if EFI_DEBUG |
658 | print_efi_memmap(); |
659 | #endif |
660 | diff --git a/arch/x86/realmode/rm/Makefile b/arch/x86/realmode/rm/Makefile |
661 | index 88692871823f..9cac82588cbc 100644 |
662 | --- a/arch/x86/realmode/rm/Makefile |
663 | +++ b/arch/x86/realmode/rm/Makefile |
664 | @@ -73,9 +73,10 @@ KBUILD_CFLAGS := $(LINUXINCLUDE) -m32 -g -Os -D_SETUP -D__KERNEL__ -D_WAKEUP \ |
665 | -march=i386 -mregparm=3 \ |
666 | -include $(srctree)/$(src)/../../boot/code16gcc.h \ |
667 | -fno-strict-aliasing -fomit-frame-pointer -fno-pic \ |
668 | + -mno-mmx -mno-sse \ |
669 | $(call cc-option, -ffreestanding) \ |
670 | $(call cc-option, -fno-toplevel-reorder,\ |
671 | - $(call cc-option, -fno-unit-at-a-time)) \ |
672 | + $(call cc-option, -fno-unit-at-a-time)) \ |
673 | $(call cc-option, -fno-stack-protector) \ |
674 | $(call cc-option, -mpreferred-stack-boundary=2) |
675 | KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__ |
676 | diff --git a/crypto/algif_hash.c b/crypto/algif_hash.c |
677 | index 585c3b279feb..850246206b12 100644 |
678 | --- a/crypto/algif_hash.c |
679 | +++ b/crypto/algif_hash.c |
680 | @@ -117,9 +117,6 @@ static ssize_t hash_sendpage(struct socket *sock, struct page *page, |
681 | if (flags & MSG_SENDPAGE_NOTLAST) |
682 | flags |= MSG_MORE; |
683 | |
684 | - if (flags & MSG_SENDPAGE_NOTLAST) |
685 | - flags |= MSG_MORE; |
686 | - |
687 | lock_sock(sk); |
688 | sg_init_table(ctx->sgl.sg, 1); |
689 | sg_set_page(ctx->sgl.sg, page, size, offset); |
690 | diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c |
691 | index 918a3b4148b8..a19c027b29bd 100644 |
692 | --- a/crypto/algif_skcipher.c |
693 | +++ b/crypto/algif_skcipher.c |
694 | @@ -381,9 +381,6 @@ static ssize_t skcipher_sendpage(struct socket *sock, struct page *page, |
695 | if (flags & MSG_SENDPAGE_NOTLAST) |
696 | flags |= MSG_MORE; |
697 | |
698 | - if (flags & MSG_SENDPAGE_NOTLAST) |
699 | - flags |= MSG_MORE; |
700 | - |
701 | lock_sock(sk); |
702 | if (!ctx->more && ctx->used) |
703 | goto unlock; |
704 | diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c |
705 | index c714d4d5bedb..f1e600490bb2 100644 |
706 | --- a/drivers/gpu/drm/i915/intel_display.c |
707 | +++ b/drivers/gpu/drm/i915/intel_display.c |
708 | @@ -5225,7 +5225,7 @@ static void intel_set_pipe_csc(struct drm_crtc *crtc) |
709 | uint16_t postoff = 0; |
710 | |
711 | if (intel_crtc->config.limited_color_range) |
712 | - postoff = (16 * (1 << 13) / 255) & 0x1fff; |
713 | + postoff = (16 * (1 << 12) / 255) & 0x1fff; |
714 | |
715 | I915_WRITE(PIPE_CSC_POSTOFF_HI(pipe), postoff); |
716 | I915_WRITE(PIPE_CSC_POSTOFF_ME(pipe), postoff); |
717 | diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c |
718 | index 01ed8ac4d156..5df711659049 100644 |
719 | --- a/drivers/gpu/drm/radeon/r600_hdmi.c |
720 | +++ b/drivers/gpu/drm/radeon/r600_hdmi.c |
721 | @@ -279,9 +279,9 @@ void r600_audio_set_dto(struct drm_encoder *encoder, u32 clock) |
722 | WREG32(DCCG_AUDIO_DTO1_MODULE, clock * 100); |
723 | WREG32(DCCG_AUDIO_DTO_SELECT, 1); /* select DTO1 */ |
724 | } |
725 | - } else if (ASIC_IS_DCE3(rdev)) { |
726 | + } else { |
727 | /* according to the reg specs, this should DCE3.2 only, but in |
728 | - * practice it seems to cover DCE3.0/3.1 as well. |
729 | + * practice it seems to cover DCE2.0/3.0/3.1 as well. |
730 | */ |
731 | if (dig->dig_encoder == 0) { |
732 | WREG32(DCCG_AUDIO_DTO0_PHASE, base_rate * 100); |
733 | @@ -292,10 +292,6 @@ void r600_audio_set_dto(struct drm_encoder *encoder, u32 clock) |
734 | WREG32(DCCG_AUDIO_DTO1_MODULE, clock * 100); |
735 | WREG32(DCCG_AUDIO_DTO_SELECT, 1); /* select DTO1 */ |
736 | } |
737 | - } else { |
738 | - /* according to the reg specs, this should be DCE2.0 and DCE3.0/3.1 */ |
739 | - WREG32(AUDIO_DTO, AUDIO_DTO_PHASE(base_rate / 10) | |
740 | - AUDIO_DTO_MODULE(clock / 10)); |
741 | } |
742 | } |
743 | |
744 | diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c |
745 | index f054a3b6c4b8..bf14a6b89b59 100644 |
746 | --- a/drivers/gpu/drm/radeon/si.c |
747 | +++ b/drivers/gpu/drm/radeon/si.c |
748 | @@ -3615,8 +3615,15 @@ static int si_mc_init(struct radeon_device *rdev) |
749 | rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0); |
750 | rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0); |
751 | /* size in MB on si */ |
752 | - rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL; |
753 | - rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL; |
754 | + tmp = RREG32(CONFIG_MEMSIZE); |
755 | + /* some boards may have garbage in the upper 16 bits */ |
756 | + if (tmp & 0xffff0000) { |
757 | + DRM_INFO("Probable bad vram size: 0x%08x\n", tmp); |
758 | + if (tmp & 0xffff) |
759 | + tmp &= 0xffff; |
760 | + } |
761 | + rdev->mc.mc_vram_size = tmp * 1024ULL * 1024ULL; |
762 | + rdev->mc.real_vram_size = rdev->mc.mc_vram_size; |
763 | rdev->mc.visible_vram_size = rdev->mc.aper_size; |
764 | si_vram_gtt_location(rdev, &rdev->mc); |
765 | radeon_update_bandwidth_info(rdev); |
766 | diff --git a/drivers/hwmon/hih6130.c b/drivers/hwmon/hih6130.c |
767 | index 2dc37c7c6947..7d68a08baaa8 100644 |
768 | --- a/drivers/hwmon/hih6130.c |
769 | +++ b/drivers/hwmon/hih6130.c |
770 | @@ -43,6 +43,7 @@ |
771 | * @last_update: time of last update (jiffies) |
772 | * @temperature: cached temperature measurement value |
773 | * @humidity: cached humidity measurement value |
774 | + * @write_length: length for I2C measurement request |
775 | */ |
776 | struct hih6130 { |
777 | struct device *hwmon_dev; |
778 | @@ -51,6 +52,7 @@ struct hih6130 { |
779 | unsigned long last_update; |
780 | int temperature; |
781 | int humidity; |
782 | + size_t write_length; |
783 | }; |
784 | |
785 | /** |
786 | @@ -121,8 +123,15 @@ static int hih6130_update_measurements(struct i2c_client *client) |
787 | */ |
788 | if (time_after(jiffies, hih6130->last_update + HZ) || !hih6130->valid) { |
789 | |
790 | - /* write to slave address, no data, to request a measurement */ |
791 | - ret = i2c_master_send(client, tmp, 0); |
792 | + /* |
793 | + * Write to slave address to request a measurement. |
794 | + * According with the datasheet it should be with no data, but |
795 | + * for systems with I2C bus drivers that do not allow zero |
796 | + * length packets we write one dummy byte to allow sensor |
797 | + * measurements on them. |
798 | + */ |
799 | + tmp[0] = 0; |
800 | + ret = i2c_master_send(client, tmp, hih6130->write_length); |
801 | if (ret < 0) |
802 | goto out; |
803 | |
804 | @@ -252,6 +261,9 @@ static int hih6130_probe(struct i2c_client *client, |
805 | goto fail_remove_sysfs; |
806 | } |
807 | |
808 | + if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_QUICK)) |
809 | + hih6130->write_length = 1; |
810 | + |
811 | return 0; |
812 | |
813 | fail_remove_sysfs: |
814 | diff --git a/drivers/hwmon/lm78.c b/drivers/hwmon/lm78.c |
815 | index 6cf6bff79003..a2f3b4a365e4 100644 |
816 | --- a/drivers/hwmon/lm78.c |
817 | +++ b/drivers/hwmon/lm78.c |
818 | @@ -94,6 +94,8 @@ static inline u8 FAN_TO_REG(long rpm, int div) |
819 | { |
820 | if (rpm <= 0) |
821 | return 255; |
822 | + if (rpm > 1350000) |
823 | + return 1; |
824 | return clamp_val((1350000 + rpm * div / 2) / (rpm * div), 1, 254); |
825 | } |
826 | |
827 | diff --git a/drivers/hwmon/sis5595.c b/drivers/hwmon/sis5595.c |
828 | index 1404e6319deb..72a889702f0d 100644 |
829 | --- a/drivers/hwmon/sis5595.c |
830 | +++ b/drivers/hwmon/sis5595.c |
831 | @@ -141,6 +141,8 @@ static inline u8 FAN_TO_REG(long rpm, int div) |
832 | { |
833 | if (rpm <= 0) |
834 | return 255; |
835 | + if (rpm > 1350000) |
836 | + return 1; |
837 | return clamp_val((1350000 + rpm * div / 2) / (rpm * div), 1, 254); |
838 | } |
839 | |
840 | diff --git a/drivers/hwmon/vt8231.c b/drivers/hwmon/vt8231.c |
841 | index 0e7017841f7d..aee14e2192f8 100644 |
842 | --- a/drivers/hwmon/vt8231.c |
843 | +++ b/drivers/hwmon/vt8231.c |
844 | @@ -145,7 +145,7 @@ static const u8 regtempmin[] = { 0x3a, 0x3e, 0x2c, 0x2e, 0x30, 0x32 }; |
845 | */ |
846 | static inline u8 FAN_TO_REG(long rpm, int div) |
847 | { |
848 | - if (rpm == 0) |
849 | + if (rpm <= 0 || rpm > 1310720) |
850 | return 0; |
851 | return clamp_val(1310720 / (rpm * div), 1, 255); |
852 | } |
853 | diff --git a/drivers/hwmon/w83l786ng.c b/drivers/hwmon/w83l786ng.c |
854 | index edb06cda5a68..6ed76ceb9270 100644 |
855 | --- a/drivers/hwmon/w83l786ng.c |
856 | +++ b/drivers/hwmon/w83l786ng.c |
857 | @@ -481,9 +481,11 @@ store_pwm(struct device *dev, struct device_attribute *attr, |
858 | if (err) |
859 | return err; |
860 | val = clamp_val(val, 0, 255); |
861 | + val = DIV_ROUND_CLOSEST(val, 0x11); |
862 | |
863 | mutex_lock(&data->update_lock); |
864 | - data->pwm[nr] = val; |
865 | + data->pwm[nr] = val * 0x11; |
866 | + val |= w83l786ng_read_value(client, W83L786NG_REG_PWM[nr]) & 0xf0; |
867 | w83l786ng_write_value(client, W83L786NG_REG_PWM[nr], val); |
868 | mutex_unlock(&data->update_lock); |
869 | return count; |
870 | @@ -510,7 +512,7 @@ store_pwm_enable(struct device *dev, struct device_attribute *attr, |
871 | mutex_lock(&data->update_lock); |
872 | reg = w83l786ng_read_value(client, W83L786NG_REG_FAN_CFG); |
873 | data->pwm_enable[nr] = val; |
874 | - reg &= ~(0x02 << W83L786NG_PWM_ENABLE_SHIFT[nr]); |
875 | + reg &= ~(0x03 << W83L786NG_PWM_ENABLE_SHIFT[nr]); |
876 | reg |= (val - 1) << W83L786NG_PWM_ENABLE_SHIFT[nr]; |
877 | w83l786ng_write_value(client, W83L786NG_REG_FAN_CFG, reg); |
878 | mutex_unlock(&data->update_lock); |
879 | @@ -776,9 +778,10 @@ static struct w83l786ng_data *w83l786ng_update_device(struct device *dev) |
880 | ((pwmcfg >> W83L786NG_PWM_MODE_SHIFT[i]) & 1) |
881 | ? 0 : 1; |
882 | data->pwm_enable[i] = |
883 | - ((pwmcfg >> W83L786NG_PWM_ENABLE_SHIFT[i]) & 2) + 1; |
884 | - data->pwm[i] = w83l786ng_read_value(client, |
885 | - W83L786NG_REG_PWM[i]); |
886 | + ((pwmcfg >> W83L786NG_PWM_ENABLE_SHIFT[i]) & 3) + 1; |
887 | + data->pwm[i] = |
888 | + (w83l786ng_read_value(client, W83L786NG_REG_PWM[i]) |
889 | + & 0x0f) * 0x11; |
890 | } |
891 | |
892 | |
893 | diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c |
894 | index fa061d46527f..75e3b102ce45 100644 |
895 | --- a/drivers/input/joystick/xpad.c |
896 | +++ b/drivers/input/joystick/xpad.c |
897 | @@ -167,6 +167,7 @@ static const struct xpad_device { |
898 | { 0x1430, 0x8888, "TX6500+ Dance Pad (first generation)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX }, |
899 | { 0x146b, 0x0601, "BigBen Interactive XBOX 360 Controller", 0, XTYPE_XBOX360 }, |
900 | { 0x1689, 0xfd00, "Razer Onza Tournament Edition", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 }, |
901 | + { 0x1689, 0xfd01, "Razer Onza Classic Edition", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 }, |
902 | { 0x1bad, 0x0002, "Harmonix Rock Band Guitar", 0, XTYPE_XBOX360 }, |
903 | { 0x1bad, 0x0003, "Harmonix Rock Band Drumkit", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 }, |
904 | { 0x1bad, 0xf016, "Mad Catz Xbox 360 Controller", 0, XTYPE_XBOX360 }, |
905 | diff --git a/drivers/input/touchscreen/usbtouchscreen.c b/drivers/input/touchscreen/usbtouchscreen.c |
906 | index ae4b6b903629..5f87bed05467 100644 |
907 | --- a/drivers/input/touchscreen/usbtouchscreen.c |
908 | +++ b/drivers/input/touchscreen/usbtouchscreen.c |
909 | @@ -106,6 +106,7 @@ struct usbtouch_device_info { |
910 | struct usbtouch_usb { |
911 | unsigned char *data; |
912 | dma_addr_t data_dma; |
913 | + int data_size; |
914 | unsigned char *buffer; |
915 | int buf_len; |
916 | struct urb *irq; |
917 | @@ -1521,7 +1522,7 @@ static int usbtouch_reset_resume(struct usb_interface *intf) |
918 | static void usbtouch_free_buffers(struct usb_device *udev, |
919 | struct usbtouch_usb *usbtouch) |
920 | { |
921 | - usb_free_coherent(udev, usbtouch->type->rept_size, |
922 | + usb_free_coherent(udev, usbtouch->data_size, |
923 | usbtouch->data, usbtouch->data_dma); |
924 | kfree(usbtouch->buffer); |
925 | } |
926 | @@ -1566,7 +1567,20 @@ static int usbtouch_probe(struct usb_interface *intf, |
927 | if (!type->process_pkt) |
928 | type->process_pkt = usbtouch_process_pkt; |
929 | |
930 | - usbtouch->data = usb_alloc_coherent(udev, type->rept_size, |
931 | + usbtouch->data_size = type->rept_size; |
932 | + if (type->get_pkt_len) { |
933 | + /* |
934 | + * When dealing with variable-length packets we should |
935 | + * not request more than wMaxPacketSize bytes at once |
936 | + * as we do not know if there is more data coming or |
937 | + * we filled exactly wMaxPacketSize bytes and there is |
938 | + * nothing else. |
939 | + */ |
940 | + usbtouch->data_size = min(usbtouch->data_size, |
941 | + usb_endpoint_maxp(endpoint)); |
942 | + } |
943 | + |
944 | + usbtouch->data = usb_alloc_coherent(udev, usbtouch->data_size, |
945 | GFP_KERNEL, &usbtouch->data_dma); |
946 | if (!usbtouch->data) |
947 | goto out_free; |
948 | @@ -1626,12 +1640,12 @@ static int usbtouch_probe(struct usb_interface *intf, |
949 | if (usb_endpoint_type(endpoint) == USB_ENDPOINT_XFER_INT) |
950 | usb_fill_int_urb(usbtouch->irq, udev, |
951 | usb_rcvintpipe(udev, endpoint->bEndpointAddress), |
952 | - usbtouch->data, type->rept_size, |
953 | + usbtouch->data, usbtouch->data_size, |
954 | usbtouch_irq, usbtouch, endpoint->bInterval); |
955 | else |
956 | usb_fill_bulk_urb(usbtouch->irq, udev, |
957 | usb_rcvbulkpipe(udev, endpoint->bEndpointAddress), |
958 | - usbtouch->data, type->rept_size, |
959 | + usbtouch->data, usbtouch->data_size, |
960 | usbtouch_irq, usbtouch); |
961 | |
962 | usbtouch->irq->dev = udev; |
963 | diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c |
964 | index 0387e05cdb98..a6e985fcceb8 100644 |
965 | --- a/drivers/md/dm-bufio.c |
966 | +++ b/drivers/md/dm-bufio.c |
967 | @@ -1660,6 +1660,11 @@ static int __init dm_bufio_init(void) |
968 | { |
969 | __u64 mem; |
970 | |
971 | + dm_bufio_allocated_kmem_cache = 0; |
972 | + dm_bufio_allocated_get_free_pages = 0; |
973 | + dm_bufio_allocated_vmalloc = 0; |
974 | + dm_bufio_current_allocated = 0; |
975 | + |
976 | memset(&dm_bufio_caches, 0, sizeof dm_bufio_caches); |
977 | memset(&dm_bufio_cache_names, 0, sizeof dm_bufio_cache_names); |
978 | |
979 | diff --git a/drivers/md/dm-delay.c b/drivers/md/dm-delay.c |
980 | index 496d5f3646a5..2f91d6d4a2cc 100644 |
981 | --- a/drivers/md/dm-delay.c |
982 | +++ b/drivers/md/dm-delay.c |
983 | @@ -20,6 +20,7 @@ |
984 | struct delay_c { |
985 | struct timer_list delay_timer; |
986 | struct mutex timer_lock; |
987 | + struct workqueue_struct *kdelayd_wq; |
988 | struct work_struct flush_expired_bios; |
989 | struct list_head delayed_bios; |
990 | atomic_t may_delay; |
991 | @@ -45,14 +46,13 @@ struct dm_delay_info { |
992 | |
993 | static DEFINE_MUTEX(delayed_bios_lock); |
994 | |
995 | -static struct workqueue_struct *kdelayd_wq; |
996 | static struct kmem_cache *delayed_cache; |
997 | |
998 | static void handle_delayed_timer(unsigned long data) |
999 | { |
1000 | struct delay_c *dc = (struct delay_c *)data; |
1001 | |
1002 | - queue_work(kdelayd_wq, &dc->flush_expired_bios); |
1003 | + queue_work(dc->kdelayd_wq, &dc->flush_expired_bios); |
1004 | } |
1005 | |
1006 | static void queue_timeout(struct delay_c *dc, unsigned long expires) |
1007 | @@ -191,6 +191,12 @@ out: |
1008 | goto bad_dev_write; |
1009 | } |
1010 | |
1011 | + dc->kdelayd_wq = alloc_workqueue("kdelayd", WQ_MEM_RECLAIM, 0); |
1012 | + if (!dc->kdelayd_wq) { |
1013 | + DMERR("Couldn't start kdelayd"); |
1014 | + goto bad_queue; |
1015 | + } |
1016 | + |
1017 | setup_timer(&dc->delay_timer, handle_delayed_timer, (unsigned long)dc); |
1018 | |
1019 | INIT_WORK(&dc->flush_expired_bios, flush_expired_bios); |
1020 | @@ -203,6 +209,8 @@ out: |
1021 | ti->private = dc; |
1022 | return 0; |
1023 | |
1024 | +bad_queue: |
1025 | + mempool_destroy(dc->delayed_pool); |
1026 | bad_dev_write: |
1027 | if (dc->dev_write) |
1028 | dm_put_device(ti, dc->dev_write); |
1029 | @@ -217,7 +225,7 @@ static void delay_dtr(struct dm_target *ti) |
1030 | { |
1031 | struct delay_c *dc = ti->private; |
1032 | |
1033 | - flush_workqueue(kdelayd_wq); |
1034 | + destroy_workqueue(dc->kdelayd_wq); |
1035 | |
1036 | dm_put_device(ti, dc->dev_read); |
1037 | |
1038 | @@ -350,12 +358,6 @@ static int __init dm_delay_init(void) |
1039 | { |
1040 | int r = -ENOMEM; |
1041 | |
1042 | - kdelayd_wq = alloc_workqueue("kdelayd", WQ_MEM_RECLAIM, 0); |
1043 | - if (!kdelayd_wq) { |
1044 | - DMERR("Couldn't start kdelayd"); |
1045 | - goto bad_queue; |
1046 | - } |
1047 | - |
1048 | delayed_cache = KMEM_CACHE(dm_delay_info, 0); |
1049 | if (!delayed_cache) { |
1050 | DMERR("Couldn't create delayed bio cache."); |
1051 | @@ -373,8 +375,6 @@ static int __init dm_delay_init(void) |
1052 | bad_register: |
1053 | kmem_cache_destroy(delayed_cache); |
1054 | bad_memcache: |
1055 | - destroy_workqueue(kdelayd_wq); |
1056 | -bad_queue: |
1057 | return r; |
1058 | } |
1059 | |
1060 | @@ -382,7 +382,6 @@ static void __exit dm_delay_exit(void) |
1061 | { |
1062 | dm_unregister_target(&delay_target); |
1063 | kmem_cache_destroy(delayed_cache); |
1064 | - destroy_workqueue(kdelayd_wq); |
1065 | } |
1066 | |
1067 | /* Module hooks */ |
1068 | diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c |
1069 | index aec57d76db5d..944690bafd93 100644 |
1070 | --- a/drivers/md/dm-snap.c |
1071 | +++ b/drivers/md/dm-snap.c |
1072 | @@ -66,6 +66,18 @@ struct dm_snapshot { |
1073 | |
1074 | atomic_t pending_exceptions_count; |
1075 | |
1076 | + /* Protected by "lock" */ |
1077 | + sector_t exception_start_sequence; |
1078 | + |
1079 | + /* Protected by kcopyd single-threaded callback */ |
1080 | + sector_t exception_complete_sequence; |
1081 | + |
1082 | + /* |
1083 | + * A list of pending exceptions that completed out of order. |
1084 | + * Protected by kcopyd single-threaded callback. |
1085 | + */ |
1086 | + struct list_head out_of_order_list; |
1087 | + |
1088 | mempool_t *pending_pool; |
1089 | |
1090 | struct dm_exception_table pending; |
1091 | @@ -173,6 +185,14 @@ struct dm_snap_pending_exception { |
1092 | */ |
1093 | int started; |
1094 | |
1095 | + /* There was copying error. */ |
1096 | + int copy_error; |
1097 | + |
1098 | + /* A sequence number, it is used for in-order completion. */ |
1099 | + sector_t exception_sequence; |
1100 | + |
1101 | + struct list_head out_of_order_entry; |
1102 | + |
1103 | /* |
1104 | * For writing a complete chunk, bypassing the copy. |
1105 | */ |
1106 | @@ -1094,6 +1114,9 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv) |
1107 | s->valid = 1; |
1108 | s->active = 0; |
1109 | atomic_set(&s->pending_exceptions_count, 0); |
1110 | + s->exception_start_sequence = 0; |
1111 | + s->exception_complete_sequence = 0; |
1112 | + INIT_LIST_HEAD(&s->out_of_order_list); |
1113 | init_rwsem(&s->lock); |
1114 | INIT_LIST_HEAD(&s->list); |
1115 | spin_lock_init(&s->pe_lock); |
1116 | @@ -1443,6 +1466,19 @@ static void commit_callback(void *context, int success) |
1117 | pending_complete(pe, success); |
1118 | } |
1119 | |
1120 | +static void complete_exception(struct dm_snap_pending_exception *pe) |
1121 | +{ |
1122 | + struct dm_snapshot *s = pe->snap; |
1123 | + |
1124 | + if (unlikely(pe->copy_error)) |
1125 | + pending_complete(pe, 0); |
1126 | + |
1127 | + else |
1128 | + /* Update the metadata if we are persistent */ |
1129 | + s->store->type->commit_exception(s->store, &pe->e, |
1130 | + commit_callback, pe); |
1131 | +} |
1132 | + |
1133 | /* |
1134 | * Called when the copy I/O has finished. kcopyd actually runs |
1135 | * this code so don't block. |
1136 | @@ -1452,13 +1488,32 @@ static void copy_callback(int read_err, unsigned long write_err, void *context) |
1137 | struct dm_snap_pending_exception *pe = context; |
1138 | struct dm_snapshot *s = pe->snap; |
1139 | |
1140 | - if (read_err || write_err) |
1141 | - pending_complete(pe, 0); |
1142 | + pe->copy_error = read_err || write_err; |
1143 | |
1144 | - else |
1145 | - /* Update the metadata if we are persistent */ |
1146 | - s->store->type->commit_exception(s->store, &pe->e, |
1147 | - commit_callback, pe); |
1148 | + if (pe->exception_sequence == s->exception_complete_sequence) { |
1149 | + s->exception_complete_sequence++; |
1150 | + complete_exception(pe); |
1151 | + |
1152 | + while (!list_empty(&s->out_of_order_list)) { |
1153 | + pe = list_entry(s->out_of_order_list.next, |
1154 | + struct dm_snap_pending_exception, out_of_order_entry); |
1155 | + if (pe->exception_sequence != s->exception_complete_sequence) |
1156 | + break; |
1157 | + s->exception_complete_sequence++; |
1158 | + list_del(&pe->out_of_order_entry); |
1159 | + complete_exception(pe); |
1160 | + } |
1161 | + } else { |
1162 | + struct list_head *lh; |
1163 | + struct dm_snap_pending_exception *pe2; |
1164 | + |
1165 | + list_for_each_prev(lh, &s->out_of_order_list) { |
1166 | + pe2 = list_entry(lh, struct dm_snap_pending_exception, out_of_order_entry); |
1167 | + if (pe2->exception_sequence < pe->exception_sequence) |
1168 | + break; |
1169 | + } |
1170 | + list_add(&pe->out_of_order_entry, lh); |
1171 | + } |
1172 | } |
1173 | |
1174 | /* |
1175 | @@ -1553,6 +1608,8 @@ __find_pending_exception(struct dm_snapshot *s, |
1176 | return NULL; |
1177 | } |
1178 | |
1179 | + pe->exception_sequence = s->exception_start_sequence++; |
1180 | + |
1181 | dm_insert_exception(&s->pending, &pe->e); |
1182 | |
1183 | return pe; |
1184 | @@ -2192,7 +2249,7 @@ static struct target_type origin_target = { |
1185 | |
1186 | static struct target_type snapshot_target = { |
1187 | .name = "snapshot", |
1188 | - .version = {1, 11, 1}, |
1189 | + .version = {1, 12, 0}, |
1190 | .module = THIS_MODULE, |
1191 | .ctr = snapshot_ctr, |
1192 | .dtr = snapshot_dtr, |
1193 | diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c |
1194 | index 9e3a045eb7a2..bd88d3dade1e 100644 |
1195 | --- a/drivers/md/dm-table.c |
1196 | +++ b/drivers/md/dm-table.c |
1197 | @@ -215,6 +215,11 @@ int dm_table_create(struct dm_table **result, fmode_t mode, |
1198 | |
1199 | num_targets = dm_round_up(num_targets, KEYS_PER_NODE); |
1200 | |
1201 | + if (!num_targets) { |
1202 | + kfree(t); |
1203 | + return -ENOMEM; |
1204 | + } |
1205 | + |
1206 | if (alloc_targets(t, num_targets)) { |
1207 | kfree(t); |
1208 | return -ENOMEM; |
1209 | diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c |
1210 | index 88f2f802d528..e36f81e282eb 100644 |
1211 | --- a/drivers/md/dm-thin.c |
1212 | +++ b/drivers/md/dm-thin.c |
1213 | @@ -640,7 +640,9 @@ static void process_prepared_mapping(struct dm_thin_new_mapping *m) |
1214 | */ |
1215 | r = dm_thin_insert_block(tc->td, m->virt_block, m->data_block); |
1216 | if (r) { |
1217 | - DMERR_LIMIT("dm_thin_insert_block() failed"); |
1218 | + DMERR_LIMIT("%s: dm_thin_insert_block() failed: error = %d", |
1219 | + dm_device_name(pool->pool_md), r); |
1220 | + set_pool_mode(pool, PM_READ_ONLY); |
1221 | cell_error(pool, m->cell); |
1222 | goto out; |
1223 | } |
1224 | diff --git a/drivers/md/persistent-data/dm-array.c b/drivers/md/persistent-data/dm-array.c |
1225 | index af96e24ec328..1d75b1dc1e2e 100644 |
1226 | --- a/drivers/md/persistent-data/dm-array.c |
1227 | +++ b/drivers/md/persistent-data/dm-array.c |
1228 | @@ -317,8 +317,16 @@ static int shadow_ablock(struct dm_array_info *info, dm_block_t *root, |
1229 | * The shadow op will often be a noop. Only insert if it really |
1230 | * copied data. |
1231 | */ |
1232 | - if (dm_block_location(*block) != b) |
1233 | + if (dm_block_location(*block) != b) { |
1234 | + /* |
1235 | + * dm_tm_shadow_block will have already decremented the old |
1236 | + * block, but it is still referenced by the btree. We |
1237 | + * increment to stop the insert decrementing it below zero |
1238 | + * when overwriting the old value. |
1239 | + */ |
1240 | + dm_tm_inc(info->btree_info.tm, b); |
1241 | r = insert_ablock(info, index, *block, root); |
1242 | + } |
1243 | |
1244 | return r; |
1245 | } |
1246 | diff --git a/drivers/md/persistent-data/dm-space-map-metadata.c b/drivers/md/persistent-data/dm-space-map-metadata.c |
1247 | index 1c959684caef..58fc1eef7499 100644 |
1248 | --- a/drivers/md/persistent-data/dm-space-map-metadata.c |
1249 | +++ b/drivers/md/persistent-data/dm-space-map-metadata.c |
1250 | @@ -384,12 +384,16 @@ static int sm_metadata_new_block(struct dm_space_map *sm, dm_block_t *b) |
1251 | struct sm_metadata *smm = container_of(sm, struct sm_metadata, sm); |
1252 | |
1253 | int r = sm_metadata_new_block_(sm, b); |
1254 | - if (r) |
1255 | + if (r) { |
1256 | DMERR("unable to allocate new metadata block"); |
1257 | + return r; |
1258 | + } |
1259 | |
1260 | r = sm_metadata_get_nr_free(sm, &count); |
1261 | - if (r) |
1262 | + if (r) { |
1263 | DMERR("couldn't get free block count"); |
1264 | + return r; |
1265 | + } |
1266 | |
1267 | check_threshold(&smm->threshold, count); |
1268 | |
1269 | diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c |
1270 | index 30ee59052157..65728c25ea05 100644 |
1271 | --- a/drivers/media/dvb-frontends/af9033.c |
1272 | +++ b/drivers/media/dvb-frontends/af9033.c |
1273 | @@ -170,18 +170,18 @@ static int af9033_rd_reg_mask(struct af9033_state *state, u32 reg, u8 *val, |
1274 | static int af9033_wr_reg_val_tab(struct af9033_state *state, |
1275 | const struct reg_val *tab, int tab_len) |
1276 | { |
1277 | +#define MAX_TAB_LEN 212 |
1278 | int ret, i, j; |
1279 | - u8 buf[MAX_XFER_SIZE]; |
1280 | + u8 buf[1 + MAX_TAB_LEN]; |
1281 | + |
1282 | + dev_dbg(&state->i2c->dev, "%s: tab_len=%d\n", __func__, tab_len); |
1283 | |
1284 | if (tab_len > sizeof(buf)) { |
1285 | - dev_warn(&state->i2c->dev, |
1286 | - "%s: i2c wr len=%d is too big!\n", |
1287 | - KBUILD_MODNAME, tab_len); |
1288 | + dev_warn(&state->i2c->dev, "%s: tab len %d is too big\n", |
1289 | + KBUILD_MODNAME, tab_len); |
1290 | return -EINVAL; |
1291 | } |
1292 | |
1293 | - dev_dbg(&state->i2c->dev, "%s: tab_len=%d\n", __func__, tab_len); |
1294 | - |
1295 | for (i = 0, j = 0; i < tab_len; i++) { |
1296 | buf[j] = tab[i].val; |
1297 | |
1298 | diff --git a/drivers/media/dvb-frontends/cxd2820r_core.c b/drivers/media/dvb-frontends/cxd2820r_core.c |
1299 | index 51447a04d8f2..03930d5e9fea 100644 |
1300 | --- a/drivers/media/dvb-frontends/cxd2820r_core.c |
1301 | +++ b/drivers/media/dvb-frontends/cxd2820r_core.c |
1302 | @@ -34,7 +34,7 @@ static int cxd2820r_wr_regs_i2c(struct cxd2820r_priv *priv, u8 i2c, u8 reg, |
1303 | { |
1304 | .addr = i2c, |
1305 | .flags = 0, |
1306 | - .len = sizeof(buf), |
1307 | + .len = len + 1, |
1308 | .buf = buf, |
1309 | } |
1310 | }; |
1311 | @@ -75,7 +75,7 @@ static int cxd2820r_rd_regs_i2c(struct cxd2820r_priv *priv, u8 i2c, u8 reg, |
1312 | }, { |
1313 | .addr = i2c, |
1314 | .flags = I2C_M_RD, |
1315 | - .len = sizeof(buf), |
1316 | + .len = len, |
1317 | .buf = buf, |
1318 | } |
1319 | }; |
1320 | diff --git a/drivers/media/i2c/wm8775.c b/drivers/media/i2c/wm8775.c |
1321 | index 27c27b4ae238..e5f3a78cf55b 100644 |
1322 | --- a/drivers/media/i2c/wm8775.c |
1323 | +++ b/drivers/media/i2c/wm8775.c |
1324 | @@ -131,12 +131,10 @@ static int wm8775_s_routing(struct v4l2_subdev *sd, |
1325 | return -EINVAL; |
1326 | } |
1327 | state->input = input; |
1328 | - if (!v4l2_ctrl_g_ctrl(state->mute)) |
1329 | + if (v4l2_ctrl_g_ctrl(state->mute)) |
1330 | return 0; |
1331 | if (!v4l2_ctrl_g_ctrl(state->vol)) |
1332 | return 0; |
1333 | - if (!v4l2_ctrl_g_ctrl(state->bal)) |
1334 | - return 0; |
1335 | wm8775_set_audio(sd, 1); |
1336 | return 0; |
1337 | } |
1338 | diff --git a/drivers/media/pci/bt8xx/bttv-driver.c b/drivers/media/pci/bt8xx/bttv-driver.c |
1339 | index e7d088413411..e2633d9270b7 100644 |
1340 | --- a/drivers/media/pci/bt8xx/bttv-driver.c |
1341 | +++ b/drivers/media/pci/bt8xx/bttv-driver.c |
1342 | @@ -4226,7 +4226,8 @@ static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id) |
1343 | } |
1344 | btv->std = V4L2_STD_PAL; |
1345 | init_irqreg(btv); |
1346 | - v4l2_ctrl_handler_setup(hdl); |
1347 | + if (!bttv_tvcards[btv->c.type].no_video) |
1348 | + v4l2_ctrl_handler_setup(hdl); |
1349 | if (hdl->error) { |
1350 | result = hdl->error; |
1351 | goto fail2; |
1352 | diff --git a/drivers/media/pci/saa7164/saa7164-core.c b/drivers/media/pci/saa7164/saa7164-core.c |
1353 | index 7618fdae811e..62141b8f1e1a 100644 |
1354 | --- a/drivers/media/pci/saa7164/saa7164-core.c |
1355 | +++ b/drivers/media/pci/saa7164/saa7164-core.c |
1356 | @@ -1348,9 +1348,11 @@ static int saa7164_initdev(struct pci_dev *pci_dev, |
1357 | if (fw_debug) { |
1358 | dev->kthread = kthread_run(saa7164_thread_function, dev, |
1359 | "saa7164 debug"); |
1360 | - if (!dev->kthread) |
1361 | + if (IS_ERR(dev->kthread)) { |
1362 | + dev->kthread = NULL; |
1363 | printk(KERN_ERR "%s() Failed to create " |
1364 | "debug kernel thread\n", __func__); |
1365 | + } |
1366 | } |
1367 | |
1368 | } /* != BOARD_UNKNOWN */ |
1369 | diff --git a/drivers/media/usb/dvb-usb-v2/af9035.c b/drivers/media/usb/dvb-usb-v2/af9035.c |
1370 | index 3968bff341e6..46f05ad529f9 100644 |
1371 | --- a/drivers/media/usb/dvb-usb-v2/af9035.c |
1372 | +++ b/drivers/media/usb/dvb-usb-v2/af9035.c |
1373 | @@ -130,7 +130,7 @@ static int af9035_wr_regs(struct dvb_usb_device *d, u32 reg, u8 *val, int len) |
1374 | { |
1375 | u8 wbuf[MAX_XFER_SIZE]; |
1376 | u8 mbox = (reg >> 16) & 0xff; |
1377 | - struct usb_req req = { CMD_MEM_WR, mbox, sizeof(wbuf), wbuf, 0, NULL }; |
1378 | + struct usb_req req = { CMD_MEM_WR, mbox, 6 + len, wbuf, 0, NULL }; |
1379 | |
1380 | if (6 + len > sizeof(wbuf)) { |
1381 | dev_warn(&d->udev->dev, "%s: i2c wr: len=%d is too big!\n", |
1382 | @@ -237,14 +237,15 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap, |
1383 | } else { |
1384 | /* I2C */ |
1385 | u8 buf[MAX_XFER_SIZE]; |
1386 | - struct usb_req req = { CMD_I2C_RD, 0, sizeof(buf), |
1387 | + struct usb_req req = { CMD_I2C_RD, 0, 5 + msg[0].len, |
1388 | buf, msg[1].len, msg[1].buf }; |
1389 | |
1390 | if (5 + msg[0].len > sizeof(buf)) { |
1391 | dev_warn(&d->udev->dev, |
1392 | "%s: i2c xfer: len=%d is too big!\n", |
1393 | KBUILD_MODNAME, msg[0].len); |
1394 | - return -EOPNOTSUPP; |
1395 | + ret = -EOPNOTSUPP; |
1396 | + goto unlock; |
1397 | } |
1398 | req.mbox |= ((msg[0].addr & 0x80) >> 3); |
1399 | buf[0] = msg[1].len; |
1400 | @@ -273,14 +274,15 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap, |
1401 | } else { |
1402 | /* I2C */ |
1403 | u8 buf[MAX_XFER_SIZE]; |
1404 | - struct usb_req req = { CMD_I2C_WR, 0, sizeof(buf), buf, |
1405 | - 0, NULL }; |
1406 | + struct usb_req req = { CMD_I2C_WR, 0, 5 + msg[0].len, |
1407 | + buf, 0, NULL }; |
1408 | |
1409 | if (5 + msg[0].len > sizeof(buf)) { |
1410 | dev_warn(&d->udev->dev, |
1411 | "%s: i2c xfer: len=%d is too big!\n", |
1412 | KBUILD_MODNAME, msg[0].len); |
1413 | - return -EOPNOTSUPP; |
1414 | + ret = -EOPNOTSUPP; |
1415 | + goto unlock; |
1416 | } |
1417 | req.mbox |= ((msg[0].addr & 0x80) >> 3); |
1418 | buf[0] = msg[0].len; |
1419 | @@ -300,6 +302,7 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap, |
1420 | ret = -EOPNOTSUPP; |
1421 | } |
1422 | |
1423 | +unlock: |
1424 | mutex_unlock(&d->i2c_mutex); |
1425 | |
1426 | if (ret < 0) |
1427 | @@ -1512,6 +1515,8 @@ static const struct usb_device_id af9035_id_table[] = { |
1428 | /* XXX: that same ID [0ccd:0099] is used by af9015 driver too */ |
1429 | { DVB_USB_DEVICE(USB_VID_TERRATEC, 0x0099, |
1430 | &af9035_props, "TerraTec Cinergy T Stick Dual RC (rev. 2)", NULL) }, |
1431 | + { DVB_USB_DEVICE(USB_VID_LEADTEK, 0x6a05, |
1432 | + &af9035_props, "Leadtek WinFast DTV Dongle Dual", NULL) }, |
1433 | { } |
1434 | }; |
1435 | MODULE_DEVICE_TABLE(usb, af9035_id_table); |
1436 | diff --git a/drivers/net/ethernet/intel/igb/e1000_phy.c b/drivers/net/ethernet/intel/igb/e1000_phy.c |
1437 | index 115b0da6e013..5dec66a96793 100644 |
1438 | --- a/drivers/net/ethernet/intel/igb/e1000_phy.c |
1439 | +++ b/drivers/net/ethernet/intel/igb/e1000_phy.c |
1440 | @@ -1595,7 +1595,10 @@ s32 igb_phy_has_link(struct e1000_hw *hw, u32 iterations, |
1441 | * ownership of the resources, wait and try again to |
1442 | * see if they have relinquished the resources yet. |
1443 | */ |
1444 | - udelay(usec_interval); |
1445 | + if (usec_interval >= 1000) |
1446 | + mdelay(usec_interval/1000); |
1447 | + else |
1448 | + udelay(usec_interval); |
1449 | } |
1450 | ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status); |
1451 | if (ret_val) |
1452 | diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c |
1453 | index 25b8bbbe74fe..f71a9eded5a4 100644 |
1454 | --- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c |
1455 | +++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c |
1456 | @@ -3937,18 +3937,20 @@ static void ar9003_hw_quick_drop_apply(struct ath_hw *ah, u16 freq) |
1457 | int quick_drop; |
1458 | s32 t[3], f[3] = {5180, 5500, 5785}; |
1459 | |
1460 | - if (!(pBase->miscConfiguration & BIT(1))) |
1461 | + if (!(pBase->miscConfiguration & BIT(4))) |
1462 | return; |
1463 | |
1464 | - if (freq < 4000) |
1465 | - quick_drop = eep->modalHeader2G.quick_drop; |
1466 | - else { |
1467 | - t[0] = eep->base_ext1.quick_drop_low; |
1468 | - t[1] = eep->modalHeader5G.quick_drop; |
1469 | - t[2] = eep->base_ext1.quick_drop_high; |
1470 | - quick_drop = ar9003_hw_power_interpolate(freq, f, t, 3); |
1471 | + if (AR_SREV_9300(ah) || AR_SREV_9580(ah) || AR_SREV_9340(ah)) { |
1472 | + if (freq < 4000) { |
1473 | + quick_drop = eep->modalHeader2G.quick_drop; |
1474 | + } else { |
1475 | + t[0] = eep->base_ext1.quick_drop_low; |
1476 | + t[1] = eep->modalHeader5G.quick_drop; |
1477 | + t[2] = eep->base_ext1.quick_drop_high; |
1478 | + quick_drop = ar9003_hw_power_interpolate(freq, f, t, 3); |
1479 | + } |
1480 | + REG_RMW_FIELD(ah, AR_PHY_AGC, AR_PHY_AGC_QUICK_DROP, quick_drop); |
1481 | } |
1482 | - REG_RMW_FIELD(ah, AR_PHY_AGC, AR_PHY_AGC_QUICK_DROP, quick_drop); |
1483 | } |
1484 | |
1485 | static void ar9003_hw_txend_to_xpa_off_apply(struct ath_hw *ah, bool is2ghz) |
1486 | @@ -3988,7 +3990,7 @@ static void ar9003_hw_xlna_bias_strength_apply(struct ath_hw *ah, bool is2ghz) |
1487 | struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep; |
1488 | u8 bias; |
1489 | |
1490 | - if (!(eep->baseEepHeader.featureEnable & 0x40)) |
1491 | + if (!(eep->baseEepHeader.miscConfiguration & 0x40)) |
1492 | return; |
1493 | |
1494 | if (!AR_SREV_9300(ah)) |
1495 | diff --git a/drivers/net/wireless/iwlwifi/mvm/debugfs.c b/drivers/net/wireless/iwlwifi/mvm/debugfs.c |
1496 | index 2053dccefcd6..109dc8e437f5 100644 |
1497 | --- a/drivers/net/wireless/iwlwifi/mvm/debugfs.c |
1498 | +++ b/drivers/net/wireless/iwlwifi/mvm/debugfs.c |
1499 | @@ -119,6 +119,10 @@ static ssize_t iwl_dbgfs_sta_drain_write(struct file *file, |
1500 | |
1501 | if (sscanf(buf, "%d %d", &sta_id, &drain) != 2) |
1502 | return -EINVAL; |
1503 | + if (sta_id < 0 || sta_id >= IWL_MVM_STATION_COUNT) |
1504 | + return -EINVAL; |
1505 | + if (drain < 0 || drain > 1) |
1506 | + return -EINVAL; |
1507 | |
1508 | mutex_lock(&mvm->mutex); |
1509 | |
1510 | diff --git a/drivers/net/wireless/mwifiex/sta_ioctl.c b/drivers/net/wireless/mwifiex/sta_ioctl.c |
1511 | index 23aa910bc5d0..0a9f59c5ab5a 100644 |
1512 | --- a/drivers/net/wireless/mwifiex/sta_ioctl.c |
1513 | +++ b/drivers/net/wireless/mwifiex/sta_ioctl.c |
1514 | @@ -309,8 +309,8 @@ int mwifiex_bss_start(struct mwifiex_private *priv, struct cfg80211_bss *bss, |
1515 | if (bss_desc && bss_desc->ssid.ssid_len && |
1516 | (!mwifiex_ssid_cmp(&priv->curr_bss_params.bss_descriptor. |
1517 | ssid, &bss_desc->ssid))) { |
1518 | - kfree(bss_desc); |
1519 | - return 0; |
1520 | + ret = 0; |
1521 | + goto done; |
1522 | } |
1523 | |
1524 | /* Exit Adhoc mode first */ |
1525 | diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c |
1526 | index 79277fb36c6b..66aabde82727 100644 |
1527 | --- a/drivers/pci/pci-driver.c |
1528 | +++ b/drivers/pci/pci-driver.c |
1529 | @@ -19,6 +19,7 @@ |
1530 | #include <linux/cpu.h> |
1531 | #include <linux/pm_runtime.h> |
1532 | #include <linux/suspend.h> |
1533 | +#include <linux/kexec.h> |
1534 | #include "pci.h" |
1535 | |
1536 | struct pci_dynid { |
1537 | @@ -388,12 +389,17 @@ static void pci_device_shutdown(struct device *dev) |
1538 | pci_msi_shutdown(pci_dev); |
1539 | pci_msix_shutdown(pci_dev); |
1540 | |
1541 | +#ifdef CONFIG_KEXEC |
1542 | /* |
1543 | - * Turn off Bus Master bit on the device to tell it to not |
1544 | - * continue to do DMA. Don't touch devices in D3cold or unknown states. |
1545 | + * If this is a kexec reboot, turn off Bus Master bit on the |
1546 | + * device to tell it to not continue to do DMA. Don't touch |
1547 | + * devices in D3cold or unknown states. |
1548 | + * If it is not a kexec reboot, firmware will hit the PCI |
1549 | + * devices with big hammer and stop their DMA any way. |
1550 | */ |
1551 | - if (pci_dev->current_state <= PCI_D3hot) |
1552 | + if (kexec_in_progress && (pci_dev->current_state <= PCI_D3hot)) |
1553 | pci_clear_master(pci_dev); |
1554 | +#endif |
1555 | } |
1556 | |
1557 | #ifdef CONFIG_PM |
1558 | diff --git a/drivers/rtc/rtc-at91rm9200.c b/drivers/rtc/rtc-at91rm9200.c |
1559 | index f296f3f7db9b..1237c2173c6d 100644 |
1560 | --- a/drivers/rtc/rtc-at91rm9200.c |
1561 | +++ b/drivers/rtc/rtc-at91rm9200.c |
1562 | @@ -221,6 +221,8 @@ static int at91_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm) |
1563 | |
1564 | at91_alarm_year = tm.tm_year; |
1565 | |
1566 | + tm.tm_mon = alrm->time.tm_mon; |
1567 | + tm.tm_mday = alrm->time.tm_mday; |
1568 | tm.tm_hour = alrm->time.tm_hour; |
1569 | tm.tm_min = alrm->time.tm_min; |
1570 | tm.tm_sec = alrm->time.tm_sec; |
1571 | diff --git a/drivers/staging/comedi/drivers/amplc_pc263.c b/drivers/staging/comedi/drivers/amplc_pc263.c |
1572 | index 94a752d852bb..0d88e6227761 100644 |
1573 | --- a/drivers/staging/comedi/drivers/amplc_pc263.c |
1574 | +++ b/drivers/staging/comedi/drivers/amplc_pc263.c |
1575 | @@ -72,6 +72,9 @@ static int pc263_do_insn_bits(struct comedi_device *dev, |
1576 | outb(s->state & 0xFF, dev->iobase); |
1577 | outb(s->state >> 8, dev->iobase + 1); |
1578 | } |
1579 | + |
1580 | + data[1] = s->state; |
1581 | + |
1582 | return insn->n; |
1583 | } |
1584 | |
1585 | diff --git a/drivers/staging/comedi/drivers/amplc_pci263.c b/drivers/staging/comedi/drivers/amplc_pci263.c |
1586 | index 8b57533bf406..9c53199a419b 100644 |
1587 | --- a/drivers/staging/comedi/drivers/amplc_pci263.c |
1588 | +++ b/drivers/staging/comedi/drivers/amplc_pci263.c |
1589 | @@ -59,6 +59,9 @@ static int pci263_do_insn_bits(struct comedi_device *dev, |
1590 | outb(s->state & 0xFF, dev->iobase); |
1591 | outb(s->state >> 8, dev->iobase + 1); |
1592 | } |
1593 | + |
1594 | + data[1] = s->state; |
1595 | + |
1596 | return insn->n; |
1597 | } |
1598 | |
1599 | diff --git a/drivers/staging/comedi/drivers/pcmuio.c b/drivers/staging/comedi/drivers/pcmuio.c |
1600 | index 0c98e26bbba1..b5ed093e59c3 100644 |
1601 | --- a/drivers/staging/comedi/drivers/pcmuio.c |
1602 | +++ b/drivers/staging/comedi/drivers/pcmuio.c |
1603 | @@ -935,12 +935,13 @@ static void pcmuio_detach(struct comedi_device *dev) |
1604 | struct pcmuio_private *devpriv = dev->private; |
1605 | int i; |
1606 | |
1607 | - for (i = 0; i < MAX_ASICS; ++i) { |
1608 | - if (devpriv->asics[i].irq) |
1609 | - free_irq(devpriv->asics[i].irq, dev); |
1610 | - } |
1611 | - if (devpriv && devpriv->sprivs) |
1612 | + if (devpriv) { |
1613 | + for (i = 0; i < MAX_ASICS; ++i) { |
1614 | + if (devpriv->asics[i].irq) |
1615 | + free_irq(devpriv->asics[i].irq, dev); |
1616 | + } |
1617 | kfree(devpriv->sprivs); |
1618 | + } |
1619 | comedi_legacy_detach(dev); |
1620 | } |
1621 | |
1622 | diff --git a/drivers/staging/comedi/drivers/ssv_dnp.c b/drivers/staging/comedi/drivers/ssv_dnp.c |
1623 | index a76df092a57b..8c84dc0cfe07 100644 |
1624 | --- a/drivers/staging/comedi/drivers/ssv_dnp.c |
1625 | +++ b/drivers/staging/comedi/drivers/ssv_dnp.c |
1626 | @@ -87,11 +87,11 @@ static int dnp_dio_insn_bits(struct comedi_device *dev, |
1627 | |
1628 | /* on return, data[1] contains the value of the digital input lines. */ |
1629 | outb(PADR, CSCIR); |
1630 | - data[0] = inb(CSCDR); |
1631 | + data[1] = inb(CSCDR); |
1632 | outb(PBDR, CSCIR); |
1633 | - data[0] += inb(CSCDR) << 8; |
1634 | + data[1] += inb(CSCDR) << 8; |
1635 | outb(PCDR, CSCIR); |
1636 | - data[0] += ((inb(CSCDR) & 0xF0) << 12); |
1637 | + data[1] += ((inb(CSCDR) & 0xF0) << 12); |
1638 | |
1639 | return insn->n; |
1640 | |
1641 | diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c |
1642 | index 1424a8988849..4d25bff2dac1 100644 |
1643 | --- a/drivers/usb/core/hub.c |
1644 | +++ b/drivers/usb/core/hub.c |
1645 | @@ -4808,8 +4808,9 @@ static void hub_events(void) |
1646 | hub->ports[i - 1]->child; |
1647 | |
1648 | dev_dbg(hub_dev, "warm reset port %d\n", i); |
1649 | - if (!udev || !(portstatus & |
1650 | - USB_PORT_STAT_CONNECTION)) { |
1651 | + if (!udev || |
1652 | + !(portstatus & USB_PORT_STAT_CONNECTION) || |
1653 | + udev->state == USB_STATE_NOTATTACHED) { |
1654 | status = hub_port_reset(hub, i, |
1655 | NULL, HUB_BH_RESET_TIME, |
1656 | true); |
1657 | diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c |
1658 | index 5acbb948b704..3cea676ba901 100644 |
1659 | --- a/drivers/usb/dwc3/ep0.c |
1660 | +++ b/drivers/usb/dwc3/ep0.c |
1661 | @@ -478,6 +478,8 @@ static int dwc3_ep0_handle_feature(struct dwc3 *dwc, |
1662 | dep = dwc3_wIndex_to_dep(dwc, wIndex); |
1663 | if (!dep) |
1664 | return -EINVAL; |
1665 | + if (set == 0 && (dep->flags & DWC3_EP_WEDGE)) |
1666 | + break; |
1667 | ret = __dwc3_gadget_ep_set_halt(dep, set); |
1668 | if (ret) |
1669 | return -EINVAL; |
1670 | diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c |
1671 | index 14d28d6184f6..69948ad39837 100644 |
1672 | --- a/drivers/usb/dwc3/gadget.c |
1673 | +++ b/drivers/usb/dwc3/gadget.c |
1674 | @@ -1220,9 +1220,6 @@ int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value) |
1675 | else |
1676 | dep->flags |= DWC3_EP_STALL; |
1677 | } else { |
1678 | - if (dep->flags & DWC3_EP_WEDGE) |
1679 | - return 0; |
1680 | - |
1681 | ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, |
1682 | DWC3_DEPCMD_CLEARSTALL, ¶ms); |
1683 | if (ret) |
1684 | @@ -1230,7 +1227,7 @@ int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value) |
1685 | value ? "set" : "clear", |
1686 | dep->name); |
1687 | else |
1688 | - dep->flags &= ~DWC3_EP_STALL; |
1689 | + dep->flags &= ~(DWC3_EP_STALL | DWC3_EP_WEDGE); |
1690 | } |
1691 | |
1692 | return ret; |
1693 | diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c |
1694 | index 55f4df60f327..44a292b75012 100644 |
1695 | --- a/drivers/usb/gadget/composite.c |
1696 | +++ b/drivers/usb/gadget/composite.c |
1697 | @@ -593,6 +593,7 @@ static void reset_config(struct usb_composite_dev *cdev) |
1698 | bitmap_zero(f->endpoints, 32); |
1699 | } |
1700 | cdev->config = NULL; |
1701 | + cdev->delayed_status = 0; |
1702 | } |
1703 | |
1704 | static int set_config(struct usb_composite_dev *cdev, |
1705 | diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c |
1706 | index c3d94853b4ab..496b7e39d5be 100644 |
1707 | --- a/drivers/usb/serial/option.c |
1708 | +++ b/drivers/usb/serial/option.c |
1709 | @@ -85,6 +85,7 @@ static void option_instat_callback(struct urb *urb); |
1710 | #define HUAWEI_PRODUCT_K4505 0x1464 |
1711 | #define HUAWEI_PRODUCT_K3765 0x1465 |
1712 | #define HUAWEI_PRODUCT_K4605 0x14C6 |
1713 | +#define HUAWEI_PRODUCT_E173S6 0x1C07 |
1714 | |
1715 | #define QUANTA_VENDOR_ID 0x0408 |
1716 | #define QUANTA_PRODUCT_Q101 0xEA02 |
1717 | @@ -572,6 +573,8 @@ static const struct usb_device_id option_ids[] = { |
1718 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) }, |
1719 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173, 0xff, 0xff, 0xff), |
1720 | .driver_info = (kernel_ulong_t) &net_intf1_blacklist }, |
1721 | + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173S6, 0xff, 0xff, 0xff), |
1722 | + .driver_info = (kernel_ulong_t) &net_intf1_blacklist }, |
1723 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1750, 0xff, 0xff, 0xff), |
1724 | .driver_info = (kernel_ulong_t) &net_intf2_blacklist }, |
1725 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1441, USB_CLASS_COMM, 0x02, 0xff) }, |
1726 | @@ -634,6 +637,10 @@ static const struct usb_device_id option_ids[] = { |
1727 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x6D) }, |
1728 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x6E) }, |
1729 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x6F) }, |
1730 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x72) }, |
1731 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x73) }, |
1732 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x74) }, |
1733 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x75) }, |
1734 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x78) }, |
1735 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x79) }, |
1736 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x7A) }, |
1737 | @@ -688,6 +695,10 @@ static const struct usb_device_id option_ids[] = { |
1738 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x6D) }, |
1739 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x6E) }, |
1740 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x6F) }, |
1741 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x72) }, |
1742 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x73) }, |
1743 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x74) }, |
1744 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x75) }, |
1745 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x78) }, |
1746 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x79) }, |
1747 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7A) }, |
1748 | @@ -742,6 +753,10 @@ static const struct usb_device_id option_ids[] = { |
1749 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6D) }, |
1750 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6E) }, |
1751 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6F) }, |
1752 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x72) }, |
1753 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x73) }, |
1754 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x74) }, |
1755 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x75) }, |
1756 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x78) }, |
1757 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x79) }, |
1758 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x7A) }, |
1759 | @@ -796,6 +811,10 @@ static const struct usb_device_id option_ids[] = { |
1760 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6D) }, |
1761 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6E) }, |
1762 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6F) }, |
1763 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x72) }, |
1764 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x73) }, |
1765 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x74) }, |
1766 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x75) }, |
1767 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x78) }, |
1768 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x79) }, |
1769 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x7A) }, |
1770 | @@ -850,6 +869,10 @@ static const struct usb_device_id option_ids[] = { |
1771 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6D) }, |
1772 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6E) }, |
1773 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6F) }, |
1774 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x72) }, |
1775 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x73) }, |
1776 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x74) }, |
1777 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x75) }, |
1778 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x78) }, |
1779 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x79) }, |
1780 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x7A) }, |
1781 | @@ -904,6 +927,10 @@ static const struct usb_device_id option_ids[] = { |
1782 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6D) }, |
1783 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6E) }, |
1784 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6F) }, |
1785 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x72) }, |
1786 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x73) }, |
1787 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x74) }, |
1788 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x75) }, |
1789 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x78) }, |
1790 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x79) }, |
1791 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7A) }, |
1792 | diff --git a/drivers/watchdog/sc1200wdt.c b/drivers/watchdog/sc1200wdt.c |
1793 | index 3fb83b0c28c2..ab6d3f56cbca 100644 |
1794 | --- a/drivers/watchdog/sc1200wdt.c |
1795 | +++ b/drivers/watchdog/sc1200wdt.c |
1796 | @@ -409,8 +409,9 @@ static int __init sc1200wdt_init(void) |
1797 | #if defined CONFIG_PNP |
1798 | /* now that the user has specified an IO port and we haven't detected |
1799 | * any devices, disable pnp support */ |
1800 | + if (isapnp) |
1801 | + pnp_unregister_driver(&scl200wdt_pnp_driver); |
1802 | isapnp = 0; |
1803 | - pnp_unregister_driver(&scl200wdt_pnp_driver); |
1804 | #endif |
1805 | |
1806 | if (!request_region(io, io_len, SC1200_MODULE_NAME)) { |
1807 | diff --git a/fs/btrfs/acl.c b/fs/btrfs/acl.c |
1808 | index e15d2b0d8d3b..0890c83643e9 100644 |
1809 | --- a/fs/btrfs/acl.c |
1810 | +++ b/fs/btrfs/acl.c |
1811 | @@ -229,7 +229,7 @@ int btrfs_init_acl(struct btrfs_trans_handle *trans, |
1812 | if (ret > 0) { |
1813 | /* we need an acl */ |
1814 | ret = btrfs_set_acl(trans, inode, acl, ACL_TYPE_ACCESS); |
1815 | - } else { |
1816 | + } else if (ret < 0) { |
1817 | cache_no_acl(inode); |
1818 | } |
1819 | } else { |
1820 | diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c |
1821 | index 1e2288dc5346..0bcee78cde16 100644 |
1822 | --- a/fs/btrfs/inode.c |
1823 | +++ b/fs/btrfs/inode.c |
1824 | @@ -2419,10 +2419,23 @@ out_unlock: |
1825 | return ret; |
1826 | } |
1827 | |
1828 | +static void free_sa_defrag_extent(struct new_sa_defrag_extent *new) |
1829 | +{ |
1830 | + struct old_sa_defrag_extent *old, *tmp; |
1831 | + |
1832 | + if (!new) |
1833 | + return; |
1834 | + |
1835 | + list_for_each_entry_safe(old, tmp, &new->head, list) { |
1836 | + list_del(&old->list); |
1837 | + kfree(old); |
1838 | + } |
1839 | + kfree(new); |
1840 | +} |
1841 | + |
1842 | static void relink_file_extents(struct new_sa_defrag_extent *new) |
1843 | { |
1844 | struct btrfs_path *path; |
1845 | - struct old_sa_defrag_extent *old, *tmp; |
1846 | struct sa_defrag_extent_backref *backref; |
1847 | struct sa_defrag_extent_backref *prev = NULL; |
1848 | struct inode *inode; |
1849 | @@ -2465,16 +2478,11 @@ static void relink_file_extents(struct new_sa_defrag_extent *new) |
1850 | kfree(prev); |
1851 | |
1852 | btrfs_free_path(path); |
1853 | - |
1854 | - list_for_each_entry_safe(old, tmp, &new->head, list) { |
1855 | - list_del(&old->list); |
1856 | - kfree(old); |
1857 | - } |
1858 | out: |
1859 | + free_sa_defrag_extent(new); |
1860 | + |
1861 | atomic_dec(&root->fs_info->defrag_running); |
1862 | wake_up(&root->fs_info->transaction_wait); |
1863 | - |
1864 | - kfree(new); |
1865 | } |
1866 | |
1867 | static struct new_sa_defrag_extent * |
1868 | @@ -2484,7 +2492,7 @@ record_old_file_extents(struct inode *inode, |
1869 | struct btrfs_root *root = BTRFS_I(inode)->root; |
1870 | struct btrfs_path *path; |
1871 | struct btrfs_key key; |
1872 | - struct old_sa_defrag_extent *old, *tmp; |
1873 | + struct old_sa_defrag_extent *old; |
1874 | struct new_sa_defrag_extent *new; |
1875 | int ret; |
1876 | |
1877 | @@ -2532,7 +2540,7 @@ record_old_file_extents(struct inode *inode, |
1878 | if (slot >= btrfs_header_nritems(l)) { |
1879 | ret = btrfs_next_leaf(root, path); |
1880 | if (ret < 0) |
1881 | - goto out_free_list; |
1882 | + goto out_free_path; |
1883 | else if (ret > 0) |
1884 | break; |
1885 | continue; |
1886 | @@ -2561,7 +2569,7 @@ record_old_file_extents(struct inode *inode, |
1887 | |
1888 | old = kmalloc(sizeof(*old), GFP_NOFS); |
1889 | if (!old) |
1890 | - goto out_free_list; |
1891 | + goto out_free_path; |
1892 | |
1893 | offset = max(new->file_pos, key.offset); |
1894 | end = min(new->file_pos + new->len, key.offset + num_bytes); |
1895 | @@ -2583,15 +2591,10 @@ next: |
1896 | |
1897 | return new; |
1898 | |
1899 | -out_free_list: |
1900 | - list_for_each_entry_safe(old, tmp, &new->head, list) { |
1901 | - list_del(&old->list); |
1902 | - kfree(old); |
1903 | - } |
1904 | out_free_path: |
1905 | btrfs_free_path(path); |
1906 | out_kfree: |
1907 | - kfree(new); |
1908 | + free_sa_defrag_extent(new); |
1909 | return NULL; |
1910 | } |
1911 | |
1912 | @@ -2743,8 +2746,14 @@ out: |
1913 | btrfs_remove_ordered_extent(inode, ordered_extent); |
1914 | |
1915 | /* for snapshot-aware defrag */ |
1916 | - if (new) |
1917 | - relink_file_extents(new); |
1918 | + if (new) { |
1919 | + if (ret) { |
1920 | + free_sa_defrag_extent(new); |
1921 | + atomic_dec(&root->fs_info->defrag_running); |
1922 | + } else { |
1923 | + relink_file_extents(new); |
1924 | + } |
1925 | + } |
1926 | |
1927 | /* once for us */ |
1928 | btrfs_put_ordered_extent(ordered_extent); |
1929 | diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c |
1930 | index 8dedf4019672..145b2c75ab83 100644 |
1931 | --- a/fs/btrfs/ioctl.c |
1932 | +++ b/fs/btrfs/ioctl.c |
1933 | @@ -2093,7 +2093,7 @@ static noinline int btrfs_ioctl_snap_destroy(struct file *file, |
1934 | |
1935 | err = mutex_lock_killable_nested(&dir->i_mutex, I_MUTEX_PARENT); |
1936 | if (err == -EINTR) |
1937 | - goto out; |
1938 | + goto out_drop_write; |
1939 | dentry = lookup_one_len(vol_args->name, parent, namelen); |
1940 | if (IS_ERR(dentry)) { |
1941 | err = PTR_ERR(dentry); |
1942 | @@ -2235,6 +2235,7 @@ out_dput: |
1943 | dput(dentry); |
1944 | out_unlock_dir: |
1945 | mutex_unlock(&dir->i_mutex); |
1946 | +out_drop_write: |
1947 | mnt_drop_write_file(file); |
1948 | out: |
1949 | kfree(vol_args); |
1950 | diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c |
1951 | index 09ea0bdde65f..256a9a46d544 100644 |
1952 | --- a/fs/btrfs/send.c |
1953 | +++ b/fs/btrfs/send.c |
1954 | @@ -4623,8 +4623,8 @@ long btrfs_ioctl_send(struct file *mnt_file, void __user *arg_) |
1955 | } |
1956 | |
1957 | if (!access_ok(VERIFY_READ, arg->clone_sources, |
1958 | - sizeof(*arg->clone_sources * |
1959 | - arg->clone_sources_count))) { |
1960 | + sizeof(*arg->clone_sources) * |
1961 | + arg->clone_sources_count)) { |
1962 | ret = -EFAULT; |
1963 | goto out; |
1964 | } |
1965 | diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c |
1966 | index cf68596b51fb..bca436330681 100644 |
1967 | --- a/fs/btrfs/tree-log.c |
1968 | +++ b/fs/btrfs/tree-log.c |
1969 | @@ -3314,7 +3314,7 @@ static int log_one_extent(struct btrfs_trans_handle *trans, |
1970 | btrfs_set_token_file_extent_type(leaf, fi, |
1971 | BTRFS_FILE_EXTENT_REG, |
1972 | &token); |
1973 | - if (em->block_start == 0) |
1974 | + if (em->block_start == EXTENT_MAP_HOLE) |
1975 | skip_csum = true; |
1976 | } |
1977 | |
1978 | diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c |
1979 | index 8bffb9174afb..b6c23c4abae2 100644 |
1980 | --- a/fs/btrfs/volumes.c |
1981 | +++ b/fs/btrfs/volumes.c |
1982 | @@ -4248,6 +4248,7 @@ int btrfs_num_copies(struct btrfs_fs_info *fs_info, u64 logical, u64 len) |
1983 | btrfs_emerg(fs_info, "Invalid mapping for %Lu-%Lu, got " |
1984 | "%Lu-%Lu\n", logical, logical+len, em->start, |
1985 | em->start + em->len); |
1986 | + free_extent_map(em); |
1987 | return 1; |
1988 | } |
1989 | |
1990 | @@ -4429,6 +4430,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int rw, |
1991 | btrfs_crit(fs_info, "found a bad mapping, wanted %Lu, " |
1992 | "found %Lu-%Lu\n", logical, em->start, |
1993 | em->start + em->len); |
1994 | + free_extent_map(em); |
1995 | return -EINVAL; |
1996 | } |
1997 | |
1998 | diff --git a/fs/nfs/blocklayout/extents.c b/fs/nfs/blocklayout/extents.c |
1999 | index 9c3e117c3ed1..4d0161442565 100644 |
2000 | --- a/fs/nfs/blocklayout/extents.c |
2001 | +++ b/fs/nfs/blocklayout/extents.c |
2002 | @@ -44,7 +44,7 @@ |
2003 | static inline sector_t normalize(sector_t s, int base) |
2004 | { |
2005 | sector_t tmp = s; /* Since do_div modifies its argument */ |
2006 | - return s - do_div(tmp, base); |
2007 | + return s - sector_div(tmp, base); |
2008 | } |
2009 | |
2010 | static inline sector_t normalize_up(sector_t s, int base) |
2011 | diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c |
2012 | index 23881380dc6f..75e49d42a7fb 100644 |
2013 | --- a/fs/nfs/nfs4proc.c |
2014 | +++ b/fs/nfs/nfs4proc.c |
2015 | @@ -4222,8 +4222,7 @@ nfs4_async_handle_error(struct rpc_task *task, const struct nfs_server *server, |
2016 | dprintk("%s ERROR %d, Reset session\n", __func__, |
2017 | task->tk_status); |
2018 | nfs4_schedule_session_recovery(clp->cl_session, task->tk_status); |
2019 | - task->tk_status = 0; |
2020 | - return -EAGAIN; |
2021 | + goto wait_on_recovery; |
2022 | #endif /* CONFIG_NFS_V4_1 */ |
2023 | case -NFS4ERR_DELAY: |
2024 | nfs_inc_server_stats(server, NFSIOS_DELAY); |
2025 | diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c |
2026 | index e76244edd748..ec8d97ddc635 100644 |
2027 | --- a/fs/nfsd/nfscache.c |
2028 | +++ b/fs/nfsd/nfscache.c |
2029 | @@ -129,6 +129,13 @@ nfsd_reply_cache_alloc(void) |
2030 | } |
2031 | |
2032 | static void |
2033 | +nfsd_reply_cache_unhash(struct svc_cacherep *rp) |
2034 | +{ |
2035 | + hlist_del_init(&rp->c_hash); |
2036 | + list_del_init(&rp->c_lru); |
2037 | +} |
2038 | + |
2039 | +static void |
2040 | nfsd_reply_cache_free_locked(struct svc_cacherep *rp) |
2041 | { |
2042 | if (rp->c_type == RC_REPLBUFF && rp->c_replvec.iov_base) { |
2043 | @@ -403,7 +410,7 @@ nfsd_cache_lookup(struct svc_rqst *rqstp) |
2044 | rp = list_first_entry(&lru_head, struct svc_cacherep, c_lru); |
2045 | if (nfsd_cache_entry_expired(rp) || |
2046 | num_drc_entries >= max_drc_entries) { |
2047 | - lru_put_end(rp); |
2048 | + nfsd_reply_cache_unhash(rp); |
2049 | prune_cache_entries(); |
2050 | goto search_cache; |
2051 | } |
2052 | diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c |
2053 | index 3c3644ea825b..2288db4e1784 100644 |
2054 | --- a/fs/xfs/xfs_fsops.c |
2055 | +++ b/fs/xfs/xfs_fsops.c |
2056 | @@ -216,6 +216,8 @@ xfs_growfs_data_private( |
2057 | */ |
2058 | nfree = 0; |
2059 | for (agno = nagcount - 1; agno >= oagcount; agno--, new -= agsize) { |
2060 | + __be32 *agfl_bno; |
2061 | + |
2062 | /* |
2063 | * AG freespace header block |
2064 | */ |
2065 | @@ -275,8 +277,10 @@ xfs_growfs_data_private( |
2066 | agfl->agfl_seqno = cpu_to_be32(agno); |
2067 | uuid_copy(&agfl->agfl_uuid, &mp->m_sb.sb_uuid); |
2068 | } |
2069 | + |
2070 | + agfl_bno = XFS_BUF_TO_AGFL_BNO(mp, bp); |
2071 | for (bucket = 0; bucket < XFS_AGFL_SIZE(mp); bucket++) |
2072 | - agfl->agfl_bno[bucket] = cpu_to_be32(NULLAGBLOCK); |
2073 | + agfl_bno[bucket] = cpu_to_be32(NULLAGBLOCK); |
2074 | |
2075 | error = xfs_bwrite(bp); |
2076 | xfs_buf_relse(bp); |
2077 | diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c |
2078 | index ca01d830e989..83dfe6e73235 100644 |
2079 | --- a/fs/xfs/xfs_ioctl.c |
2080 | +++ b/fs/xfs/xfs_ioctl.c |
2081 | @@ -409,7 +409,8 @@ xfs_attrlist_by_handle( |
2082 | return -XFS_ERROR(EPERM); |
2083 | if (copy_from_user(&al_hreq, arg, sizeof(xfs_fsop_attrlist_handlereq_t))) |
2084 | return -XFS_ERROR(EFAULT); |
2085 | - if (al_hreq.buflen > XATTR_LIST_MAX) |
2086 | + if (al_hreq.buflen < sizeof(struct attrlist) || |
2087 | + al_hreq.buflen > XATTR_LIST_MAX) |
2088 | return -XFS_ERROR(EINVAL); |
2089 | |
2090 | /* |
2091 | diff --git a/fs/xfs/xfs_ioctl32.c b/fs/xfs/xfs_ioctl32.c |
2092 | index c0c66259cc91..68799d7f02cc 100644 |
2093 | --- a/fs/xfs/xfs_ioctl32.c |
2094 | +++ b/fs/xfs/xfs_ioctl32.c |
2095 | @@ -359,7 +359,8 @@ xfs_compat_attrlist_by_handle( |
2096 | if (copy_from_user(&al_hreq, arg, |
2097 | sizeof(compat_xfs_fsop_attrlist_handlereq_t))) |
2098 | return -XFS_ERROR(EFAULT); |
2099 | - if (al_hreq.buflen > XATTR_LIST_MAX) |
2100 | + if (al_hreq.buflen < sizeof(struct attrlist) || |
2101 | + al_hreq.buflen > XATTR_LIST_MAX) |
2102 | return -XFS_ERROR(EINVAL); |
2103 | |
2104 | /* |
2105 | diff --git a/include/linux/compiler-intel.h b/include/linux/compiler-intel.h |
2106 | index 973ce10c40b6..dc1bd3dcf11f 100644 |
2107 | --- a/include/linux/compiler-intel.h |
2108 | +++ b/include/linux/compiler-intel.h |
2109 | @@ -28,8 +28,6 @@ |
2110 | |
2111 | #endif |
2112 | |
2113 | -#define uninitialized_var(x) x |
2114 | - |
2115 | #ifndef __HAVE_BUILTIN_BSWAP16__ |
2116 | /* icc has this, but it's called _bswap16 */ |
2117 | #define __HAVE_BUILTIN_BSWAP16__ |
2118 | diff --git a/include/linux/kexec.h b/include/linux/kexec.h |
2119 | index d78d28a733b1..5fd33dc1fe3a 100644 |
2120 | --- a/include/linux/kexec.h |
2121 | +++ b/include/linux/kexec.h |
2122 | @@ -198,6 +198,9 @@ extern u32 vmcoreinfo_note[VMCOREINFO_NOTE_SIZE/4]; |
2123 | extern size_t vmcoreinfo_size; |
2124 | extern size_t vmcoreinfo_max_size; |
2125 | |
2126 | +/* flag to track if kexec reboot is in progress */ |
2127 | +extern bool kexec_in_progress; |
2128 | + |
2129 | int __init parse_crashkernel(char *cmdline, unsigned long long system_ram, |
2130 | unsigned long long *crash_size, unsigned long long *crash_base); |
2131 | int parse_crashkernel_high(char *cmdline, unsigned long long system_ram, |
2132 | diff --git a/include/sound/memalloc.h b/include/sound/memalloc.h |
2133 | index cf15b8213df7..54aff2d73150 100644 |
2134 | --- a/include/sound/memalloc.h |
2135 | +++ b/include/sound/memalloc.h |
2136 | @@ -103,7 +103,7 @@ static inline dma_addr_t snd_sgbuf_get_addr(struct snd_dma_buffer *dmab, |
2137 | { |
2138 | struct snd_sg_buf *sgbuf = dmab->private_data; |
2139 | dma_addr_t addr = sgbuf->table[offset >> PAGE_SHIFT].addr; |
2140 | - addr &= PAGE_MASK; |
2141 | + addr &= ~((dma_addr_t)PAGE_SIZE - 1); |
2142 | return addr + offset % PAGE_SIZE; |
2143 | } |
2144 | |
2145 | diff --git a/include/uapi/sound/compress_offload.h b/include/uapi/sound/compress_offload.h |
2146 | index d630163b9a2e..5759810e1c1b 100644 |
2147 | --- a/include/uapi/sound/compress_offload.h |
2148 | +++ b/include/uapi/sound/compress_offload.h |
2149 | @@ -30,7 +30,7 @@ |
2150 | #include <sound/compress_params.h> |
2151 | |
2152 | |
2153 | -#define SNDRV_COMPRESS_VERSION SNDRV_PROTOCOL_VERSION(0, 1, 1) |
2154 | +#define SNDRV_COMPRESS_VERSION SNDRV_PROTOCOL_VERSION(0, 1, 2) |
2155 | /** |
2156 | * struct snd_compressed_buffer: compressed buffer |
2157 | * @fragment_size: size of buffer fragment in bytes |
2158 | @@ -67,8 +67,8 @@ struct snd_compr_params { |
2159 | struct snd_compr_tstamp { |
2160 | __u32 byte_offset; |
2161 | __u32 copied_total; |
2162 | - snd_pcm_uframes_t pcm_frames; |
2163 | - snd_pcm_uframes_t pcm_io_frames; |
2164 | + __u32 pcm_frames; |
2165 | + __u32 pcm_io_frames; |
2166 | __u32 sampling_rate; |
2167 | }; |
2168 | |
2169 | diff --git a/kernel/futex.c b/kernel/futex.c |
2170 | index 49dacfb45745..a283b3041072 100644 |
2171 | --- a/kernel/futex.c |
2172 | +++ b/kernel/futex.c |
2173 | @@ -287,7 +287,7 @@ again: |
2174 | put_page(page); |
2175 | /* serialize against __split_huge_page_splitting() */ |
2176 | local_irq_disable(); |
2177 | - if (likely(__get_user_pages_fast(address, 1, 1, &page) == 1)) { |
2178 | + if (likely(__get_user_pages_fast(address, 1, !ro, &page) == 1)) { |
2179 | page_head = compound_head(page); |
2180 | /* |
2181 | * page_head is valid pointer but we must pin |
2182 | diff --git a/kernel/kexec.c b/kernel/kexec.c |
2183 | index 59f7b55ba745..1f8d9382dbac 100644 |
2184 | --- a/kernel/kexec.c |
2185 | +++ b/kernel/kexec.c |
2186 | @@ -47,6 +47,9 @@ u32 vmcoreinfo_note[VMCOREINFO_NOTE_SIZE/4]; |
2187 | size_t vmcoreinfo_size; |
2188 | size_t vmcoreinfo_max_size = sizeof(vmcoreinfo_data); |
2189 | |
2190 | +/* Flag to indicate we are going to kexec a new kernel */ |
2191 | +bool kexec_in_progress = false; |
2192 | + |
2193 | /* Location of the reserved area for the crash kernel */ |
2194 | struct resource crashk_res = { |
2195 | .name = "Crash kernel", |
2196 | @@ -1678,6 +1681,7 @@ int kernel_kexec(void) |
2197 | } else |
2198 | #endif |
2199 | { |
2200 | + kexec_in_progress = true; |
2201 | kernel_restart_prepare(NULL); |
2202 | printk(KERN_EMERG "Starting new kernel\n"); |
2203 | machine_shutdown(); |
2204 | diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c |
2205 | index 75024a673520..e745a1548367 100644 |
2206 | --- a/kernel/sched/debug.c |
2207 | +++ b/kernel/sched/debug.c |
2208 | @@ -224,6 +224,14 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq) |
2209 | SEQ_printf(m, " .%-30s: %d\n", "tg->runnable_avg", |
2210 | atomic_read(&cfs_rq->tg->runnable_avg)); |
2211 | #endif |
2212 | +#ifdef CONFIG_CFS_BANDWIDTH |
2213 | + SEQ_printf(m, " .%-30s: %d\n", "tg->cfs_bandwidth.timer_active", |
2214 | + cfs_rq->tg->cfs_bandwidth.timer_active); |
2215 | + SEQ_printf(m, " .%-30s: %d\n", "throttled", |
2216 | + cfs_rq->throttled); |
2217 | + SEQ_printf(m, " .%-30s: %d\n", "throttle_count", |
2218 | + cfs_rq->throttle_count); |
2219 | +#endif |
2220 | |
2221 | print_cfs_group_stats(m, cpu, cfs_rq->tg); |
2222 | #endif |
2223 | diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c |
2224 | index 009a62bb859d..da7eebb22b06 100644 |
2225 | --- a/kernel/sched/fair.c |
2226 | +++ b/kernel/sched/fair.c |
2227 | @@ -2288,6 +2288,8 @@ static void throttle_cfs_rq(struct cfs_rq *cfs_rq) |
2228 | cfs_rq->throttled_clock = rq->clock; |
2229 | raw_spin_lock(&cfs_b->lock); |
2230 | list_add_tail_rcu(&cfs_rq->throttled_list, &cfs_b->throttled_cfs_rq); |
2231 | + if (!cfs_b->timer_active) |
2232 | + __start_cfs_bandwidth(cfs_b); |
2233 | raw_spin_unlock(&cfs_b->lock); |
2234 | } |
2235 | |
2236 | diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c |
2237 | index 233f1911dc34..c3075b552248 100644 |
2238 | --- a/net/ipv4/udp.c |
2239 | +++ b/net/ipv4/udp.c |
2240 | @@ -1073,9 +1073,6 @@ int udp_sendpage(struct sock *sk, struct page *page, int offset, |
2241 | if (flags & MSG_SENDPAGE_NOTLAST) |
2242 | flags |= MSG_MORE; |
2243 | |
2244 | - if (flags & MSG_SENDPAGE_NOTLAST) |
2245 | - flags |= MSG_MORE; |
2246 | - |
2247 | if (!up->pending) { |
2248 | struct msghdr msg = { .msg_flags = flags|MSG_MORE }; |
2249 | |
2250 | diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c |
2251 | index 0516ebbea80b..209bb4d6e188 100644 |
2252 | --- a/net/ipv6/ip6_tunnel.c |
2253 | +++ b/net/ipv6/ip6_tunnel.c |
2254 | @@ -1711,8 +1711,6 @@ static void __net_exit ip6_tnl_destroy_tunnels(struct ip6_tnl_net *ip6n) |
2255 | } |
2256 | } |
2257 | |
2258 | - t = rtnl_dereference(ip6n->tnls_wc[0]); |
2259 | - unregister_netdevice_queue(t->dev, &list); |
2260 | unregister_netdevice_many(&list); |
2261 | } |
2262 | |
2263 | diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c |
2264 | index 5ab17b82605d..18687f1fca75 100644 |
2265 | --- a/net/mac80211/cfg.c |
2266 | +++ b/net/mac80211/cfg.c |
2267 | @@ -2356,8 +2356,7 @@ static int ieee80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev, |
2268 | struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); |
2269 | struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); |
2270 | |
2271 | - if (sdata->vif.type != NL80211_IFTYPE_STATION && |
2272 | - sdata->vif.type != NL80211_IFTYPE_MESH_POINT) |
2273 | + if (sdata->vif.type != NL80211_IFTYPE_STATION) |
2274 | return -EOPNOTSUPP; |
2275 | |
2276 | if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS)) |
2277 | diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c |
2278 | index ec09bcba9bae..fae73b0ef14b 100644 |
2279 | --- a/net/mac80211/rx.c |
2280 | +++ b/net/mac80211/rx.c |
2281 | @@ -864,7 +864,8 @@ static void ieee80211_rx_reorder_ampdu(struct ieee80211_rx_data *rx, |
2282 | u16 sc; |
2283 | u8 tid, ack_policy; |
2284 | |
2285 | - if (!ieee80211_is_data_qos(hdr->frame_control)) |
2286 | + if (!ieee80211_is_data_qos(hdr->frame_control) || |
2287 | + is_multicast_ether_addr(hdr->addr1)) |
2288 | goto dont_reorder; |
2289 | |
2290 | /* |
2291 | diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c |
2292 | index 5c6f2cd2d095..5e58d7dd7b69 100644 |
2293 | --- a/security/selinux/hooks.c |
2294 | +++ b/security/selinux/hooks.c |
2295 | @@ -53,6 +53,7 @@ |
2296 | #include <net/ip.h> /* for local_port_range[] */ |
2297 | #include <net/sock.h> |
2298 | #include <net/tcp.h> /* struct or_callable used in sock_rcv_skb */ |
2299 | +#include <net/inet_connection_sock.h> |
2300 | #include <net/net_namespace.h> |
2301 | #include <net/netlabel.h> |
2302 | #include <linux/uaccess.h> |
2303 | @@ -3736,6 +3737,30 @@ static int selinux_skb_peerlbl_sid(struct sk_buff *skb, u16 family, u32 *sid) |
2304 | return 0; |
2305 | } |
2306 | |
2307 | +/** |
2308 | + * selinux_conn_sid - Determine the child socket label for a connection |
2309 | + * @sk_sid: the parent socket's SID |
2310 | + * @skb_sid: the packet's SID |
2311 | + * @conn_sid: the resulting connection SID |
2312 | + * |
2313 | + * If @skb_sid is valid then the user:role:type information from @sk_sid is |
2314 | + * combined with the MLS information from @skb_sid in order to create |
2315 | + * @conn_sid. If @skb_sid is not valid then then @conn_sid is simply a copy |
2316 | + * of @sk_sid. Returns zero on success, negative values on failure. |
2317 | + * |
2318 | + */ |
2319 | +static int selinux_conn_sid(u32 sk_sid, u32 skb_sid, u32 *conn_sid) |
2320 | +{ |
2321 | + int err = 0; |
2322 | + |
2323 | + if (skb_sid != SECSID_NULL) |
2324 | + err = security_sid_mls_copy(sk_sid, skb_sid, conn_sid); |
2325 | + else |
2326 | + *conn_sid = sk_sid; |
2327 | + |
2328 | + return err; |
2329 | +} |
2330 | + |
2331 | /* socket security operations */ |
2332 | |
2333 | static int socket_sockcreate_sid(const struct task_security_struct *tsec, |
2334 | @@ -4342,7 +4367,7 @@ static int selinux_inet_conn_request(struct sock *sk, struct sk_buff *skb, |
2335 | struct sk_security_struct *sksec = sk->sk_security; |
2336 | int err; |
2337 | u16 family = sk->sk_family; |
2338 | - u32 newsid; |
2339 | + u32 connsid; |
2340 | u32 peersid; |
2341 | |
2342 | /* handle mapped IPv4 packets arriving via IPv6 sockets */ |
2343 | @@ -4352,16 +4377,11 @@ static int selinux_inet_conn_request(struct sock *sk, struct sk_buff *skb, |
2344 | err = selinux_skb_peerlbl_sid(skb, family, &peersid); |
2345 | if (err) |
2346 | return err; |
2347 | - if (peersid == SECSID_NULL) { |
2348 | - req->secid = sksec->sid; |
2349 | - req->peer_secid = SECSID_NULL; |
2350 | - } else { |
2351 | - err = security_sid_mls_copy(sksec->sid, peersid, &newsid); |
2352 | - if (err) |
2353 | - return err; |
2354 | - req->secid = newsid; |
2355 | - req->peer_secid = peersid; |
2356 | - } |
2357 | + err = selinux_conn_sid(sksec->sid, peersid, &connsid); |
2358 | + if (err) |
2359 | + return err; |
2360 | + req->secid = connsid; |
2361 | + req->peer_secid = peersid; |
2362 | |
2363 | return selinux_netlbl_inet_conn_request(req, family); |
2364 | } |
2365 | @@ -4621,6 +4641,7 @@ static unsigned int selinux_ipv6_forward(unsigned int hooknum, |
2366 | static unsigned int selinux_ip_output(struct sk_buff *skb, |
2367 | u16 family) |
2368 | { |
2369 | + struct sock *sk; |
2370 | u32 sid; |
2371 | |
2372 | if (!netlbl_enabled()) |
2373 | @@ -4629,8 +4650,27 @@ static unsigned int selinux_ip_output(struct sk_buff *skb, |
2374 | /* we do this in the LOCAL_OUT path and not the POST_ROUTING path |
2375 | * because we want to make sure we apply the necessary labeling |
2376 | * before IPsec is applied so we can leverage AH protection */ |
2377 | - if (skb->sk) { |
2378 | - struct sk_security_struct *sksec = skb->sk->sk_security; |
2379 | + sk = skb->sk; |
2380 | + if (sk) { |
2381 | + struct sk_security_struct *sksec; |
2382 | + |
2383 | + if (sk->sk_state == TCP_LISTEN) |
2384 | + /* if the socket is the listening state then this |
2385 | + * packet is a SYN-ACK packet which means it needs to |
2386 | + * be labeled based on the connection/request_sock and |
2387 | + * not the parent socket. unfortunately, we can't |
2388 | + * lookup the request_sock yet as it isn't queued on |
2389 | + * the parent socket until after the SYN-ACK is sent. |
2390 | + * the "solution" is to simply pass the packet as-is |
2391 | + * as any IP option based labeling should be copied |
2392 | + * from the initial connection request (in the IP |
2393 | + * layer). it is far from ideal, but until we get a |
2394 | + * security label in the packet itself this is the |
2395 | + * best we can do. */ |
2396 | + return NF_ACCEPT; |
2397 | + |
2398 | + /* standard practice, label using the parent socket */ |
2399 | + sksec = sk->sk_security; |
2400 | sid = sksec->sid; |
2401 | } else |
2402 | sid = SECINITSID_KERNEL; |
2403 | @@ -4715,12 +4755,12 @@ static unsigned int selinux_ip_postroute(struct sk_buff *skb, int ifindex, |
2404 | if (!secmark_active && !peerlbl_active) |
2405 | return NF_ACCEPT; |
2406 | |
2407 | - /* if the packet is being forwarded then get the peer label from the |
2408 | - * packet itself; otherwise check to see if it is from a local |
2409 | - * application or the kernel, if from an application get the peer label |
2410 | - * from the sending socket, otherwise use the kernel's sid */ |
2411 | sk = skb->sk; |
2412 | if (sk == NULL) { |
2413 | + /* Without an associated socket the packet is either coming |
2414 | + * from the kernel or it is being forwarded; check the packet |
2415 | + * to determine which and if the packet is being forwarded |
2416 | + * query the packet directly to determine the security label. */ |
2417 | if (skb->skb_iif) { |
2418 | secmark_perm = PACKET__FORWARD_OUT; |
2419 | if (selinux_skb_peerlbl_sid(skb, family, &peer_sid)) |
2420 | @@ -4729,7 +4769,26 @@ static unsigned int selinux_ip_postroute(struct sk_buff *skb, int ifindex, |
2421 | secmark_perm = PACKET__SEND; |
2422 | peer_sid = SECINITSID_KERNEL; |
2423 | } |
2424 | + } else if (sk->sk_state == TCP_LISTEN) { |
2425 | + /* Locally generated packet but the associated socket is in the |
2426 | + * listening state which means this is a SYN-ACK packet. In |
2427 | + * this particular case the correct security label is assigned |
2428 | + * to the connection/request_sock but unfortunately we can't |
2429 | + * query the request_sock as it isn't queued on the parent |
2430 | + * socket until after the SYN-ACK packet is sent; the only |
2431 | + * viable choice is to regenerate the label like we do in |
2432 | + * selinux_inet_conn_request(). See also selinux_ip_output() |
2433 | + * for similar problems. */ |
2434 | + u32 skb_sid; |
2435 | + struct sk_security_struct *sksec = sk->sk_security; |
2436 | + if (selinux_skb_peerlbl_sid(skb, family, &skb_sid)) |
2437 | + return NF_DROP; |
2438 | + if (selinux_conn_sid(sksec->sid, skb_sid, &peer_sid)) |
2439 | + return NF_DROP; |
2440 | + secmark_perm = PACKET__SEND; |
2441 | } else { |
2442 | + /* Locally generated packet, fetch the security label from the |
2443 | + * associated socket. */ |
2444 | struct sk_security_struct *sksec = sk->sk_security; |
2445 | peer_sid = sksec->sid; |
2446 | secmark_perm = PACKET__SEND; |
2447 | diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c |
2448 | index 7975031312cb..8536266e4004 100644 |
2449 | --- a/sound/pci/hda/hda_generic.c |
2450 | +++ b/sound/pci/hda/hda_generic.c |
2451 | @@ -468,6 +468,20 @@ static void invalidate_nid_path(struct hda_codec *codec, int idx) |
2452 | memset(path, 0, sizeof(*path)); |
2453 | } |
2454 | |
2455 | +/* return a DAC if paired to the given pin by codec driver */ |
2456 | +static hda_nid_t get_preferred_dac(struct hda_codec *codec, hda_nid_t pin) |
2457 | +{ |
2458 | + struct hda_gen_spec *spec = codec->spec; |
2459 | + const hda_nid_t *list = spec->preferred_dacs; |
2460 | + |
2461 | + if (!list) |
2462 | + return 0; |
2463 | + for (; *list; list += 2) |
2464 | + if (*list == pin) |
2465 | + return list[1]; |
2466 | + return 0; |
2467 | +} |
2468 | + |
2469 | /* look for an empty DAC slot */ |
2470 | static hda_nid_t look_for_dac(struct hda_codec *codec, hda_nid_t pin, |
2471 | bool is_digital) |
2472 | @@ -1134,7 +1148,14 @@ static int try_assign_dacs(struct hda_codec *codec, int num_outs, |
2473 | continue; |
2474 | } |
2475 | |
2476 | - dacs[i] = look_for_dac(codec, pin, false); |
2477 | + dacs[i] = get_preferred_dac(codec, pin); |
2478 | + if (dacs[i]) { |
2479 | + if (is_dac_already_used(codec, dacs[i])) |
2480 | + badness += bad->shared_primary; |
2481 | + } |
2482 | + |
2483 | + if (!dacs[i]) |
2484 | + dacs[i] = look_for_dac(codec, pin, false); |
2485 | if (!dacs[i] && !i) { |
2486 | /* try to steal the DAC of surrounds for the front */ |
2487 | for (j = 1; j < num_outs; j++) { |
2488 | @@ -4201,6 +4222,26 @@ static unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec, |
2489 | return AC_PWRST_D3; |
2490 | } |
2491 | |
2492 | +/* mute all aamix inputs initially; parse up to the first leaves */ |
2493 | +static void mute_all_mixer_nid(struct hda_codec *codec, hda_nid_t mix) |
2494 | +{ |
2495 | + int i, nums; |
2496 | + const hda_nid_t *conn; |
2497 | + bool has_amp; |
2498 | + |
2499 | + nums = snd_hda_get_conn_list(codec, mix, &conn); |
2500 | + has_amp = nid_has_mute(codec, mix, HDA_INPUT); |
2501 | + for (i = 0; i < nums; i++) { |
2502 | + if (has_amp) |
2503 | + snd_hda_codec_amp_stereo(codec, mix, |
2504 | + HDA_INPUT, i, |
2505 | + 0xff, HDA_AMP_MUTE); |
2506 | + else if (nid_has_volume(codec, conn[i], HDA_OUTPUT)) |
2507 | + snd_hda_codec_amp_stereo(codec, conn[i], |
2508 | + HDA_OUTPUT, 0, |
2509 | + 0xff, HDA_AMP_MUTE); |
2510 | + } |
2511 | +} |
2512 | |
2513 | /* |
2514 | * Parse the given BIOS configuration and set up the hda_gen_spec |
2515 | @@ -4339,6 +4380,10 @@ int snd_hda_gen_parse_auto_config(struct hda_codec *codec, |
2516 | } |
2517 | } |
2518 | |
2519 | + /* mute all aamix input initially */ |
2520 | + if (spec->mixer_nid) |
2521 | + mute_all_mixer_nid(codec, spec->mixer_nid); |
2522 | + |
2523 | dig_only: |
2524 | parse_digital(codec); |
2525 | |
2526 | diff --git a/sound/pci/hda/hda_generic.h b/sound/pci/hda/hda_generic.h |
2527 | index 76200314ee95..a18a1005002f 100644 |
2528 | --- a/sound/pci/hda/hda_generic.h |
2529 | +++ b/sound/pci/hda/hda_generic.h |
2530 | @@ -241,6 +241,9 @@ struct hda_gen_spec { |
2531 | const struct badness_table *main_out_badness; |
2532 | const struct badness_table *extra_out_badness; |
2533 | |
2534 | + /* preferred pin/DAC pairs; an array of paired NIDs */ |
2535 | + const hda_nid_t *preferred_dacs; |
2536 | + |
2537 | /* loopback mixing mode */ |
2538 | bool aamix_mode; |
2539 | |
2540 | diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c |
2541 | index e17b55a95bc5..a7b07f72c9dd 100644 |
2542 | --- a/sound/pci/hda/patch_analog.c |
2543 | +++ b/sound/pci/hda/patch_analog.c |
2544 | @@ -1227,6 +1227,14 @@ static int ad1986a_parse_auto_config(struct hda_codec *codec) |
2545 | { |
2546 | int err; |
2547 | struct ad198x_spec *spec; |
2548 | + static hda_nid_t preferred_pairs[] = { |
2549 | + 0x1a, 0x03, |
2550 | + 0x1b, 0x03, |
2551 | + 0x1c, 0x04, |
2552 | + 0x1d, 0x05, |
2553 | + 0x1e, 0x03, |
2554 | + 0 |
2555 | + }; |
2556 | |
2557 | err = alloc_ad_spec(codec); |
2558 | if (err < 0) |
2559 | @@ -1247,6 +1255,8 @@ static int ad1986a_parse_auto_config(struct hda_codec *codec) |
2560 | * So, let's disable the shared stream. |
2561 | */ |
2562 | spec->gen.multiout.no_share_stream = 1; |
2563 | + /* give fixed DAC/pin pairs */ |
2564 | + spec->gen.preferred_dacs = preferred_pairs; |
2565 | |
2566 | snd_hda_pick_fixup(codec, NULL, ad1986a_fixup_tbl, ad1986a_fixups); |
2567 | snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); |
2568 | diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c |
2569 | index b93799201578..8c1d1cf0c0cd 100644 |
2570 | --- a/sound/pci/hda/patch_hdmi.c |
2571 | +++ b/sound/pci/hda/patch_hdmi.c |
2572 | @@ -2001,8 +2001,9 @@ static int simple_playback_build_controls(struct hda_codec *codec) |
2573 | int err; |
2574 | |
2575 | per_cvt = get_cvt(spec, 0); |
2576 | - err = snd_hda_create_spdif_out_ctls(codec, per_cvt->cvt_nid, |
2577 | - per_cvt->cvt_nid); |
2578 | + err = snd_hda_create_dig_out_ctls(codec, per_cvt->cvt_nid, |
2579 | + per_cvt->cvt_nid, |
2580 | + HDA_PCM_TYPE_HDMI); |
2581 | if (err < 0) |
2582 | return err; |
2583 | return simple_hdmi_build_jack(codec, 0); |
2584 | diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c |
2585 | index 302681c4aa44..eb99458f5b68 100644 |
2586 | --- a/virt/kvm/kvm_main.c |
2587 | +++ b/virt/kvm/kvm_main.c |
2588 | @@ -1904,6 +1904,9 @@ static int kvm_vm_ioctl_create_vcpu(struct kvm *kvm, u32 id) |
2589 | int r; |
2590 | struct kvm_vcpu *vcpu, *v; |
2591 | |
2592 | + if (id >= KVM_MAX_VCPUS) |
2593 | + return -EINVAL; |
2594 | + |
2595 | vcpu = kvm_arch_vcpu_create(kvm, id); |
2596 | if (IS_ERR(vcpu)) |
2597 | return PTR_ERR(vcpu); |