Contents of /trunk/kernel-alx/patches-3.10/0176-3.10.77-all-fixes.patch
Parent Directory | Revision Log
Revision 2664 -
(show annotations)
(download)
Tue Jul 21 16:20:24 2015 UTC (9 years, 2 months ago) by niro
File size: 63477 byte(s)
Tue Jul 21 16:20:24 2015 UTC (9 years, 2 months ago) by niro
File size: 63477 byte(s)
-linux-3.10.77
1 | diff --git a/Makefile b/Makefile |
2 | index 019a6a4b386d..923ad8a64e3b 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,6 +1,6 @@ |
6 | VERSION = 3 |
7 | PATCHLEVEL = 10 |
8 | -SUBLEVEL = 76 |
9 | +SUBLEVEL = 77 |
10 | EXTRAVERSION = |
11 | NAME = TOSSUG Baby Fish |
12 | |
13 | diff --git a/arch/arm/include/asm/elf.h b/arch/arm/include/asm/elf.h |
14 | index 56211f2084ef..ce6e30628cc1 100644 |
15 | --- a/arch/arm/include/asm/elf.h |
16 | +++ b/arch/arm/include/asm/elf.h |
17 | @@ -116,7 +116,7 @@ int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs); |
18 | the loader. We need to make sure that it is out of the way of the program |
19 | that it will "exec", and that there is sufficient room for the brk. */ |
20 | |
21 | -#define ELF_ET_DYN_BASE (2 * TASK_SIZE / 3) |
22 | +#define ELF_ET_DYN_BASE (TASK_SIZE / 3 * 2) |
23 | |
24 | /* When the program starts, a1 contains a pointer to a function to be |
25 | registered with atexit, as per the SVR4 ABI. A value of 0 means we |
26 | diff --git a/arch/arm/mach-s3c64xx/crag6410.h b/arch/arm/mach-s3c64xx/crag6410.h |
27 | index 4c3c9994fc2c..81dc722ced57 100644 |
28 | --- a/arch/arm/mach-s3c64xx/crag6410.h |
29 | +++ b/arch/arm/mach-s3c64xx/crag6410.h |
30 | @@ -14,6 +14,7 @@ |
31 | #include <linux/gpio.h> |
32 | |
33 | #define GLENFARCLAS_PMIC_IRQ_BASE IRQ_BOARD_START |
34 | +#define BANFF_PMIC_IRQ_BASE (IRQ_BOARD_START + 64) |
35 | |
36 | #define PCA935X_GPIO_BASE GPIO_BOARD_START |
37 | #define CODEC_GPIO_BASE (GPIO_BOARD_START + 8) |
38 | diff --git a/arch/arm/mach-s3c64xx/mach-crag6410.c b/arch/arm/mach-s3c64xx/mach-crag6410.c |
39 | index 8ad88ace795a..5fa9ac9104e1 100644 |
40 | --- a/arch/arm/mach-s3c64xx/mach-crag6410.c |
41 | +++ b/arch/arm/mach-s3c64xx/mach-crag6410.c |
42 | @@ -558,6 +558,7 @@ static struct wm831x_touch_pdata touch_pdata = { |
43 | |
44 | static struct wm831x_pdata crag_pmic_pdata = { |
45 | .wm831x_num = 1, |
46 | + .irq_base = BANFF_PMIC_IRQ_BASE, |
47 | .gpio_base = BANFF_PMIC_GPIO_BASE, |
48 | .soft_shutdown = true, |
49 | |
50 | diff --git a/arch/arm64/include/asm/timex.h b/arch/arm64/include/asm/timex.h |
51 | index b24a31a7e2c9..81a076eb37fa 100644 |
52 | --- a/arch/arm64/include/asm/timex.h |
53 | +++ b/arch/arm64/include/asm/timex.h |
54 | @@ -16,14 +16,14 @@ |
55 | #ifndef __ASM_TIMEX_H |
56 | #define __ASM_TIMEX_H |
57 | |
58 | +#include <asm/arch_timer.h> |
59 | + |
60 | /* |
61 | * Use the current timer as a cycle counter since this is what we use for |
62 | * the delay loop. |
63 | */ |
64 | -#define get_cycles() ({ cycles_t c; read_current_timer(&c); c; }) |
65 | +#define get_cycles() arch_counter_get_cntvct() |
66 | |
67 | #include <asm-generic/timex.h> |
68 | |
69 | -#define ARCH_HAS_READ_CURRENT_TIMER |
70 | - |
71 | #endif |
72 | diff --git a/arch/arm64/kernel/time.c b/arch/arm64/kernel/time.c |
73 | index a551f88ae2c1..03dc3718eb13 100644 |
74 | --- a/arch/arm64/kernel/time.c |
75 | +++ b/arch/arm64/kernel/time.c |
76 | @@ -68,12 +68,6 @@ unsigned long long notrace sched_clock(void) |
77 | return arch_timer_read_counter() * sched_clock_mult; |
78 | } |
79 | |
80 | -int read_current_timer(unsigned long *timer_value) |
81 | -{ |
82 | - *timer_value = arch_timer_read_counter(); |
83 | - return 0; |
84 | -} |
85 | - |
86 | void __init time_init(void) |
87 | { |
88 | u32 arch_timer_rate; |
89 | diff --git a/arch/c6x/kernel/time.c b/arch/c6x/kernel/time.c |
90 | index 356ee84cad95..04845aaf5985 100644 |
91 | --- a/arch/c6x/kernel/time.c |
92 | +++ b/arch/c6x/kernel/time.c |
93 | @@ -49,7 +49,7 @@ u64 sched_clock(void) |
94 | return (tsc * sched_clock_multiplier) >> SCHED_CLOCK_SHIFT; |
95 | } |
96 | |
97 | -void time_init(void) |
98 | +void __init time_init(void) |
99 | { |
100 | u64 tmp = (u64)NSEC_PER_SEC << SCHED_CLOCK_SHIFT; |
101 | |
102 | diff --git a/arch/mips/include/asm/suspend.h b/arch/mips/include/asm/suspend.h |
103 | deleted file mode 100644 |
104 | index 3adac3b53d19..000000000000 |
105 | --- a/arch/mips/include/asm/suspend.h |
106 | +++ /dev/null |
107 | @@ -1,7 +0,0 @@ |
108 | -#ifndef __ASM_SUSPEND_H |
109 | -#define __ASM_SUSPEND_H |
110 | - |
111 | -/* References to section boundaries */ |
112 | -extern const void __nosave_begin, __nosave_end; |
113 | - |
114 | -#endif /* __ASM_SUSPEND_H */ |
115 | diff --git a/arch/mips/power/cpu.c b/arch/mips/power/cpu.c |
116 | index 521e5963df05..2129e67723ff 100644 |
117 | --- a/arch/mips/power/cpu.c |
118 | +++ b/arch/mips/power/cpu.c |
119 | @@ -7,7 +7,7 @@ |
120 | * Author: Hu Hongbing <huhb@lemote.com> |
121 | * Wu Zhangjin <wuzhangjin@gmail.com> |
122 | */ |
123 | -#include <asm/suspend.h> |
124 | +#include <asm/sections.h> |
125 | #include <asm/fpu.h> |
126 | #include <asm/dsp.h> |
127 | |
128 | diff --git a/arch/mips/power/hibernate.S b/arch/mips/power/hibernate.S |
129 | index 32a7c828f073..e7567c8a9e79 100644 |
130 | --- a/arch/mips/power/hibernate.S |
131 | +++ b/arch/mips/power/hibernate.S |
132 | @@ -30,6 +30,8 @@ LEAF(swsusp_arch_suspend) |
133 | END(swsusp_arch_suspend) |
134 | |
135 | LEAF(swsusp_arch_resume) |
136 | + /* Avoid TLB mismatch during and after kernel resume */ |
137 | + jal local_flush_tlb_all |
138 | PTR_L t0, restore_pblist |
139 | 0: |
140 | PTR_L t1, PBE_ADDRESS(t0) /* source */ |
141 | @@ -43,7 +45,6 @@ LEAF(swsusp_arch_resume) |
142 | bne t1, t3, 1b |
143 | PTR_L t0, PBE_NEXT(t0) |
144 | bnez t0, 0b |
145 | - jal local_flush_tlb_all /* Avoid TLB mismatch after kernel resume */ |
146 | PTR_LA t0, saved_regs |
147 | PTR_L ra, PT_R31(t0) |
148 | PTR_L sp, PT_R29(t0) |
149 | diff --git a/arch/powerpc/kernel/suspend.c b/arch/powerpc/kernel/suspend.c |
150 | index 0167d53da30c..a531154cc0f3 100644 |
151 | --- a/arch/powerpc/kernel/suspend.c |
152 | +++ b/arch/powerpc/kernel/suspend.c |
153 | @@ -9,9 +9,7 @@ |
154 | |
155 | #include <linux/mm.h> |
156 | #include <asm/page.h> |
157 | - |
158 | -/* References to section boundaries */ |
159 | -extern const void __nosave_begin, __nosave_end; |
160 | +#include <asm/sections.h> |
161 | |
162 | /* |
163 | * pfn_is_nosave - check if given pfn is in the 'nosave' section |
164 | diff --git a/arch/powerpc/perf/callchain.c b/arch/powerpc/perf/callchain.c |
165 | index 2396dda282cd..ead55351b254 100644 |
166 | --- a/arch/powerpc/perf/callchain.c |
167 | +++ b/arch/powerpc/perf/callchain.c |
168 | @@ -243,7 +243,7 @@ static void perf_callchain_user_64(struct perf_callchain_entry *entry, |
169 | sp = regs->gpr[1]; |
170 | perf_callchain_store(entry, next_ip); |
171 | |
172 | - for (;;) { |
173 | + while (entry->nr < PERF_MAX_STACK_DEPTH) { |
174 | fp = (unsigned long __user *) sp; |
175 | if (!valid_user_sp(sp, 1) || read_user_stack_64(fp, &next_sp)) |
176 | return; |
177 | diff --git a/arch/s390/kernel/suspend.c b/arch/s390/kernel/suspend.c |
178 | index c479d2f9605b..58cbb75e89e9 100644 |
179 | --- a/arch/s390/kernel/suspend.c |
180 | +++ b/arch/s390/kernel/suspend.c |
181 | @@ -9,12 +9,9 @@ |
182 | #include <linux/pfn.h> |
183 | #include <linux/suspend.h> |
184 | #include <linux/mm.h> |
185 | +#include <asm/sections.h> |
186 | #include <asm/ctl_reg.h> |
187 | - |
188 | -/* |
189 | - * References to section boundaries |
190 | - */ |
191 | -extern const void __nosave_begin, __nosave_end; |
192 | +#include <asm/ipl.h> |
193 | |
194 | /* |
195 | * The restore of the saved pages in an hibernation image will set |
196 | @@ -138,6 +135,8 @@ int pfn_is_nosave(unsigned long pfn) |
197 | { |
198 | unsigned long nosave_begin_pfn = PFN_DOWN(__pa(&__nosave_begin)); |
199 | unsigned long nosave_end_pfn = PFN_DOWN(__pa(&__nosave_end)); |
200 | + unsigned long eshared_pfn = PFN_DOWN(__pa(&_eshared)) - 1; |
201 | + unsigned long stext_pfn = PFN_DOWN(__pa(&_stext)); |
202 | |
203 | /* Always save lowcore pages (LC protection might be enabled). */ |
204 | if (pfn <= LC_PAGES) |
205 | @@ -145,6 +144,8 @@ int pfn_is_nosave(unsigned long pfn) |
206 | if (pfn >= nosave_begin_pfn && pfn < nosave_end_pfn) |
207 | return 1; |
208 | /* Skip memory holes and read-only pages (NSS, DCSS, ...). */ |
209 | + if (pfn >= stext_pfn && pfn <= eshared_pfn) |
210 | + return ipl_info.type == IPL_TYPE_NSS ? 1 : 0; |
211 | if (tprot(PFN_PHYS(pfn))) |
212 | return 1; |
213 | return 0; |
214 | diff --git a/arch/s390/kvm/priv.c b/arch/s390/kvm/priv.c |
215 | index 6bbd7b5a0bbe..0220c2ba7590 100644 |
216 | --- a/arch/s390/kvm/priv.c |
217 | +++ b/arch/s390/kvm/priv.c |
218 | @@ -328,6 +328,7 @@ static void handle_stsi_3_2_2(struct kvm_vcpu *vcpu, struct sysinfo_3_2_2 *mem) |
219 | for (n = mem->count - 1; n > 0 ; n--) |
220 | memcpy(&mem->vm[n], &mem->vm[n - 1], sizeof(mem->vm[0])); |
221 | |
222 | + memset(&mem->vm[0], 0, sizeof(mem->vm[0])); |
223 | mem->vm[0].cpus_total = cpus; |
224 | mem->vm[0].cpus_configured = cpus; |
225 | mem->vm[0].cpus_standby = 0; |
226 | diff --git a/arch/sh/include/asm/sections.h b/arch/sh/include/asm/sections.h |
227 | index 1b6199740e98..7a99e6af6372 100644 |
228 | --- a/arch/sh/include/asm/sections.h |
229 | +++ b/arch/sh/include/asm/sections.h |
230 | @@ -3,7 +3,6 @@ |
231 | |
232 | #include <asm-generic/sections.h> |
233 | |
234 | -extern long __nosave_begin, __nosave_end; |
235 | extern long __machvec_start, __machvec_end; |
236 | extern char __uncached_start, __uncached_end; |
237 | extern char __start_eh_frame[], __stop_eh_frame[]; |
238 | diff --git a/arch/sparc/power/hibernate.c b/arch/sparc/power/hibernate.c |
239 | index 42b0b8ce699a..17bd2e167e07 100644 |
240 | --- a/arch/sparc/power/hibernate.c |
241 | +++ b/arch/sparc/power/hibernate.c |
242 | @@ -9,11 +9,9 @@ |
243 | #include <asm/hibernate.h> |
244 | #include <asm/visasm.h> |
245 | #include <asm/page.h> |
246 | +#include <asm/sections.h> |
247 | #include <asm/tlb.h> |
248 | |
249 | -/* References to section boundaries */ |
250 | -extern const void __nosave_begin, __nosave_end; |
251 | - |
252 | struct saved_context saved_context; |
253 | |
254 | /* |
255 | diff --git a/arch/unicore32/include/mach/pm.h b/arch/unicore32/include/mach/pm.h |
256 | index 4dcd34ae194c..77b522694e74 100644 |
257 | --- a/arch/unicore32/include/mach/pm.h |
258 | +++ b/arch/unicore32/include/mach/pm.h |
259 | @@ -36,8 +36,5 @@ extern int puv3_pm_enter(suspend_state_t state); |
260 | /* Defined in hibernate_asm.S */ |
261 | extern int restore_image(pgd_t *resume_pg_dir, struct pbe *restore_pblist); |
262 | |
263 | -/* References to section boundaries */ |
264 | -extern const void __nosave_begin, __nosave_end; |
265 | - |
266 | extern struct pbe *restore_pblist; |
267 | #endif |
268 | diff --git a/arch/unicore32/kernel/hibernate.c b/arch/unicore32/kernel/hibernate.c |
269 | index d75ef8b6cb56..9969ec374abb 100644 |
270 | --- a/arch/unicore32/kernel/hibernate.c |
271 | +++ b/arch/unicore32/kernel/hibernate.c |
272 | @@ -18,6 +18,7 @@ |
273 | #include <asm/page.h> |
274 | #include <asm/pgtable.h> |
275 | #include <asm/pgalloc.h> |
276 | +#include <asm/sections.h> |
277 | #include <asm/suspend.h> |
278 | |
279 | #include "mach/pm.h" |
280 | diff --git a/arch/x86/power/hibernate_32.c b/arch/x86/power/hibernate_32.c |
281 | index 7d28c885d238..291226b952a9 100644 |
282 | --- a/arch/x86/power/hibernate_32.c |
283 | +++ b/arch/x86/power/hibernate_32.c |
284 | @@ -13,13 +13,11 @@ |
285 | #include <asm/page.h> |
286 | #include <asm/pgtable.h> |
287 | #include <asm/mmzone.h> |
288 | +#include <asm/sections.h> |
289 | |
290 | /* Defined in hibernate_asm_32.S */ |
291 | extern int restore_image(void); |
292 | |
293 | -/* References to section boundaries */ |
294 | -extern const void __nosave_begin, __nosave_end; |
295 | - |
296 | /* Pointer to the temporary resume page tables */ |
297 | pgd_t *resume_pg_dir; |
298 | |
299 | diff --git a/arch/x86/power/hibernate_64.c b/arch/x86/power/hibernate_64.c |
300 | index a0fde91c16cf..8ecaed127634 100644 |
301 | --- a/arch/x86/power/hibernate_64.c |
302 | +++ b/arch/x86/power/hibernate_64.c |
303 | @@ -17,11 +17,9 @@ |
304 | #include <asm/page.h> |
305 | #include <asm/pgtable.h> |
306 | #include <asm/mtrr.h> |
307 | +#include <asm/sections.h> |
308 | #include <asm/suspend.h> |
309 | |
310 | -/* References to section boundaries */ |
311 | -extern const void __nosave_begin, __nosave_end; |
312 | - |
313 | /* Defined in hibernate_asm_64.S */ |
314 | extern int restore_image(void); |
315 | |
316 | diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig |
317 | index 0a1b95f81a32..2b086a6ae6c7 100644 |
318 | --- a/arch/xtensa/Kconfig |
319 | +++ b/arch/xtensa/Kconfig |
320 | @@ -287,6 +287,36 @@ menu "Executable file formats" |
321 | |
322 | source "fs/Kconfig.binfmt" |
323 | |
324 | +config XTFPGA_LCD |
325 | + bool "Enable XTFPGA LCD driver" |
326 | + depends on XTENSA_PLATFORM_XTFPGA |
327 | + default n |
328 | + help |
329 | + There's a 2x16 LCD on most of XTFPGA boards, kernel may output |
330 | + progress messages there during bootup/shutdown. It may be useful |
331 | + during board bringup. |
332 | + |
333 | + If unsure, say N. |
334 | + |
335 | +config XTFPGA_LCD_BASE_ADDR |
336 | + hex "XTFPGA LCD base address" |
337 | + depends on XTFPGA_LCD |
338 | + default "0x0d0c0000" |
339 | + help |
340 | + Base address of the LCD controller inside KIO region. |
341 | + Different boards from XTFPGA family have LCD controller at different |
342 | + addresses. Please consult prototyping user guide for your board for |
343 | + the correct address. Wrong address here may lead to hardware lockup. |
344 | + |
345 | +config XTFPGA_LCD_8BIT_ACCESS |
346 | + bool "Use 8-bit access to XTFPGA LCD" |
347 | + depends on XTFPGA_LCD |
348 | + default n |
349 | + help |
350 | + LCD may be connected with 4- or 8-bit interface, 8-bit access may |
351 | + only be used with 8-bit interface. Please consult prototyping user |
352 | + guide for your board for the correct interface width. |
353 | + |
354 | endmenu |
355 | |
356 | source "net/Kconfig" |
357 | diff --git a/arch/xtensa/include/uapi/asm/unistd.h b/arch/xtensa/include/uapi/asm/unistd.h |
358 | index 513effd48060..d07c1886bc8f 100644 |
359 | --- a/arch/xtensa/include/uapi/asm/unistd.h |
360 | +++ b/arch/xtensa/include/uapi/asm/unistd.h |
361 | @@ -715,7 +715,7 @@ __SYSCALL(323, sys_process_vm_writev, 6) |
362 | __SYSCALL(324, sys_name_to_handle_at, 5) |
363 | #define __NR_open_by_handle_at 325 |
364 | __SYSCALL(325, sys_open_by_handle_at, 3) |
365 | -#define __NR_sync_file_range 326 |
366 | +#define __NR_sync_file_range2 326 |
367 | __SYSCALL(326, sys_sync_file_range2, 6) |
368 | #define __NR_perf_event_open 327 |
369 | __SYSCALL(327, sys_perf_event_open, 5) |
370 | diff --git a/arch/xtensa/platforms/xtfpga/Makefile b/arch/xtensa/platforms/xtfpga/Makefile |
371 | index b9ae206340cd..7839d38b2337 100644 |
372 | --- a/arch/xtensa/platforms/xtfpga/Makefile |
373 | +++ b/arch/xtensa/platforms/xtfpga/Makefile |
374 | @@ -6,4 +6,5 @@ |
375 | # |
376 | # Note 2! The CFLAGS definitions are in the main makefile... |
377 | |
378 | -obj-y = setup.o lcd.o |
379 | +obj-y += setup.o |
380 | +obj-$(CONFIG_XTFPGA_LCD) += lcd.o |
381 | diff --git a/arch/xtensa/platforms/xtfpga/include/platform/hardware.h b/arch/xtensa/platforms/xtfpga/include/platform/hardware.h |
382 | index 4416773cbde5..b39fbcf5c611 100644 |
383 | --- a/arch/xtensa/platforms/xtfpga/include/platform/hardware.h |
384 | +++ b/arch/xtensa/platforms/xtfpga/include/platform/hardware.h |
385 | @@ -44,9 +44,6 @@ |
386 | |
387 | /* UART */ |
388 | #define DUART16552_PADDR (XCHAL_KIO_PADDR + 0x0D050020) |
389 | -/* LCD instruction and data addresses. */ |
390 | -#define LCD_INSTR_ADDR ((char *)IOADDR(0x0D040000)) |
391 | -#define LCD_DATA_ADDR ((char *)IOADDR(0x0D040004)) |
392 | |
393 | /* Misc. */ |
394 | #define XTFPGA_FPGAREGS_VADDR IOADDR(0x0D020000) |
395 | diff --git a/arch/xtensa/platforms/xtfpga/include/platform/lcd.h b/arch/xtensa/platforms/xtfpga/include/platform/lcd.h |
396 | index 0e435645af5a..4c8541ed1139 100644 |
397 | --- a/arch/xtensa/platforms/xtfpga/include/platform/lcd.h |
398 | +++ b/arch/xtensa/platforms/xtfpga/include/platform/lcd.h |
399 | @@ -11,10 +11,25 @@ |
400 | #ifndef __XTENSA_XTAVNET_LCD_H |
401 | #define __XTENSA_XTAVNET_LCD_H |
402 | |
403 | +#ifdef CONFIG_XTFPGA_LCD |
404 | /* Display string STR at position POS on the LCD. */ |
405 | void lcd_disp_at_pos(char *str, unsigned char pos); |
406 | |
407 | /* Shift the contents of the LCD display left or right. */ |
408 | void lcd_shiftleft(void); |
409 | void lcd_shiftright(void); |
410 | +#else |
411 | +static inline void lcd_disp_at_pos(char *str, unsigned char pos) |
412 | +{ |
413 | +} |
414 | + |
415 | +static inline void lcd_shiftleft(void) |
416 | +{ |
417 | +} |
418 | + |
419 | +static inline void lcd_shiftright(void) |
420 | +{ |
421 | +} |
422 | +#endif |
423 | + |
424 | #endif |
425 | diff --git a/arch/xtensa/platforms/xtfpga/lcd.c b/arch/xtensa/platforms/xtfpga/lcd.c |
426 | index 2872301598df..4dc0c1b43f4b 100644 |
427 | --- a/arch/xtensa/platforms/xtfpga/lcd.c |
428 | +++ b/arch/xtensa/platforms/xtfpga/lcd.c |
429 | @@ -1,50 +1,63 @@ |
430 | /* |
431 | - * Driver for the LCD display on the Tensilica LX60 Board. |
432 | + * Driver for the LCD display on the Tensilica XTFPGA board family. |
433 | + * http://www.mytechcorp.com/cfdata/productFile/File1/MOC-16216B-B-A0A04.pdf |
434 | * |
435 | * This file is subject to the terms and conditions of the GNU General Public |
436 | * License. See the file "COPYING" in the main directory of this archive |
437 | * for more details. |
438 | * |
439 | * Copyright (C) 2001, 2006 Tensilica Inc. |
440 | + * Copyright (C) 2015 Cadence Design Systems Inc. |
441 | */ |
442 | |
443 | -/* |
444 | - * |
445 | - * FIXME: this code is from the examples from the LX60 user guide. |
446 | - * |
447 | - * The lcd_pause function does busy waiting, which is probably not |
448 | - * great. Maybe the code could be changed to use kernel timers, or |
449 | - * change the hardware to not need to wait. |
450 | - */ |
451 | - |
452 | +#include <linux/delay.h> |
453 | #include <linux/init.h> |
454 | #include <linux/io.h> |
455 | |
456 | #include <platform/hardware.h> |
457 | #include <platform/lcd.h> |
458 | -#include <linux/delay.h> |
459 | |
460 | -#define LCD_PAUSE_ITERATIONS 4000 |
461 | +/* LCD instruction and data addresses. */ |
462 | +#define LCD_INSTR_ADDR ((char *)IOADDR(CONFIG_XTFPGA_LCD_BASE_ADDR)) |
463 | +#define LCD_DATA_ADDR (LCD_INSTR_ADDR + 4) |
464 | + |
465 | #define LCD_CLEAR 0x1 |
466 | #define LCD_DISPLAY_ON 0xc |
467 | |
468 | /* 8bit and 2 lines display */ |
469 | #define LCD_DISPLAY_MODE8BIT 0x38 |
470 | +#define LCD_DISPLAY_MODE4BIT 0x28 |
471 | #define LCD_DISPLAY_POS 0x80 |
472 | #define LCD_SHIFT_LEFT 0x18 |
473 | #define LCD_SHIFT_RIGHT 0x1c |
474 | |
475 | +static void lcd_put_byte(u8 *addr, u8 data) |
476 | +{ |
477 | +#ifdef CONFIG_XTFPGA_LCD_8BIT_ACCESS |
478 | + ACCESS_ONCE(*addr) = data; |
479 | +#else |
480 | + ACCESS_ONCE(*addr) = data & 0xf0; |
481 | + ACCESS_ONCE(*addr) = (data << 4) & 0xf0; |
482 | +#endif |
483 | +} |
484 | + |
485 | static int __init lcd_init(void) |
486 | { |
487 | - *LCD_INSTR_ADDR = LCD_DISPLAY_MODE8BIT; |
488 | + ACCESS_ONCE(*LCD_INSTR_ADDR) = LCD_DISPLAY_MODE8BIT; |
489 | mdelay(5); |
490 | - *LCD_INSTR_ADDR = LCD_DISPLAY_MODE8BIT; |
491 | + ACCESS_ONCE(*LCD_INSTR_ADDR) = LCD_DISPLAY_MODE8BIT; |
492 | udelay(200); |
493 | - *LCD_INSTR_ADDR = LCD_DISPLAY_MODE8BIT; |
494 | + ACCESS_ONCE(*LCD_INSTR_ADDR) = LCD_DISPLAY_MODE8BIT; |
495 | + udelay(50); |
496 | +#ifndef CONFIG_XTFPGA_LCD_8BIT_ACCESS |
497 | + ACCESS_ONCE(*LCD_INSTR_ADDR) = LCD_DISPLAY_MODE4BIT; |
498 | + udelay(50); |
499 | + lcd_put_byte(LCD_INSTR_ADDR, LCD_DISPLAY_MODE4BIT); |
500 | udelay(50); |
501 | - *LCD_INSTR_ADDR = LCD_DISPLAY_ON; |
502 | +#endif |
503 | + lcd_put_byte(LCD_INSTR_ADDR, LCD_DISPLAY_ON); |
504 | udelay(50); |
505 | - *LCD_INSTR_ADDR = LCD_CLEAR; |
506 | + lcd_put_byte(LCD_INSTR_ADDR, LCD_CLEAR); |
507 | mdelay(10); |
508 | lcd_disp_at_pos("XTENSA LINUX", 0); |
509 | return 0; |
510 | @@ -52,10 +65,10 @@ static int __init lcd_init(void) |
511 | |
512 | void lcd_disp_at_pos(char *str, unsigned char pos) |
513 | { |
514 | - *LCD_INSTR_ADDR = LCD_DISPLAY_POS | pos; |
515 | + lcd_put_byte(LCD_INSTR_ADDR, LCD_DISPLAY_POS | pos); |
516 | udelay(100); |
517 | while (*str != 0) { |
518 | - *LCD_DATA_ADDR = *str; |
519 | + lcd_put_byte(LCD_DATA_ADDR, *str); |
520 | udelay(200); |
521 | str++; |
522 | } |
523 | @@ -63,13 +76,13 @@ void lcd_disp_at_pos(char *str, unsigned char pos) |
524 | |
525 | void lcd_shiftleft(void) |
526 | { |
527 | - *LCD_INSTR_ADDR = LCD_SHIFT_LEFT; |
528 | + lcd_put_byte(LCD_INSTR_ADDR, LCD_SHIFT_LEFT); |
529 | udelay(50); |
530 | } |
531 | |
532 | void lcd_shiftright(void) |
533 | { |
534 | - *LCD_INSTR_ADDR = LCD_SHIFT_RIGHT; |
535 | + lcd_put_byte(LCD_INSTR_ADDR, LCD_SHIFT_RIGHT); |
536 | udelay(50); |
537 | } |
538 | |
539 | diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h |
540 | index 7695b5dd9d2d..35287ab445cd 100644 |
541 | --- a/drivers/gpu/drm/i915/i915_reg.h |
542 | +++ b/drivers/gpu/drm/i915/i915_reg.h |
543 | @@ -909,6 +909,7 @@ |
544 | #define GMBUS_CYCLE_INDEX (2<<25) |
545 | #define GMBUS_CYCLE_STOP (4<<25) |
546 | #define GMBUS_BYTE_COUNT_SHIFT 16 |
547 | +#define GMBUS_BYTE_COUNT_MAX 256U |
548 | #define GMBUS_SLAVE_INDEX_SHIFT 8 |
549 | #define GMBUS_SLAVE_ADDR_SHIFT 1 |
550 | #define GMBUS_SLAVE_READ (1<<0) |
551 | diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c |
552 | index 639fe192997c..4a21e13cc58c 100644 |
553 | --- a/drivers/gpu/drm/i915/intel_i2c.c |
554 | +++ b/drivers/gpu/drm/i915/intel_i2c.c |
555 | @@ -276,18 +276,17 @@ gmbus_wait_idle(struct drm_i915_private *dev_priv) |
556 | } |
557 | |
558 | static int |
559 | -gmbus_xfer_read(struct drm_i915_private *dev_priv, struct i2c_msg *msg, |
560 | - u32 gmbus1_index) |
561 | +gmbus_xfer_read_chunk(struct drm_i915_private *dev_priv, |
562 | + unsigned short addr, u8 *buf, unsigned int len, |
563 | + u32 gmbus1_index) |
564 | { |
565 | int reg_offset = dev_priv->gpio_mmio_base; |
566 | - u16 len = msg->len; |
567 | - u8 *buf = msg->buf; |
568 | |
569 | I915_WRITE(GMBUS1 + reg_offset, |
570 | gmbus1_index | |
571 | GMBUS_CYCLE_WAIT | |
572 | (len << GMBUS_BYTE_COUNT_SHIFT) | |
573 | - (msg->addr << GMBUS_SLAVE_ADDR_SHIFT) | |
574 | + (addr << GMBUS_SLAVE_ADDR_SHIFT) | |
575 | GMBUS_SLAVE_READ | GMBUS_SW_RDY); |
576 | while (len) { |
577 | int ret; |
578 | @@ -309,11 +308,35 @@ gmbus_xfer_read(struct drm_i915_private *dev_priv, struct i2c_msg *msg, |
579 | } |
580 | |
581 | static int |
582 | -gmbus_xfer_write(struct drm_i915_private *dev_priv, struct i2c_msg *msg) |
583 | +gmbus_xfer_read(struct drm_i915_private *dev_priv, struct i2c_msg *msg, |
584 | + u32 gmbus1_index) |
585 | { |
586 | - int reg_offset = dev_priv->gpio_mmio_base; |
587 | - u16 len = msg->len; |
588 | u8 *buf = msg->buf; |
589 | + unsigned int rx_size = msg->len; |
590 | + unsigned int len; |
591 | + int ret; |
592 | + |
593 | + do { |
594 | + len = min(rx_size, GMBUS_BYTE_COUNT_MAX); |
595 | + |
596 | + ret = gmbus_xfer_read_chunk(dev_priv, msg->addr, |
597 | + buf, len, gmbus1_index); |
598 | + if (ret) |
599 | + return ret; |
600 | + |
601 | + rx_size -= len; |
602 | + buf += len; |
603 | + } while (rx_size != 0); |
604 | + |
605 | + return 0; |
606 | +} |
607 | + |
608 | +static int |
609 | +gmbus_xfer_write_chunk(struct drm_i915_private *dev_priv, |
610 | + unsigned short addr, u8 *buf, unsigned int len) |
611 | +{ |
612 | + int reg_offset = dev_priv->gpio_mmio_base; |
613 | + unsigned int chunk_size = len; |
614 | u32 val, loop; |
615 | |
616 | val = loop = 0; |
617 | @@ -325,8 +348,8 @@ gmbus_xfer_write(struct drm_i915_private *dev_priv, struct i2c_msg *msg) |
618 | I915_WRITE(GMBUS3 + reg_offset, val); |
619 | I915_WRITE(GMBUS1 + reg_offset, |
620 | GMBUS_CYCLE_WAIT | |
621 | - (msg->len << GMBUS_BYTE_COUNT_SHIFT) | |
622 | - (msg->addr << GMBUS_SLAVE_ADDR_SHIFT) | |
623 | + (chunk_size << GMBUS_BYTE_COUNT_SHIFT) | |
624 | + (addr << GMBUS_SLAVE_ADDR_SHIFT) | |
625 | GMBUS_SLAVE_WRITE | GMBUS_SW_RDY); |
626 | while (len) { |
627 | int ret; |
628 | @@ -343,6 +366,29 @@ gmbus_xfer_write(struct drm_i915_private *dev_priv, struct i2c_msg *msg) |
629 | if (ret) |
630 | return ret; |
631 | } |
632 | + |
633 | + return 0; |
634 | +} |
635 | + |
636 | +static int |
637 | +gmbus_xfer_write(struct drm_i915_private *dev_priv, struct i2c_msg *msg) |
638 | +{ |
639 | + u8 *buf = msg->buf; |
640 | + unsigned int tx_size = msg->len; |
641 | + unsigned int len; |
642 | + int ret; |
643 | + |
644 | + do { |
645 | + len = min(tx_size, GMBUS_BYTE_COUNT_MAX); |
646 | + |
647 | + ret = gmbus_xfer_write_chunk(dev_priv, msg->addr, buf, len); |
648 | + if (ret) |
649 | + return ret; |
650 | + |
651 | + buf += len; |
652 | + tx_size -= len; |
653 | + } while (tx_size != 0); |
654 | + |
655 | return 0; |
656 | } |
657 | |
658 | diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c |
659 | index 971dd8795b68..8ac333094991 100644 |
660 | --- a/drivers/gpu/drm/radeon/atombios_crtc.c |
661 | +++ b/drivers/gpu/drm/radeon/atombios_crtc.c |
662 | @@ -312,8 +312,10 @@ atombios_set_crtc_dtd_timing(struct drm_crtc *crtc, |
663 | misc |= ATOM_COMPOSITESYNC; |
664 | if (mode->flags & DRM_MODE_FLAG_INTERLACE) |
665 | misc |= ATOM_INTERLACE; |
666 | - if (mode->flags & DRM_MODE_FLAG_DBLSCAN) |
667 | + if (mode->flags & DRM_MODE_FLAG_DBLCLK) |
668 | misc |= ATOM_DOUBLE_CLOCK_MODE; |
669 | + if (mode->flags & DRM_MODE_FLAG_DBLSCAN) |
670 | + misc |= ATOM_H_REPLICATIONBY2 | ATOM_V_REPLICATIONBY2; |
671 | |
672 | args.susModeMiscInfo.usAccess = cpu_to_le16(misc); |
673 | args.ucCRTC = radeon_crtc->crtc_id; |
674 | @@ -356,8 +358,10 @@ static void atombios_crtc_set_timing(struct drm_crtc *crtc, |
675 | misc |= ATOM_COMPOSITESYNC; |
676 | if (mode->flags & DRM_MODE_FLAG_INTERLACE) |
677 | misc |= ATOM_INTERLACE; |
678 | - if (mode->flags & DRM_MODE_FLAG_DBLSCAN) |
679 | + if (mode->flags & DRM_MODE_FLAG_DBLCLK) |
680 | misc |= ATOM_DOUBLE_CLOCK_MODE; |
681 | + if (mode->flags & DRM_MODE_FLAG_DBLSCAN) |
682 | + misc |= ATOM_H_REPLICATIONBY2 | ATOM_V_REPLICATIONBY2; |
683 | |
684 | args.susModeMiscInfo.usAccess = cpu_to_le16(misc); |
685 | args.ucCRTC = radeon_crtc->crtc_id; |
686 | diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c |
687 | index 92f34de7aee9..05e6a7d13d4e 100644 |
688 | --- a/drivers/hv/channel.c |
689 | +++ b/drivers/hv/channel.c |
690 | @@ -169,7 +169,7 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size, |
691 | GFP_KERNEL); |
692 | if (!open_info) { |
693 | err = -ENOMEM; |
694 | - goto error0; |
695 | + goto error_gpadl; |
696 | } |
697 | |
698 | init_completion(&open_info->waitevent); |
699 | @@ -185,7 +185,7 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size, |
700 | |
701 | if (userdatalen > MAX_USER_DEFINED_BYTES) { |
702 | err = -EINVAL; |
703 | - goto error0; |
704 | + goto error_gpadl; |
705 | } |
706 | |
707 | if (userdatalen) |
708 | @@ -226,6 +226,9 @@ error1: |
709 | list_del(&open_info->msglistentry); |
710 | spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, flags); |
711 | |
712 | +error_gpadl: |
713 | + vmbus_teardown_gpadl(newchannel, newchannel->ringbuffer_gpadlhandle); |
714 | + |
715 | error0: |
716 | free_pages((unsigned long)out, |
717 | get_order(send_ringbuffer_size + recv_ringbuffer_size)); |
718 | diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c |
719 | index 48e31ed69dbf..9d539cbfc833 100644 |
720 | --- a/drivers/i2c/i2c-core.c |
721 | +++ b/drivers/i2c/i2c-core.c |
722 | @@ -206,6 +206,7 @@ int i2c_generic_scl_recovery(struct i2c_adapter *adap) |
723 | adap->bus_recovery_info->set_scl(adap, 1); |
724 | return i2c_generic_recovery(adap); |
725 | } |
726 | +EXPORT_SYMBOL_GPL(i2c_generic_scl_recovery); |
727 | |
728 | int i2c_generic_gpio_recovery(struct i2c_adapter *adap) |
729 | { |
730 | @@ -220,6 +221,7 @@ int i2c_generic_gpio_recovery(struct i2c_adapter *adap) |
731 | |
732 | return ret; |
733 | } |
734 | +EXPORT_SYMBOL_GPL(i2c_generic_gpio_recovery); |
735 | |
736 | int i2c_recover_bus(struct i2c_adapter *adap) |
737 | { |
738 | @@ -229,6 +231,7 @@ int i2c_recover_bus(struct i2c_adapter *adap) |
739 | dev_dbg(&adap->dev, "Trying i2c bus recovery\n"); |
740 | return adap->bus_recovery_info->recover_bus(adap); |
741 | } |
742 | +EXPORT_SYMBOL_GPL(i2c_recover_bus); |
743 | |
744 | static int i2c_device_probe(struct device *dev) |
745 | { |
746 | diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c |
747 | index 055ebebc07dd..c1fef27010d4 100644 |
748 | --- a/drivers/infiniband/core/umem.c |
749 | +++ b/drivers/infiniband/core/umem.c |
750 | @@ -94,12 +94,15 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr, |
751 | if (dmasync) |
752 | dma_set_attr(DMA_ATTR_WRITE_BARRIER, &attrs); |
753 | |
754 | + if (!size) |
755 | + return ERR_PTR(-EINVAL); |
756 | + |
757 | /* |
758 | * If the combination of the addr and size requested for this memory |
759 | * region causes an integer overflow, return error. |
760 | */ |
761 | - if ((PAGE_ALIGN(addr + size) <= size) || |
762 | - (PAGE_ALIGN(addr + size) <= addr)) |
763 | + if (((addr + size) < addr) || |
764 | + PAGE_ALIGN(addr + size) < (addr + size)) |
765 | return ERR_PTR(-EINVAL); |
766 | |
767 | if (!can_do_mlock()) |
768 | diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c |
769 | index 4f10af2905b5..262a18437ceb 100644 |
770 | --- a/drivers/infiniband/hw/mlx4/qp.c |
771 | +++ b/drivers/infiniband/hw/mlx4/qp.c |
772 | @@ -2174,8 +2174,7 @@ static int build_lso_seg(struct mlx4_wqe_lso_seg *wqe, struct ib_send_wr *wr, |
773 | |
774 | memcpy(wqe->header, wr->wr.ud.header, wr->wr.ud.hlen); |
775 | |
776 | - *lso_hdr_sz = cpu_to_be32((wr->wr.ud.mss - wr->wr.ud.hlen) << 16 | |
777 | - wr->wr.ud.hlen); |
778 | + *lso_hdr_sz = cpu_to_be32(wr->wr.ud.mss << 16 | wr->wr.ud.hlen); |
779 | *lso_seg_len = halign; |
780 | return 0; |
781 | } |
782 | diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c |
783 | index 85e75239c814..1af7df263368 100644 |
784 | --- a/drivers/input/mouse/elantech.c |
785 | +++ b/drivers/input/mouse/elantech.c |
786 | @@ -784,6 +784,21 @@ static psmouse_ret_t elantech_process_byte(struct psmouse *psmouse) |
787 | } |
788 | |
789 | /* |
790 | + * This writes the reg_07 value again to the hardware at the end of every |
791 | + * set_rate call because the register loses its value. reg_07 allows setting |
792 | + * absolute mode on v4 hardware |
793 | + */ |
794 | +static void elantech_set_rate_restore_reg_07(struct psmouse *psmouse, |
795 | + unsigned int rate) |
796 | +{ |
797 | + struct elantech_data *etd = psmouse->private; |
798 | + |
799 | + etd->original_set_rate(psmouse, rate); |
800 | + if (elantech_write_reg(psmouse, 0x07, etd->reg_07)) |
801 | + psmouse_err(psmouse, "restoring reg_07 failed\n"); |
802 | +} |
803 | + |
804 | +/* |
805 | * Put the touchpad into absolute mode |
806 | */ |
807 | static int elantech_set_absolute_mode(struct psmouse *psmouse) |
808 | @@ -985,6 +1000,8 @@ static int elantech_get_resolution_v4(struct psmouse *psmouse, |
809 | * Asus K53SV 0x450f01 78, 15, 0c 2 hw buttons |
810 | * Asus G46VW 0x460f02 00, 18, 0c 2 hw buttons |
811 | * Asus G750JX 0x360f00 00, 16, 0c 2 hw buttons |
812 | + * Asus TP500LN 0x381f17 10, 14, 0e clickpad |
813 | + * Asus X750JN 0x381f17 10, 14, 0e clickpad |
814 | * Asus UX31 0x361f00 20, 15, 0e clickpad |
815 | * Asus UX32VD 0x361f02 00, 15, 0e clickpad |
816 | * Avatar AVIU-145A2 0x361f00 ? clickpad |
817 | @@ -1452,6 +1469,11 @@ int elantech_init(struct psmouse *psmouse) |
818 | goto init_fail; |
819 | } |
820 | |
821 | + if (etd->fw_version == 0x381f17) { |
822 | + etd->original_set_rate = psmouse->set_rate; |
823 | + psmouse->set_rate = elantech_set_rate_restore_reg_07; |
824 | + } |
825 | + |
826 | if (elantech_set_input_params(psmouse)) { |
827 | psmouse_err(psmouse, "failed to query touchpad range.\n"); |
828 | goto init_fail; |
829 | diff --git a/drivers/input/mouse/elantech.h b/drivers/input/mouse/elantech.h |
830 | index c1c15ab6872d..13a12ccbff51 100644 |
831 | --- a/drivers/input/mouse/elantech.h |
832 | +++ b/drivers/input/mouse/elantech.h |
833 | @@ -138,6 +138,7 @@ struct elantech_data { |
834 | struct finger_pos mt[ETP_MAX_FINGERS]; |
835 | unsigned char parity[256]; |
836 | int (*send_cmd)(struct psmouse *psmouse, unsigned char c, unsigned char *param); |
837 | + void (*original_set_rate)(struct psmouse *psmouse, unsigned int rate); |
838 | }; |
839 | |
840 | #ifdef CONFIG_MOUSE_PS2_ELANTECH |
841 | diff --git a/drivers/media/usb/stk1160/stk1160-v4l.c b/drivers/media/usb/stk1160/stk1160-v4l.c |
842 | index a59153d2f8bf..518a5299ff0b 100644 |
843 | --- a/drivers/media/usb/stk1160/stk1160-v4l.c |
844 | +++ b/drivers/media/usb/stk1160/stk1160-v4l.c |
845 | @@ -245,6 +245,11 @@ static int stk1160_stop_streaming(struct stk1160 *dev) |
846 | if (mutex_lock_interruptible(&dev->v4l_lock)) |
847 | return -ERESTARTSYS; |
848 | |
849 | + /* |
850 | + * Once URBs are cancelled, the URB complete handler |
851 | + * won't be running. This is required to safely release the |
852 | + * current buffer (dev->isoc_ctl.buf). |
853 | + */ |
854 | stk1160_cancel_isoc(dev); |
855 | |
856 | /* |
857 | @@ -665,8 +670,16 @@ void stk1160_clear_queue(struct stk1160 *dev) |
858 | stk1160_info("buffer [%p/%d] aborted\n", |
859 | buf, buf->vb.v4l2_buf.index); |
860 | } |
861 | - /* It's important to clear current buffer */ |
862 | - dev->isoc_ctl.buf = NULL; |
863 | + |
864 | + /* It's important to release the current buffer */ |
865 | + if (dev->isoc_ctl.buf) { |
866 | + buf = dev->isoc_ctl.buf; |
867 | + dev->isoc_ctl.buf = NULL; |
868 | + |
869 | + vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR); |
870 | + stk1160_info("buffer [%p/%d] aborted\n", |
871 | + buf, buf->vb.v4l2_buf.index); |
872 | + } |
873 | spin_unlock_irqrestore(&dev->buf_lock, flags); |
874 | } |
875 | |
876 | diff --git a/drivers/memstick/core/mspro_block.c b/drivers/memstick/core/mspro_block.c |
877 | index f4176ca3a794..cdd61ab5c2b5 100644 |
878 | --- a/drivers/memstick/core/mspro_block.c |
879 | +++ b/drivers/memstick/core/mspro_block.c |
880 | @@ -758,7 +758,7 @@ static int mspro_block_complete_req(struct memstick_dev *card, int error) |
881 | |
882 | if (error || (card->current_mrq.tpc == MSPRO_CMD_STOP)) { |
883 | if (msb->data_dir == READ) { |
884 | - for (cnt = 0; cnt < msb->current_seg; cnt++) |
885 | + for (cnt = 0; cnt < msb->current_seg; cnt++) { |
886 | t_len += msb->req_sg[cnt].length |
887 | / msb->page_size; |
888 | |
889 | @@ -766,6 +766,7 @@ static int mspro_block_complete_req(struct memstick_dev *card, int error) |
890 | t_len += msb->current_page - 1; |
891 | |
892 | t_len *= msb->page_size; |
893 | + } |
894 | } |
895 | } else |
896 | t_len = blk_rq_bytes(msb->block_req); |
897 | diff --git a/drivers/mtd/ubi/attach.c b/drivers/mtd/ubi/attach.c |
898 | index c071d410488f..79d69bd26dd2 100644 |
899 | --- a/drivers/mtd/ubi/attach.c |
900 | +++ b/drivers/mtd/ubi/attach.c |
901 | @@ -408,7 +408,7 @@ int ubi_compare_lebs(struct ubi_device *ubi, const struct ubi_ainf_peb *aeb, |
902 | second_is_newer = !second_is_newer; |
903 | } else { |
904 | dbg_bld("PEB %d CRC is OK", pnum); |
905 | - bitflips = !!err; |
906 | + bitflips |= !!err; |
907 | } |
908 | mutex_unlock(&ubi->buf_mutex); |
909 | |
910 | diff --git a/drivers/mtd/ubi/cdev.c b/drivers/mtd/ubi/cdev.c |
911 | index 4f02848bb2bc..fc764e7976bd 100644 |
912 | --- a/drivers/mtd/ubi/cdev.c |
913 | +++ b/drivers/mtd/ubi/cdev.c |
914 | @@ -475,7 +475,7 @@ static long vol_cdev_ioctl(struct file *file, unsigned int cmd, |
915 | /* Validate the request */ |
916 | err = -EINVAL; |
917 | if (req.lnum < 0 || req.lnum >= vol->reserved_pebs || |
918 | - req.bytes < 0 || req.lnum >= vol->usable_leb_size) |
919 | + req.bytes < 0 || req.bytes > vol->usable_leb_size) |
920 | break; |
921 | |
922 | err = get_exclusive(desc); |
923 | diff --git a/drivers/mtd/ubi/eba.c b/drivers/mtd/ubi/eba.c |
924 | index 0e11671dadc4..930cf2c77abb 100644 |
925 | --- a/drivers/mtd/ubi/eba.c |
926 | +++ b/drivers/mtd/ubi/eba.c |
927 | @@ -1362,7 +1362,8 @@ int ubi_eba_init(struct ubi_device *ubi, struct ubi_attach_info *ai) |
928 | * during re-size. |
929 | */ |
930 | ubi_move_aeb_to_list(av, aeb, &ai->erase); |
931 | - vol->eba_tbl[aeb->lnum] = aeb->pnum; |
932 | + else |
933 | + vol->eba_tbl[aeb->lnum] = aeb->pnum; |
934 | } |
935 | } |
936 | |
937 | diff --git a/drivers/mtd/ubi/wl.c b/drivers/mtd/ubi/wl.c |
938 | index 49e570abe58b..c08254016fe8 100644 |
939 | --- a/drivers/mtd/ubi/wl.c |
940 | +++ b/drivers/mtd/ubi/wl.c |
941 | @@ -999,7 +999,7 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk, |
942 | int cancel) |
943 | { |
944 | int err, scrubbing = 0, torture = 0, protect = 0, erroneous = 0; |
945 | - int vol_id = -1, uninitialized_var(lnum); |
946 | + int vol_id = -1, lnum = -1; |
947 | #ifdef CONFIG_MTD_UBI_FASTMAP |
948 | int anchor = wrk->anchor; |
949 | #endif |
950 | diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c |
951 | index 59ad007dd5aa..a978fc82ceb5 100644 |
952 | --- a/drivers/net/ethernet/intel/e1000/e1000_main.c |
953 | +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c |
954 | @@ -144,6 +144,11 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter, |
955 | static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter, |
956 | struct e1000_rx_ring *rx_ring, |
957 | int *work_done, int work_to_do); |
958 | +static void e1000_alloc_dummy_rx_buffers(struct e1000_adapter *adapter, |
959 | + struct e1000_rx_ring *rx_ring, |
960 | + int cleaned_count) |
961 | +{ |
962 | +} |
963 | static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter, |
964 | struct e1000_rx_ring *rx_ring, |
965 | int cleaned_count); |
966 | @@ -3555,8 +3560,11 @@ static int e1000_change_mtu(struct net_device *netdev, int new_mtu) |
967 | msleep(1); |
968 | /* e1000_down has a dependency on max_frame_size */ |
969 | hw->max_frame_size = max_frame; |
970 | - if (netif_running(netdev)) |
971 | + if (netif_running(netdev)) { |
972 | + /* prevent buffers from being reallocated */ |
973 | + adapter->alloc_rx_buf = e1000_alloc_dummy_rx_buffers; |
974 | e1000_down(adapter); |
975 | + } |
976 | |
977 | /* NOTE: netdev_alloc_skb reserves 16 bytes, and typically NET_IP_ALIGN |
978 | * means we reserve 2 more, this pushes us to allocate from the next |
979 | diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c |
980 | index e7a2af3ad05a..7555095e0b74 100644 |
981 | --- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c |
982 | +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c |
983 | @@ -313,6 +313,7 @@ static struct usb_device_id rtl8192c_usb_ids[] = { |
984 | {RTL_USB_DEVICE(0x07b8, 0x8188, rtl92cu_hal_cfg)}, /*Abocom - Abocom*/ |
985 | {RTL_USB_DEVICE(0x07b8, 0x8189, rtl92cu_hal_cfg)}, /*Funai - Abocom*/ |
986 | {RTL_USB_DEVICE(0x0846, 0x9041, rtl92cu_hal_cfg)}, /*NetGear WNA1000M*/ |
987 | + {RTL_USB_DEVICE(0x0b05, 0x17ba, rtl92cu_hal_cfg)}, /*ASUS-Edimax*/ |
988 | {RTL_USB_DEVICE(0x0bda, 0x5088, rtl92cu_hal_cfg)}, /*Thinkware-CC&C*/ |
989 | {RTL_USB_DEVICE(0x0df6, 0x0052, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/ |
990 | {RTL_USB_DEVICE(0x0df6, 0x005c, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/ |
991 | @@ -369,6 +370,7 @@ static struct usb_device_id rtl8192c_usb_ids[] = { |
992 | {RTL_USB_DEVICE(0x2001, 0x3307, rtl92cu_hal_cfg)}, /*D-Link-Cameo*/ |
993 | {RTL_USB_DEVICE(0x2001, 0x3309, rtl92cu_hal_cfg)}, /*D-Link-Alpha*/ |
994 | {RTL_USB_DEVICE(0x2001, 0x330a, rtl92cu_hal_cfg)}, /*D-Link-Alpha*/ |
995 | + {RTL_USB_DEVICE(0x2001, 0x330d, rtl92cu_hal_cfg)}, /*D-Link DWA-131 */ |
996 | {RTL_USB_DEVICE(0x2019, 0xab2b, rtl92cu_hal_cfg)}, /*Planex -Abocom*/ |
997 | {RTL_USB_DEVICE(0x20f4, 0x624d, rtl92cu_hal_cfg)}, /*TRENDNet*/ |
998 | {RTL_USB_DEVICE(0x2357, 0x0100, rtl92cu_hal_cfg)}, /*TP-Link WN8200ND*/ |
999 | diff --git a/drivers/net/wireless/ti/wl18xx/debugfs.c b/drivers/net/wireless/ti/wl18xx/debugfs.c |
1000 | index 7f1669cdea09..779dc2b2ca75 100644 |
1001 | --- a/drivers/net/wireless/ti/wl18xx/debugfs.c |
1002 | +++ b/drivers/net/wireless/ti/wl18xx/debugfs.c |
1003 | @@ -136,7 +136,7 @@ WL18XX_DEBUGFS_FWSTATS_FILE(rx_filter, protection_filter, "%u"); |
1004 | WL18XX_DEBUGFS_FWSTATS_FILE(rx_filter, accum_arp_pend_requests, "%u"); |
1005 | WL18XX_DEBUGFS_FWSTATS_FILE(rx_filter, max_arp_queue_dep, "%u"); |
1006 | |
1007 | -WL18XX_DEBUGFS_FWSTATS_FILE(rx_rate, rx_frames_per_rates, "%u"); |
1008 | +WL18XX_DEBUGFS_FWSTATS_FILE_ARRAY(rx_rate, rx_frames_per_rates, 50); |
1009 | |
1010 | WL18XX_DEBUGFS_FWSTATS_FILE_ARRAY(aggr_size, tx_agg_vs_rate, |
1011 | AGGR_STATS_TX_AGG*AGGR_STATS_TX_RATE); |
1012 | diff --git a/drivers/net/wireless/ti/wlcore/debugfs.h b/drivers/net/wireless/ti/wlcore/debugfs.h |
1013 | index f7381dd69009..1bce4325e86b 100644 |
1014 | --- a/drivers/net/wireless/ti/wlcore/debugfs.h |
1015 | +++ b/drivers/net/wireless/ti/wlcore/debugfs.h |
1016 | @@ -26,8 +26,8 @@ |
1017 | |
1018 | #include "wlcore.h" |
1019 | |
1020 | -int wl1271_format_buffer(char __user *userbuf, size_t count, |
1021 | - loff_t *ppos, char *fmt, ...); |
1022 | +__printf(4, 5) int wl1271_format_buffer(char __user *userbuf, size_t count, |
1023 | + loff_t *ppos, char *fmt, ...); |
1024 | |
1025 | int wl1271_debugfs_init(struct wl1271 *wl); |
1026 | void wl1271_debugfs_exit(struct wl1271 *wl); |
1027 | diff --git a/drivers/parport/Kconfig b/drivers/parport/Kconfig |
1028 | index a50576081b34..46d2de24bf3e 100644 |
1029 | --- a/drivers/parport/Kconfig |
1030 | +++ b/drivers/parport/Kconfig |
1031 | @@ -36,7 +36,9 @@ if PARPORT |
1032 | config PARPORT_PC |
1033 | tristate "PC-style hardware" |
1034 | depends on (!SPARC64 || PCI) && !SPARC32 && !M32R && !FRV && !S390 && \ |
1035 | - (!M68K || ISA) && !MN10300 && !AVR32 && !BLACKFIN && !XTENSA |
1036 | + (!M68K || ISA) && !MN10300 && !AVR32 && !BLACKFIN && \ |
1037 | + !XTENSA && !CRIS && !H8300 && !ARM64 |
1038 | + |
1039 | ---help--- |
1040 | You should say Y here if you have a PC-style parallel port. All |
1041 | IBM PC compatible computers and some Alphas have PC-style |
1042 | diff --git a/drivers/power/lp8788-charger.c b/drivers/power/lp8788-charger.c |
1043 | index ed49b50b220b..72da2a6c22db 100644 |
1044 | --- a/drivers/power/lp8788-charger.c |
1045 | +++ b/drivers/power/lp8788-charger.c |
1046 | @@ -417,8 +417,10 @@ static int lp8788_psy_register(struct platform_device *pdev, |
1047 | pchg->battery.num_properties = ARRAY_SIZE(lp8788_battery_prop); |
1048 | pchg->battery.get_property = lp8788_battery_get_property; |
1049 | |
1050 | - if (power_supply_register(&pdev->dev, &pchg->battery)) |
1051 | + if (power_supply_register(&pdev->dev, &pchg->battery)) { |
1052 | + power_supply_unregister(&pchg->charger); |
1053 | return -EPERM; |
1054 | + } |
1055 | |
1056 | return 0; |
1057 | } |
1058 | diff --git a/drivers/scsi/mvsas/mv_sas.c b/drivers/scsi/mvsas/mv_sas.c |
1059 | index c9e244984e30..fa50c7dc3d3e 100644 |
1060 | --- a/drivers/scsi/mvsas/mv_sas.c |
1061 | +++ b/drivers/scsi/mvsas/mv_sas.c |
1062 | @@ -441,14 +441,11 @@ static u32 mvs_get_ncq_tag(struct sas_task *task, u32 *tag) |
1063 | static int mvs_task_prep_ata(struct mvs_info *mvi, |
1064 | struct mvs_task_exec_info *tei) |
1065 | { |
1066 | - struct sas_ha_struct *sha = mvi->sas; |
1067 | struct sas_task *task = tei->task; |
1068 | struct domain_device *dev = task->dev; |
1069 | struct mvs_device *mvi_dev = dev->lldd_dev; |
1070 | struct mvs_cmd_hdr *hdr = tei->hdr; |
1071 | struct asd_sas_port *sas_port = dev->port; |
1072 | - struct sas_phy *sphy = dev->phy; |
1073 | - struct asd_sas_phy *sas_phy = sha->sas_phy[sphy->number]; |
1074 | struct mvs_slot_info *slot; |
1075 | void *buf_prd; |
1076 | u32 tag = tei->tag, hdr_tag; |
1077 | @@ -468,7 +465,7 @@ static int mvs_task_prep_ata(struct mvs_info *mvi, |
1078 | slot->tx = mvi->tx_prod; |
1079 | del_q = TXQ_MODE_I | tag | |
1080 | (TXQ_CMD_STP << TXQ_CMD_SHIFT) | |
1081 | - (MVS_PHY_ID << TXQ_PHY_SHIFT) | |
1082 | + ((sas_port->phy_mask & TXQ_PHY_MASK) << TXQ_PHY_SHIFT) | |
1083 | (mvi_dev->taskfileset << TXQ_SRS_SHIFT); |
1084 | mvi->tx[mvi->tx_prod] = cpu_to_le32(del_q); |
1085 | |
1086 | diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c |
1087 | index a8990783ba66..913b91c78a22 100644 |
1088 | --- a/drivers/scsi/storvsc_drv.c |
1089 | +++ b/drivers/scsi/storvsc_drv.c |
1090 | @@ -631,21 +631,22 @@ static unsigned int copy_to_bounce_buffer(struct scatterlist *orig_sgl, |
1091 | if (bounce_sgl[j].length == PAGE_SIZE) { |
1092 | /* full..move to next entry */ |
1093 | sg_kunmap_atomic(bounce_addr); |
1094 | + bounce_addr = 0; |
1095 | j++; |
1096 | + } |
1097 | |
1098 | - /* if we need to use another bounce buffer */ |
1099 | - if (srclen || i != orig_sgl_count - 1) |
1100 | - bounce_addr = sg_kmap_atomic(bounce_sgl,j); |
1101 | + /* if we need to use another bounce buffer */ |
1102 | + if (srclen && bounce_addr == 0) |
1103 | + bounce_addr = sg_kmap_atomic(bounce_sgl, j); |
1104 | |
1105 | - } else if (srclen == 0 && i == orig_sgl_count - 1) { |
1106 | - /* unmap the last bounce that is < PAGE_SIZE */ |
1107 | - sg_kunmap_atomic(bounce_addr); |
1108 | - } |
1109 | } |
1110 | |
1111 | sg_kunmap_atomic(src_addr - orig_sgl[i].offset); |
1112 | } |
1113 | |
1114 | + if (bounce_addr) |
1115 | + sg_kunmap_atomic(bounce_addr); |
1116 | + |
1117 | local_irq_restore(flags); |
1118 | |
1119 | return total_copied; |
1120 | diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c |
1121 | index 911e9e0711d2..a08f923b9925 100644 |
1122 | --- a/drivers/spi/spidev.c |
1123 | +++ b/drivers/spi/spidev.c |
1124 | @@ -243,7 +243,10 @@ static int spidev_message(struct spidev_data *spidev, |
1125 | k_tmp->len = u_tmp->len; |
1126 | |
1127 | total += k_tmp->len; |
1128 | - if (total > bufsiz) { |
1129 | + /* Check total length of transfers. Also check each |
1130 | + * transfer length to avoid arithmetic overflow. |
1131 | + */ |
1132 | + if (total > bufsiz || k_tmp->len > bufsiz) { |
1133 | status = -EMSGSIZE; |
1134 | goto done; |
1135 | } |
1136 | diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c |
1137 | index 6463ca3bcfba..07133d0c971b 100644 |
1138 | --- a/drivers/usb/class/cdc-wdm.c |
1139 | +++ b/drivers/usb/class/cdc-wdm.c |
1140 | @@ -244,7 +244,7 @@ static void wdm_int_callback(struct urb *urb) |
1141 | case USB_CDC_NOTIFY_RESPONSE_AVAILABLE: |
1142 | dev_dbg(&desc->intf->dev, |
1143 | "NOTIFY_RESPONSE_AVAILABLE received: index %d len %d", |
1144 | - dr->wIndex, dr->wLength); |
1145 | + le16_to_cpu(dr->wIndex), le16_to_cpu(dr->wLength)); |
1146 | break; |
1147 | |
1148 | case USB_CDC_NOTIFY_NETWORK_CONNECTION: |
1149 | @@ -257,7 +257,9 @@ static void wdm_int_callback(struct urb *urb) |
1150 | clear_bit(WDM_POLL_RUNNING, &desc->flags); |
1151 | dev_err(&desc->intf->dev, |
1152 | "unknown notification %d received: index %d len %d\n", |
1153 | - dr->bNotificationType, dr->wIndex, dr->wLength); |
1154 | + dr->bNotificationType, |
1155 | + le16_to_cpu(dr->wIndex), |
1156 | + le16_to_cpu(dr->wLength)); |
1157 | goto exit; |
1158 | } |
1159 | |
1160 | @@ -403,7 +405,7 @@ static ssize_t wdm_write |
1161 | USB_RECIP_INTERFACE); |
1162 | req->bRequest = USB_CDC_SEND_ENCAPSULATED_COMMAND; |
1163 | req->wValue = 0; |
1164 | - req->wIndex = desc->inum; |
1165 | + req->wIndex = desc->inum; /* already converted */ |
1166 | req->wLength = cpu_to_le16(count); |
1167 | set_bit(WDM_IN_USE, &desc->flags); |
1168 | desc->outbuf = buf; |
1169 | @@ -417,7 +419,7 @@ static ssize_t wdm_write |
1170 | rv = usb_translate_errors(rv); |
1171 | } else { |
1172 | dev_dbg(&desc->intf->dev, "Tx URB has been submitted index=%d", |
1173 | - req->wIndex); |
1174 | + le16_to_cpu(req->wIndex)); |
1175 | } |
1176 | out: |
1177 | usb_autopm_put_interface(desc->intf); |
1178 | @@ -780,7 +782,7 @@ static int wdm_create(struct usb_interface *intf, struct usb_endpoint_descriptor |
1179 | desc->irq->bRequestType = (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE); |
1180 | desc->irq->bRequest = USB_CDC_GET_ENCAPSULATED_RESPONSE; |
1181 | desc->irq->wValue = 0; |
1182 | - desc->irq->wIndex = desc->inum; |
1183 | + desc->irq->wIndex = desc->inum; /* already converted */ |
1184 | desc->irq->wLength = cpu_to_le16(desc->wMaxCommand); |
1185 | |
1186 | usb_fill_control_urb( |
1187 | diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c |
1188 | index c9f56ffdba9a..11a073cda1d6 100644 |
1189 | --- a/drivers/usb/core/hub.c |
1190 | +++ b/drivers/usb/core/hub.c |
1191 | @@ -3282,10 +3282,10 @@ int usb_port_resume(struct usb_device *udev, pm_message_t msg) |
1192 | dev_dbg(hub->intfdev, "can't resume port %d, status %d\n", |
1193 | port1, status); |
1194 | } else { |
1195 | - /* drive resume for at least 20 msec */ |
1196 | + /* drive resume for USB_RESUME_TIMEOUT msec */ |
1197 | dev_dbg(&udev->dev, "usb %sresume\n", |
1198 | (PMSG_IS_AUTO(msg) ? "auto-" : "")); |
1199 | - msleep(25); |
1200 | + msleep(USB_RESUME_TIMEOUT); |
1201 | |
1202 | /* Virtual root hubs can trigger on GET_PORT_STATUS to |
1203 | * stop resume signaling. Then finish the resume |
1204 | diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c |
1205 | index 44a292b75012..a660716f9331 100644 |
1206 | --- a/drivers/usb/gadget/composite.c |
1207 | +++ b/drivers/usb/gadget/composite.c |
1208 | @@ -528,7 +528,7 @@ static int bos_desc(struct usb_composite_dev *cdev) |
1209 | usb_ext->bLength = USB_DT_USB_EXT_CAP_SIZE; |
1210 | usb_ext->bDescriptorType = USB_DT_DEVICE_CAPABILITY; |
1211 | usb_ext->bDevCapabilityType = USB_CAP_TYPE_EXT; |
1212 | - usb_ext->bmAttributes = cpu_to_le32(USB_LPM_SUPPORT); |
1213 | + usb_ext->bmAttributes = cpu_to_le32(USB_LPM_SUPPORT | USB_BESL_SUPPORT); |
1214 | |
1215 | /* |
1216 | * The Superspeed USB Capability descriptor shall be implemented by all |
1217 | diff --git a/drivers/usb/host/isp116x-hcd.c b/drivers/usb/host/isp116x-hcd.c |
1218 | index b64e661618bb..baf2807934c1 100644 |
1219 | --- a/drivers/usb/host/isp116x-hcd.c |
1220 | +++ b/drivers/usb/host/isp116x-hcd.c |
1221 | @@ -1488,7 +1488,7 @@ static int isp116x_bus_resume(struct usb_hcd *hcd) |
1222 | spin_unlock_irq(&isp116x->lock); |
1223 | |
1224 | hcd->state = HC_STATE_RESUMING; |
1225 | - msleep(20); |
1226 | + msleep(USB_RESUME_TIMEOUT); |
1227 | |
1228 | /* Go operational */ |
1229 | spin_lock_irq(&isp116x->lock); |
1230 | diff --git a/drivers/usb/host/r8a66597-hcd.c b/drivers/usb/host/r8a66597-hcd.c |
1231 | index a6fd8f5371df..6656dfda5665 100644 |
1232 | --- a/drivers/usb/host/r8a66597-hcd.c |
1233 | +++ b/drivers/usb/host/r8a66597-hcd.c |
1234 | @@ -2301,7 +2301,7 @@ static int r8a66597_bus_resume(struct usb_hcd *hcd) |
1235 | rh->port &= ~USB_PORT_STAT_SUSPEND; |
1236 | rh->port |= USB_PORT_STAT_C_SUSPEND << 16; |
1237 | r8a66597_mdfy(r8a66597, RESUME, RESUME | UACT, dvstctr_reg); |
1238 | - msleep(50); |
1239 | + msleep(USB_RESUME_TIMEOUT); |
1240 | r8a66597_mdfy(r8a66597, UACT, RESUME | UACT, dvstctr_reg); |
1241 | } |
1242 | |
1243 | diff --git a/drivers/usb/host/sl811-hcd.c b/drivers/usb/host/sl811-hcd.c |
1244 | index b2ec7fe758dd..b4cad9346035 100644 |
1245 | --- a/drivers/usb/host/sl811-hcd.c |
1246 | +++ b/drivers/usb/host/sl811-hcd.c |
1247 | @@ -1251,7 +1251,7 @@ sl811h_hub_control( |
1248 | sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1); |
1249 | |
1250 | mod_timer(&sl811->timer, jiffies |
1251 | - + msecs_to_jiffies(20)); |
1252 | + + msecs_to_jiffies(USB_RESUME_TIMEOUT)); |
1253 | break; |
1254 | case USB_PORT_FEAT_POWER: |
1255 | port_power(sl811, 0); |
1256 | diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c |
1257 | index 9948890ef93e..bc7a886e3c36 100644 |
1258 | --- a/drivers/usb/host/xhci-ring.c |
1259 | +++ b/drivers/usb/host/xhci-ring.c |
1260 | @@ -1697,7 +1697,7 @@ static void handle_port_status(struct xhci_hcd *xhci, |
1261 | } else { |
1262 | xhci_dbg(xhci, "resume HS port %d\n", port_id); |
1263 | bus_state->resume_done[faked_port_index] = jiffies + |
1264 | - msecs_to_jiffies(20); |
1265 | + msecs_to_jiffies(USB_RESUME_TIMEOUT); |
1266 | set_bit(faked_port_index, &bus_state->resuming_ports); |
1267 | mod_timer(&hcd->rh_timer, |
1268 | bus_state->resume_done[faked_port_index]); |
1269 | diff --git a/drivers/usb/phy/phy.c b/drivers/usb/phy/phy.c |
1270 | index a9984c700d2c..5f79d8e2caab 100644 |
1271 | --- a/drivers/usb/phy/phy.c |
1272 | +++ b/drivers/usb/phy/phy.c |
1273 | @@ -78,7 +78,9 @@ static void devm_usb_phy_release(struct device *dev, void *res) |
1274 | |
1275 | static int devm_usb_phy_match(struct device *dev, void *res, void *match_data) |
1276 | { |
1277 | - return res == match_data; |
1278 | + struct usb_phy **phy = res; |
1279 | + |
1280 | + return *phy == match_data; |
1281 | } |
1282 | |
1283 | /** |
1284 | diff --git a/drivers/video/console/Kconfig b/drivers/video/console/Kconfig |
1285 | index bc922c47d046..37e62c7b3273 100644 |
1286 | --- a/drivers/video/console/Kconfig |
1287 | +++ b/drivers/video/console/Kconfig |
1288 | @@ -6,7 +6,10 @@ menu "Console display driver support" |
1289 | |
1290 | config VGA_CONSOLE |
1291 | bool "VGA text console" if EXPERT || !X86 |
1292 | - depends on !4xx && !8xx && !SPARC && !M68K && !PARISC && !FRV && !SUPERH && !BLACKFIN && !AVR32 && !MN10300 && (!ARM || ARCH_FOOTBRIDGE || ARCH_INTEGRATOR || ARCH_NETWINDER) |
1293 | + depends on !4xx && !8xx && !SPARC && !M68K && !PARISC && !FRV && \ |
1294 | + !SUPERH && !BLACKFIN && !AVR32 && !MN10300 && !CRIS && \ |
1295 | + (!ARM || ARCH_FOOTBRIDGE || ARCH_INTEGRATOR || ARCH_NETWINDER) && \ |
1296 | + !ARM64 |
1297 | default y |
1298 | help |
1299 | Saying Y here will allow you to use Linux in text mode through a |
1300 | diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c |
1301 | index 3c4d8797ea9a..53f620a4350e 100644 |
1302 | --- a/fs/binfmt_elf.c |
1303 | +++ b/fs/binfmt_elf.c |
1304 | @@ -756,6 +756,7 @@ static int load_elf_binary(struct linux_binprm *bprm) |
1305 | i < loc->elf_ex.e_phnum; i++, elf_ppnt++) { |
1306 | int elf_prot = 0, elf_flags; |
1307 | unsigned long k, vaddr; |
1308 | + unsigned long total_size = 0; |
1309 | |
1310 | if (elf_ppnt->p_type != PT_LOAD) |
1311 | continue; |
1312 | @@ -820,10 +821,16 @@ static int load_elf_binary(struct linux_binprm *bprm) |
1313 | #else |
1314 | load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr); |
1315 | #endif |
1316 | + total_size = total_mapping_size(elf_phdata, |
1317 | + loc->elf_ex.e_phnum); |
1318 | + if (!total_size) { |
1319 | + error = -EINVAL; |
1320 | + goto out_free_dentry; |
1321 | + } |
1322 | } |
1323 | |
1324 | error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt, |
1325 | - elf_prot, elf_flags, 0); |
1326 | + elf_prot, elf_flags, total_size); |
1327 | if (BAD_ADDR(error)) { |
1328 | send_sig(SIGKILL, current, 0); |
1329 | retval = IS_ERR((void *)error) ? |
1330 | diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c |
1331 | index f99c71e40f8b..07f167a1d271 100644 |
1332 | --- a/fs/btrfs/extent-tree.c |
1333 | +++ b/fs/btrfs/extent-tree.c |
1334 | @@ -6363,12 +6363,11 @@ static int __btrfs_free_reserved_extent(struct btrfs_root *root, |
1335 | return -ENOSPC; |
1336 | } |
1337 | |
1338 | - if (btrfs_test_opt(root, DISCARD)) |
1339 | - ret = btrfs_discard_extent(root, start, len, NULL); |
1340 | - |
1341 | if (pin) |
1342 | pin_down_extent(root, cache, start, len, 1); |
1343 | else { |
1344 | + if (btrfs_test_opt(root, DISCARD)) |
1345 | + ret = btrfs_discard_extent(root, start, len, NULL); |
1346 | btrfs_add_free_space(cache, start, len); |
1347 | btrfs_update_reserved_bytes(cache, len, RESERVE_FREE); |
1348 | } |
1349 | diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c |
1350 | index 783906c687b5..dbefa6c609f4 100644 |
1351 | --- a/fs/btrfs/ioctl.c |
1352 | +++ b/fs/btrfs/ioctl.c |
1353 | @@ -2572,6 +2572,11 @@ static noinline long btrfs_ioctl_clone(struct file *file, unsigned long srcfd, |
1354 | if (off + len == src->i_size) |
1355 | len = ALIGN(src->i_size, bs) - off; |
1356 | |
1357 | + if (len == 0) { |
1358 | + ret = 0; |
1359 | + goto out_unlock; |
1360 | + } |
1361 | + |
1362 | /* verify the end result is block aligned */ |
1363 | if (!IS_ALIGNED(off, bs) || !IS_ALIGNED(off + len, bs) || |
1364 | !IS_ALIGNED(destoff, bs)) |
1365 | diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c |
1366 | index f1312173fa90..facf8590b714 100644 |
1367 | --- a/fs/ext4/namei.c |
1368 | +++ b/fs/ext4/namei.c |
1369 | @@ -1880,7 +1880,7 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry, |
1370 | struct inode *inode) |
1371 | { |
1372 | struct inode *dir = dentry->d_parent->d_inode; |
1373 | - struct buffer_head *bh; |
1374 | + struct buffer_head *bh = NULL; |
1375 | struct ext4_dir_entry_2 *de; |
1376 | struct ext4_dir_entry_tail *t; |
1377 | struct super_block *sb; |
1378 | @@ -1905,14 +1905,14 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry, |
1379 | return retval; |
1380 | if (retval == 1) { |
1381 | retval = 0; |
1382 | - return retval; |
1383 | + goto out; |
1384 | } |
1385 | } |
1386 | |
1387 | if (is_dx(dir)) { |
1388 | retval = ext4_dx_add_entry(handle, dentry, inode); |
1389 | if (!retval || (retval != ERR_BAD_DX_DIR)) |
1390 | - return retval; |
1391 | + goto out; |
1392 | ext4_clear_inode_flag(dir, EXT4_INODE_INDEX); |
1393 | dx_fallback++; |
1394 | ext4_mark_inode_dirty(handle, dir); |
1395 | @@ -1924,14 +1924,15 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry, |
1396 | return PTR_ERR(bh); |
1397 | |
1398 | retval = add_dirent_to_buf(handle, dentry, inode, NULL, bh); |
1399 | - if (retval != -ENOSPC) { |
1400 | - brelse(bh); |
1401 | - return retval; |
1402 | - } |
1403 | + if (retval != -ENOSPC) |
1404 | + goto out; |
1405 | |
1406 | if (blocks == 1 && !dx_fallback && |
1407 | - EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_DIR_INDEX)) |
1408 | - return make_indexed_dir(handle, dentry, inode, bh); |
1409 | + EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_DIR_INDEX)) { |
1410 | + retval = make_indexed_dir(handle, dentry, inode, bh); |
1411 | + bh = NULL; /* make_indexed_dir releases bh */ |
1412 | + goto out; |
1413 | + } |
1414 | brelse(bh); |
1415 | } |
1416 | bh = ext4_append(handle, dir, &block); |
1417 | @@ -1947,6 +1948,7 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry, |
1418 | } |
1419 | |
1420 | retval = add_dirent_to_buf(handle, dentry, inode, de, bh); |
1421 | +out: |
1422 | brelse(bh); |
1423 | if (retval == 0) |
1424 | ext4_set_inode_state(inode, EXT4_STATE_NEWENTRY); |
1425 | diff --git a/fs/namei.c b/fs/namei.c |
1426 | index f7c4393f8535..036c21246d6a 100644 |
1427 | --- a/fs/namei.c |
1428 | +++ b/fs/namei.c |
1429 | @@ -1542,7 +1542,8 @@ static inline int walk_component(struct nameidata *nd, struct path *path, |
1430 | |
1431 | if (should_follow_link(inode, follow)) { |
1432 | if (nd->flags & LOOKUP_RCU) { |
1433 | - if (unlikely(unlazy_walk(nd, path->dentry))) { |
1434 | + if (unlikely(nd->path.mnt != path->mnt || |
1435 | + unlazy_walk(nd, path->dentry))) { |
1436 | err = -ECHILD; |
1437 | goto out_err; |
1438 | } |
1439 | @@ -2824,7 +2825,8 @@ finish_lookup: |
1440 | |
1441 | if (should_follow_link(inode, !symlink_ok)) { |
1442 | if (nd->flags & LOOKUP_RCU) { |
1443 | - if (unlikely(unlazy_walk(nd, path->dentry))) { |
1444 | + if (unlikely(nd->path.mnt != path->mnt || |
1445 | + unlazy_walk(nd, path->dentry))) { |
1446 | error = -ECHILD; |
1447 | goto out; |
1448 | } |
1449 | diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h |
1450 | index a64adcc29ae5..f819e813c8ac 100644 |
1451 | --- a/include/acpi/actypes.h |
1452 | +++ b/include/acpi/actypes.h |
1453 | @@ -198,9 +198,29 @@ typedef int INT32; |
1454 | typedef s32 acpi_native_int; |
1455 | |
1456 | typedef u32 acpi_size; |
1457 | + |
1458 | +#ifdef ACPI_32BIT_PHYSICAL_ADDRESS |
1459 | + |
1460 | +/* |
1461 | + * OSPMs can define this to shrink the size of the structures for 32-bit |
1462 | + * none PAE environment. ASL compiler may always define this to generate |
1463 | + * 32-bit OSPM compliant tables. |
1464 | + */ |
1465 | typedef u32 acpi_io_address; |
1466 | typedef u32 acpi_physical_address; |
1467 | |
1468 | +#else /* ACPI_32BIT_PHYSICAL_ADDRESS */ |
1469 | + |
1470 | +/* |
1471 | + * It is reported that, after some calculations, the physical addresses can |
1472 | + * wrap over the 32-bit boundary on 32-bit PAE environment. |
1473 | + * https://bugzilla.kernel.org/show_bug.cgi?id=87971 |
1474 | + */ |
1475 | +typedef u64 acpi_io_address; |
1476 | +typedef u64 acpi_physical_address; |
1477 | + |
1478 | +#endif /* ACPI_32BIT_PHYSICAL_ADDRESS */ |
1479 | + |
1480 | #define ACPI_MAX_PTR ACPI_UINT32_MAX |
1481 | #define ACPI_SIZE_MAX ACPI_UINT32_MAX |
1482 | |
1483 | diff --git a/include/acpi/platform/acenv.h b/include/acpi/platform/acenv.h |
1484 | index ef04b36ca6ed..f7db107abb04 100644 |
1485 | --- a/include/acpi/platform/acenv.h |
1486 | +++ b/include/acpi/platform/acenv.h |
1487 | @@ -76,6 +76,7 @@ |
1488 | #define ACPI_LARGE_NAMESPACE_NODE |
1489 | #define ACPI_DATA_TABLE_DISASSEMBLY |
1490 | #define ACPI_SINGLE_THREADED |
1491 | +#define ACPI_32BIT_PHYSICAL_ADDRESS |
1492 | #endif |
1493 | |
1494 | /* acpi_exec configuration. Multithreaded with full AML debugger */ |
1495 | diff --git a/include/asm-generic/sections.h b/include/asm-generic/sections.h |
1496 | index c1a1216e29ce..87b27263f5e2 100644 |
1497 | --- a/include/asm-generic/sections.h |
1498 | +++ b/include/asm-generic/sections.h |
1499 | @@ -3,6 +3,8 @@ |
1500 | |
1501 | /* References to section boundaries */ |
1502 | |
1503 | +#include <linux/compiler.h> |
1504 | + |
1505 | extern char _text[], _stext[], _etext[]; |
1506 | extern char _data[], _sdata[], _edata[]; |
1507 | extern char __bss_start[], __bss_stop[]; |
1508 | @@ -18,6 +20,8 @@ extern char __start_rodata[], __end_rodata[]; |
1509 | /* Start and end of .ctors section - used for constructor calls. */ |
1510 | extern char __ctors_start[], __ctors_end[]; |
1511 | |
1512 | +extern __visible const void __nosave_begin, __nosave_end; |
1513 | + |
1514 | /* function descriptor handling (if any). Override |
1515 | * in asm/sections.h */ |
1516 | #ifndef dereference_function_descriptor |
1517 | diff --git a/include/linux/usb.h b/include/linux/usb.h |
1518 | index a0bee5a28d1a..28bd3a898cba 100644 |
1519 | --- a/include/linux/usb.h |
1520 | +++ b/include/linux/usb.h |
1521 | @@ -206,6 +206,32 @@ void usb_put_intf(struct usb_interface *intf); |
1522 | #define USB_MAXINTERFACES 32 |
1523 | #define USB_MAXIADS (USB_MAXINTERFACES/2) |
1524 | |
1525 | +/* |
1526 | + * USB Resume Timer: Every Host controller driver should drive the resume |
1527 | + * signalling on the bus for the amount of time defined by this macro. |
1528 | + * |
1529 | + * That way we will have a 'stable' behavior among all HCDs supported by Linux. |
1530 | + * |
1531 | + * Note that the USB Specification states we should drive resume for *at least* |
1532 | + * 20 ms, but it doesn't give an upper bound. This creates two possible |
1533 | + * situations which we want to avoid: |
1534 | + * |
1535 | + * (a) sometimes an msleep(20) might expire slightly before 20 ms, which causes |
1536 | + * us to fail USB Electrical Tests, thus failing Certification |
1537 | + * |
1538 | + * (b) Some (many) devices actually need more than 20 ms of resume signalling, |
1539 | + * and while we can argue that's against the USB Specification, we don't have |
1540 | + * control over which devices a certification laboratory will be using for |
1541 | + * certification. If CertLab uses a device which was tested against Windows and |
1542 | + * that happens to have relaxed resume signalling rules, we might fall into |
1543 | + * situations where we fail interoperability and electrical tests. |
1544 | + * |
1545 | + * In order to avoid both conditions, we're using a 40 ms resume timeout, which |
1546 | + * should cope with both LPJ calibration errors and devices not following every |
1547 | + * detail of the USB Specification. |
1548 | + */ |
1549 | +#define USB_RESUME_TIMEOUT 40 /* ms */ |
1550 | + |
1551 | /** |
1552 | * struct usb_interface_cache - long-term representation of a device interface |
1553 | * @num_altsetting: number of altsettings defined. |
1554 | diff --git a/kernel/ptrace.c b/kernel/ptrace.c |
1555 | index afadcf7b4a22..118323bc8529 100644 |
1556 | --- a/kernel/ptrace.c |
1557 | +++ b/kernel/ptrace.c |
1558 | @@ -720,6 +720,8 @@ static int ptrace_peek_siginfo(struct task_struct *child, |
1559 | static int ptrace_resume(struct task_struct *child, long request, |
1560 | unsigned long data) |
1561 | { |
1562 | + bool need_siglock; |
1563 | + |
1564 | if (!valid_signal(data)) |
1565 | return -EIO; |
1566 | |
1567 | @@ -747,8 +749,26 @@ static int ptrace_resume(struct task_struct *child, long request, |
1568 | user_disable_single_step(child); |
1569 | } |
1570 | |
1571 | + /* |
1572 | + * Change ->exit_code and ->state under siglock to avoid the race |
1573 | + * with wait_task_stopped() in between; a non-zero ->exit_code will |
1574 | + * wrongly look like another report from tracee. |
1575 | + * |
1576 | + * Note that we need siglock even if ->exit_code == data and/or this |
1577 | + * status was not reported yet, the new status must not be cleared by |
1578 | + * wait_task_stopped() after resume. |
1579 | + * |
1580 | + * If data == 0 we do not care if wait_task_stopped() reports the old |
1581 | + * status and clears the code too; this can't race with the tracee, it |
1582 | + * takes siglock after resume. |
1583 | + */ |
1584 | + need_siglock = data && !thread_group_empty(current); |
1585 | + if (need_siglock) |
1586 | + spin_lock_irq(&child->sighand->siglock); |
1587 | child->exit_code = data; |
1588 | wake_up_state(child, __TASK_TRACED); |
1589 | + if (need_siglock) |
1590 | + spin_unlock_irq(&child->sighand->siglock); |
1591 | |
1592 | return 0; |
1593 | } |
1594 | diff --git a/kernel/softirq.c b/kernel/softirq.c |
1595 | index 787b3a032429..21956f00cb51 100644 |
1596 | --- a/kernel/softirq.c |
1597 | +++ b/kernel/softirq.c |
1598 | @@ -774,9 +774,13 @@ static void run_ksoftirqd(unsigned int cpu) |
1599 | local_irq_disable(); |
1600 | if (local_softirq_pending()) { |
1601 | __do_softirq(); |
1602 | - rcu_note_context_switch(cpu); |
1603 | local_irq_enable(); |
1604 | cond_resched(); |
1605 | + |
1606 | + preempt_disable(); |
1607 | + rcu_note_context_switch(cpu); |
1608 | + preempt_enable(); |
1609 | + |
1610 | return; |
1611 | } |
1612 | local_irq_enable(); |
1613 | diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c |
1614 | index 3d9fee3a80b3..ab21b8c66535 100644 |
1615 | --- a/kernel/trace/ring_buffer.c |
1616 | +++ b/kernel/trace/ring_buffer.c |
1617 | @@ -2650,7 +2650,7 @@ static DEFINE_PER_CPU(unsigned int, current_context); |
1618 | |
1619 | static __always_inline int trace_recursive_lock(void) |
1620 | { |
1621 | - unsigned int val = this_cpu_read(current_context); |
1622 | + unsigned int val = __this_cpu_read(current_context); |
1623 | int bit; |
1624 | |
1625 | if (in_interrupt()) { |
1626 | @@ -2667,18 +2667,17 @@ static __always_inline int trace_recursive_lock(void) |
1627 | return 1; |
1628 | |
1629 | val |= (1 << bit); |
1630 | - this_cpu_write(current_context, val); |
1631 | + __this_cpu_write(current_context, val); |
1632 | |
1633 | return 0; |
1634 | } |
1635 | |
1636 | static __always_inline void trace_recursive_unlock(void) |
1637 | { |
1638 | - unsigned int val = this_cpu_read(current_context); |
1639 | + unsigned int val = __this_cpu_read(current_context); |
1640 | |
1641 | - val--; |
1642 | - val &= this_cpu_read(current_context); |
1643 | - this_cpu_write(current_context, val); |
1644 | + val &= val & (val - 1); |
1645 | + __this_cpu_write(current_context, val); |
1646 | } |
1647 | |
1648 | #else |
1649 | diff --git a/lib/string.c b/lib/string.c |
1650 | index 43d0781daf47..cb9ea2181557 100644 |
1651 | --- a/lib/string.c |
1652 | +++ b/lib/string.c |
1653 | @@ -598,7 +598,7 @@ EXPORT_SYMBOL(memset); |
1654 | void memzero_explicit(void *s, size_t count) |
1655 | { |
1656 | memset(s, 0, count); |
1657 | - OPTIMIZER_HIDE_VAR(s); |
1658 | + barrier(); |
1659 | } |
1660 | EXPORT_SYMBOL(memzero_explicit); |
1661 | |
1662 | diff --git a/net/ipv4/ip_forward.c b/net/ipv4/ip_forward.c |
1663 | index 31ee5c6033df..479e8a63125a 100644 |
1664 | --- a/net/ipv4/ip_forward.c |
1665 | +++ b/net/ipv4/ip_forward.c |
1666 | @@ -126,6 +126,9 @@ int ip_forward(struct sk_buff *skb) |
1667 | struct rtable *rt; /* Route we use */ |
1668 | struct ip_options *opt = &(IPCB(skb)->opt); |
1669 | |
1670 | + if (unlikely(skb->sk)) |
1671 | + goto drop; |
1672 | + |
1673 | if (skb_warn_if_lro(skb)) |
1674 | goto drop; |
1675 | |
1676 | diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c |
1677 | index 7681a1bbd97f..76c80b59e80f 100644 |
1678 | --- a/net/ipv4/tcp_output.c |
1679 | +++ b/net/ipv4/tcp_output.c |
1680 | @@ -2571,39 +2571,65 @@ begin_fwd: |
1681 | } |
1682 | } |
1683 | |
1684 | -/* Send a fin. The caller locks the socket for us. This cannot be |
1685 | - * allowed to fail queueing a FIN frame under any circumstances. |
1686 | +/* We allow to exceed memory limits for FIN packets to expedite |
1687 | + * connection tear down and (memory) recovery. |
1688 | + * Otherwise tcp_send_fin() could be tempted to either delay FIN |
1689 | + * or even be forced to close flow without any FIN. |
1690 | + */ |
1691 | +static void sk_forced_wmem_schedule(struct sock *sk, int size) |
1692 | +{ |
1693 | + int amt, status; |
1694 | + |
1695 | + if (size <= sk->sk_forward_alloc) |
1696 | + return; |
1697 | + amt = sk_mem_pages(size); |
1698 | + sk->sk_forward_alloc += amt * SK_MEM_QUANTUM; |
1699 | + sk_memory_allocated_add(sk, amt, &status); |
1700 | +} |
1701 | + |
1702 | +/* Send a FIN. The caller locks the socket for us. |
1703 | + * We should try to send a FIN packet really hard, but eventually give up. |
1704 | */ |
1705 | void tcp_send_fin(struct sock *sk) |
1706 | { |
1707 | + struct sk_buff *skb, *tskb = tcp_write_queue_tail(sk); |
1708 | struct tcp_sock *tp = tcp_sk(sk); |
1709 | - struct sk_buff *skb = tcp_write_queue_tail(sk); |
1710 | - int mss_now; |
1711 | |
1712 | - /* Optimization, tack on the FIN if we have a queue of |
1713 | - * unsent frames. But be careful about outgoing SACKS |
1714 | - * and IP options. |
1715 | + /* Optimization, tack on the FIN if we have one skb in write queue and |
1716 | + * this skb was not yet sent, or we are under memory pressure. |
1717 | + * Note: in the latter case, FIN packet will be sent after a timeout, |
1718 | + * as TCP stack thinks it has already been transmitted. |
1719 | */ |
1720 | - mss_now = tcp_current_mss(sk); |
1721 | - |
1722 | - if (tcp_send_head(sk) != NULL) { |
1723 | - TCP_SKB_CB(skb)->tcp_flags |= TCPHDR_FIN; |
1724 | - TCP_SKB_CB(skb)->end_seq++; |
1725 | + if (tskb && (tcp_send_head(sk) || sk_under_memory_pressure(sk))) { |
1726 | +coalesce: |
1727 | + TCP_SKB_CB(tskb)->tcp_flags |= TCPHDR_FIN; |
1728 | + TCP_SKB_CB(tskb)->end_seq++; |
1729 | tp->write_seq++; |
1730 | + if (!tcp_send_head(sk)) { |
1731 | + /* This means tskb was already sent. |
1732 | + * Pretend we included the FIN on previous transmit. |
1733 | + * We need to set tp->snd_nxt to the value it would have |
1734 | + * if FIN had been sent. This is because retransmit path |
1735 | + * does not change tp->snd_nxt. |
1736 | + */ |
1737 | + tp->snd_nxt++; |
1738 | + return; |
1739 | + } |
1740 | } else { |
1741 | - /* Socket is locked, keep trying until memory is available. */ |
1742 | - for (;;) { |
1743 | - skb = sk_stream_alloc_skb(sk, 0, sk->sk_allocation); |
1744 | - if (skb) |
1745 | - break; |
1746 | - yield(); |
1747 | + skb = alloc_skb_fclone(MAX_TCP_HEADER, sk->sk_allocation); |
1748 | + if (unlikely(!skb)) { |
1749 | + if (tskb) |
1750 | + goto coalesce; |
1751 | + return; |
1752 | } |
1753 | + skb_reserve(skb, MAX_TCP_HEADER); |
1754 | + sk_forced_wmem_schedule(sk, skb->truesize); |
1755 | /* FIN eats a sequence byte, write_seq advanced by tcp_queue_skb(). */ |
1756 | tcp_init_nondata_skb(skb, tp->write_seq, |
1757 | TCPHDR_ACK | TCPHDR_FIN); |
1758 | tcp_queue_skb(sk, skb); |
1759 | } |
1760 | - __tcp_push_pending_frames(sk, mss_now, TCP_NAGLE_OFF); |
1761 | + __tcp_push_pending_frames(sk, tcp_current_mss(sk), TCP_NAGLE_OFF); |
1762 | } |
1763 | |
1764 | /* We get here when a process closes a file descriptor (either due to |
1765 | diff --git a/sound/pci/emu10k1/emuproc.c b/sound/pci/emu10k1/emuproc.c |
1766 | index 2ca9f2e93139..53745f4c2bf5 100644 |
1767 | --- a/sound/pci/emu10k1/emuproc.c |
1768 | +++ b/sound/pci/emu10k1/emuproc.c |
1769 | @@ -241,31 +241,22 @@ static void snd_emu10k1_proc_spdif_read(struct snd_info_entry *entry, |
1770 | struct snd_emu10k1 *emu = entry->private_data; |
1771 | u32 value; |
1772 | u32 value2; |
1773 | - unsigned long flags; |
1774 | u32 rate; |
1775 | |
1776 | if (emu->card_capabilities->emu_model) { |
1777 | - spin_lock_irqsave(&emu->emu_lock, flags); |
1778 | snd_emu1010_fpga_read(emu, 0x38, &value); |
1779 | - spin_unlock_irqrestore(&emu->emu_lock, flags); |
1780 | if ((value & 0x1) == 0) { |
1781 | - spin_lock_irqsave(&emu->emu_lock, flags); |
1782 | snd_emu1010_fpga_read(emu, 0x2a, &value); |
1783 | snd_emu1010_fpga_read(emu, 0x2b, &value2); |
1784 | - spin_unlock_irqrestore(&emu->emu_lock, flags); |
1785 | rate = 0x1770000 / (((value << 5) | value2)+1); |
1786 | snd_iprintf(buffer, "ADAT Locked : %u\n", rate); |
1787 | } else { |
1788 | snd_iprintf(buffer, "ADAT Unlocked\n"); |
1789 | } |
1790 | - spin_lock_irqsave(&emu->emu_lock, flags); |
1791 | snd_emu1010_fpga_read(emu, 0x20, &value); |
1792 | - spin_unlock_irqrestore(&emu->emu_lock, flags); |
1793 | if ((value & 0x4) == 0) { |
1794 | - spin_lock_irqsave(&emu->emu_lock, flags); |
1795 | snd_emu1010_fpga_read(emu, 0x28, &value); |
1796 | snd_emu1010_fpga_read(emu, 0x29, &value2); |
1797 | - spin_unlock_irqrestore(&emu->emu_lock, flags); |
1798 | rate = 0x1770000 / (((value << 5) | value2)+1); |
1799 | snd_iprintf(buffer, "SPDIF Locked : %d\n", rate); |
1800 | } else { |
1801 | @@ -410,14 +401,11 @@ static void snd_emu_proc_emu1010_reg_read(struct snd_info_entry *entry, |
1802 | { |
1803 | struct snd_emu10k1 *emu = entry->private_data; |
1804 | u32 value; |
1805 | - unsigned long flags; |
1806 | int i; |
1807 | snd_iprintf(buffer, "EMU1010 Registers:\n\n"); |
1808 | |
1809 | for(i = 0; i < 0x40; i+=1) { |
1810 | - spin_lock_irqsave(&emu->emu_lock, flags); |
1811 | snd_emu1010_fpga_read(emu, i, &value); |
1812 | - spin_unlock_irqrestore(&emu->emu_lock, flags); |
1813 | snd_iprintf(buffer, "%02X: %08X, %02X\n", i, value, (value >> 8) & 0x7f); |
1814 | } |
1815 | } |
1816 | diff --git a/tools/power/x86/turbostat/Makefile b/tools/power/x86/turbostat/Makefile |
1817 | index d1b3a361e526..4039854560d0 100644 |
1818 | --- a/tools/power/x86/turbostat/Makefile |
1819 | +++ b/tools/power/x86/turbostat/Makefile |
1820 | @@ -1,8 +1,12 @@ |
1821 | CC = $(CROSS_COMPILE)gcc |
1822 | -BUILD_OUTPUT := $(PWD) |
1823 | +BUILD_OUTPUT := $(CURDIR) |
1824 | PREFIX := /usr |
1825 | DESTDIR := |
1826 | |
1827 | +ifeq ("$(origin O)", "command line") |
1828 | + BUILD_OUTPUT := $(O) |
1829 | +endif |
1830 | + |
1831 | turbostat : turbostat.c |
1832 | CFLAGS += -Wall |
1833 | CFLAGS += -DMSRHEADER='"../../../../arch/x86/include/uapi/asm/msr-index.h"' |
1834 | diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c |
1835 | index a17f190be58e..1d4b8bed4e48 100644 |
1836 | --- a/virt/kvm/kvm_main.c |
1837 | +++ b/virt/kvm/kvm_main.c |
1838 | @@ -1549,8 +1549,8 @@ int kvm_gfn_to_hva_cache_init(struct kvm *kvm, struct gfn_to_hva_cache *ghc, |
1839 | ghc->generation = slots->generation; |
1840 | ghc->len = len; |
1841 | ghc->memslot = gfn_to_memslot(kvm, start_gfn); |
1842 | - ghc->hva = gfn_to_hva_many(ghc->memslot, start_gfn, &nr_pages_avail); |
1843 | - if (!kvm_is_error_hva(ghc->hva) && nr_pages_avail >= nr_pages_needed) { |
1844 | + ghc->hva = gfn_to_hva_many(ghc->memslot, start_gfn, NULL); |
1845 | + if (!kvm_is_error_hva(ghc->hva) && nr_pages_needed <= 1) { |
1846 | ghc->hva += offset; |
1847 | } else { |
1848 | /* |