Annotation of /trunk/kernel26-alx/patches-3.10/0161-3.10.62-all-fixes.patch
Parent Directory | Revision Log
Revision 2672 -
(hide annotations)
(download)
Tue Jul 21 16:46:35 2015 UTC (9 years, 2 months ago) by niro
File size: 53878 byte(s)
Tue Jul 21 16:46:35 2015 UTC (9 years, 2 months ago) by niro
File size: 53878 byte(s)
-3.10.84-alx-r1
1 | niro | 2672 | diff --git a/Makefile b/Makefile |
2 | index 0d5ba80786b8..a0b86250d6ca 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 3 | ||
7 | PATCHLEVEL = 10 | ||
8 | -SUBLEVEL = 61 | ||
9 | +SUBLEVEL = 62 | ||
10 | EXTRAVERSION = | ||
11 | NAME = TOSSUG Baby Fish | ||
12 | |||
13 | diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S | ||
14 | index 19da84172cc3..4562ebf8449d 100644 | ||
15 | --- a/arch/arm/mm/proc-v7.S | ||
16 | +++ b/arch/arm/mm/proc-v7.S | ||
17 | @@ -201,7 +201,6 @@ __v7_pj4b_setup: | ||
18 | /* Auxiliary Debug Modes Control 1 Register */ | ||
19 | #define PJ4B_STATIC_BP (1 << 2) /* Enable Static BP */ | ||
20 | #define PJ4B_INTER_PARITY (1 << 8) /* Disable Internal Parity Handling */ | ||
21 | -#define PJ4B_BCK_OFF_STREX (1 << 5) /* Enable the back off of STREX instr */ | ||
22 | #define PJ4B_CLEAN_LINE (1 << 16) /* Disable data transfer for clean line */ | ||
23 | |||
24 | /* Auxiliary Debug Modes Control 2 Register */ | ||
25 | @@ -224,7 +223,6 @@ __v7_pj4b_setup: | ||
26 | /* Auxiliary Debug Modes Control 1 Register */ | ||
27 | mrc p15, 1, r0, c15, c1, 1 | ||
28 | orr r0, r0, #PJ4B_CLEAN_LINE | ||
29 | - orr r0, r0, #PJ4B_BCK_OFF_STREX | ||
30 | orr r0, r0, #PJ4B_INTER_PARITY | ||
31 | bic r0, r0, #PJ4B_STATIC_BP | ||
32 | mcr p15, 1, r0, c15, c1, 1 | ||
33 | diff --git a/arch/arm/mm/proc-xscale.S b/arch/arm/mm/proc-xscale.S | ||
34 | index e766f889bfd6..08b51b7dbf69 100644 | ||
35 | --- a/arch/arm/mm/proc-xscale.S | ||
36 | +++ b/arch/arm/mm/proc-xscale.S | ||
37 | @@ -535,7 +535,7 @@ ENTRY(cpu_xscale_do_suspend) | ||
38 | mrc p15, 0, r5, c15, c1, 0 @ CP access reg | ||
39 | mrc p15, 0, r6, c13, c0, 0 @ PID | ||
40 | mrc p15, 0, r7, c3, c0, 0 @ domain ID | ||
41 | - mrc p15, 0, r8, c1, c1, 0 @ auxiliary control reg | ||
42 | + mrc p15, 0, r8, c1, c0, 1 @ auxiliary control reg | ||
43 | mrc p15, 0, r9, c1, c0, 0 @ control reg | ||
44 | bic r4, r4, #2 @ clear frequency change bit | ||
45 | stmia r0, {r4 - r9} @ store cp regs | ||
46 | @@ -552,7 +552,7 @@ ENTRY(cpu_xscale_do_resume) | ||
47 | mcr p15, 0, r6, c13, c0, 0 @ PID | ||
48 | mcr p15, 0, r7, c3, c0, 0 @ domain ID | ||
49 | mcr p15, 0, r1, c2, c0, 0 @ translation table base addr | ||
50 | - mcr p15, 0, r8, c1, c1, 0 @ auxiliary control reg | ||
51 | + mcr p15, 0, r8, c1, c0, 1 @ auxiliary control reg | ||
52 | mov r0, r9 @ control register | ||
53 | b cpu_resume_mmu | ||
54 | ENDPROC(cpu_xscale_do_resume) | ||
55 | diff --git a/arch/mips/loongson/common/Makefile b/arch/mips/loongson/common/Makefile | ||
56 | index 4c57b3e5743f..33f76e658d19 100644 | ||
57 | --- a/arch/mips/loongson/common/Makefile | ||
58 | +++ b/arch/mips/loongson/common/Makefile | ||
59 | @@ -10,7 +10,8 @@ obj-$(CONFIG_GPIOLIB) += gpio.o | ||
60 | # Serial port support | ||
61 | # | ||
62 | obj-$(CONFIG_EARLY_PRINTK) += early_printk.o | ||
63 | -obj-$(CONFIG_SERIAL_8250) += serial.o | ||
64 | +loongson-serial-$(CONFIG_SERIAL_8250) := serial.o | ||
65 | +obj-y += $(loongson-serial-m) $(loongson-serial-y) | ||
66 | obj-$(CONFIG_LOONGSON_UART_BASE) += uart_base.o | ||
67 | obj-$(CONFIG_LOONGSON_MC146818) += rtc.o | ||
68 | |||
69 | diff --git a/arch/mips/oprofile/backtrace.c b/arch/mips/oprofile/backtrace.c | ||
70 | index 6854ed5097d2..83a1dfd8f0e3 100644 | ||
71 | --- a/arch/mips/oprofile/backtrace.c | ||
72 | +++ b/arch/mips/oprofile/backtrace.c | ||
73 | @@ -92,7 +92,7 @@ static inline int unwind_user_frame(struct stackframe *old_frame, | ||
74 | /* This marks the end of the previous function, | ||
75 | which means we overran. */ | ||
76 | break; | ||
77 | - stack_size = (unsigned) stack_adjustment; | ||
78 | + stack_size = (unsigned long) stack_adjustment; | ||
79 | } else if (is_ra_save_ins(&ip)) { | ||
80 | int ra_slot = ip.i_format.simmediate; | ||
81 | if (ra_slot < 0) | ||
82 | diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c | ||
83 | index f75607c93e8a..b2bbb79bd99d 100644 | ||
84 | --- a/arch/powerpc/platforms/powernv/pci-ioda.c | ||
85 | +++ b/arch/powerpc/platforms/powernv/pci-ioda.c | ||
86 | @@ -789,7 +789,6 @@ static int pnv_pci_ioda_msi_setup(struct pnv_phb *phb, struct pci_dev *dev, | ||
87 | unsigned int is_64, struct msi_msg *msg) | ||
88 | { | ||
89 | struct pnv_ioda_pe *pe = pnv_ioda_get_pe(dev); | ||
90 | - struct pci_dn *pdn = pci_get_pdn(dev); | ||
91 | struct irq_data *idata; | ||
92 | struct irq_chip *ichip; | ||
93 | unsigned int xive_num = hwirq - phb->msi_base; | ||
94 | @@ -806,7 +805,7 @@ static int pnv_pci_ioda_msi_setup(struct pnv_phb *phb, struct pci_dev *dev, | ||
95 | return -ENXIO; | ||
96 | |||
97 | /* Force 32-bit MSI on some broken devices */ | ||
98 | - if (pdn && pdn->force_32bit_msi) | ||
99 | + if (dev->no_64bit_msi) | ||
100 | is_64 = 0; | ||
101 | |||
102 | /* Assign XIVE to PE */ | ||
103 | diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c | ||
104 | index 277343cc6a3d..8ee842ce3aba 100644 | ||
105 | --- a/arch/powerpc/platforms/powernv/pci.c | ||
106 | +++ b/arch/powerpc/platforms/powernv/pci.c | ||
107 | @@ -1,3 +1,4 @@ | ||
108 | + | ||
109 | /* | ||
110 | * Support PCI/PCIe on PowerNV platforms | ||
111 | * | ||
112 | @@ -47,9 +48,8 @@ static int pnv_msi_check_device(struct pci_dev* pdev, int nvec, int type) | ||
113 | { | ||
114 | struct pci_controller *hose = pci_bus_to_host(pdev->bus); | ||
115 | struct pnv_phb *phb = hose->private_data; | ||
116 | - struct pci_dn *pdn = pci_get_pdn(pdev); | ||
117 | |||
118 | - if (pdn && pdn->force_32bit_msi && !phb->msi32_support) | ||
119 | + if (pdev->no_64bit_msi && !phb->msi32_support) | ||
120 | return -ENODEV; | ||
121 | |||
122 | return (phb && phb->msi_bmp.bitmap) ? 0 : -ENODEV; | ||
123 | diff --git a/arch/powerpc/platforms/pseries/msi.c b/arch/powerpc/platforms/pseries/msi.c | ||
124 | index 6d2f0abce6fa..3b350fb91285 100644 | ||
125 | --- a/arch/powerpc/platforms/pseries/msi.c | ||
126 | +++ b/arch/powerpc/platforms/pseries/msi.c | ||
127 | @@ -426,7 +426,7 @@ static int rtas_setup_msi_irqs(struct pci_dev *pdev, int nvec_in, int type) | ||
128 | */ | ||
129 | again: | ||
130 | if (type == PCI_CAP_ID_MSI) { | ||
131 | - if (pdn->force_32bit_msi) { | ||
132 | + if (pdev->no_64bit_msi) { | ||
133 | rc = rtas_change_msi(pdn, RTAS_CHANGE_32MSI_FN, nvec); | ||
134 | if (rc < 0) { | ||
135 | /* | ||
136 | diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c | ||
137 | index 96bf5bd30fbc..94599a65cc66 100644 | ||
138 | --- a/arch/powerpc/xmon/xmon.c | ||
139 | +++ b/arch/powerpc/xmon/xmon.c | ||
140 | @@ -288,10 +288,10 @@ static inline void disable_surveillance(void) | ||
141 | args.token = rtas_token("set-indicator"); | ||
142 | if (args.token == RTAS_UNKNOWN_SERVICE) | ||
143 | return; | ||
144 | - args.nargs = 3; | ||
145 | - args.nret = 1; | ||
146 | + args.nargs = cpu_to_be32(3); | ||
147 | + args.nret = cpu_to_be32(1); | ||
148 | args.rets = &args.args[3]; | ||
149 | - args.args[0] = SURVEILLANCE_TOKEN; | ||
150 | + args.args[0] = cpu_to_be32(SURVEILLANCE_TOKEN); | ||
151 | args.args[1] = 0; | ||
152 | args.args[2] = 0; | ||
153 | enter_rtas(__pa(&args)); | ||
154 | diff --git a/arch/sparc/include/uapi/asm/swab.h b/arch/sparc/include/uapi/asm/swab.h | ||
155 | index a34ad079487e..4c7c12d69bea 100644 | ||
156 | --- a/arch/sparc/include/uapi/asm/swab.h | ||
157 | +++ b/arch/sparc/include/uapi/asm/swab.h | ||
158 | @@ -9,9 +9,9 @@ static inline __u16 __arch_swab16p(const __u16 *addr) | ||
159 | { | ||
160 | __u16 ret; | ||
161 | |||
162 | - __asm__ __volatile__ ("lduha [%1] %2, %0" | ||
163 | + __asm__ __volatile__ ("lduha [%2] %3, %0" | ||
164 | : "=r" (ret) | ||
165 | - : "r" (addr), "i" (ASI_PL)); | ||
166 | + : "m" (*addr), "r" (addr), "i" (ASI_PL)); | ||
167 | return ret; | ||
168 | } | ||
169 | #define __arch_swab16p __arch_swab16p | ||
170 | @@ -20,9 +20,9 @@ static inline __u32 __arch_swab32p(const __u32 *addr) | ||
171 | { | ||
172 | __u32 ret; | ||
173 | |||
174 | - __asm__ __volatile__ ("lduwa [%1] %2, %0" | ||
175 | + __asm__ __volatile__ ("lduwa [%2] %3, %0" | ||
176 | : "=r" (ret) | ||
177 | - : "r" (addr), "i" (ASI_PL)); | ||
178 | + : "m" (*addr), "r" (addr), "i" (ASI_PL)); | ||
179 | return ret; | ||
180 | } | ||
181 | #define __arch_swab32p __arch_swab32p | ||
182 | @@ -31,9 +31,9 @@ static inline __u64 __arch_swab64p(const __u64 *addr) | ||
183 | { | ||
184 | __u64 ret; | ||
185 | |||
186 | - __asm__ __volatile__ ("ldxa [%1] %2, %0" | ||
187 | + __asm__ __volatile__ ("ldxa [%2] %3, %0" | ||
188 | : "=r" (ret) | ||
189 | - : "r" (addr), "i" (ASI_PL)); | ||
190 | + : "m" (*addr), "r" (addr), "i" (ASI_PL)); | ||
191 | return ret; | ||
192 | } | ||
193 | #define __arch_swab64p __arch_swab64p | ||
194 | diff --git a/arch/x86/include/asm/page_32_types.h b/arch/x86/include/asm/page_32_types.h | ||
195 | index ef17af013475..4376b458aef7 100644 | ||
196 | --- a/arch/x86/include/asm/page_32_types.h | ||
197 | +++ b/arch/x86/include/asm/page_32_types.h | ||
198 | @@ -18,7 +18,6 @@ | ||
199 | #define THREAD_SIZE_ORDER 1 | ||
200 | #define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER) | ||
201 | |||
202 | -#define STACKFAULT_STACK 0 | ||
203 | #define DOUBLEFAULT_STACK 1 | ||
204 | #define NMI_STACK 0 | ||
205 | #define DEBUG_STACK 0 | ||
206 | diff --git a/arch/x86/include/asm/page_64_types.h b/arch/x86/include/asm/page_64_types.h | ||
207 | index 6c896fbe21db..970f3097ee33 100644 | ||
208 | --- a/arch/x86/include/asm/page_64_types.h | ||
209 | +++ b/arch/x86/include/asm/page_64_types.h | ||
210 | @@ -14,12 +14,11 @@ | ||
211 | #define IRQ_STACK_ORDER 2 | ||
212 | #define IRQ_STACK_SIZE (PAGE_SIZE << IRQ_STACK_ORDER) | ||
213 | |||
214 | -#define STACKFAULT_STACK 1 | ||
215 | -#define DOUBLEFAULT_STACK 2 | ||
216 | -#define NMI_STACK 3 | ||
217 | -#define DEBUG_STACK 4 | ||
218 | -#define MCE_STACK 5 | ||
219 | -#define N_EXCEPTION_STACKS 5 /* hw limit: 7 */ | ||
220 | +#define DOUBLEFAULT_STACK 1 | ||
221 | +#define NMI_STACK 2 | ||
222 | +#define DEBUG_STACK 3 | ||
223 | +#define MCE_STACK 4 | ||
224 | +#define N_EXCEPTION_STACKS 4 /* hw limit: 7 */ | ||
225 | |||
226 | #define PUD_PAGE_SIZE (_AC(1, UL) << PUD_SHIFT) | ||
227 | #define PUD_PAGE_MASK (~(PUD_PAGE_SIZE-1)) | ||
228 | diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h | ||
229 | index a1df6e84691f..d3e0ff5962fe 100644 | ||
230 | --- a/arch/x86/include/asm/thread_info.h | ||
231 | +++ b/arch/x86/include/asm/thread_info.h | ||
232 | @@ -147,7 +147,7 @@ struct thread_info { | ||
233 | /* Only used for 64 bit */ | ||
234 | #define _TIF_DO_NOTIFY_MASK \ | ||
235 | (_TIF_SIGPENDING | _TIF_MCE_NOTIFY | _TIF_NOTIFY_RESUME | \ | ||
236 | - _TIF_USER_RETURN_NOTIFY) | ||
237 | + _TIF_USER_RETURN_NOTIFY | _TIF_UPROBE) | ||
238 | |||
239 | /* flags to check in __switch_to() */ | ||
240 | #define _TIF_WORK_CTXSW \ | ||
241 | diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c | ||
242 | index 6a7e3e9cffc3..564140155c36 100644 | ||
243 | --- a/arch/x86/kernel/cpu/common.c | ||
244 | +++ b/arch/x86/kernel/cpu/common.c | ||
245 | @@ -144,6 +144,8 @@ EXPORT_PER_CPU_SYMBOL_GPL(gdt_page); | ||
246 | |||
247 | static int __init x86_xsave_setup(char *s) | ||
248 | { | ||
249 | + if (strlen(s)) | ||
250 | + return 0; | ||
251 | setup_clear_cpu_cap(X86_FEATURE_XSAVE); | ||
252 | setup_clear_cpu_cap(X86_FEATURE_XSAVEOPT); | ||
253 | setup_clear_cpu_cap(X86_FEATURE_AVX); | ||
254 | diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c | ||
255 | index addb207dab92..66e274a3d968 100644 | ||
256 | --- a/arch/x86/kernel/dumpstack_64.c | ||
257 | +++ b/arch/x86/kernel/dumpstack_64.c | ||
258 | @@ -24,7 +24,6 @@ static char x86_stack_ids[][8] = { | ||
259 | [ DEBUG_STACK-1 ] = "#DB", | ||
260 | [ NMI_STACK-1 ] = "NMI", | ||
261 | [ DOUBLEFAULT_STACK-1 ] = "#DF", | ||
262 | - [ STACKFAULT_STACK-1 ] = "#SS", | ||
263 | [ MCE_STACK-1 ] = "#MC", | ||
264 | #if DEBUG_STKSZ > EXCEPTION_STKSZ | ||
265 | [ N_EXCEPTION_STACKS ... | ||
266 | diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S | ||
267 | index 8c6b5c2284c7..948b2e14df8c 100644 | ||
268 | --- a/arch/x86/kernel/entry_64.S | ||
269 | +++ b/arch/x86/kernel/entry_64.S | ||
270 | @@ -1068,9 +1068,15 @@ ENTRY(native_iret) | ||
271 | jnz native_irq_return_ldt | ||
272 | #endif | ||
273 | |||
274 | +.global native_irq_return_iret | ||
275 | native_irq_return_iret: | ||
276 | + /* | ||
277 | + * This may fault. Non-paranoid faults on return to userspace are | ||
278 | + * handled by fixup_bad_iret. These include #SS, #GP, and #NP. | ||
279 | + * Double-faults due to espfix64 are handled in do_double_fault. | ||
280 | + * Other faults here are fatal. | ||
281 | + */ | ||
282 | iretq | ||
283 | - _ASM_EXTABLE(native_irq_return_iret, bad_iret) | ||
284 | |||
285 | #ifdef CONFIG_X86_ESPFIX64 | ||
286 | native_irq_return_ldt: | ||
287 | @@ -1098,25 +1104,6 @@ native_irq_return_ldt: | ||
288 | jmp native_irq_return_iret | ||
289 | #endif | ||
290 | |||
291 | - .section .fixup,"ax" | ||
292 | -bad_iret: | ||
293 | - /* | ||
294 | - * The iret traps when the %cs or %ss being restored is bogus. | ||
295 | - * We've lost the original trap vector and error code. | ||
296 | - * #GPF is the most likely one to get for an invalid selector. | ||
297 | - * So pretend we completed the iret and took the #GPF in user mode. | ||
298 | - * | ||
299 | - * We are now running with the kernel GS after exception recovery. | ||
300 | - * But error_entry expects us to have user GS to match the user %cs, | ||
301 | - * so swap back. | ||
302 | - */ | ||
303 | - pushq $0 | ||
304 | - | ||
305 | - SWAPGS | ||
306 | - jmp general_protection | ||
307 | - | ||
308 | - .previous | ||
309 | - | ||
310 | /* edi: workmask, edx: work */ | ||
311 | retint_careful: | ||
312 | CFI_RESTORE_STATE | ||
313 | @@ -1164,37 +1151,6 @@ ENTRY(retint_kernel) | ||
314 | CFI_ENDPROC | ||
315 | END(common_interrupt) | ||
316 | |||
317 | - /* | ||
318 | - * If IRET takes a fault on the espfix stack, then we | ||
319 | - * end up promoting it to a doublefault. In that case, | ||
320 | - * modify the stack to make it look like we just entered | ||
321 | - * the #GP handler from user space, similar to bad_iret. | ||
322 | - */ | ||
323 | -#ifdef CONFIG_X86_ESPFIX64 | ||
324 | - ALIGN | ||
325 | -__do_double_fault: | ||
326 | - XCPT_FRAME 1 RDI+8 | ||
327 | - movq RSP(%rdi),%rax /* Trap on the espfix stack? */ | ||
328 | - sarq $PGDIR_SHIFT,%rax | ||
329 | - cmpl $ESPFIX_PGD_ENTRY,%eax | ||
330 | - jne do_double_fault /* No, just deliver the fault */ | ||
331 | - cmpl $__KERNEL_CS,CS(%rdi) | ||
332 | - jne do_double_fault | ||
333 | - movq RIP(%rdi),%rax | ||
334 | - cmpq $native_irq_return_iret,%rax | ||
335 | - jne do_double_fault /* This shouldn't happen... */ | ||
336 | - movq PER_CPU_VAR(kernel_stack),%rax | ||
337 | - subq $(6*8-KERNEL_STACK_OFFSET),%rax /* Reset to original stack */ | ||
338 | - movq %rax,RSP(%rdi) | ||
339 | - movq $0,(%rax) /* Missing (lost) #GP error code */ | ||
340 | - movq $general_protection,RIP(%rdi) | ||
341 | - retq | ||
342 | - CFI_ENDPROC | ||
343 | -END(__do_double_fault) | ||
344 | -#else | ||
345 | -# define __do_double_fault do_double_fault | ||
346 | -#endif | ||
347 | - | ||
348 | /* | ||
349 | * End of kprobes section | ||
350 | */ | ||
351 | @@ -1363,7 +1319,7 @@ zeroentry overflow do_overflow | ||
352 | zeroentry bounds do_bounds | ||
353 | zeroentry invalid_op do_invalid_op | ||
354 | zeroentry device_not_available do_device_not_available | ||
355 | -paranoiderrorentry double_fault __do_double_fault | ||
356 | +paranoiderrorentry double_fault do_double_fault | ||
357 | zeroentry coprocessor_segment_overrun do_coprocessor_segment_overrun | ||
358 | errorentry invalid_TSS do_invalid_TSS | ||
359 | errorentry segment_not_present do_segment_not_present | ||
360 | @@ -1533,7 +1489,7 @@ apicinterrupt HYPERVISOR_CALLBACK_VECTOR \ | ||
361 | |||
362 | paranoidzeroentry_ist debug do_debug DEBUG_STACK | ||
363 | paranoidzeroentry_ist int3 do_int3 DEBUG_STACK | ||
364 | -paranoiderrorentry stack_segment do_stack_segment | ||
365 | +errorentry stack_segment do_stack_segment | ||
366 | #ifdef CONFIG_XEN | ||
367 | zeroentry xen_debug do_debug | ||
368 | zeroentry xen_int3 do_int3 | ||
369 | @@ -1643,16 +1599,15 @@ error_sti: | ||
370 | |||
371 | /* | ||
372 | * There are two places in the kernel that can potentially fault with | ||
373 | - * usergs. Handle them here. The exception handlers after iret run with | ||
374 | - * kernel gs again, so don't set the user space flag. B stepping K8s | ||
375 | - * sometimes report an truncated RIP for IRET exceptions returning to | ||
376 | - * compat mode. Check for these here too. | ||
377 | + * usergs. Handle them here. B stepping K8s sometimes report a | ||
378 | + * truncated RIP for IRET exceptions returning to compat mode. Check | ||
379 | + * for these here too. | ||
380 | */ | ||
381 | error_kernelspace: | ||
382 | incl %ebx | ||
383 | leaq native_irq_return_iret(%rip),%rcx | ||
384 | cmpq %rcx,RIP+8(%rsp) | ||
385 | - je error_swapgs | ||
386 | + je error_bad_iret | ||
387 | movl %ecx,%eax /* zero extend */ | ||
388 | cmpq %rax,RIP+8(%rsp) | ||
389 | je bstep_iret | ||
390 | @@ -1663,7 +1618,15 @@ error_kernelspace: | ||
391 | bstep_iret: | ||
392 | /* Fix truncated RIP */ | ||
393 | movq %rcx,RIP+8(%rsp) | ||
394 | - jmp error_swapgs | ||
395 | + /* fall through */ | ||
396 | + | ||
397 | +error_bad_iret: | ||
398 | + SWAPGS | ||
399 | + mov %rsp,%rdi | ||
400 | + call fixup_bad_iret | ||
401 | + mov %rax,%rsp | ||
402 | + decl %ebx /* Return to usergs */ | ||
403 | + jmp error_sti | ||
404 | CFI_ENDPROC | ||
405 | END(error_entry) | ||
406 | |||
407 | diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c | ||
408 | index 772e2a846dec..332cafe909eb 100644 | ||
409 | --- a/arch/x86/kernel/traps.c | ||
410 | +++ b/arch/x86/kernel/traps.c | ||
411 | @@ -220,33 +220,41 @@ DO_ERROR(X86_TRAP_OLD_MF, SIGFPE, "coprocessor segment overrun", | ||
412 | coprocessor_segment_overrun) | ||
413 | DO_ERROR(X86_TRAP_TS, SIGSEGV, "invalid TSS", invalid_TSS) | ||
414 | DO_ERROR(X86_TRAP_NP, SIGBUS, "segment not present", segment_not_present) | ||
415 | -#ifdef CONFIG_X86_32 | ||
416 | DO_ERROR(X86_TRAP_SS, SIGBUS, "stack segment", stack_segment) | ||
417 | -#endif | ||
418 | DO_ERROR_INFO(X86_TRAP_AC, SIGBUS, "alignment check", alignment_check, | ||
419 | BUS_ADRALN, 0) | ||
420 | |||
421 | #ifdef CONFIG_X86_64 | ||
422 | /* Runs on IST stack */ | ||
423 | -dotraplinkage void do_stack_segment(struct pt_regs *regs, long error_code) | ||
424 | -{ | ||
425 | - enum ctx_state prev_state; | ||
426 | - | ||
427 | - prev_state = exception_enter(); | ||
428 | - if (notify_die(DIE_TRAP, "stack segment", regs, error_code, | ||
429 | - X86_TRAP_SS, SIGBUS) != NOTIFY_STOP) { | ||
430 | - preempt_conditional_sti(regs); | ||
431 | - do_trap(X86_TRAP_SS, SIGBUS, "stack segment", regs, error_code, NULL); | ||
432 | - preempt_conditional_cli(regs); | ||
433 | - } | ||
434 | - exception_exit(prev_state); | ||
435 | -} | ||
436 | - | ||
437 | dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code) | ||
438 | { | ||
439 | static const char str[] = "double fault"; | ||
440 | struct task_struct *tsk = current; | ||
441 | |||
442 | +#ifdef CONFIG_X86_ESPFIX64 | ||
443 | + extern unsigned char native_irq_return_iret[]; | ||
444 | + | ||
445 | + /* | ||
446 | + * If IRET takes a non-IST fault on the espfix64 stack, then we | ||
447 | + * end up promoting it to a doublefault. In that case, modify | ||
448 | + * the stack to make it look like we just entered the #GP | ||
449 | + * handler from user space, similar to bad_iret. | ||
450 | + */ | ||
451 | + if (((long)regs->sp >> PGDIR_SHIFT) == ESPFIX_PGD_ENTRY && | ||
452 | + regs->cs == __KERNEL_CS && | ||
453 | + regs->ip == (unsigned long)native_irq_return_iret) | ||
454 | + { | ||
455 | + struct pt_regs *normal_regs = task_pt_regs(current); | ||
456 | + | ||
457 | + /* Fake a #GP(0) from userspace. */ | ||
458 | + memmove(&normal_regs->ip, (void *)regs->sp, 5*8); | ||
459 | + normal_regs->orig_ax = 0; /* Missing (lost) #GP error code */ | ||
460 | + regs->ip = (unsigned long)general_protection; | ||
461 | + regs->sp = (unsigned long)&normal_regs->orig_ax; | ||
462 | + return; | ||
463 | + } | ||
464 | +#endif | ||
465 | + | ||
466 | exception_enter(); | ||
467 | /* Return not checked because double check cannot be ignored */ | ||
468 | notify_die(DIE_TRAP, str, regs, error_code, X86_TRAP_DF, SIGSEGV); | ||
469 | @@ -373,6 +381,35 @@ asmlinkage __kprobes struct pt_regs *sync_regs(struct pt_regs *eregs) | ||
470 | *regs = *eregs; | ||
471 | return regs; | ||
472 | } | ||
473 | + | ||
474 | +struct bad_iret_stack { | ||
475 | + void *error_entry_ret; | ||
476 | + struct pt_regs regs; | ||
477 | +}; | ||
478 | + | ||
479 | +asmlinkage __visible | ||
480 | +struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s) | ||
481 | +{ | ||
482 | + /* | ||
483 | + * This is called from entry_64.S early in handling a fault | ||
484 | + * caused by a bad iret to user mode. To handle the fault | ||
485 | + * correctly, we want move our stack frame to task_pt_regs | ||
486 | + * and we want to pretend that the exception came from the | ||
487 | + * iret target. | ||
488 | + */ | ||
489 | + struct bad_iret_stack *new_stack = | ||
490 | + container_of(task_pt_regs(current), | ||
491 | + struct bad_iret_stack, regs); | ||
492 | + | ||
493 | + /* Copy the IRET target to the new stack. */ | ||
494 | + memmove(&new_stack->regs.ip, (void *)s->regs.sp, 5*8); | ||
495 | + | ||
496 | + /* Copy the remainder of the stack from the current stack. */ | ||
497 | + memmove(new_stack, s, offsetof(struct bad_iret_stack, regs.ip)); | ||
498 | + | ||
499 | + BUG_ON(!user_mode_vm(&new_stack->regs)); | ||
500 | + return new_stack; | ||
501 | +} | ||
502 | #endif | ||
503 | |||
504 | /* | ||
505 | @@ -745,7 +782,7 @@ void __init trap_init(void) | ||
506 | set_intr_gate(X86_TRAP_OLD_MF, &coprocessor_segment_overrun); | ||
507 | set_intr_gate(X86_TRAP_TS, &invalid_TSS); | ||
508 | set_intr_gate(X86_TRAP_NP, &segment_not_present); | ||
509 | - set_intr_gate_ist(X86_TRAP_SS, &stack_segment, STACKFAULT_STACK); | ||
510 | + set_intr_gate(X86_TRAP_SS, stack_segment); | ||
511 | set_intr_gate(X86_TRAP_GP, &general_protection); | ||
512 | set_intr_gate(X86_TRAP_SPURIOUS, &spurious_interrupt_bug); | ||
513 | set_intr_gate(X86_TRAP_MF, &coprocessor_error); | ||
514 | diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c | ||
515 | index bb00c4672ad6..2db3f30bed75 100644 | ||
516 | --- a/arch/x86/mm/init_64.c | ||
517 | +++ b/arch/x86/mm/init_64.c | ||
518 | @@ -1142,7 +1142,7 @@ void mark_rodata_ro(void) | ||
519 | unsigned long end = (unsigned long) &__end_rodata_hpage_align; | ||
520 | unsigned long text_end = PFN_ALIGN(&__stop___ex_table); | ||
521 | unsigned long rodata_end = PFN_ALIGN(&__end_rodata); | ||
522 | - unsigned long all_end = PFN_ALIGN(&_end); | ||
523 | + unsigned long all_end; | ||
524 | |||
525 | printk(KERN_INFO "Write protecting the kernel read-only data: %luk\n", | ||
526 | (end - start) >> 10); | ||
527 | @@ -1153,7 +1153,16 @@ void mark_rodata_ro(void) | ||
528 | /* | ||
529 | * The rodata/data/bss/brk section (but not the kernel text!) | ||
530 | * should also be not-executable. | ||
531 | + * | ||
532 | + * We align all_end to PMD_SIZE because the existing mapping | ||
533 | + * is a full PMD. If we would align _brk_end to PAGE_SIZE we | ||
534 | + * split the PMD and the reminder between _brk_end and the end | ||
535 | + * of the PMD will remain mapped executable. | ||
536 | + * | ||
537 | + * Any PMD which was setup after the one which covers _brk_end | ||
538 | + * has been zapped already via cleanup_highmem(). | ||
539 | */ | ||
540 | + all_end = roundup((unsigned long)_brk_end, PMD_SIZE); | ||
541 | set_memory_nx(rodata_start, (all_end - rodata_start) >> PAGE_SHIFT); | ||
542 | |||
543 | rodata_test(); | ||
544 | diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c | ||
545 | index acb3865710c2..5d4a4583d2df 100644 | ||
546 | --- a/drivers/infiniband/ulp/isert/ib_isert.c | ||
547 | +++ b/drivers/infiniband/ulp/isert/ib_isert.c | ||
548 | @@ -585,14 +585,25 @@ wake_up: | ||
549 | complete(&isert_conn->conn_wait); | ||
550 | } | ||
551 | |||
552 | -static void | ||
553 | +static int | ||
554 | isert_disconnected_handler(struct rdma_cm_id *cma_id, bool disconnect) | ||
555 | { | ||
556 | - struct isert_conn *isert_conn = (struct isert_conn *)cma_id->context; | ||
557 | + struct isert_conn *isert_conn; | ||
558 | + | ||
559 | + if (!cma_id->qp) { | ||
560 | + struct isert_np *isert_np = cma_id->context; | ||
561 | + | ||
562 | + isert_np->np_cm_id = NULL; | ||
563 | + return -1; | ||
564 | + } | ||
565 | + | ||
566 | + isert_conn = (struct isert_conn *)cma_id->context; | ||
567 | |||
568 | isert_conn->disconnect = disconnect; | ||
569 | INIT_WORK(&isert_conn->conn_logout_work, isert_disconnect_work); | ||
570 | schedule_work(&isert_conn->conn_logout_work); | ||
571 | + | ||
572 | + return 0; | ||
573 | } | ||
574 | |||
575 | static int | ||
576 | @@ -607,6 +618,9 @@ isert_cma_handler(struct rdma_cm_id *cma_id, struct rdma_cm_event *event) | ||
577 | switch (event->event) { | ||
578 | case RDMA_CM_EVENT_CONNECT_REQUEST: | ||
579 | ret = isert_connect_request(cma_id, event); | ||
580 | + if (ret) | ||
581 | + pr_err("isert_cma_handler failed RDMA_CM_EVENT: 0x%08x %d\n", | ||
582 | + event->event, ret); | ||
583 | break; | ||
584 | case RDMA_CM_EVENT_ESTABLISHED: | ||
585 | isert_connected_handler(cma_id); | ||
586 | @@ -616,7 +630,7 @@ isert_cma_handler(struct rdma_cm_id *cma_id, struct rdma_cm_event *event) | ||
587 | case RDMA_CM_EVENT_DEVICE_REMOVAL: /* FALLTHRU */ | ||
588 | disconnect = true; | ||
589 | case RDMA_CM_EVENT_TIMEWAIT_EXIT: /* FALLTHRU */ | ||
590 | - isert_disconnected_handler(cma_id, disconnect); | ||
591 | + ret = isert_disconnected_handler(cma_id, disconnect); | ||
592 | break; | ||
593 | case RDMA_CM_EVENT_CONNECT_ERROR: | ||
594 | default: | ||
595 | @@ -624,12 +638,6 @@ isert_cma_handler(struct rdma_cm_id *cma_id, struct rdma_cm_event *event) | ||
596 | break; | ||
597 | } | ||
598 | |||
599 | - if (ret != 0) { | ||
600 | - pr_err("isert_cma_handler failed RDMA_CM_EVENT: 0x%08x %d\n", | ||
601 | - event->event, ret); | ||
602 | - dump_stack(); | ||
603 | - } | ||
604 | - | ||
605 | return ret; | ||
606 | } | ||
607 | |||
608 | @@ -2233,7 +2241,8 @@ isert_free_np(struct iscsi_np *np) | ||
609 | { | ||
610 | struct isert_np *isert_np = (struct isert_np *)np->np_context; | ||
611 | |||
612 | - rdma_destroy_id(isert_np->np_cm_id); | ||
613 | + if (isert_np->np_cm_id) | ||
614 | + rdma_destroy_id(isert_np->np_cm_id); | ||
615 | |||
616 | np->np_context = NULL; | ||
617 | kfree(isert_np); | ||
618 | diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c | ||
619 | index 64953dfa9d8a..fcf9f87bcfd9 100644 | ||
620 | --- a/drivers/infiniband/ulp/srpt/ib_srpt.c | ||
621 | +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c | ||
622 | @@ -2101,6 +2101,7 @@ static int srpt_create_ch_ib(struct srpt_rdma_ch *ch) | ||
623 | if (!qp_init) | ||
624 | goto out; | ||
625 | |||
626 | +retry: | ||
627 | ch->cq = ib_create_cq(sdev->device, srpt_completion, NULL, ch, | ||
628 | ch->rq_size + srp_sq_size, 0); | ||
629 | if (IS_ERR(ch->cq)) { | ||
630 | @@ -2124,6 +2125,13 @@ static int srpt_create_ch_ib(struct srpt_rdma_ch *ch) | ||
631 | ch->qp = ib_create_qp(sdev->pd, qp_init); | ||
632 | if (IS_ERR(ch->qp)) { | ||
633 | ret = PTR_ERR(ch->qp); | ||
634 | + if (ret == -ENOMEM) { | ||
635 | + srp_sq_size /= 2; | ||
636 | + if (srp_sq_size >= MIN_SRPT_SQ_SIZE) { | ||
637 | + ib_destroy_cq(ch->cq); | ||
638 | + goto retry; | ||
639 | + } | ||
640 | + } | ||
641 | printk(KERN_ERR "failed to create_qp ret= %d\n", ret); | ||
642 | goto err_destroy_cq; | ||
643 | } | ||
644 | diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c | ||
645 | index 75e3b102ce45..856c1b03e22d 100644 | ||
646 | --- a/drivers/input/joystick/xpad.c | ||
647 | +++ b/drivers/input/joystick/xpad.c | ||
648 | @@ -1002,9 +1002,19 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id | ||
649 | } | ||
650 | |||
651 | ep_irq_in = &intf->cur_altsetting->endpoint[1].desc; | ||
652 | - usb_fill_bulk_urb(xpad->bulk_out, udev, | ||
653 | - usb_sndbulkpipe(udev, ep_irq_in->bEndpointAddress), | ||
654 | - xpad->bdata, XPAD_PKT_LEN, xpad_bulk_out, xpad); | ||
655 | + if (usb_endpoint_is_bulk_out(ep_irq_in)) { | ||
656 | + usb_fill_bulk_urb(xpad->bulk_out, udev, | ||
657 | + usb_sndbulkpipe(udev, | ||
658 | + ep_irq_in->bEndpointAddress), | ||
659 | + xpad->bdata, XPAD_PKT_LEN, | ||
660 | + xpad_bulk_out, xpad); | ||
661 | + } else { | ||
662 | + usb_fill_int_urb(xpad->bulk_out, udev, | ||
663 | + usb_sndintpipe(udev, | ||
664 | + ep_irq_in->bEndpointAddress), | ||
665 | + xpad->bdata, XPAD_PKT_LEN, | ||
666 | + xpad_bulk_out, xpad, 0); | ||
667 | + } | ||
668 | |||
669 | /* | ||
670 | * Submit the int URB immediately rather than waiting for open | ||
671 | diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c | ||
672 | index 539239d8e9ab..9bf47a064cdf 100644 | ||
673 | --- a/drivers/net/can/dev.c | ||
674 | +++ b/drivers/net/can/dev.c | ||
675 | @@ -385,7 +385,7 @@ void can_free_echo_skb(struct net_device *dev, unsigned int idx) | ||
676 | BUG_ON(idx >= priv->echo_skb_max); | ||
677 | |||
678 | if (priv->echo_skb[idx]) { | ||
679 | - kfree_skb(priv->echo_skb[idx]); | ||
680 | + dev_kfree_skb_any(priv->echo_skb[idx]); | ||
681 | priv->echo_skb[idx] = NULL; | ||
682 | } | ||
683 | } | ||
684 | diff --git a/drivers/net/can/usb/esd_usb2.c b/drivers/net/can/usb/esd_usb2.c | ||
685 | index 6aa7b3266c80..d5455c760618 100644 | ||
686 | --- a/drivers/net/can/usb/esd_usb2.c | ||
687 | +++ b/drivers/net/can/usb/esd_usb2.c | ||
688 | @@ -1132,6 +1132,7 @@ static void esd_usb2_disconnect(struct usb_interface *intf) | ||
689 | } | ||
690 | } | ||
691 | unlink_all_urbs(dev); | ||
692 | + kfree(dev); | ||
693 | } | ||
694 | } | ||
695 | |||
696 | diff --git a/drivers/net/ieee802154/fakehard.c b/drivers/net/ieee802154/fakehard.c | ||
697 | index bf0d55e2dd63..6adbef89c4b0 100644 | ||
698 | --- a/drivers/net/ieee802154/fakehard.c | ||
699 | +++ b/drivers/net/ieee802154/fakehard.c | ||
700 | @@ -376,17 +376,20 @@ static int ieee802154fake_probe(struct platform_device *pdev) | ||
701 | |||
702 | err = wpan_phy_register(phy); | ||
703 | if (err) | ||
704 | - goto out; | ||
705 | + goto err_phy_reg; | ||
706 | |||
707 | err = register_netdev(dev); | ||
708 | - if (err < 0) | ||
709 | - goto out; | ||
710 | + if (err) | ||
711 | + goto err_netdev_reg; | ||
712 | |||
713 | dev_info(&pdev->dev, "Added ieee802154 HardMAC hardware\n"); | ||
714 | return 0; | ||
715 | |||
716 | -out: | ||
717 | - unregister_netdev(dev); | ||
718 | +err_netdev_reg: | ||
719 | + wpan_phy_unregister(phy); | ||
720 | +err_phy_reg: | ||
721 | + free_netdev(dev); | ||
722 | + wpan_phy_free(phy); | ||
723 | return err; | ||
724 | } | ||
725 | |||
726 | diff --git a/drivers/net/ppp/pptp.c b/drivers/net/ppp/pptp.c | ||
727 | index 8161c3f066a3..0d5a5faaf83b 100644 | ||
728 | --- a/drivers/net/ppp/pptp.c | ||
729 | +++ b/drivers/net/ppp/pptp.c | ||
730 | @@ -506,7 +506,9 @@ static int pptp_getname(struct socket *sock, struct sockaddr *uaddr, | ||
731 | int len = sizeof(struct sockaddr_pppox); | ||
732 | struct sockaddr_pppox sp; | ||
733 | |||
734 | - sp.sa_family = AF_PPPOX; | ||
735 | + memset(&sp.sa_addr, 0, sizeof(sp.sa_addr)); | ||
736 | + | ||
737 | + sp.sa_family = AF_PPPOX; | ||
738 | sp.sa_protocol = PX_PROTO_PPTP; | ||
739 | sp.sa_addr.pptp = pppox_sk(sock->sk)->proto.pptp.src_addr; | ||
740 | |||
741 | diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c | ||
742 | index 6c584f8a2268..43204f4be2da 100644 | ||
743 | --- a/drivers/net/usb/qmi_wwan.c | ||
744 | +++ b/drivers/net/usb/qmi_wwan.c | ||
745 | @@ -756,6 +756,7 @@ static const struct usb_device_id products[] = { | ||
746 | {QMI_FIXED_INTF(0x413c, 0x81a4, 8)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */ | ||
747 | {QMI_FIXED_INTF(0x413c, 0x81a8, 8)}, /* Dell Wireless 5808 Gobi(TM) 4G LTE Mobile Broadband Card */ | ||
748 | {QMI_FIXED_INTF(0x413c, 0x81a9, 8)}, /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card */ | ||
749 | + {QMI_FIXED_INTF(0x03f0, 0x581d, 4)}, /* HP lt4112 LTE/HSPA+ Gobi 4G Module (Huawei me906e) */ | ||
750 | |||
751 | /* 4. Gobi 1000 devices */ | ||
752 | {QMI_GOBI1K_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */ | ||
753 | diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c | ||
754 | index 1f17f5b64625..5be4eee63eb8 100644 | ||
755 | --- a/drivers/net/wireless/rt2x00/rt2x00queue.c | ||
756 | +++ b/drivers/net/wireless/rt2x00/rt2x00queue.c | ||
757 | @@ -160,55 +160,29 @@ void rt2x00queue_align_frame(struct sk_buff *skb) | ||
758 | skb_trim(skb, frame_length); | ||
759 | } | ||
760 | |||
761 | -void rt2x00queue_insert_l2pad(struct sk_buff *skb, unsigned int header_length) | ||
762 | +/* | ||
763 | + * H/W needs L2 padding between the header and the paylod if header size | ||
764 | + * is not 4 bytes aligned. | ||
765 | + */ | ||
766 | +void rt2x00queue_insert_l2pad(struct sk_buff *skb, unsigned int hdr_len) | ||
767 | { | ||
768 | - unsigned int payload_length = skb->len - header_length; | ||
769 | - unsigned int header_align = ALIGN_SIZE(skb, 0); | ||
770 | - unsigned int payload_align = ALIGN_SIZE(skb, header_length); | ||
771 | - unsigned int l2pad = payload_length ? L2PAD_SIZE(header_length) : 0; | ||
772 | + unsigned int l2pad = (skb->len > hdr_len) ? L2PAD_SIZE(hdr_len) : 0; | ||
773 | |||
774 | - /* | ||
775 | - * Adjust the header alignment if the payload needs to be moved more | ||
776 | - * than the header. | ||
777 | - */ | ||
778 | - if (payload_align > header_align) | ||
779 | - header_align += 4; | ||
780 | - | ||
781 | - /* There is nothing to do if no alignment is needed */ | ||
782 | - if (!header_align) | ||
783 | + if (!l2pad) | ||
784 | return; | ||
785 | |||
786 | - /* Reserve the amount of space needed in front of the frame */ | ||
787 | - skb_push(skb, header_align); | ||
788 | - | ||
789 | - /* | ||
790 | - * Move the header. | ||
791 | - */ | ||
792 | - memmove(skb->data, skb->data + header_align, header_length); | ||
793 | - | ||
794 | - /* Move the payload, if present and if required */ | ||
795 | - if (payload_length && payload_align) | ||
796 | - memmove(skb->data + header_length + l2pad, | ||
797 | - skb->data + header_length + l2pad + payload_align, | ||
798 | - payload_length); | ||
799 | - | ||
800 | - /* Trim the skb to the correct size */ | ||
801 | - skb_trim(skb, header_length + l2pad + payload_length); | ||
802 | + skb_push(skb, l2pad); | ||
803 | + memmove(skb->data, skb->data + l2pad, hdr_len); | ||
804 | } | ||
805 | |||
806 | -void rt2x00queue_remove_l2pad(struct sk_buff *skb, unsigned int header_length) | ||
807 | +void rt2x00queue_remove_l2pad(struct sk_buff *skb, unsigned int hdr_len) | ||
808 | { | ||
809 | - /* | ||
810 | - * L2 padding is only present if the skb contains more than just the | ||
811 | - * IEEE 802.11 header. | ||
812 | - */ | ||
813 | - unsigned int l2pad = (skb->len > header_length) ? | ||
814 | - L2PAD_SIZE(header_length) : 0; | ||
815 | + unsigned int l2pad = (skb->len > hdr_len) ? L2PAD_SIZE(hdr_len) : 0; | ||
816 | |||
817 | if (!l2pad) | ||
818 | return; | ||
819 | |||
820 | - memmove(skb->data + l2pad, skb->data, header_length); | ||
821 | + memmove(skb->data + l2pad, skb->data, hdr_len); | ||
822 | skb_pull(skb, l2pad); | ||
823 | } | ||
824 | |||
825 | diff --git a/drivers/of/address.c b/drivers/of/address.c | ||
826 | index 00bc55cc821c..8fb2b5769733 100644 | ||
827 | --- a/drivers/of/address.c | ||
828 | +++ b/drivers/of/address.c | ||
829 | @@ -334,6 +334,21 @@ static struct of_bus *of_match_bus(struct device_node *np) | ||
830 | return NULL; | ||
831 | } | ||
832 | |||
833 | +static int of_empty_ranges_quirk(void) | ||
834 | +{ | ||
835 | + if (IS_ENABLED(CONFIG_PPC)) { | ||
836 | + /* To save cycles, we cache the result */ | ||
837 | + static int quirk_state = -1; | ||
838 | + | ||
839 | + if (quirk_state < 0) | ||
840 | + quirk_state = | ||
841 | + of_machine_is_compatible("Power Macintosh") || | ||
842 | + of_machine_is_compatible("MacRISC"); | ||
843 | + return quirk_state; | ||
844 | + } | ||
845 | + return false; | ||
846 | +} | ||
847 | + | ||
848 | static int of_translate_one(struct device_node *parent, struct of_bus *bus, | ||
849 | struct of_bus *pbus, __be32 *addr, | ||
850 | int na, int ns, int pna, const char *rprop) | ||
851 | @@ -359,12 +374,10 @@ static int of_translate_one(struct device_node *parent, struct of_bus *bus, | ||
852 | * This code is only enabled on powerpc. --gcl | ||
853 | */ | ||
854 | ranges = of_get_property(parent, rprop, &rlen); | ||
855 | -#if !defined(CONFIG_PPC) | ||
856 | - if (ranges == NULL) { | ||
857 | + if (ranges == NULL && !of_empty_ranges_quirk()) { | ||
858 | pr_err("OF: no ranges; cannot translate\n"); | ||
859 | return 1; | ||
860 | } | ||
861 | -#endif /* !defined(CONFIG_PPC) */ | ||
862 | if (ranges == NULL || rlen == 0) { | ||
863 | offset = of_read_number(addr, na); | ||
864 | memset(addr, 0, pna * 4); | ||
865 | diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c | ||
866 | index 2c1075213bec..402063ff889e 100644 | ||
867 | --- a/drivers/pci/msi.c | ||
868 | +++ b/drivers/pci/msi.c | ||
869 | @@ -530,6 +530,20 @@ out_unroll: | ||
870 | return ret; | ||
871 | } | ||
872 | |||
873 | +static int msi_verify_entries(struct pci_dev *dev) | ||
874 | +{ | ||
875 | + struct msi_desc *entry; | ||
876 | + | ||
877 | + list_for_each_entry(entry, &dev->msi_list, list) { | ||
878 | + if (!dev->no_64bit_msi || !entry->msg.address_hi) | ||
879 | + continue; | ||
880 | + dev_err(&dev->dev, "Device has broken 64-bit MSI but arch" | ||
881 | + " tried to assign one above 4G\n"); | ||
882 | + return -EIO; | ||
883 | + } | ||
884 | + return 0; | ||
885 | +} | ||
886 | + | ||
887 | /** | ||
888 | * msi_capability_init - configure device's MSI capability structure | ||
889 | * @dev: pointer to the pci_dev data structure of MSI device function | ||
890 | @@ -583,6 +597,13 @@ static int msi_capability_init(struct pci_dev *dev, int nvec) | ||
891 | return ret; | ||
892 | } | ||
893 | |||
894 | + ret = msi_verify_entries(dev); | ||
895 | + if (ret) { | ||
896 | + msi_mask_irq(entry, mask, ~mask); | ||
897 | + free_msi_irqs(dev); | ||
898 | + return ret; | ||
899 | + } | ||
900 | + | ||
901 | ret = populate_msi_sysfs(dev); | ||
902 | if (ret) { | ||
903 | msi_mask_irq(entry, mask, ~mask); | ||
904 | @@ -698,6 +719,11 @@ static int msix_capability_init(struct pci_dev *dev, | ||
905 | if (ret) | ||
906 | goto error; | ||
907 | |||
908 | + /* Check if all MSI entries honor device restrictions */ | ||
909 | + ret = msi_verify_entries(dev); | ||
910 | + if (ret) | ||
911 | + goto error; | ||
912 | + | ||
913 | /* | ||
914 | * Some devices require MSI-X to be enabled before we can touch the | ||
915 | * MSI-X registers. We need to mask all the vectors to prevent | ||
916 | diff --git a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c | ||
917 | index 69ac55495c1d..aad5535db782 100644 | ||
918 | --- a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c | ||
919 | +++ b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c | ||
920 | @@ -411,6 +411,7 @@ static int bnx2fc_rcv(struct sk_buff *skb, struct net_device *dev, | ||
921 | struct fc_frame_header *fh; | ||
922 | struct fcoe_rcv_info *fr; | ||
923 | struct fcoe_percpu_s *bg; | ||
924 | + struct sk_buff *tmp_skb; | ||
925 | unsigned short oxid; | ||
926 | |||
927 | interface = container_of(ptype, struct bnx2fc_interface, | ||
928 | @@ -423,6 +424,12 @@ static int bnx2fc_rcv(struct sk_buff *skb, struct net_device *dev, | ||
929 | goto err; | ||
930 | } | ||
931 | |||
932 | + tmp_skb = skb_share_check(skb, GFP_ATOMIC); | ||
933 | + if (!tmp_skb) | ||
934 | + goto err; | ||
935 | + | ||
936 | + skb = tmp_skb; | ||
937 | + | ||
938 | if (unlikely(eth_hdr(skb)->h_proto != htons(ETH_P_FCOE))) { | ||
939 | printk(KERN_ERR PFX "bnx2fc_rcv: Wrong FC type frame\n"); | ||
940 | goto err; | ||
941 | diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c | ||
942 | index c1abc06899e7..137a4deba5a3 100644 | ||
943 | --- a/drivers/spi/spi-dw.c | ||
944 | +++ b/drivers/spi/spi-dw.c | ||
945 | @@ -394,9 +394,6 @@ static void pump_transfers(unsigned long data) | ||
946 | chip = dws->cur_chip; | ||
947 | spi = message->spi; | ||
948 | |||
949 | - if (unlikely(!chip->clk_div)) | ||
950 | - chip->clk_div = dws->max_freq / chip->speed_hz; | ||
951 | - | ||
952 | if (message->state == ERROR_STATE) { | ||
953 | message->status = -EIO; | ||
954 | goto early_exit; | ||
955 | @@ -438,7 +435,7 @@ static void pump_transfers(unsigned long data) | ||
956 | if (transfer->speed_hz) { | ||
957 | speed = chip->speed_hz; | ||
958 | |||
959 | - if (transfer->speed_hz != speed) { | ||
960 | + if ((transfer->speed_hz != speed) || (!chip->clk_div)) { | ||
961 | speed = transfer->speed_hz; | ||
962 | if (speed > dws->max_freq) { | ||
963 | printk(KERN_ERR "MRST SPI0: unsupported" | ||
964 | @@ -677,7 +674,6 @@ static int dw_spi_setup(struct spi_device *spi) | ||
965 | dev_err(&spi->dev, "No max speed HZ parameter\n"); | ||
966 | return -EINVAL; | ||
967 | } | ||
968 | - chip->speed_hz = spi->max_speed_hz; | ||
969 | |||
970 | chip->tmode = 0; /* Tx & Rx */ | ||
971 | /* Default SPI mode is SCPOL = 0, SCPH = 0 */ | ||
972 | diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c | ||
973 | index 12342695ed79..dcc5daa0ff1c 100644 | ||
974 | --- a/drivers/target/target_core_transport.c | ||
975 | +++ b/drivers/target/target_core_transport.c | ||
976 | @@ -2128,7 +2128,7 @@ transport_generic_new_cmd(struct se_cmd *cmd) | ||
977 | * and let it call back once the write buffers are ready. | ||
978 | */ | ||
979 | target_add_to_state_list(cmd); | ||
980 | - if (cmd->data_direction != DMA_TO_DEVICE) { | ||
981 | + if (cmd->data_direction != DMA_TO_DEVICE || cmd->data_length == 0) { | ||
982 | target_execute_cmd(cmd); | ||
983 | return 0; | ||
984 | } | ||
985 | diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c | ||
986 | index a301b3fa622b..b73f3031a660 100644 | ||
987 | --- a/drivers/usb/core/quirks.c | ||
988 | +++ b/drivers/usb/core/quirks.c | ||
989 | @@ -43,6 +43,9 @@ static const struct usb_device_id usb_quirk_list[] = { | ||
990 | /* Creative SB Audigy 2 NX */ | ||
991 | { USB_DEVICE(0x041e, 0x3020), .driver_info = USB_QUIRK_RESET_RESUME }, | ||
992 | |||
993 | + /* Microsoft Wireless Laser Mouse 6000 Receiver */ | ||
994 | + { USB_DEVICE(0x045e, 0x00e1), .driver_info = USB_QUIRK_RESET_RESUME }, | ||
995 | + | ||
996 | /* Microsoft LifeCam-VX700 v2.0 */ | ||
997 | { USB_DEVICE(0x045e, 0x0770), .driver_info = USB_QUIRK_RESET_RESUME }, | ||
998 | |||
999 | diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c | ||
1000 | index df5834bd71f3..eb45ac843712 100644 | ||
1001 | --- a/drivers/usb/host/xhci-ring.c | ||
1002 | +++ b/drivers/usb/host/xhci-ring.c | ||
1003 | @@ -1178,9 +1178,8 @@ static void handle_reset_ep_completion(struct xhci_hcd *xhci, | ||
1004 | false); | ||
1005 | xhci_ring_cmd_db(xhci); | ||
1006 | } else { | ||
1007 | - /* Clear our internal halted state and restart the ring(s) */ | ||
1008 | + /* Clear our internal halted state */ | ||
1009 | xhci->devs[slot_id]->eps[ep_index].ep_state &= ~EP_HALTED; | ||
1010 | - ring_doorbell_for_active_rings(xhci, slot_id, ep_index); | ||
1011 | } | ||
1012 | } | ||
1013 | |||
1014 | diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c | ||
1015 | index e9183eda39e0..a24714f6f88f 100644 | ||
1016 | --- a/drivers/usb/serial/cp210x.c | ||
1017 | +++ b/drivers/usb/serial/cp210x.c | ||
1018 | @@ -120,6 +120,7 @@ static const struct usb_device_id id_table[] = { | ||
1019 | { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */ | ||
1020 | { USB_DEVICE(0x10C4, 0x8664) }, /* AC-Services CAN-IF */ | ||
1021 | { USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */ | ||
1022 | + { USB_DEVICE(0x10C4, 0x8875) }, /* CEL MeshConnect USB Stick */ | ||
1023 | { USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */ | ||
1024 | { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */ | ||
1025 | { USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */ | ||
1026 | diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c | ||
1027 | index 768c2b4722d1..c625f55667f1 100644 | ||
1028 | --- a/drivers/usb/serial/ftdi_sio.c | ||
1029 | +++ b/drivers/usb/serial/ftdi_sio.c | ||
1030 | @@ -486,6 +486,39 @@ static struct usb_device_id id_table_combined [] = { | ||
1031 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01FD_PID) }, | ||
1032 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01FE_PID) }, | ||
1033 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01FF_PID) }, | ||
1034 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_4701_PID) }, | ||
1035 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9300_PID) }, | ||
1036 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9301_PID) }, | ||
1037 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9302_PID) }, | ||
1038 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9303_PID) }, | ||
1039 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9304_PID) }, | ||
1040 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9305_PID) }, | ||
1041 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9306_PID) }, | ||
1042 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9307_PID) }, | ||
1043 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9308_PID) }, | ||
1044 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9309_PID) }, | ||
1045 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_930A_PID) }, | ||
1046 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_930B_PID) }, | ||
1047 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_930C_PID) }, | ||
1048 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_930D_PID) }, | ||
1049 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_930E_PID) }, | ||
1050 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_930F_PID) }, | ||
1051 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9310_PID) }, | ||
1052 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9311_PID) }, | ||
1053 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9312_PID) }, | ||
1054 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9313_PID) }, | ||
1055 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9314_PID) }, | ||
1056 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9315_PID) }, | ||
1057 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9316_PID) }, | ||
1058 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9317_PID) }, | ||
1059 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9318_PID) }, | ||
1060 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9319_PID) }, | ||
1061 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_931A_PID) }, | ||
1062 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_931B_PID) }, | ||
1063 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_931C_PID) }, | ||
1064 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_931D_PID) }, | ||
1065 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_931E_PID) }, | ||
1066 | + { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_931F_PID) }, | ||
1067 | { USB_DEVICE(FTDI_VID, FTDI_PERLE_ULTRAPORT_PID) }, | ||
1068 | { USB_DEVICE(FTDI_VID, FTDI_PIEGROUP_PID) }, | ||
1069 | { USB_DEVICE(FTDI_VID, FTDI_TNC_X_PID) }, | ||
1070 | diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h | ||
1071 | index 302ab9a71f06..ac703a6e2115 100644 | ||
1072 | --- a/drivers/usb/serial/ftdi_sio_ids.h | ||
1073 | +++ b/drivers/usb/serial/ftdi_sio_ids.h | ||
1074 | @@ -926,8 +926,8 @@ | ||
1075 | #define BAYER_CONTOUR_CABLE_PID 0x6001 | ||
1076 | |||
1077 | /* | ||
1078 | - * The following are the values for the Matrix Orbital FTDI Range | ||
1079 | - * Anything in this range will use an FT232RL. | ||
1080 | + * Matrix Orbital Intelligent USB displays. | ||
1081 | + * http://www.matrixorbital.com | ||
1082 | */ | ||
1083 | #define MTXORB_VID 0x1B3D | ||
1084 | #define MTXORB_FTDI_RANGE_0100_PID 0x0100 | ||
1085 | @@ -1186,8 +1186,39 @@ | ||
1086 | #define MTXORB_FTDI_RANGE_01FD_PID 0x01FD | ||
1087 | #define MTXORB_FTDI_RANGE_01FE_PID 0x01FE | ||
1088 | #define MTXORB_FTDI_RANGE_01FF_PID 0x01FF | ||
1089 | - | ||
1090 | - | ||
1091 | +#define MTXORB_FTDI_RANGE_4701_PID 0x4701 | ||
1092 | +#define MTXORB_FTDI_RANGE_9300_PID 0x9300 | ||
1093 | +#define MTXORB_FTDI_RANGE_9301_PID 0x9301 | ||
1094 | +#define MTXORB_FTDI_RANGE_9302_PID 0x9302 | ||
1095 | +#define MTXORB_FTDI_RANGE_9303_PID 0x9303 | ||
1096 | +#define MTXORB_FTDI_RANGE_9304_PID 0x9304 | ||
1097 | +#define MTXORB_FTDI_RANGE_9305_PID 0x9305 | ||
1098 | +#define MTXORB_FTDI_RANGE_9306_PID 0x9306 | ||
1099 | +#define MTXORB_FTDI_RANGE_9307_PID 0x9307 | ||
1100 | +#define MTXORB_FTDI_RANGE_9308_PID 0x9308 | ||
1101 | +#define MTXORB_FTDI_RANGE_9309_PID 0x9309 | ||
1102 | +#define MTXORB_FTDI_RANGE_930A_PID 0x930A | ||
1103 | +#define MTXORB_FTDI_RANGE_930B_PID 0x930B | ||
1104 | +#define MTXORB_FTDI_RANGE_930C_PID 0x930C | ||
1105 | +#define MTXORB_FTDI_RANGE_930D_PID 0x930D | ||
1106 | +#define MTXORB_FTDI_RANGE_930E_PID 0x930E | ||
1107 | +#define MTXORB_FTDI_RANGE_930F_PID 0x930F | ||
1108 | +#define MTXORB_FTDI_RANGE_9310_PID 0x9310 | ||
1109 | +#define MTXORB_FTDI_RANGE_9311_PID 0x9311 | ||
1110 | +#define MTXORB_FTDI_RANGE_9312_PID 0x9312 | ||
1111 | +#define MTXORB_FTDI_RANGE_9313_PID 0x9313 | ||
1112 | +#define MTXORB_FTDI_RANGE_9314_PID 0x9314 | ||
1113 | +#define MTXORB_FTDI_RANGE_9315_PID 0x9315 | ||
1114 | +#define MTXORB_FTDI_RANGE_9316_PID 0x9316 | ||
1115 | +#define MTXORB_FTDI_RANGE_9317_PID 0x9317 | ||
1116 | +#define MTXORB_FTDI_RANGE_9318_PID 0x9318 | ||
1117 | +#define MTXORB_FTDI_RANGE_9319_PID 0x9319 | ||
1118 | +#define MTXORB_FTDI_RANGE_931A_PID 0x931A | ||
1119 | +#define MTXORB_FTDI_RANGE_931B_PID 0x931B | ||
1120 | +#define MTXORB_FTDI_RANGE_931C_PID 0x931C | ||
1121 | +#define MTXORB_FTDI_RANGE_931D_PID 0x931D | ||
1122 | +#define MTXORB_FTDI_RANGE_931E_PID 0x931E | ||
1123 | +#define MTXORB_FTDI_RANGE_931F_PID 0x931F | ||
1124 | |||
1125 | /* | ||
1126 | * The Mobility Lab (TML) | ||
1127 | diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c | ||
1128 | index 07fbdf0e7ab6..f0e65c970d35 100644 | ||
1129 | --- a/drivers/usb/serial/keyspan.c | ||
1130 | +++ b/drivers/usb/serial/keyspan.c | ||
1131 | @@ -308,24 +308,30 @@ static void usa26_indat_callback(struct urb *urb) | ||
1132 | if ((data[0] & 0x80) == 0) { | ||
1133 | /* no errors on individual bytes, only | ||
1134 | possible overrun err */ | ||
1135 | - if (data[0] & RXERROR_OVERRUN) | ||
1136 | - err = TTY_OVERRUN; | ||
1137 | - else | ||
1138 | - err = 0; | ||
1139 | + if (data[0] & RXERROR_OVERRUN) { | ||
1140 | + tty_insert_flip_char(&port->port, 0, | ||
1141 | + TTY_OVERRUN); | ||
1142 | + } | ||
1143 | for (i = 1; i < urb->actual_length ; ++i) | ||
1144 | - tty_insert_flip_char(&port->port, data[i], err); | ||
1145 | + tty_insert_flip_char(&port->port, data[i], | ||
1146 | + TTY_NORMAL); | ||
1147 | } else { | ||
1148 | /* some bytes had errors, every byte has status */ | ||
1149 | dev_dbg(&port->dev, "%s - RX error!!!!\n", __func__); | ||
1150 | for (i = 0; i + 1 < urb->actual_length; i += 2) { | ||
1151 | - int stat = data[i], flag = 0; | ||
1152 | - if (stat & RXERROR_OVERRUN) | ||
1153 | - flag |= TTY_OVERRUN; | ||
1154 | - if (stat & RXERROR_FRAMING) | ||
1155 | - flag |= TTY_FRAME; | ||
1156 | - if (stat & RXERROR_PARITY) | ||
1157 | - flag |= TTY_PARITY; | ||
1158 | + int stat = data[i]; | ||
1159 | + int flag = TTY_NORMAL; | ||
1160 | + | ||
1161 | + if (stat & RXERROR_OVERRUN) { | ||
1162 | + tty_insert_flip_char(&port->port, 0, | ||
1163 | + TTY_OVERRUN); | ||
1164 | + } | ||
1165 | /* XXX should handle break (0x10) */ | ||
1166 | + if (stat & RXERROR_PARITY) | ||
1167 | + flag = TTY_PARITY; | ||
1168 | + else if (stat & RXERROR_FRAMING) | ||
1169 | + flag = TTY_FRAME; | ||
1170 | + | ||
1171 | tty_insert_flip_char(&port->port, data[i+1], | ||
1172 | flag); | ||
1173 | } | ||
1174 | @@ -672,14 +678,19 @@ static void usa49_indat_callback(struct urb *urb) | ||
1175 | } else { | ||
1176 | /* some bytes had errors, every byte has status */ | ||
1177 | for (i = 0; i + 1 < urb->actual_length; i += 2) { | ||
1178 | - int stat = data[i], flag = 0; | ||
1179 | - if (stat & RXERROR_OVERRUN) | ||
1180 | - flag |= TTY_OVERRUN; | ||
1181 | - if (stat & RXERROR_FRAMING) | ||
1182 | - flag |= TTY_FRAME; | ||
1183 | - if (stat & RXERROR_PARITY) | ||
1184 | - flag |= TTY_PARITY; | ||
1185 | + int stat = data[i]; | ||
1186 | + int flag = TTY_NORMAL; | ||
1187 | + | ||
1188 | + if (stat & RXERROR_OVERRUN) { | ||
1189 | + tty_insert_flip_char(&port->port, 0, | ||
1190 | + TTY_OVERRUN); | ||
1191 | + } | ||
1192 | /* XXX should handle break (0x10) */ | ||
1193 | + if (stat & RXERROR_PARITY) | ||
1194 | + flag = TTY_PARITY; | ||
1195 | + else if (stat & RXERROR_FRAMING) | ||
1196 | + flag = TTY_FRAME; | ||
1197 | + | ||
1198 | tty_insert_flip_char(&port->port, data[i+1], | ||
1199 | flag); | ||
1200 | } | ||
1201 | @@ -736,15 +747,19 @@ static void usa49wg_indat_callback(struct urb *urb) | ||
1202 | */ | ||
1203 | for (x = 0; x + 1 < len && | ||
1204 | i + 1 < urb->actual_length; x += 2) { | ||
1205 | - int stat = data[i], flag = 0; | ||
1206 | + int stat = data[i]; | ||
1207 | + int flag = TTY_NORMAL; | ||
1208 | |||
1209 | - if (stat & RXERROR_OVERRUN) | ||
1210 | - flag |= TTY_OVERRUN; | ||
1211 | - if (stat & RXERROR_FRAMING) | ||
1212 | - flag |= TTY_FRAME; | ||
1213 | - if (stat & RXERROR_PARITY) | ||
1214 | - flag |= TTY_PARITY; | ||
1215 | + if (stat & RXERROR_OVERRUN) { | ||
1216 | + tty_insert_flip_char(&port->port, 0, | ||
1217 | + TTY_OVERRUN); | ||
1218 | + } | ||
1219 | /* XXX should handle break (0x10) */ | ||
1220 | + if (stat & RXERROR_PARITY) | ||
1221 | + flag = TTY_PARITY; | ||
1222 | + else if (stat & RXERROR_FRAMING) | ||
1223 | + flag = TTY_FRAME; | ||
1224 | + | ||
1225 | tty_insert_flip_char(&port->port, data[i+1], | ||
1226 | flag); | ||
1227 | i += 2; | ||
1228 | @@ -796,25 +811,31 @@ static void usa90_indat_callback(struct urb *urb) | ||
1229 | if ((data[0] & 0x80) == 0) { | ||
1230 | /* no errors on individual bytes, only | ||
1231 | possible overrun err*/ | ||
1232 | - if (data[0] & RXERROR_OVERRUN) | ||
1233 | - err = TTY_OVERRUN; | ||
1234 | - else | ||
1235 | - err = 0; | ||
1236 | + if (data[0] & RXERROR_OVERRUN) { | ||
1237 | + tty_insert_flip_char(&port->port, 0, | ||
1238 | + TTY_OVERRUN); | ||
1239 | + } | ||
1240 | for (i = 1; i < urb->actual_length ; ++i) | ||
1241 | tty_insert_flip_char(&port->port, | ||
1242 | - data[i], err); | ||
1243 | + data[i], TTY_NORMAL); | ||
1244 | } else { | ||
1245 | /* some bytes had errors, every byte has status */ | ||
1246 | dev_dbg(&port->dev, "%s - RX error!!!!\n", __func__); | ||
1247 | for (i = 0; i + 1 < urb->actual_length; i += 2) { | ||
1248 | - int stat = data[i], flag = 0; | ||
1249 | - if (stat & RXERROR_OVERRUN) | ||
1250 | - flag |= TTY_OVERRUN; | ||
1251 | - if (stat & RXERROR_FRAMING) | ||
1252 | - flag |= TTY_FRAME; | ||
1253 | - if (stat & RXERROR_PARITY) | ||
1254 | - flag |= TTY_PARITY; | ||
1255 | + int stat = data[i]; | ||
1256 | + int flag = TTY_NORMAL; | ||
1257 | + | ||
1258 | + if (stat & RXERROR_OVERRUN) { | ||
1259 | + tty_insert_flip_char( | ||
1260 | + &port->port, 0, | ||
1261 | + TTY_OVERRUN); | ||
1262 | + } | ||
1263 | /* XXX should handle break (0x10) */ | ||
1264 | + if (stat & RXERROR_PARITY) | ||
1265 | + flag = TTY_PARITY; | ||
1266 | + else if (stat & RXERROR_FRAMING) | ||
1267 | + flag = TTY_FRAME; | ||
1268 | + | ||
1269 | tty_insert_flip_char(&port->port, | ||
1270 | data[i+1], flag); | ||
1271 | } | ||
1272 | diff --git a/drivers/usb/serial/ssu100.c b/drivers/usb/serial/ssu100.c | ||
1273 | index 5b62dbbdf996..8f5f36134864 100644 | ||
1274 | --- a/drivers/usb/serial/ssu100.c | ||
1275 | +++ b/drivers/usb/serial/ssu100.c | ||
1276 | @@ -495,10 +495,9 @@ static void ssu100_update_lsr(struct usb_serial_port *port, u8 lsr, | ||
1277 | if (*tty_flag == TTY_NORMAL) | ||
1278 | *tty_flag = TTY_FRAME; | ||
1279 | } | ||
1280 | - if (lsr & UART_LSR_OE){ | ||
1281 | + if (lsr & UART_LSR_OE) { | ||
1282 | port->icount.overrun++; | ||
1283 | - if (*tty_flag == TTY_NORMAL) | ||
1284 | - *tty_flag = TTY_OVERRUN; | ||
1285 | + tty_insert_flip_char(&port->port, 0, TTY_OVERRUN); | ||
1286 | } | ||
1287 | } | ||
1288 | |||
1289 | @@ -516,12 +515,8 @@ static void ssu100_process_read_urb(struct urb *urb) | ||
1290 | if ((len >= 4) && | ||
1291 | (packet[0] == 0x1b) && (packet[1] == 0x1b) && | ||
1292 | ((packet[2] == 0x00) || (packet[2] == 0x01))) { | ||
1293 | - if (packet[2] == 0x00) { | ||
1294 | + if (packet[2] == 0x00) | ||
1295 | ssu100_update_lsr(port, packet[3], &flag); | ||
1296 | - if (flag == TTY_OVERRUN) | ||
1297 | - tty_insert_flip_char(&port->port, 0, | ||
1298 | - TTY_OVERRUN); | ||
1299 | - } | ||
1300 | if (packet[2] == 0x01) | ||
1301 | ssu100_update_msr(port, packet[3]); | ||
1302 | |||
1303 | diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c | ||
1304 | index cc8c5b32043c..f42bbe5fbc0a 100644 | ||
1305 | --- a/fs/nfsd/nfs4callback.c | ||
1306 | +++ b/fs/nfsd/nfs4callback.c | ||
1307 | @@ -784,8 +784,12 @@ static bool nfsd41_cb_get_slot(struct nfs4_client *clp, struct rpc_task *task) | ||
1308 | { | ||
1309 | if (test_and_set_bit(0, &clp->cl_cb_slot_busy) != 0) { | ||
1310 | rpc_sleep_on(&clp->cl_cb_waitq, task, NULL); | ||
1311 | - dprintk("%s slot is busy\n", __func__); | ||
1312 | - return false; | ||
1313 | + /* Race breaker */ | ||
1314 | + if (test_and_set_bit(0, &clp->cl_cb_slot_busy) != 0) { | ||
1315 | + dprintk("%s slot is busy\n", __func__); | ||
1316 | + return false; | ||
1317 | + } | ||
1318 | + rpc_wake_up_queued_task(&clp->cl_cb_waitq, task); | ||
1319 | } | ||
1320 | return true; | ||
1321 | } | ||
1322 | diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c | ||
1323 | index bdff771057d3..836307ae1f08 100644 | ||
1324 | --- a/fs/nfsd/nfs4state.c | ||
1325 | +++ b/fs/nfsd/nfs4state.c | ||
1326 | @@ -367,7 +367,6 @@ static struct nfs4_delegation * | ||
1327 | alloc_init_deleg(struct nfs4_client *clp, struct nfs4_ol_stateid *stp, struct svc_fh *current_fh, u32 type) | ||
1328 | { | ||
1329 | struct nfs4_delegation *dp; | ||
1330 | - struct nfs4_file *fp = stp->st_file; | ||
1331 | |||
1332 | dprintk("NFSD alloc_init_deleg\n"); | ||
1333 | /* | ||
1334 | @@ -377,8 +376,6 @@ alloc_init_deleg(struct nfs4_client *clp, struct nfs4_ol_stateid *stp, struct sv | ||
1335 | */ | ||
1336 | if (type != NFS4_OPEN_DELEGATE_READ) | ||
1337 | return NULL; | ||
1338 | - if (fp->fi_had_conflict) | ||
1339 | - return NULL; | ||
1340 | if (num_delegations > max_delegations) | ||
1341 | return NULL; | ||
1342 | dp = delegstateid(nfs4_alloc_stid(clp, deleg_slab)); | ||
1343 | @@ -395,8 +392,7 @@ alloc_init_deleg(struct nfs4_client *clp, struct nfs4_ol_stateid *stp, struct sv | ||
1344 | INIT_LIST_HEAD(&dp->dl_perfile); | ||
1345 | INIT_LIST_HEAD(&dp->dl_perclnt); | ||
1346 | INIT_LIST_HEAD(&dp->dl_recall_lru); | ||
1347 | - get_nfs4_file(fp); | ||
1348 | - dp->dl_file = fp; | ||
1349 | + dp->dl_file = NULL; | ||
1350 | dp->dl_type = type; | ||
1351 | fh_copy_shallow(&dp->dl_fh, ¤t_fh->fh_handle); | ||
1352 | dp->dl_time = 0; | ||
1353 | @@ -2965,22 +2961,35 @@ static int nfs4_setlease(struct nfs4_delegation *dp, int flag) | ||
1354 | return 0; | ||
1355 | } | ||
1356 | |||
1357 | -static int nfs4_set_delegation(struct nfs4_delegation *dp, int flag) | ||
1358 | +static int nfs4_set_delegation(struct nfs4_delegation *dp, int flag, struct nfs4_file *fp) | ||
1359 | { | ||
1360 | - struct nfs4_file *fp = dp->dl_file; | ||
1361 | + int status; | ||
1362 | |||
1363 | - if (!fp->fi_lease) | ||
1364 | - return nfs4_setlease(dp, flag); | ||
1365 | + if (fp->fi_had_conflict) | ||
1366 | + return -EAGAIN; | ||
1367 | + get_nfs4_file(fp); | ||
1368 | + dp->dl_file = fp; | ||
1369 | + if (!fp->fi_lease) { | ||
1370 | + status = nfs4_setlease(dp, flag); | ||
1371 | + if (status) | ||
1372 | + goto out_free; | ||
1373 | + return 0; | ||
1374 | + } | ||
1375 | spin_lock(&recall_lock); | ||
1376 | if (fp->fi_had_conflict) { | ||
1377 | spin_unlock(&recall_lock); | ||
1378 | - return -EAGAIN; | ||
1379 | + status = -EAGAIN; | ||
1380 | + goto out_free; | ||
1381 | } | ||
1382 | atomic_inc(&fp->fi_delegees); | ||
1383 | list_add(&dp->dl_perfile, &fp->fi_delegations); | ||
1384 | spin_unlock(&recall_lock); | ||
1385 | list_add(&dp->dl_perclnt, &dp->dl_stid.sc_client->cl_delegations); | ||
1386 | return 0; | ||
1387 | +out_free: | ||
1388 | + put_nfs4_file(fp); | ||
1389 | + dp->dl_file = fp; | ||
1390 | + return status; | ||
1391 | } | ||
1392 | |||
1393 | static void nfsd4_open_deleg_none_ext(struct nfsd4_open *open, int status) | ||
1394 | @@ -3046,7 +3055,7 @@ nfs4_open_delegation(struct net *net, struct svc_fh *fh, | ||
1395 | dp = alloc_init_deleg(oo->oo_owner.so_client, stp, fh, flag); | ||
1396 | if (dp == NULL) | ||
1397 | goto out_no_deleg; | ||
1398 | - status = nfs4_set_delegation(dp, flag); | ||
1399 | + status = nfs4_set_delegation(dp, flag, stp->st_file); | ||
1400 | if (status) | ||
1401 | goto out_free; | ||
1402 | |||
1403 | diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c | ||
1404 | index d9b298cbfe5c..81325ba8660a 100644 | ||
1405 | --- a/fs/nfsd/vfs.c | ||
1406 | +++ b/fs/nfsd/vfs.c | ||
1407 | @@ -508,6 +508,9 @@ set_nfsv4_acl_one(struct dentry *dentry, struct posix_acl *pacl, char *key) | ||
1408 | char *buf = NULL; | ||
1409 | int error = 0; | ||
1410 | |||
1411 | + if (!pacl) | ||
1412 | + return vfs_setxattr(dentry, key, NULL, 0, 0); | ||
1413 | + | ||
1414 | buflen = posix_acl_xattr_size(pacl->a_count); | ||
1415 | buf = kmalloc(buflen, GFP_KERNEL); | ||
1416 | error = -ENOMEM; | ||
1417 | diff --git a/include/linux/iio/events.h b/include/linux/iio/events.h | ||
1418 | index 13ce220c7003..593ae7ce07c7 100644 | ||
1419 | --- a/include/linux/iio/events.h | ||
1420 | +++ b/include/linux/iio/events.h | ||
1421 | @@ -90,7 +90,7 @@ enum iio_event_direction { | ||
1422 | |||
1423 | #define IIO_EVENT_CODE_EXTRACT_TYPE(mask) ((mask >> 56) & 0xFF) | ||
1424 | |||
1425 | -#define IIO_EVENT_CODE_EXTRACT_DIR(mask) ((mask >> 48) & 0xCF) | ||
1426 | +#define IIO_EVENT_CODE_EXTRACT_DIR(mask) ((mask >> 48) & 0x7F) | ||
1427 | |||
1428 | #define IIO_EVENT_CODE_EXTRACT_CHAN_TYPE(mask) ((mask >> 32) & 0xFF) | ||
1429 | |||
1430 | diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h | ||
1431 | index ea1e3b863890..770ecc90993b 100644 | ||
1432 | --- a/include/linux/inetdevice.h | ||
1433 | +++ b/include/linux/inetdevice.h | ||
1434 | @@ -261,7 +261,7 @@ static inline void in_dev_put(struct in_device *idev) | ||
1435 | static __inline__ __be32 inet_make_mask(int logmask) | ||
1436 | { | ||
1437 | if (logmask) | ||
1438 | - return htonl(~((1<<(32-logmask))-1)); | ||
1439 | + return htonl(~((1U<<(32-logmask))-1)); | ||
1440 | return 0; | ||
1441 | } | ||
1442 | |||
1443 | diff --git a/include/linux/pci.h b/include/linux/pci.h | ||
1444 | index 3a24e4ff3248..102136ab1a5f 100644 | ||
1445 | --- a/include/linux/pci.h | ||
1446 | +++ b/include/linux/pci.h | ||
1447 | @@ -310,6 +310,7 @@ struct pci_dev { | ||
1448 | unsigned int is_added:1; | ||
1449 | unsigned int is_busmaster:1; /* device is busmaster */ | ||
1450 | unsigned int no_msi:1; /* device may not use msi */ | ||
1451 | + unsigned int no_64bit_msi:1; /* device may only use 32-bit MSIs */ | ||
1452 | unsigned int block_cfg_access:1; /* config space access is blocked */ | ||
1453 | unsigned int broken_parity_status:1; /* Device generates false positive parity */ | ||
1454 | unsigned int irq_reroute_variant:2; /* device needs IRQ rerouting variant */ | ||
1455 | diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c | ||
1456 | index ad8e1bdca70e..8176caf6efd9 100644 | ||
1457 | --- a/kernel/events/uprobes.c | ||
1458 | +++ b/kernel/events/uprobes.c | ||
1459 | @@ -1511,7 +1511,6 @@ bool uprobe_deny_signal(void) | ||
1460 | if (__fatal_signal_pending(t) || arch_uprobe_xol_was_trapped(t)) { | ||
1461 | utask->state = UTASK_SSTEP_TRAPPED; | ||
1462 | set_tsk_thread_flag(t, TIF_UPROBE); | ||
1463 | - set_tsk_thread_flag(t, TIF_NOTIFY_RESUME); | ||
1464 | } | ||
1465 | } | ||
1466 | |||
1467 | diff --git a/net/ipv4/fib_rules.c b/net/ipv4/fib_rules.c | ||
1468 | index 26aa65d1fce4..c5c8b248d8f6 100644 | ||
1469 | --- a/net/ipv4/fib_rules.c | ||
1470 | +++ b/net/ipv4/fib_rules.c | ||
1471 | @@ -62,6 +62,10 @@ int __fib_lookup(struct net *net, struct flowi4 *flp, struct fib_result *res) | ||
1472 | else | ||
1473 | res->tclassid = 0; | ||
1474 | #endif | ||
1475 | + | ||
1476 | + if (err == -ESRCH) | ||
1477 | + err = -ENETUNREACH; | ||
1478 | + | ||
1479 | return err; | ||
1480 | } | ||
1481 | EXPORT_SYMBOL_GPL(__fib_lookup); | ||
1482 | diff --git a/net/ipx/af_ipx.c b/net/ipx/af_ipx.c | ||
1483 | index e0897377b3b4..2665bf4b8d05 100644 | ||
1484 | --- a/net/ipx/af_ipx.c | ||
1485 | +++ b/net/ipx/af_ipx.c | ||
1486 | @@ -1778,6 +1778,7 @@ static int ipx_recvmsg(struct kiocb *iocb, struct socket *sock, | ||
1487 | struct ipxhdr *ipx = NULL; | ||
1488 | struct sk_buff *skb; | ||
1489 | int copied, rc; | ||
1490 | + bool locked = true; | ||
1491 | |||
1492 | lock_sock(sk); | ||
1493 | /* put the autobinding in */ | ||
1494 | @@ -1804,6 +1805,8 @@ static int ipx_recvmsg(struct kiocb *iocb, struct socket *sock, | ||
1495 | if (sock_flag(sk, SOCK_ZAPPED)) | ||
1496 | goto out; | ||
1497 | |||
1498 | + release_sock(sk); | ||
1499 | + locked = false; | ||
1500 | skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT, | ||
1501 | flags & MSG_DONTWAIT, &rc); | ||
1502 | if (!skb) | ||
1503 | @@ -1837,7 +1840,8 @@ static int ipx_recvmsg(struct kiocb *iocb, struct socket *sock, | ||
1504 | out_free: | ||
1505 | skb_free_datagram(sk, skb); | ||
1506 | out: | ||
1507 | - release_sock(sk); | ||
1508 | + if (locked) | ||
1509 | + release_sock(sk); | ||
1510 | return rc; | ||
1511 | } | ||
1512 | |||
1513 | diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c | ||
1514 | index ea479388fb5c..23670737116e 100644 | ||
1515 | --- a/sound/soc/codecs/sgtl5000.c | ||
1516 | +++ b/sound/soc/codecs/sgtl5000.c | ||
1517 | @@ -1317,8 +1317,7 @@ static int sgtl5000_probe(struct snd_soc_codec *codec) | ||
1518 | |||
1519 | /* enable small pop, introduce 400ms delay in turning off */ | ||
1520 | snd_soc_update_bits(codec, SGTL5000_CHIP_REF_CTRL, | ||
1521 | - SGTL5000_SMALL_POP, | ||
1522 | - SGTL5000_SMALL_POP); | ||
1523 | + SGTL5000_SMALL_POP, 1); | ||
1524 | |||
1525 | /* disable short cut detector */ | ||
1526 | snd_soc_write(codec, SGTL5000_CHIP_SHORT_CTRL, 0); | ||
1527 | diff --git a/sound/soc/codecs/sgtl5000.h b/sound/soc/codecs/sgtl5000.h | ||
1528 | index d3a68bbfea00..0bd6e1cd8200 100644 | ||
1529 | --- a/sound/soc/codecs/sgtl5000.h | ||
1530 | +++ b/sound/soc/codecs/sgtl5000.h | ||
1531 | @@ -275,7 +275,7 @@ | ||
1532 | #define SGTL5000_BIAS_CTRL_MASK 0x000e | ||
1533 | #define SGTL5000_BIAS_CTRL_SHIFT 1 | ||
1534 | #define SGTL5000_BIAS_CTRL_WIDTH 3 | ||
1535 | -#define SGTL5000_SMALL_POP 0x0001 | ||
1536 | +#define SGTL5000_SMALL_POP 0 | ||
1537 | |||
1538 | /* | ||
1539 | * SGTL5000_CHIP_MIC_CTRL | ||
1540 | diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c | ||
1541 | index ca1e999026e5..d785e46be47c 100644 | ||
1542 | --- a/sound/soc/codecs/wm_adsp.c | ||
1543 | +++ b/sound/soc/codecs/wm_adsp.c | ||
1544 | @@ -964,6 +964,7 @@ static int wm_adsp_load_coeff(struct wm_adsp *dsp) | ||
1545 | file, blocks, pos - firmware->size); | ||
1546 | |||
1547 | out_fw: | ||
1548 | + regmap_async_complete(regmap); | ||
1549 | release_firmware(firmware); | ||
1550 | wm_adsp_buf_free(&buf_list); | ||
1551 | out: | ||
1552 | diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c | ||
1553 | index 3879eae7e874..734c6579b194 100644 | ||
1554 | --- a/sound/usb/quirks.c | ||
1555 | +++ b/sound/usb/quirks.c | ||
1556 | @@ -914,6 +914,20 @@ void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe, | ||
1557 | if ((le16_to_cpu(dev->descriptor.idVendor) == 0x23ba) && | ||
1558 | (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS) | ||
1559 | mdelay(20); | ||
1560 | + | ||
1561 | + /* Marantz/Denon devices with USB DAC functionality need a delay | ||
1562 | + * after each class compliant request | ||
1563 | + */ | ||
1564 | + if ((le16_to_cpu(dev->descriptor.idVendor) == 0x154e) && | ||
1565 | + (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS) { | ||
1566 | + | ||
1567 | + switch (le16_to_cpu(dev->descriptor.idProduct)) { | ||
1568 | + case 0x3005: /* Marantz HD-DAC1 */ | ||
1569 | + case 0x3006: /* Marantz SA-14S1 */ | ||
1570 | + mdelay(20); | ||
1571 | + break; | ||
1572 | + } | ||
1573 | + } | ||
1574 | } | ||
1575 | |||
1576 | /* |