Contents of /trunk/kernel-alx/patches-3.14/0110-3.14.11-all-fixes.patch
Parent Directory | Revision Log
Revision 2506 -
(show annotations)
(download)
Fri Oct 17 07:55:45 2014 UTC (9 years, 11 months ago) by niro
File size: 59167 byte(s)
Fri Oct 17 07:55:45 2014 UTC (9 years, 11 months ago) by niro
File size: 59167 byte(s)
-patches for 3.14
1 | diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches |
2 | index 26b1e31d5a13..1ec219a14904 100644 |
3 | --- a/Documentation/SubmittingPatches |
4 | +++ b/Documentation/SubmittingPatches |
5 | @@ -119,6 +119,20 @@ Example: |
6 | platform_set_drvdata(), but left the variable "dev" unused, |
7 | delete it. |
8 | |
9 | +If your patch fixes a bug in a specific commit, e.g. you found an issue using |
10 | +git-bisect, please use the 'Fixes:' tag with the first 12 characters of the |
11 | +SHA-1 ID, and the one line summary. |
12 | +Example: |
13 | + |
14 | + Fixes: e21d2170f366 ("video: remove unnecessary platform_set_drvdata()") |
15 | + |
16 | +The following git-config settings can be used to add a pretty format for |
17 | +outputting the above style in the git log or git show commands |
18 | + |
19 | + [core] |
20 | + abbrev = 12 |
21 | + [pretty] |
22 | + fixes = Fixes: %h (\"%s\") |
23 | |
24 | 3) Separate your changes. |
25 | |
26 | @@ -430,7 +444,7 @@ person it names. This tag documents that potentially interested parties |
27 | have been included in the discussion |
28 | |
29 | |
30 | -14) Using Reported-by:, Tested-by:, Reviewed-by: and Suggested-by: |
31 | +14) Using Reported-by:, Tested-by:, Reviewed-by:, Suggested-by: and Fixes: |
32 | |
33 | If this patch fixes a problem reported by somebody else, consider adding a |
34 | Reported-by: tag to credit the reporter for their contribution. Please |
35 | @@ -485,6 +499,12 @@ idea was not posted in a public forum. That said, if we diligently credit our |
36 | idea reporters, they will, hopefully, be inspired to help us again in the |
37 | future. |
38 | |
39 | +A Fixes: tag indicates that the patch fixes an issue in a previous commit. It |
40 | +is used to make it easy to determine where a bug originated, which can help |
41 | +review a bug fix. This tag also assists the stable kernel team in determining |
42 | +which stable kernel versions should receive your fix. This is the preferred |
43 | +method for indicating a bug fixed by the patch. See #2 above for more details. |
44 | + |
45 | |
46 | 15) The canonical patch format |
47 | |
48 | diff --git a/Makefile b/Makefile |
49 | index bd5d673ab57f..f1bbec5ece95 100644 |
50 | --- a/Makefile |
51 | +++ b/Makefile |
52 | @@ -1,6 +1,6 @@ |
53 | VERSION = 3 |
54 | PATCHLEVEL = 14 |
55 | -SUBLEVEL = 10 |
56 | +SUBLEVEL = 11 |
57 | EXTRAVERSION = |
58 | NAME = Remembering Coco |
59 | |
60 | diff --git a/arch/arm/boot/dts/exynos5420.dtsi b/arch/arm/boot/dts/exynos5420.dtsi |
61 | index 8db792b26f79..15eb8d4e4d3c 100644 |
62 | --- a/arch/arm/boot/dts/exynos5420.dtsi |
63 | +++ b/arch/arm/boot/dts/exynos5420.dtsi |
64 | @@ -323,6 +323,13 @@ |
65 | #dma-cells = <1>; |
66 | #dma-channels = <8>; |
67 | #dma-requests = <1>; |
68 | + /* |
69 | + * MDMA1 can support both secure and non-secure |
70 | + * AXI transactions. When this is enabled in the kernel |
71 | + * for boards that run in secure mode, we are getting |
72 | + * imprecise external aborts causing the kernel to oops. |
73 | + */ |
74 | + status = "disabled"; |
75 | }; |
76 | }; |
77 | |
78 | diff --git a/arch/mips/kernel/irq-msc01.c b/arch/mips/kernel/irq-msc01.c |
79 | index fab40f7d2e03..ac9facc08694 100644 |
80 | --- a/arch/mips/kernel/irq-msc01.c |
81 | +++ b/arch/mips/kernel/irq-msc01.c |
82 | @@ -131,7 +131,7 @@ void __init init_msc_irqs(unsigned long icubase, unsigned int irqbase, msc_irqma |
83 | |
84 | board_bind_eic_interrupt = &msc_bind_eic_interrupt; |
85 | |
86 | - for (; nirq >= 0; nirq--, imp++) { |
87 | + for (; nirq > 0; nirq--, imp++) { |
88 | int n = imp->im_irq; |
89 | |
90 | switch (imp->im_type) { |
91 | diff --git a/arch/mips/kvm/kvm_mips.c b/arch/mips/kvm/kvm_mips.c |
92 | index 5efce56f0df0..3e0ff8d0fbf9 100644 |
93 | --- a/arch/mips/kvm/kvm_mips.c |
94 | +++ b/arch/mips/kvm/kvm_mips.c |
95 | @@ -149,9 +149,7 @@ void kvm_mips_free_vcpus(struct kvm *kvm) |
96 | if (kvm->arch.guest_pmap[i] != KVM_INVALID_PAGE) |
97 | kvm_mips_release_pfn_clean(kvm->arch.guest_pmap[i]); |
98 | } |
99 | - |
100 | - if (kvm->arch.guest_pmap) |
101 | - kfree(kvm->arch.guest_pmap); |
102 | + kfree(kvm->arch.guest_pmap); |
103 | |
104 | kvm_for_each_vcpu(i, vcpu, kvm) { |
105 | kvm_arch_vcpu_free(vcpu); |
106 | @@ -389,12 +387,9 @@ void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu) |
107 | |
108 | kvm_mips_dump_stats(vcpu); |
109 | |
110 | - if (vcpu->arch.guest_ebase) |
111 | - kfree(vcpu->arch.guest_ebase); |
112 | - |
113 | - if (vcpu->arch.kseg0_commpage) |
114 | - kfree(vcpu->arch.kseg0_commpage); |
115 | - |
116 | + kfree(vcpu->arch.guest_ebase); |
117 | + kfree(vcpu->arch.kseg0_commpage); |
118 | + kfree(vcpu); |
119 | } |
120 | |
121 | void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu) |
122 | diff --git a/arch/powerpc/include/asm/switch_to.h b/arch/powerpc/include/asm/switch_to.h |
123 | index 0e83e7d8c73f..b5fad8afe837 100644 |
124 | --- a/arch/powerpc/include/asm/switch_to.h |
125 | +++ b/arch/powerpc/include/asm/switch_to.h |
126 | @@ -84,6 +84,8 @@ static inline void clear_task_ebb(struct task_struct *t) |
127 | { |
128 | #ifdef CONFIG_PPC_BOOK3S_64 |
129 | /* EBB perf events are not inherited, so clear all EBB state. */ |
130 | + t->thread.ebbrr = 0; |
131 | + t->thread.ebbhr = 0; |
132 | t->thread.bescr = 0; |
133 | t->thread.mmcr2 = 0; |
134 | t->thread.mmcr0 = 0; |
135 | diff --git a/arch/powerpc/include/asm/systbl.h b/arch/powerpc/include/asm/systbl.h |
136 | index 3ddf70276706..0616916b446a 100644 |
137 | --- a/arch/powerpc/include/asm/systbl.h |
138 | +++ b/arch/powerpc/include/asm/systbl.h |
139 | @@ -190,7 +190,7 @@ SYSCALL_SPU(getcwd) |
140 | SYSCALL_SPU(capget) |
141 | SYSCALL_SPU(capset) |
142 | COMPAT_SYS(sigaltstack) |
143 | -COMPAT_SYS_SPU(sendfile) |
144 | +SYSX_SPU(sys_sendfile64,compat_sys_sendfile,sys_sendfile) |
145 | SYSCALL(ni_syscall) |
146 | SYSCALL(ni_syscall) |
147 | PPC_SYS(vfork) |
148 | diff --git a/arch/powerpc/include/uapi/asm/cputable.h b/arch/powerpc/include/uapi/asm/cputable.h |
149 | index 5b7657959faa..de2c0e4ee1aa 100644 |
150 | --- a/arch/powerpc/include/uapi/asm/cputable.h |
151 | +++ b/arch/powerpc/include/uapi/asm/cputable.h |
152 | @@ -41,5 +41,6 @@ |
153 | #define PPC_FEATURE2_EBB 0x10000000 |
154 | #define PPC_FEATURE2_ISEL 0x08000000 |
155 | #define PPC_FEATURE2_TAR 0x04000000 |
156 | +#define PPC_FEATURE2_VEC_CRYPTO 0x02000000 |
157 | |
158 | #endif /* _UAPI__ASM_POWERPC_CPUTABLE_H */ |
159 | diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c |
160 | index 6c8dd5da4de5..7ac1eab3ff8a 100644 |
161 | --- a/arch/powerpc/kernel/cputable.c |
162 | +++ b/arch/powerpc/kernel/cputable.c |
163 | @@ -109,7 +109,8 @@ extern void __restore_cpu_e6500(void); |
164 | PPC_FEATURE_PSERIES_PERFMON_COMPAT) |
165 | #define COMMON_USER2_POWER8 (PPC_FEATURE2_ARCH_2_07 | \ |
166 | PPC_FEATURE2_HTM_COMP | PPC_FEATURE2_DSCR | \ |
167 | - PPC_FEATURE2_ISEL | PPC_FEATURE2_TAR) |
168 | + PPC_FEATURE2_ISEL | PPC_FEATURE2_TAR | \ |
169 | + PPC_FEATURE2_VEC_CRYPTO) |
170 | #define COMMON_USER_PA6T (COMMON_USER_PPC64 | PPC_FEATURE_PA6T |\ |
171 | PPC_FEATURE_TRUE_LE | \ |
172 | PPC_FEATURE_HAS_ALTIVEC_COMP) |
173 | diff --git a/arch/powerpc/kernel/legacy_serial.c b/arch/powerpc/kernel/legacy_serial.c |
174 | index 40bd7bd4e19a..8a8b722870a1 100644 |
175 | --- a/arch/powerpc/kernel/legacy_serial.c |
176 | +++ b/arch/powerpc/kernel/legacy_serial.c |
177 | @@ -48,6 +48,9 @@ static struct of_device_id legacy_serial_parents[] __initdata = { |
178 | static unsigned int legacy_serial_count; |
179 | static int legacy_serial_console = -1; |
180 | |
181 | +static const upf_t legacy_port_flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | |
182 | + UPF_SHARE_IRQ | UPF_FIXED_PORT; |
183 | + |
184 | static unsigned int tsi_serial_in(struct uart_port *p, int offset) |
185 | { |
186 | unsigned int tmp; |
187 | @@ -153,8 +156,6 @@ static int __init add_legacy_soc_port(struct device_node *np, |
188 | { |
189 | u64 addr; |
190 | const __be32 *addrp; |
191 | - upf_t flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_SHARE_IRQ |
192 | - | UPF_FIXED_PORT; |
193 | struct device_node *tsi = of_get_parent(np); |
194 | |
195 | /* We only support ports that have a clock frequency properly |
196 | @@ -185,9 +186,11 @@ static int __init add_legacy_soc_port(struct device_node *np, |
197 | * IO port value. It will be fixed up later along with the irq |
198 | */ |
199 | if (tsi && !strcmp(tsi->type, "tsi-bridge")) |
200 | - return add_legacy_port(np, -1, UPIO_TSI, addr, addr, NO_IRQ, flags, 0); |
201 | + return add_legacy_port(np, -1, UPIO_TSI, addr, addr, |
202 | + NO_IRQ, legacy_port_flags, 0); |
203 | else |
204 | - return add_legacy_port(np, -1, UPIO_MEM, addr, addr, NO_IRQ, flags, 0); |
205 | + return add_legacy_port(np, -1, UPIO_MEM, addr, addr, |
206 | + NO_IRQ, legacy_port_flags, 0); |
207 | } |
208 | |
209 | static int __init add_legacy_isa_port(struct device_node *np, |
210 | @@ -233,7 +236,7 @@ static int __init add_legacy_isa_port(struct device_node *np, |
211 | |
212 | /* Add port, irq will be dealt with later */ |
213 | return add_legacy_port(np, index, UPIO_PORT, be32_to_cpu(reg[1]), |
214 | - taddr, NO_IRQ, UPF_BOOT_AUTOCONF, 0); |
215 | + taddr, NO_IRQ, legacy_port_flags, 0); |
216 | |
217 | } |
218 | |
219 | @@ -306,7 +309,7 @@ static int __init add_legacy_pci_port(struct device_node *np, |
220 | * IO port value. It will be fixed up later along with the irq |
221 | */ |
222 | return add_legacy_port(np, index, iotype, base, addr, NO_IRQ, |
223 | - UPF_BOOT_AUTOCONF, np != pci_dev); |
224 | + legacy_port_flags, np != pci_dev); |
225 | } |
226 | #endif |
227 | |
228 | diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c |
229 | index bc76cc6b419c..04aa4d3c7c05 100644 |
230 | --- a/arch/powerpc/kernel/setup-common.c |
231 | +++ b/arch/powerpc/kernel/setup-common.c |
232 | @@ -456,9 +456,17 @@ void __init smp_setup_cpu_maps(void) |
233 | } |
234 | |
235 | for (j = 0; j < nthreads && cpu < nr_cpu_ids; j++) { |
236 | + bool avail; |
237 | + |
238 | DBG(" thread %d -> cpu %d (hard id %d)\n", |
239 | j, cpu, be32_to_cpu(intserv[j])); |
240 | - set_cpu_present(cpu, true); |
241 | + |
242 | + avail = of_device_is_available(dn); |
243 | + if (!avail) |
244 | + avail = !of_property_match_string(dn, |
245 | + "enable-method", "spin-table"); |
246 | + |
247 | + set_cpu_present(cpu, avail); |
248 | set_hard_smp_processor_id(cpu, be32_to_cpu(intserv[j])); |
249 | set_cpu_possible(cpu, true); |
250 | cpu++; |
251 | diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c |
252 | index 57d4bada19bd..f8b994abb57f 100644 |
253 | --- a/arch/powerpc/kernel/time.c |
254 | +++ b/arch/powerpc/kernel/time.c |
255 | @@ -511,7 +511,7 @@ void timer_interrupt(struct pt_regs * regs) |
256 | may_hard_irq_enable(); |
257 | |
258 | |
259 | -#if defined(CONFIG_PPC32) && defined(CONFIG_PMAC) |
260 | +#if defined(CONFIG_PPC32) && defined(CONFIG_PPC_PMAC) |
261 | if (atomic_read(&ppc_n_lost_interrupts) != 0) |
262 | do_IRQ(regs); |
263 | #endif |
264 | diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c |
265 | index c0511c27a733..412dd46dd0b7 100644 |
266 | --- a/arch/powerpc/lib/sstep.c |
267 | +++ b/arch/powerpc/lib/sstep.c |
268 | @@ -1470,7 +1470,7 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) |
269 | regs->gpr[rd] = byterev_4(val); |
270 | goto ldst_done; |
271 | |
272 | -#ifdef CONFIG_PPC_CPU |
273 | +#ifdef CONFIG_PPC_FPU |
274 | case 535: /* lfsx */ |
275 | case 567: /* lfsux */ |
276 | if (!(regs->msr & MSR_FP)) |
277 | diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c |
278 | index d766d6ee33fe..6650699eb3b6 100644 |
279 | --- a/arch/powerpc/mm/hash_utils_64.c |
280 | +++ b/arch/powerpc/mm/hash_utils_64.c |
281 | @@ -960,6 +960,22 @@ void hash_failure_debug(unsigned long ea, unsigned long access, |
282 | trap, vsid, ssize, psize, lpsize, pte); |
283 | } |
284 | |
285 | +static void check_paca_psize(unsigned long ea, struct mm_struct *mm, |
286 | + int psize, bool user_region) |
287 | +{ |
288 | + if (user_region) { |
289 | + if (psize != get_paca_psize(ea)) { |
290 | + get_paca()->context = mm->context; |
291 | + slb_flush_and_rebolt(); |
292 | + } |
293 | + } else if (get_paca()->vmalloc_sllp != |
294 | + mmu_psize_defs[mmu_vmalloc_psize].sllp) { |
295 | + get_paca()->vmalloc_sllp = |
296 | + mmu_psize_defs[mmu_vmalloc_psize].sllp; |
297 | + slb_vmalloc_update(); |
298 | + } |
299 | +} |
300 | + |
301 | /* Result code is: |
302 | * 0 - handled |
303 | * 1 - normal page fault |
304 | @@ -1081,6 +1097,8 @@ int hash_page(unsigned long ea, unsigned long access, unsigned long trap) |
305 | WARN_ON(1); |
306 | } |
307 | #endif |
308 | + check_paca_psize(ea, mm, psize, user_region); |
309 | + |
310 | goto bail; |
311 | } |
312 | |
313 | @@ -1121,17 +1139,8 @@ int hash_page(unsigned long ea, unsigned long access, unsigned long trap) |
314 | #endif |
315 | } |
316 | } |
317 | - if (user_region) { |
318 | - if (psize != get_paca_psize(ea)) { |
319 | - get_paca()->context = mm->context; |
320 | - slb_flush_and_rebolt(); |
321 | - } |
322 | - } else if (get_paca()->vmalloc_sllp != |
323 | - mmu_psize_defs[mmu_vmalloc_psize].sllp) { |
324 | - get_paca()->vmalloc_sllp = |
325 | - mmu_psize_defs[mmu_vmalloc_psize].sllp; |
326 | - slb_vmalloc_update(); |
327 | - } |
328 | + |
329 | + check_paca_psize(ea, mm, psize, user_region); |
330 | #endif /* CONFIG_PPC_64K_PAGES */ |
331 | |
332 | #ifdef CONFIG_PPC_HAS_HASH_64K |
333 | diff --git a/arch/powerpc/platforms/pseries/eeh_pseries.c b/arch/powerpc/platforms/pseries/eeh_pseries.c |
334 | index 8a8f0472d98f..83da53fde6b5 100644 |
335 | --- a/arch/powerpc/platforms/pseries/eeh_pseries.c |
336 | +++ b/arch/powerpc/platforms/pseries/eeh_pseries.c |
337 | @@ -464,6 +464,7 @@ static int pseries_eeh_get_state(struct eeh_pe *pe, int *state) |
338 | } else { |
339 | result = EEH_STATE_NOT_SUPPORT; |
340 | } |
341 | + break; |
342 | default: |
343 | result = EEH_STATE_NOT_SUPPORT; |
344 | } |
345 | diff --git a/arch/x86/include/asm/ptrace.h b/arch/x86/include/asm/ptrace.h |
346 | index 14fd6fd75a19..6205f0c434db 100644 |
347 | --- a/arch/x86/include/asm/ptrace.h |
348 | +++ b/arch/x86/include/asm/ptrace.h |
349 | @@ -231,6 +231,22 @@ static inline unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs, |
350 | |
351 | #define ARCH_HAS_USER_SINGLE_STEP_INFO |
352 | |
353 | +/* |
354 | + * When hitting ptrace_stop(), we cannot return using SYSRET because |
355 | + * that does not restore the full CPU state, only a minimal set. The |
356 | + * ptracer can change arbitrary register values, which is usually okay |
357 | + * because the usual ptrace stops run off the signal delivery path which |
358 | + * forces IRET; however, ptrace_event() stops happen in arbitrary places |
359 | + * in the kernel and don't force IRET path. |
360 | + * |
361 | + * So force IRET path after a ptrace stop. |
362 | + */ |
363 | +#define arch_ptrace_stop_needed(code, info) \ |
364 | +({ \ |
365 | + set_thread_flag(TIF_NOTIFY_RESUME); \ |
366 | + false; \ |
367 | +}) |
368 | + |
369 | struct user_desc; |
370 | extern int do_get_thread_area(struct task_struct *p, int idx, |
371 | struct user_desc __user *info); |
372 | diff --git a/drivers/block/mtip32xx/mtip32xx.c b/drivers/block/mtip32xx/mtip32xx.c |
373 | index a8939b98f9c3..4e763b0dbbfc 100644 |
374 | --- a/drivers/block/mtip32xx/mtip32xx.c |
375 | +++ b/drivers/block/mtip32xx/mtip32xx.c |
376 | @@ -1529,6 +1529,37 @@ static inline void ata_swap_string(u16 *buf, unsigned int len) |
377 | be16_to_cpus(&buf[i]); |
378 | } |
379 | |
380 | +static void mtip_set_timeout(struct driver_data *dd, |
381 | + struct host_to_dev_fis *fis, |
382 | + unsigned int *timeout, u8 erasemode) |
383 | +{ |
384 | + switch (fis->command) { |
385 | + case ATA_CMD_DOWNLOAD_MICRO: |
386 | + *timeout = 120000; /* 2 minutes */ |
387 | + break; |
388 | + case ATA_CMD_SEC_ERASE_UNIT: |
389 | + case 0xFC: |
390 | + if (erasemode) |
391 | + *timeout = ((*(dd->port->identify + 90) * 2) * 60000); |
392 | + else |
393 | + *timeout = ((*(dd->port->identify + 89) * 2) * 60000); |
394 | + break; |
395 | + case ATA_CMD_STANDBYNOW1: |
396 | + *timeout = 120000; /* 2 minutes */ |
397 | + break; |
398 | + case 0xF7: |
399 | + case 0xFA: |
400 | + *timeout = 60000; /* 60 seconds */ |
401 | + break; |
402 | + case ATA_CMD_SMART: |
403 | + *timeout = 15000; /* 15 seconds */ |
404 | + break; |
405 | + default: |
406 | + *timeout = MTIP_IOCTL_COMMAND_TIMEOUT_MS; |
407 | + break; |
408 | + } |
409 | +} |
410 | + |
411 | /* |
412 | * Request the device identity information. |
413 | * |
414 | @@ -1644,6 +1675,7 @@ static int mtip_standby_immediate(struct mtip_port *port) |
415 | int rv; |
416 | struct host_to_dev_fis fis; |
417 | unsigned long start; |
418 | + unsigned int timeout; |
419 | |
420 | /* Build the FIS. */ |
421 | memset(&fis, 0, sizeof(struct host_to_dev_fis)); |
422 | @@ -1651,6 +1683,8 @@ static int mtip_standby_immediate(struct mtip_port *port) |
423 | fis.opts = 1 << 7; |
424 | fis.command = ATA_CMD_STANDBYNOW1; |
425 | |
426 | + mtip_set_timeout(port->dd, &fis, &timeout, 0); |
427 | + |
428 | start = jiffies; |
429 | rv = mtip_exec_internal_command(port, |
430 | &fis, |
431 | @@ -1659,7 +1693,7 @@ static int mtip_standby_immediate(struct mtip_port *port) |
432 | 0, |
433 | 0, |
434 | GFP_ATOMIC, |
435 | - 15000); |
436 | + timeout); |
437 | dbg_printk(MTIP_DRV_NAME "Time taken to complete standby cmd: %d ms\n", |
438 | jiffies_to_msecs(jiffies - start)); |
439 | if (rv) |
440 | @@ -2202,36 +2236,6 @@ static unsigned int implicit_sector(unsigned char command, |
441 | } |
442 | return rv; |
443 | } |
444 | -static void mtip_set_timeout(struct driver_data *dd, |
445 | - struct host_to_dev_fis *fis, |
446 | - unsigned int *timeout, u8 erasemode) |
447 | -{ |
448 | - switch (fis->command) { |
449 | - case ATA_CMD_DOWNLOAD_MICRO: |
450 | - *timeout = 120000; /* 2 minutes */ |
451 | - break; |
452 | - case ATA_CMD_SEC_ERASE_UNIT: |
453 | - case 0xFC: |
454 | - if (erasemode) |
455 | - *timeout = ((*(dd->port->identify + 90) * 2) * 60000); |
456 | - else |
457 | - *timeout = ((*(dd->port->identify + 89) * 2) * 60000); |
458 | - break; |
459 | - case ATA_CMD_STANDBYNOW1: |
460 | - *timeout = 120000; /* 2 minutes */ |
461 | - break; |
462 | - case 0xF7: |
463 | - case 0xFA: |
464 | - *timeout = 60000; /* 60 seconds */ |
465 | - break; |
466 | - case ATA_CMD_SMART: |
467 | - *timeout = 15000; /* 15 seconds */ |
468 | - break; |
469 | - default: |
470 | - *timeout = MTIP_IOCTL_COMMAND_TIMEOUT_MS; |
471 | - break; |
472 | - } |
473 | -} |
474 | |
475 | /* |
476 | * Executes a taskfile |
477 | @@ -4479,6 +4483,57 @@ static DEFINE_HANDLER(5); |
478 | static DEFINE_HANDLER(6); |
479 | static DEFINE_HANDLER(7); |
480 | |
481 | +static void mtip_disable_link_opts(struct driver_data *dd, struct pci_dev *pdev) |
482 | +{ |
483 | + int pos; |
484 | + unsigned short pcie_dev_ctrl; |
485 | + |
486 | + pos = pci_find_capability(pdev, PCI_CAP_ID_EXP); |
487 | + if (pos) { |
488 | + pci_read_config_word(pdev, |
489 | + pos + PCI_EXP_DEVCTL, |
490 | + &pcie_dev_ctrl); |
491 | + if (pcie_dev_ctrl & (1 << 11) || |
492 | + pcie_dev_ctrl & (1 << 4)) { |
493 | + dev_info(&dd->pdev->dev, |
494 | + "Disabling ERO/No-Snoop on bridge device %04x:%04x\n", |
495 | + pdev->vendor, pdev->device); |
496 | + pcie_dev_ctrl &= ~(PCI_EXP_DEVCTL_NOSNOOP_EN | |
497 | + PCI_EXP_DEVCTL_RELAX_EN); |
498 | + pci_write_config_word(pdev, |
499 | + pos + PCI_EXP_DEVCTL, |
500 | + pcie_dev_ctrl); |
501 | + } |
502 | + } |
503 | +} |
504 | + |
505 | +static void mtip_fix_ero_nosnoop(struct driver_data *dd, struct pci_dev *pdev) |
506 | +{ |
507 | + /* |
508 | + * This workaround is specific to AMD/ATI chipset with a PCI upstream |
509 | + * device with device id 0x5aXX |
510 | + */ |
511 | + if (pdev->bus && pdev->bus->self) { |
512 | + if (pdev->bus->self->vendor == PCI_VENDOR_ID_ATI && |
513 | + ((pdev->bus->self->device & 0xff00) == 0x5a00)) { |
514 | + mtip_disable_link_opts(dd, pdev->bus->self); |
515 | + } else { |
516 | + /* Check further up the topology */ |
517 | + struct pci_dev *parent_dev = pdev->bus->self; |
518 | + if (parent_dev->bus && |
519 | + parent_dev->bus->parent && |
520 | + parent_dev->bus->parent->self && |
521 | + parent_dev->bus->parent->self->vendor == |
522 | + PCI_VENDOR_ID_ATI && |
523 | + (parent_dev->bus->parent->self->device & |
524 | + 0xff00) == 0x5a00) { |
525 | + mtip_disable_link_opts(dd, |
526 | + parent_dev->bus->parent->self); |
527 | + } |
528 | + } |
529 | + } |
530 | +} |
531 | + |
532 | /* |
533 | * Called for each supported PCI device detected. |
534 | * |
535 | @@ -4630,6 +4685,8 @@ static int mtip_pci_probe(struct pci_dev *pdev, |
536 | goto block_initialize_err; |
537 | } |
538 | |
539 | + mtip_fix_ero_nosnoop(dd, pdev); |
540 | + |
541 | /* Initialize the block layer. */ |
542 | rv = mtip_block_initialize(dd); |
543 | if (rv < 0) { |
544 | @@ -4933,13 +4990,13 @@ static int __init mtip_init(void) |
545 | */ |
546 | static void __exit mtip_exit(void) |
547 | { |
548 | - debugfs_remove_recursive(dfs_parent); |
549 | - |
550 | /* Release the allocated major block device number. */ |
551 | unregister_blkdev(mtip_major, MTIP_DRV_NAME); |
552 | |
553 | /* Unregister the PCI driver. */ |
554 | pci_unregister_driver(&mtip_pci_driver); |
555 | + |
556 | + debugfs_remove_recursive(dfs_parent); |
557 | } |
558 | |
559 | MODULE_AUTHOR("Micron Technology, Inc"); |
560 | diff --git a/drivers/infiniband/core/user_mad.c b/drivers/infiniband/core/user_mad.c |
561 | index f0d588f8859e..1acb99100556 100644 |
562 | --- a/drivers/infiniband/core/user_mad.c |
563 | +++ b/drivers/infiniband/core/user_mad.c |
564 | @@ -98,7 +98,7 @@ struct ib_umad_port { |
565 | |
566 | struct ib_umad_device { |
567 | int start_port, end_port; |
568 | - struct kref ref; |
569 | + struct kobject kobj; |
570 | struct ib_umad_port port[0]; |
571 | }; |
572 | |
573 | @@ -134,14 +134,18 @@ static DECLARE_BITMAP(dev_map, IB_UMAD_MAX_PORTS); |
574 | static void ib_umad_add_one(struct ib_device *device); |
575 | static void ib_umad_remove_one(struct ib_device *device); |
576 | |
577 | -static void ib_umad_release_dev(struct kref *ref) |
578 | +static void ib_umad_release_dev(struct kobject *kobj) |
579 | { |
580 | struct ib_umad_device *dev = |
581 | - container_of(ref, struct ib_umad_device, ref); |
582 | + container_of(kobj, struct ib_umad_device, kobj); |
583 | |
584 | kfree(dev); |
585 | } |
586 | |
587 | +static struct kobj_type ib_umad_dev_ktype = { |
588 | + .release = ib_umad_release_dev, |
589 | +}; |
590 | + |
591 | static int hdr_size(struct ib_umad_file *file) |
592 | { |
593 | return file->use_pkey_index ? sizeof (struct ib_user_mad_hdr) : |
594 | @@ -780,27 +784,19 @@ static int ib_umad_open(struct inode *inode, struct file *filp) |
595 | { |
596 | struct ib_umad_port *port; |
597 | struct ib_umad_file *file; |
598 | - int ret; |
599 | + int ret = -ENXIO; |
600 | |
601 | port = container_of(inode->i_cdev, struct ib_umad_port, cdev); |
602 | - if (port) |
603 | - kref_get(&port->umad_dev->ref); |
604 | - else |
605 | - return -ENXIO; |
606 | |
607 | mutex_lock(&port->file_mutex); |
608 | |
609 | - if (!port->ib_dev) { |
610 | - ret = -ENXIO; |
611 | + if (!port->ib_dev) |
612 | goto out; |
613 | - } |
614 | |
615 | + ret = -ENOMEM; |
616 | file = kzalloc(sizeof *file, GFP_KERNEL); |
617 | - if (!file) { |
618 | - kref_put(&port->umad_dev->ref, ib_umad_release_dev); |
619 | - ret = -ENOMEM; |
620 | + if (!file) |
621 | goto out; |
622 | - } |
623 | |
624 | mutex_init(&file->mutex); |
625 | spin_lock_init(&file->send_lock); |
626 | @@ -814,6 +810,13 @@ static int ib_umad_open(struct inode *inode, struct file *filp) |
627 | list_add_tail(&file->port_list, &port->file_list); |
628 | |
629 | ret = nonseekable_open(inode, filp); |
630 | + if (ret) { |
631 | + list_del(&file->port_list); |
632 | + kfree(file); |
633 | + goto out; |
634 | + } |
635 | + |
636 | + kobject_get(&port->umad_dev->kobj); |
637 | |
638 | out: |
639 | mutex_unlock(&port->file_mutex); |
640 | @@ -852,7 +855,7 @@ static int ib_umad_close(struct inode *inode, struct file *filp) |
641 | mutex_unlock(&file->port->file_mutex); |
642 | |
643 | kfree(file); |
644 | - kref_put(&dev->ref, ib_umad_release_dev); |
645 | + kobject_put(&dev->kobj); |
646 | |
647 | return 0; |
648 | } |
649 | @@ -880,10 +883,6 @@ static int ib_umad_sm_open(struct inode *inode, struct file *filp) |
650 | int ret; |
651 | |
652 | port = container_of(inode->i_cdev, struct ib_umad_port, sm_cdev); |
653 | - if (port) |
654 | - kref_get(&port->umad_dev->ref); |
655 | - else |
656 | - return -ENXIO; |
657 | |
658 | if (filp->f_flags & O_NONBLOCK) { |
659 | if (down_trylock(&port->sm_sem)) { |
660 | @@ -898,17 +897,27 @@ static int ib_umad_sm_open(struct inode *inode, struct file *filp) |
661 | } |
662 | |
663 | ret = ib_modify_port(port->ib_dev, port->port_num, 0, &props); |
664 | - if (ret) { |
665 | - up(&port->sm_sem); |
666 | - goto fail; |
667 | - } |
668 | + if (ret) |
669 | + goto err_up_sem; |
670 | |
671 | filp->private_data = port; |
672 | |
673 | - return nonseekable_open(inode, filp); |
674 | + ret = nonseekable_open(inode, filp); |
675 | + if (ret) |
676 | + goto err_clr_sm_cap; |
677 | + |
678 | + kobject_get(&port->umad_dev->kobj); |
679 | + |
680 | + return 0; |
681 | + |
682 | +err_clr_sm_cap: |
683 | + swap(props.set_port_cap_mask, props.clr_port_cap_mask); |
684 | + ib_modify_port(port->ib_dev, port->port_num, 0, &props); |
685 | + |
686 | +err_up_sem: |
687 | + up(&port->sm_sem); |
688 | |
689 | fail: |
690 | - kref_put(&port->umad_dev->ref, ib_umad_release_dev); |
691 | return ret; |
692 | } |
693 | |
694 | @@ -927,7 +936,7 @@ static int ib_umad_sm_close(struct inode *inode, struct file *filp) |
695 | |
696 | up(&port->sm_sem); |
697 | |
698 | - kref_put(&port->umad_dev->ref, ib_umad_release_dev); |
699 | + kobject_put(&port->umad_dev->kobj); |
700 | |
701 | return ret; |
702 | } |
703 | @@ -995,6 +1004,7 @@ static int find_overflow_devnum(void) |
704 | } |
705 | |
706 | static int ib_umad_init_port(struct ib_device *device, int port_num, |
707 | + struct ib_umad_device *umad_dev, |
708 | struct ib_umad_port *port) |
709 | { |
710 | int devnum; |
711 | @@ -1027,6 +1037,7 @@ static int ib_umad_init_port(struct ib_device *device, int port_num, |
712 | |
713 | cdev_init(&port->cdev, &umad_fops); |
714 | port->cdev.owner = THIS_MODULE; |
715 | + port->cdev.kobj.parent = &umad_dev->kobj; |
716 | kobject_set_name(&port->cdev.kobj, "umad%d", port->dev_num); |
717 | if (cdev_add(&port->cdev, base, 1)) |
718 | goto err_cdev; |
719 | @@ -1045,6 +1056,7 @@ static int ib_umad_init_port(struct ib_device *device, int port_num, |
720 | base += IB_UMAD_MAX_PORTS; |
721 | cdev_init(&port->sm_cdev, &umad_sm_fops); |
722 | port->sm_cdev.owner = THIS_MODULE; |
723 | + port->sm_cdev.kobj.parent = &umad_dev->kobj; |
724 | kobject_set_name(&port->sm_cdev.kobj, "issm%d", port->dev_num); |
725 | if (cdev_add(&port->sm_cdev, base, 1)) |
726 | goto err_sm_cdev; |
727 | @@ -1138,7 +1150,7 @@ static void ib_umad_add_one(struct ib_device *device) |
728 | if (!umad_dev) |
729 | return; |
730 | |
731 | - kref_init(&umad_dev->ref); |
732 | + kobject_init(&umad_dev->kobj, &ib_umad_dev_ktype); |
733 | |
734 | umad_dev->start_port = s; |
735 | umad_dev->end_port = e; |
736 | @@ -1146,7 +1158,8 @@ static void ib_umad_add_one(struct ib_device *device) |
737 | for (i = s; i <= e; ++i) { |
738 | umad_dev->port[i - s].umad_dev = umad_dev; |
739 | |
740 | - if (ib_umad_init_port(device, i, &umad_dev->port[i - s])) |
741 | + if (ib_umad_init_port(device, i, umad_dev, |
742 | + &umad_dev->port[i - s])) |
743 | goto err; |
744 | } |
745 | |
746 | @@ -1158,7 +1171,7 @@ err: |
747 | while (--i >= s) |
748 | ib_umad_kill_port(&umad_dev->port[i - s]); |
749 | |
750 | - kref_put(&umad_dev->ref, ib_umad_release_dev); |
751 | + kobject_put(&umad_dev->kobj); |
752 | } |
753 | |
754 | static void ib_umad_remove_one(struct ib_device *device) |
755 | @@ -1172,7 +1185,7 @@ static void ib_umad_remove_one(struct ib_device *device) |
756 | for (i = 0; i <= umad_dev->end_port - umad_dev->start_port; ++i) |
757 | ib_umad_kill_port(&umad_dev->port[i]); |
758 | |
759 | - kref_put(&umad_dev->ref, ib_umad_release_dev); |
760 | + kobject_put(&umad_dev->kobj); |
761 | } |
762 | |
763 | static char *umad_devnode(struct device *dev, umode_t *mode) |
764 | diff --git a/drivers/infiniband/hw/ipath/ipath_diag.c b/drivers/infiniband/hw/ipath/ipath_diag.c |
765 | index e2f9a51f4a38..45802e97332e 100644 |
766 | --- a/drivers/infiniband/hw/ipath/ipath_diag.c |
767 | +++ b/drivers/infiniband/hw/ipath/ipath_diag.c |
768 | @@ -346,6 +346,10 @@ static ssize_t ipath_diagpkt_write(struct file *fp, |
769 | ret = -EFAULT; |
770 | goto bail; |
771 | } |
772 | + dp.len = odp.len; |
773 | + dp.unit = odp.unit; |
774 | + dp.data = odp.data; |
775 | + dp.pbc_wd = 0; |
776 | } else { |
777 | ret = -EINVAL; |
778 | goto bail; |
779 | diff --git a/drivers/infiniband/hw/mlx5/cq.c b/drivers/infiniband/hw/mlx5/cq.c |
780 | index b1705ce6eb88..8c726f183980 100644 |
781 | --- a/drivers/infiniband/hw/mlx5/cq.c |
782 | +++ b/drivers/infiniband/hw/mlx5/cq.c |
783 | @@ -32,6 +32,7 @@ |
784 | |
785 | #include <linux/kref.h> |
786 | #include <rdma/ib_umem.h> |
787 | +#include <rdma/ib_user_verbs.h> |
788 | #include "mlx5_ib.h" |
789 | #include "user.h" |
790 | |
791 | @@ -540,14 +541,24 @@ static int create_cq_user(struct mlx5_ib_dev *dev, struct ib_udata *udata, |
792 | int *cqe_size, int *index, int *inlen) |
793 | { |
794 | struct mlx5_ib_create_cq ucmd; |
795 | + size_t ucmdlen; |
796 | int page_shift; |
797 | int npages; |
798 | int ncont; |
799 | int err; |
800 | |
801 | - if (ib_copy_from_udata(&ucmd, udata, sizeof(ucmd))) |
802 | + ucmdlen = |
803 | + (udata->inlen - sizeof(struct ib_uverbs_cmd_hdr) < |
804 | + sizeof(ucmd)) ? (sizeof(ucmd) - |
805 | + sizeof(ucmd.reserved)) : sizeof(ucmd); |
806 | + |
807 | + if (ib_copy_from_udata(&ucmd, udata, ucmdlen)) |
808 | return -EFAULT; |
809 | |
810 | + if (ucmdlen == sizeof(ucmd) && |
811 | + ucmd.reserved != 0) |
812 | + return -EINVAL; |
813 | + |
814 | if (ucmd.cqe_size != 64 && ucmd.cqe_size != 128) |
815 | return -EINVAL; |
816 | |
817 | diff --git a/drivers/infiniband/hw/mlx5/srq.c b/drivers/infiniband/hw/mlx5/srq.c |
818 | index 210b3eaf188a..384af6dec5eb 100644 |
819 | --- a/drivers/infiniband/hw/mlx5/srq.c |
820 | +++ b/drivers/infiniband/hw/mlx5/srq.c |
821 | @@ -35,6 +35,7 @@ |
822 | #include <linux/mlx5/srq.h> |
823 | #include <linux/slab.h> |
824 | #include <rdma/ib_umem.h> |
825 | +#include <rdma/ib_user_verbs.h> |
826 | |
827 | #include "mlx5_ib.h" |
828 | #include "user.h" |
829 | @@ -78,16 +79,27 @@ static int create_srq_user(struct ib_pd *pd, struct mlx5_ib_srq *srq, |
830 | { |
831 | struct mlx5_ib_dev *dev = to_mdev(pd->device); |
832 | struct mlx5_ib_create_srq ucmd; |
833 | + size_t ucmdlen; |
834 | int err; |
835 | int npages; |
836 | int page_shift; |
837 | int ncont; |
838 | u32 offset; |
839 | |
840 | - if (ib_copy_from_udata(&ucmd, udata, sizeof(ucmd))) { |
841 | + ucmdlen = |
842 | + (udata->inlen - sizeof(struct ib_uverbs_cmd_hdr) < |
843 | + sizeof(ucmd)) ? (sizeof(ucmd) - |
844 | + sizeof(ucmd.reserved)) : sizeof(ucmd); |
845 | + |
846 | + if (ib_copy_from_udata(&ucmd, udata, ucmdlen)) { |
847 | mlx5_ib_dbg(dev, "failed copy udata\n"); |
848 | return -EFAULT; |
849 | } |
850 | + |
851 | + if (ucmdlen == sizeof(ucmd) && |
852 | + ucmd.reserved != 0) |
853 | + return -EINVAL; |
854 | + |
855 | srq->wq_sig = !!(ucmd.flags & MLX5_SRQ_FLAG_SIGNATURE); |
856 | |
857 | srq->umem = ib_umem_get(pd->uobject->context, ucmd.buf_addr, buf_size, |
858 | diff --git a/drivers/infiniband/hw/mlx5/user.h b/drivers/infiniband/hw/mlx5/user.h |
859 | index 0f4f8e42a17f..d0ba264ac1ed 100644 |
860 | --- a/drivers/infiniband/hw/mlx5/user.h |
861 | +++ b/drivers/infiniband/hw/mlx5/user.h |
862 | @@ -91,6 +91,7 @@ struct mlx5_ib_create_cq { |
863 | __u64 buf_addr; |
864 | __u64 db_addr; |
865 | __u32 cqe_size; |
866 | + __u32 reserved; /* explicit padding (optional on i386) */ |
867 | }; |
868 | |
869 | struct mlx5_ib_create_cq_resp { |
870 | @@ -109,6 +110,7 @@ struct mlx5_ib_create_srq { |
871 | __u64 buf_addr; |
872 | __u64 db_addr; |
873 | __u32 flags; |
874 | + __u32 reserved; /* explicit padding (optional on i386) */ |
875 | }; |
876 | |
877 | struct mlx5_ib_create_srq_resp { |
878 | diff --git a/drivers/infiniband/hw/qib/qib_mad.c b/drivers/infiniband/hw/qib/qib_mad.c |
879 | index ccb119143d20..1dd9fcbb7c9a 100644 |
880 | --- a/drivers/infiniband/hw/qib/qib_mad.c |
881 | +++ b/drivers/infiniband/hw/qib/qib_mad.c |
882 | @@ -1028,7 +1028,7 @@ static int set_pkeys(struct qib_devdata *dd, u8 port, u16 *pkeys) |
883 | |
884 | event.event = IB_EVENT_PKEY_CHANGE; |
885 | event.device = &dd->verbs_dev.ibdev; |
886 | - event.element.port_num = 1; |
887 | + event.element.port_num = port; |
888 | ib_dispatch_event(&event); |
889 | } |
890 | return 0; |
891 | diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c |
892 | index 529b6bcdca7a..e96c07ee6756 100644 |
893 | --- a/drivers/infiniband/ulp/srp/ib_srp.c |
894 | +++ b/drivers/infiniband/ulp/srp/ib_srp.c |
895 | @@ -1576,6 +1576,12 @@ err_unmap: |
896 | err_iu: |
897 | srp_put_tx_iu(target, iu, SRP_IU_CMD); |
898 | |
899 | + /* |
900 | + * Avoid that the loops that iterate over the request ring can |
901 | + * encounter a dangling SCSI command pointer. |
902 | + */ |
903 | + req->scmnd = NULL; |
904 | + |
905 | spin_lock_irqsave(&target->lock, flags); |
906 | list_add(&req->list, &target->free_reqs); |
907 | |
908 | diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c |
909 | index 230cdcf8e6fe..233516aff595 100644 |
910 | --- a/drivers/input/mouse/elantech.c |
911 | +++ b/drivers/input/mouse/elantech.c |
912 | @@ -473,8 +473,15 @@ static void elantech_report_absolute_v3(struct psmouse *psmouse, |
913 | input_report_key(dev, BTN_TOOL_FINGER, fingers == 1); |
914 | input_report_key(dev, BTN_TOOL_DOUBLETAP, fingers == 2); |
915 | input_report_key(dev, BTN_TOOL_TRIPLETAP, fingers == 3); |
916 | - input_report_key(dev, BTN_LEFT, packet[0] & 0x01); |
917 | - input_report_key(dev, BTN_RIGHT, packet[0] & 0x02); |
918 | + |
919 | + /* For clickpads map both buttons to BTN_LEFT */ |
920 | + if (etd->fw_version & 0x001000) { |
921 | + input_report_key(dev, BTN_LEFT, packet[0] & 0x03); |
922 | + } else { |
923 | + input_report_key(dev, BTN_LEFT, packet[0] & 0x01); |
924 | + input_report_key(dev, BTN_RIGHT, packet[0] & 0x02); |
925 | + } |
926 | + |
927 | input_report_abs(dev, ABS_PRESSURE, pres); |
928 | input_report_abs(dev, ABS_TOOL_WIDTH, width); |
929 | |
930 | @@ -484,10 +491,17 @@ static void elantech_report_absolute_v3(struct psmouse *psmouse, |
931 | static void elantech_input_sync_v4(struct psmouse *psmouse) |
932 | { |
933 | struct input_dev *dev = psmouse->dev; |
934 | + struct elantech_data *etd = psmouse->private; |
935 | unsigned char *packet = psmouse->packet; |
936 | |
937 | - input_report_key(dev, BTN_LEFT, packet[0] & 0x01); |
938 | - input_report_key(dev, BTN_RIGHT, packet[0] & 0x02); |
939 | + /* For clickpads map both buttons to BTN_LEFT */ |
940 | + if (etd->fw_version & 0x001000) { |
941 | + input_report_key(dev, BTN_LEFT, packet[0] & 0x03); |
942 | + } else { |
943 | + input_report_key(dev, BTN_LEFT, packet[0] & 0x01); |
944 | + input_report_key(dev, BTN_RIGHT, packet[0] & 0x02); |
945 | + } |
946 | + |
947 | input_mt_report_pointer_emulation(dev, true); |
948 | input_sync(dev); |
949 | } |
950 | @@ -835,7 +849,7 @@ static int elantech_set_absolute_mode(struct psmouse *psmouse) |
951 | if (etd->set_hw_resolution) |
952 | etd->reg_10 = 0x0b; |
953 | else |
954 | - etd->reg_10 = 0x03; |
955 | + etd->reg_10 = 0x01; |
956 | |
957 | if (elantech_write_reg(psmouse, 0x10, etd->reg_10)) |
958 | rc = -1; |
959 | @@ -1336,7 +1350,8 @@ static int elantech_reconnect(struct psmouse *psmouse) |
960 | } |
961 | |
962 | /* |
963 | - * Some hw_version 3 models go into error state when we try to set bit 3 of r10 |
964 | + * Some hw_version 3 models go into error state when we try to set |
965 | + * bit 3 and/or bit 1 of r10. |
966 | */ |
967 | static const struct dmi_system_id no_hw_res_dmi_table[] = { |
968 | #if defined(CONFIG_DMI) && defined(CONFIG_X86) |
969 | diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c |
970 | index c5ec703c727e..ec772d962f06 100644 |
971 | --- a/drivers/input/mouse/synaptics.c |
972 | +++ b/drivers/input/mouse/synaptics.c |
973 | @@ -347,15 +347,6 @@ static int synaptics_resolution(struct psmouse *psmouse) |
974 | unsigned char resp[3]; |
975 | int i; |
976 | |
977 | - for (i = 0; min_max_pnpid_table[i].pnp_ids; i++) |
978 | - if (matches_pnp_id(psmouse, min_max_pnpid_table[i].pnp_ids)) { |
979 | - priv->x_min = min_max_pnpid_table[i].x_min; |
980 | - priv->x_max = min_max_pnpid_table[i].x_max; |
981 | - priv->y_min = min_max_pnpid_table[i].y_min; |
982 | - priv->y_max = min_max_pnpid_table[i].y_max; |
983 | - return 0; |
984 | - } |
985 | - |
986 | if (SYN_ID_MAJOR(priv->identity) < 4) |
987 | return 0; |
988 | |
989 | @@ -366,6 +357,16 @@ static int synaptics_resolution(struct psmouse *psmouse) |
990 | } |
991 | } |
992 | |
993 | + for (i = 0; min_max_pnpid_table[i].pnp_ids; i++) { |
994 | + if (matches_pnp_id(psmouse, min_max_pnpid_table[i].pnp_ids)) { |
995 | + priv->x_min = min_max_pnpid_table[i].x_min; |
996 | + priv->x_max = min_max_pnpid_table[i].x_max; |
997 | + priv->y_min = min_max_pnpid_table[i].y_min; |
998 | + priv->y_max = min_max_pnpid_table[i].y_max; |
999 | + return 0; |
1000 | + } |
1001 | + } |
1002 | + |
1003 | if (SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 5 && |
1004 | SYN_CAP_MAX_DIMENSIONS(priv->ext_cap_0c)) { |
1005 | if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_MAX_COORDS, resp)) { |
1006 | diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c |
1007 | index 33bb970980d2..ed1b6db25b03 100644 |
1008 | --- a/drivers/pci/pci.c |
1009 | +++ b/drivers/pci/pci.c |
1010 | @@ -4102,7 +4102,7 @@ int pci_set_vga_state(struct pci_dev *dev, bool decode, |
1011 | u16 cmd; |
1012 | int rc; |
1013 | |
1014 | - WARN_ON((flags & PCI_VGA_STATE_CHANGE_DECODES) & (command_bits & ~(PCI_COMMAND_IO|PCI_COMMAND_MEMORY))); |
1015 | + WARN_ON((flags & PCI_VGA_STATE_CHANGE_DECODES) && (command_bits & ~(PCI_COMMAND_IO|PCI_COMMAND_MEMORY))); |
1016 | |
1017 | /* ARCH specific VGA enables */ |
1018 | rc = pci_set_vga_state_arch(dev, decode, command_bits, flags); |
1019 | diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c |
1020 | index 5cb726c193de..813f437f3ee8 100644 |
1021 | --- a/drivers/pci/quirks.c |
1022 | +++ b/drivers/pci/quirks.c |
1023 | @@ -2949,6 +2949,7 @@ static void disable_igfx_irq(struct pci_dev *dev) |
1024 | } |
1025 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0102, disable_igfx_irq); |
1026 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq); |
1027 | +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0152, disable_igfx_irq); |
1028 | |
1029 | /* |
1030 | * PCI devices which are on Intel chips can skip the 10ms delay |
1031 | diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c |
1032 | index 22601c718b07..f329ad294fc0 100644 |
1033 | --- a/drivers/target/iscsi/iscsi_target.c |
1034 | +++ b/drivers/target/iscsi/iscsi_target.c |
1035 | @@ -1290,7 +1290,7 @@ iscsit_check_dataout_hdr(struct iscsi_conn *conn, unsigned char *buf, |
1036 | if (cmd->data_direction != DMA_TO_DEVICE) { |
1037 | pr_err("Command ITT: 0x%08x received DataOUT for a" |
1038 | " NON-WRITE command.\n", cmd->init_task_tag); |
1039 | - return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, buf); |
1040 | + return iscsit_dump_data_payload(conn, payload_length, 1); |
1041 | } |
1042 | se_cmd = &cmd->se_cmd; |
1043 | iscsit_mod_dataout_timer(cmd); |
1044 | diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c |
1045 | index cad6fdcc64da..d509aa74cfa1 100644 |
1046 | --- a/drivers/target/iscsi/iscsi_target_login.c |
1047 | +++ b/drivers/target/iscsi/iscsi_target_login.c |
1048 | @@ -1196,7 +1196,7 @@ old_sess_out: |
1049 | static int __iscsi_target_login_thread(struct iscsi_np *np) |
1050 | { |
1051 | u8 *buffer, zero_tsih = 0; |
1052 | - int ret = 0, rc, stop; |
1053 | + int ret = 0, rc; |
1054 | struct iscsi_conn *conn = NULL; |
1055 | struct iscsi_login *login; |
1056 | struct iscsi_portal_group *tpg = NULL; |
1057 | @@ -1210,6 +1210,9 @@ static int __iscsi_target_login_thread(struct iscsi_np *np) |
1058 | if (np->np_thread_state == ISCSI_NP_THREAD_RESET) { |
1059 | np->np_thread_state = ISCSI_NP_THREAD_ACTIVE; |
1060 | complete(&np->np_restart_comp); |
1061 | + } else if (np->np_thread_state == ISCSI_NP_THREAD_SHUTDOWN) { |
1062 | + spin_unlock_bh(&np->np_thread_lock); |
1063 | + goto exit; |
1064 | } else { |
1065 | np->np_thread_state = ISCSI_NP_THREAD_ACTIVE; |
1066 | } |
1067 | @@ -1402,10 +1405,8 @@ old_sess_out: |
1068 | } |
1069 | |
1070 | out: |
1071 | - stop = kthread_should_stop(); |
1072 | - /* Wait for another socket.. */ |
1073 | - if (!stop) |
1074 | - return 1; |
1075 | + return 1; |
1076 | + |
1077 | exit: |
1078 | iscsi_stop_login_thread_timer(np); |
1079 | spin_lock_bh(&np->np_thread_lock); |
1080 | @@ -1422,7 +1423,7 @@ int iscsi_target_login_thread(void *arg) |
1081 | |
1082 | allow_signal(SIGINT); |
1083 | |
1084 | - while (!kthread_should_stop()) { |
1085 | + while (1) { |
1086 | ret = __iscsi_target_login_thread(np); |
1087 | /* |
1088 | * We break and exit here unless another sock_accept() call |
1089 | diff --git a/drivers/target/iscsi/iscsi_target_util.c b/drivers/target/iscsi/iscsi_target_util.c |
1090 | index e655b042ed18..ab77f80ead2b 100644 |
1091 | --- a/drivers/target/iscsi/iscsi_target_util.c |
1092 | +++ b/drivers/target/iscsi/iscsi_target_util.c |
1093 | @@ -1295,6 +1295,8 @@ int iscsit_tx_login_rsp(struct iscsi_conn *conn, u8 status_class, u8 status_deta |
1094 | login->login_failed = 1; |
1095 | iscsit_collect_login_stats(conn, status_class, status_detail); |
1096 | |
1097 | + memset(&login->rsp[0], 0, ISCSI_HDR_LEN); |
1098 | + |
1099 | hdr = (struct iscsi_login_rsp *)&login->rsp[0]; |
1100 | hdr->opcode = ISCSI_OP_LOGIN_RSP; |
1101 | hdr->status_class = status_class; |
1102 | diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c |
1103 | index 26416c15d65c..6ea95d216eb8 100644 |
1104 | --- a/drivers/target/target_core_device.c |
1105 | +++ b/drivers/target/target_core_device.c |
1106 | @@ -616,6 +616,7 @@ void core_dev_unexport( |
1107 | dev->export_count--; |
1108 | spin_unlock(&hba->device_lock); |
1109 | |
1110 | + lun->lun_sep = NULL; |
1111 | lun->lun_se_dev = NULL; |
1112 | } |
1113 | |
1114 | diff --git a/drivers/watchdog/ath79_wdt.c b/drivers/watchdog/ath79_wdt.c |
1115 | index 9fa1f69dac13..61098cd5439e 100644 |
1116 | --- a/drivers/watchdog/ath79_wdt.c |
1117 | +++ b/drivers/watchdog/ath79_wdt.c |
1118 | @@ -20,6 +20,7 @@ |
1119 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
1120 | |
1121 | #include <linux/bitops.h> |
1122 | +#include <linux/delay.h> |
1123 | #include <linux/errno.h> |
1124 | #include <linux/fs.h> |
1125 | #include <linux/init.h> |
1126 | @@ -91,6 +92,15 @@ static inline void ath79_wdt_keepalive(void) |
1127 | static inline void ath79_wdt_enable(void) |
1128 | { |
1129 | ath79_wdt_keepalive(); |
1130 | + |
1131 | + /* |
1132 | + * Updating the TIMER register requires a few microseconds |
1133 | + * on the AR934x SoCs at least. Use a small delay to ensure |
1134 | + * that the TIMER register is updated within the hardware |
1135 | + * before enabling the watchdog. |
1136 | + */ |
1137 | + udelay(2); |
1138 | + |
1139 | ath79_wdt_wr(WDOG_REG_CTRL, WDOG_CTRL_ACTION_FCR); |
1140 | /* flush write */ |
1141 | ath79_wdt_rr(WDOG_REG_CTRL); |
1142 | diff --git a/drivers/watchdog/kempld_wdt.c b/drivers/watchdog/kempld_wdt.c |
1143 | index 20dc73844737..d9c1a1601926 100644 |
1144 | --- a/drivers/watchdog/kempld_wdt.c |
1145 | +++ b/drivers/watchdog/kempld_wdt.c |
1146 | @@ -162,7 +162,7 @@ static int kempld_wdt_set_stage_timeout(struct kempld_wdt_data *wdt_data, |
1147 | kempld_get_mutex(pld); |
1148 | stage_cfg = kempld_read8(pld, KEMPLD_WDT_STAGE_CFG(stage->id)); |
1149 | stage_cfg &= ~STAGE_CFG_PRESCALER_MASK; |
1150 | - stage_cfg |= STAGE_CFG_SET_PRESCALER(prescaler); |
1151 | + stage_cfg |= STAGE_CFG_SET_PRESCALER(PRESCALER_21); |
1152 | kempld_write8(pld, KEMPLD_WDT_STAGE_CFG(stage->id), stage_cfg); |
1153 | kempld_write32(pld, KEMPLD_WDT_STAGE_TIMEOUT(stage->id), |
1154 | stage_timeout); |
1155 | diff --git a/drivers/watchdog/sp805_wdt.c b/drivers/watchdog/sp805_wdt.c |
1156 | index 3f786ce0a6f2..88bcdfb9f68f 100644 |
1157 | --- a/drivers/watchdog/sp805_wdt.c |
1158 | +++ b/drivers/watchdog/sp805_wdt.c |
1159 | @@ -60,7 +60,6 @@ |
1160 | * @adev: amba device structure of wdt |
1161 | * @status: current status of wdt |
1162 | * @load_val: load value to be set for current timeout |
1163 | - * @timeout: current programmed timeout |
1164 | */ |
1165 | struct sp805_wdt { |
1166 | struct watchdog_device wdd; |
1167 | @@ -69,7 +68,6 @@ struct sp805_wdt { |
1168 | struct clk *clk; |
1169 | struct amba_device *adev; |
1170 | unsigned int load_val; |
1171 | - unsigned int timeout; |
1172 | }; |
1173 | |
1174 | static bool nowayout = WATCHDOG_NOWAYOUT; |
1175 | @@ -99,7 +97,7 @@ static int wdt_setload(struct watchdog_device *wdd, unsigned int timeout) |
1176 | spin_lock(&wdt->lock); |
1177 | wdt->load_val = load; |
1178 | /* roundup timeout to closest positive integer value */ |
1179 | - wdt->timeout = div_u64((load + 1) * 2 + (rate / 2), rate); |
1180 | + wdd->timeout = div_u64((load + 1) * 2 + (rate / 2), rate); |
1181 | spin_unlock(&wdt->lock); |
1182 | |
1183 | return 0; |
1184 | diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c |
1185 | index 360114ae8b82..15f9d98627a4 100644 |
1186 | --- a/fs/nfs/inode.c |
1187 | +++ b/fs/nfs/inode.c |
1188 | @@ -1555,18 +1555,20 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) |
1189 | inode->i_version = fattr->change_attr; |
1190 | } |
1191 | } else if (server->caps & NFS_CAP_CHANGE_ATTR) |
1192 | - invalid |= save_cache_validity; |
1193 | + nfsi->cache_validity |= save_cache_validity; |
1194 | |
1195 | if (fattr->valid & NFS_ATTR_FATTR_MTIME) { |
1196 | memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime)); |
1197 | } else if (server->caps & NFS_CAP_MTIME) |
1198 | - invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR |
1199 | + nfsi->cache_validity |= save_cache_validity & |
1200 | + (NFS_INO_INVALID_ATTR |
1201 | | NFS_INO_REVAL_FORCED); |
1202 | |
1203 | if (fattr->valid & NFS_ATTR_FATTR_CTIME) { |
1204 | memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime)); |
1205 | } else if (server->caps & NFS_CAP_CTIME) |
1206 | - invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR |
1207 | + nfsi->cache_validity |= save_cache_validity & |
1208 | + (NFS_INO_INVALID_ATTR |
1209 | | NFS_INO_REVAL_FORCED); |
1210 | |
1211 | /* Check if our cached file size is stale */ |
1212 | @@ -1588,7 +1590,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) |
1213 | (long long)new_isize); |
1214 | } |
1215 | } else |
1216 | - invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR |
1217 | + nfsi->cache_validity |= save_cache_validity & |
1218 | + (NFS_INO_INVALID_ATTR |
1219 | | NFS_INO_REVAL_PAGECACHE |
1220 | | NFS_INO_REVAL_FORCED); |
1221 | |
1222 | @@ -1596,7 +1599,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) |
1223 | if (fattr->valid & NFS_ATTR_FATTR_ATIME) |
1224 | memcpy(&inode->i_atime, &fattr->atime, sizeof(inode->i_atime)); |
1225 | else if (server->caps & NFS_CAP_ATIME) |
1226 | - invalid |= save_cache_validity & (NFS_INO_INVALID_ATIME |
1227 | + nfsi->cache_validity |= save_cache_validity & |
1228 | + (NFS_INO_INVALID_ATIME |
1229 | | NFS_INO_REVAL_FORCED); |
1230 | |
1231 | if (fattr->valid & NFS_ATTR_FATTR_MODE) { |
1232 | @@ -1607,7 +1611,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) |
1233 | invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; |
1234 | } |
1235 | } else if (server->caps & NFS_CAP_MODE) |
1236 | - invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR |
1237 | + nfsi->cache_validity |= save_cache_validity & |
1238 | + (NFS_INO_INVALID_ATTR |
1239 | | NFS_INO_INVALID_ACCESS |
1240 | | NFS_INO_INVALID_ACL |
1241 | | NFS_INO_REVAL_FORCED); |
1242 | @@ -1618,7 +1623,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) |
1243 | inode->i_uid = fattr->uid; |
1244 | } |
1245 | } else if (server->caps & NFS_CAP_OWNER) |
1246 | - invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR |
1247 | + nfsi->cache_validity |= save_cache_validity & |
1248 | + (NFS_INO_INVALID_ATTR |
1249 | | NFS_INO_INVALID_ACCESS |
1250 | | NFS_INO_INVALID_ACL |
1251 | | NFS_INO_REVAL_FORCED); |
1252 | @@ -1629,7 +1635,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) |
1253 | inode->i_gid = fattr->gid; |
1254 | } |
1255 | } else if (server->caps & NFS_CAP_OWNER_GROUP) |
1256 | - invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR |
1257 | + nfsi->cache_validity |= save_cache_validity & |
1258 | + (NFS_INO_INVALID_ATTR |
1259 | | NFS_INO_INVALID_ACCESS |
1260 | | NFS_INO_INVALID_ACL |
1261 | | NFS_INO_REVAL_FORCED); |
1262 | @@ -1642,7 +1649,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) |
1263 | set_nlink(inode, fattr->nlink); |
1264 | } |
1265 | } else if (server->caps & NFS_CAP_NLINK) |
1266 | - invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR |
1267 | + nfsi->cache_validity |= save_cache_validity & |
1268 | + (NFS_INO_INVALID_ATTR |
1269 | | NFS_INO_REVAL_FORCED); |
1270 | |
1271 | if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) { |
1272 | diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c |
1273 | index b9a35c05b60f..5e992fc51e61 100644 |
1274 | --- a/fs/nfs/nfs4filelayout.c |
1275 | +++ b/fs/nfs/nfs4filelayout.c |
1276 | @@ -1330,7 +1330,7 @@ filelayout_alloc_layout_hdr(struct inode *inode, gfp_t gfp_flags) |
1277 | struct nfs4_filelayout *flo; |
1278 | |
1279 | flo = kzalloc(sizeof(*flo), gfp_flags); |
1280 | - return &flo->generic_hdr; |
1281 | + return flo != NULL ? &flo->generic_hdr : NULL; |
1282 | } |
1283 | |
1284 | static void |
1285 | diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c |
1286 | index 0deb32105ccf..27f5f858502b 100644 |
1287 | --- a/fs/nfs/nfs4state.c |
1288 | +++ b/fs/nfs/nfs4state.c |
1289 | @@ -1456,7 +1456,7 @@ static int nfs4_reclaim_open_state(struct nfs4_state_owner *sp, const struct nfs |
1290 | * server that doesn't support a grace period. |
1291 | */ |
1292 | spin_lock(&sp->so_lock); |
1293 | - write_seqcount_begin(&sp->so_reclaim_seqcount); |
1294 | + raw_write_seqcount_begin(&sp->so_reclaim_seqcount); |
1295 | restart: |
1296 | list_for_each_entry(state, &sp->so_states, open_states) { |
1297 | if (!test_and_clear_bit(ops->state_flag_bit, &state->flags)) |
1298 | @@ -1519,13 +1519,13 @@ restart: |
1299 | spin_lock(&sp->so_lock); |
1300 | goto restart; |
1301 | } |
1302 | - write_seqcount_end(&sp->so_reclaim_seqcount); |
1303 | + raw_write_seqcount_end(&sp->so_reclaim_seqcount); |
1304 | spin_unlock(&sp->so_lock); |
1305 | return 0; |
1306 | out_err: |
1307 | nfs4_put_open_state(state); |
1308 | spin_lock(&sp->so_lock); |
1309 | - write_seqcount_end(&sp->so_reclaim_seqcount); |
1310 | + raw_write_seqcount_end(&sp->so_reclaim_seqcount); |
1311 | spin_unlock(&sp->so_lock); |
1312 | return status; |
1313 | } |
1314 | diff --git a/fs/nfs/super.c b/fs/nfs/super.c |
1315 | index 910ed906eb82..05c3a6e6518d 100644 |
1316 | --- a/fs/nfs/super.c |
1317 | +++ b/fs/nfs/super.c |
1318 | @@ -2246,6 +2246,7 @@ nfs_remount(struct super_block *sb, int *flags, char *raw_data) |
1319 | data->nfs_server.addrlen = nfss->nfs_client->cl_addrlen; |
1320 | data->version = nfsvers; |
1321 | data->minorversion = nfss->nfs_client->cl_minorversion; |
1322 | + data->net = current->nsproxy->net_ns; |
1323 | memcpy(&data->nfs_server.address, &nfss->nfs_client->cl_addr, |
1324 | data->nfs_server.addrlen); |
1325 | |
1326 | diff --git a/fs/nfs/write.c b/fs/nfs/write.c |
1327 | index 9a3b6a4cd6b9..aaa16b31e21e 100644 |
1328 | --- a/fs/nfs/write.c |
1329 | +++ b/fs/nfs/write.c |
1330 | @@ -913,12 +913,14 @@ static bool nfs_write_pageuptodate(struct page *page, struct inode *inode) |
1331 | |
1332 | if (nfs_have_delegated_attributes(inode)) |
1333 | goto out; |
1334 | - if (nfsi->cache_validity & (NFS_INO_INVALID_DATA|NFS_INO_REVAL_PAGECACHE)) |
1335 | + if (nfsi->cache_validity & NFS_INO_REVAL_PAGECACHE) |
1336 | return false; |
1337 | smp_rmb(); |
1338 | if (test_bit(NFS_INO_INVALIDATING, &nfsi->flags)) |
1339 | return false; |
1340 | out: |
1341 | + if (nfsi->cache_validity & NFS_INO_INVALID_DATA) |
1342 | + return false; |
1343 | return PageUptodate(page) != 0; |
1344 | } |
1345 | |
1346 | diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c |
1347 | index 1693fd93fa58..34d2a1f2f400 100644 |
1348 | --- a/fs/nfsd/nfs4state.c |
1349 | +++ b/fs/nfsd/nfs4state.c |
1350 | @@ -3723,7 +3723,7 @@ nfsd4_free_lock_stateid(struct nfs4_ol_stateid *stp) |
1351 | * correspondance, and we have to delete the lockowner when we |
1352 | * delete the lock stateid: |
1353 | */ |
1354 | - unhash_lockowner(lo); |
1355 | + release_lockowner(lo); |
1356 | return nfs_ok; |
1357 | } |
1358 | |
1359 | diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c |
1360 | index 16e8fa71eb84..bc11bf68ec7f 100644 |
1361 | --- a/fs/nfsd/nfs4xdr.c |
1362 | +++ b/fs/nfsd/nfs4xdr.c |
1363 | @@ -2096,8 +2096,8 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp, |
1364 | err = vfs_getattr(&path, &stat); |
1365 | if (err) |
1366 | goto out_nfserr; |
1367 | - if ((bmval0 & (FATTR4_WORD0_FILES_FREE | FATTR4_WORD0_FILES_TOTAL | |
1368 | - FATTR4_WORD0_MAXNAME)) || |
1369 | + if ((bmval0 & (FATTR4_WORD0_FILES_AVAIL | FATTR4_WORD0_FILES_FREE | |
1370 | + FATTR4_WORD0_FILES_TOTAL | FATTR4_WORD0_MAXNAME)) || |
1371 | (bmval1 & (FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE | |
1372 | FATTR4_WORD1_SPACE_TOTAL))) { |
1373 | err = vfs_statfs(&path, &statfs); |
1374 | diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c |
1375 | index ad62bdbb451e..1e4cf9d73130 100644 |
1376 | --- a/fs/reiserfs/inode.c |
1377 | +++ b/fs/reiserfs/inode.c |
1378 | @@ -3220,8 +3220,14 @@ int reiserfs_setattr(struct dentry *dentry, struct iattr *attr) |
1379 | attr->ia_size != i_size_read(inode)) { |
1380 | error = inode_newsize_ok(inode, attr->ia_size); |
1381 | if (!error) { |
1382 | + /* |
1383 | + * Could race against reiserfs_file_release |
1384 | + * if called from NFS, so take tailpack mutex. |
1385 | + */ |
1386 | + mutex_lock(&REISERFS_I(inode)->tailpack); |
1387 | truncate_setsize(inode, attr->ia_size); |
1388 | - reiserfs_vfs_truncate_file(inode); |
1389 | + reiserfs_truncate_file(inode, 1); |
1390 | + mutex_unlock(&REISERFS_I(inode)->tailpack); |
1391 | } |
1392 | } |
1393 | |
1394 | diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c |
1395 | index 123c79b7261e..b56eb6275744 100644 |
1396 | --- a/fs/ubifs/file.c |
1397 | +++ b/fs/ubifs/file.c |
1398 | @@ -1525,8 +1525,7 @@ static int ubifs_vm_page_mkwrite(struct vm_area_struct *vma, |
1399 | } |
1400 | |
1401 | wait_for_stable_page(page); |
1402 | - unlock_page(page); |
1403 | - return 0; |
1404 | + return VM_FAULT_LOCKED; |
1405 | |
1406 | out_unlock: |
1407 | unlock_page(page); |
1408 | diff --git a/fs/ubifs/shrinker.c b/fs/ubifs/shrinker.c |
1409 | index f35135e28e96..9a9fb94a41c6 100644 |
1410 | --- a/fs/ubifs/shrinker.c |
1411 | +++ b/fs/ubifs/shrinker.c |
1412 | @@ -128,7 +128,6 @@ static int shrink_tnc(struct ubifs_info *c, int nr, int age, int *contention) |
1413 | freed = ubifs_destroy_tnc_subtree(znode); |
1414 | atomic_long_sub(freed, &ubifs_clean_zn_cnt); |
1415 | atomic_long_sub(freed, &c->clean_zn_cnt); |
1416 | - ubifs_assert(atomic_long_read(&c->clean_zn_cnt) >= 0); |
1417 | total_freed += freed; |
1418 | znode = zprev; |
1419 | } |
1420 | diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c |
1421 | index f96c05669a9e..c6ff3cf5a5bb 100644 |
1422 | --- a/fs/xfs/xfs_mount.c |
1423 | +++ b/fs/xfs/xfs_mount.c |
1424 | @@ -320,8 +320,19 @@ reread: |
1425 | /* |
1426 | * Initialize the mount structure from the superblock. |
1427 | */ |
1428 | - xfs_sb_from_disk(&mp->m_sb, XFS_BUF_TO_SBP(bp)); |
1429 | - xfs_sb_quota_from_disk(&mp->m_sb); |
1430 | + xfs_sb_from_disk(sbp, XFS_BUF_TO_SBP(bp)); |
1431 | + xfs_sb_quota_from_disk(sbp); |
1432 | + |
1433 | + /* |
1434 | + * If we haven't validated the superblock, do so now before we try |
1435 | + * to check the sector size and reread the superblock appropriately. |
1436 | + */ |
1437 | + if (sbp->sb_magicnum != XFS_SB_MAGIC) { |
1438 | + if (loud) |
1439 | + xfs_warn(mp, "Invalid superblock magic number"); |
1440 | + error = EINVAL; |
1441 | + goto release_buf; |
1442 | + } |
1443 | |
1444 | /* |
1445 | * We must be able to do sector-sized and sector-aligned IO. |
1446 | @@ -334,11 +345,11 @@ reread: |
1447 | goto release_buf; |
1448 | } |
1449 | |
1450 | - /* |
1451 | - * Re-read the superblock so the buffer is correctly sized, |
1452 | - * and properly verified. |
1453 | - */ |
1454 | if (buf_ops == NULL) { |
1455 | + /* |
1456 | + * Re-read the superblock so the buffer is correctly sized, |
1457 | + * and properly verified. |
1458 | + */ |
1459 | xfs_buf_relse(bp); |
1460 | sector_size = sbp->sb_sectsize; |
1461 | buf_ops = loud ? &xfs_sb_buf_ops : &xfs_sb_quiet_buf_ops; |
1462 | diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h |
1463 | index 077904c8b70d..cc79eff4a1ad 100644 |
1464 | --- a/include/linux/ptrace.h |
1465 | +++ b/include/linux/ptrace.h |
1466 | @@ -334,6 +334,9 @@ static inline void user_single_step_siginfo(struct task_struct *tsk, |
1467 | * calling arch_ptrace_stop() when it would be superfluous. For example, |
1468 | * if the thread has not been back to user mode since the last stop, the |
1469 | * thread state might indicate that nothing needs to be done. |
1470 | + * |
1471 | + * This is guaranteed to be invoked once before a task stops for ptrace and |
1472 | + * may include arch-specific operations necessary prior to a ptrace stop. |
1473 | */ |
1474 | #define arch_ptrace_stop_needed(code, info) (0) |
1475 | #endif |
1476 | diff --git a/include/trace/syscall.h b/include/trace/syscall.h |
1477 | index fed853f3d7aa..9674145e2f6a 100644 |
1478 | --- a/include/trace/syscall.h |
1479 | +++ b/include/trace/syscall.h |
1480 | @@ -4,6 +4,7 @@ |
1481 | #include <linux/tracepoint.h> |
1482 | #include <linux/unistd.h> |
1483 | #include <linux/ftrace_event.h> |
1484 | +#include <linux/thread_info.h> |
1485 | |
1486 | #include <asm/ptrace.h> |
1487 | |
1488 | @@ -32,4 +33,18 @@ struct syscall_metadata { |
1489 | struct ftrace_event_call *exit_event; |
1490 | }; |
1491 | |
1492 | +#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_HAVE_SYSCALL_TRACEPOINTS) |
1493 | +static inline void syscall_tracepoint_update(struct task_struct *p) |
1494 | +{ |
1495 | + if (test_thread_flag(TIF_SYSCALL_TRACEPOINT)) |
1496 | + set_tsk_thread_flag(p, TIF_SYSCALL_TRACEPOINT); |
1497 | + else |
1498 | + clear_tsk_thread_flag(p, TIF_SYSCALL_TRACEPOINT); |
1499 | +} |
1500 | +#else |
1501 | +static inline void syscall_tracepoint_update(struct task_struct *p) |
1502 | +{ |
1503 | +} |
1504 | +#endif |
1505 | + |
1506 | #endif /* _TRACE_SYSCALL_H */ |
1507 | diff --git a/kernel/fork.c b/kernel/fork.c |
1508 | index 45da005c9961..c44bff8097f5 100644 |
1509 | --- a/kernel/fork.c |
1510 | +++ b/kernel/fork.c |
1511 | @@ -1484,7 +1484,9 @@ static struct task_struct *copy_process(unsigned long clone_flags, |
1512 | |
1513 | total_forks++; |
1514 | spin_unlock(¤t->sighand->siglock); |
1515 | + syscall_tracepoint_update(p); |
1516 | write_unlock_irq(&tasklist_lock); |
1517 | + |
1518 | proc_fork_connector(p); |
1519 | cgroup_post_fork(p); |
1520 | if (clone_flags & CLONE_THREAD) |
1521 | diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c |
1522 | index 24c1f2382557..f0831c22760c 100644 |
1523 | --- a/kernel/trace/trace.c |
1524 | +++ b/kernel/trace/trace.c |
1525 | @@ -1449,12 +1449,12 @@ static void tracing_stop_tr(struct trace_array *tr) |
1526 | |
1527 | void trace_stop_cmdline_recording(void); |
1528 | |
1529 | -static void trace_save_cmdline(struct task_struct *tsk) |
1530 | +static int trace_save_cmdline(struct task_struct *tsk) |
1531 | { |
1532 | unsigned pid, idx; |
1533 | |
1534 | if (!tsk->pid || unlikely(tsk->pid > PID_MAX_DEFAULT)) |
1535 | - return; |
1536 | + return 0; |
1537 | |
1538 | /* |
1539 | * It's not the end of the world if we don't get |
1540 | @@ -1463,7 +1463,7 @@ static void trace_save_cmdline(struct task_struct *tsk) |
1541 | * so if we miss here, then better luck next time. |
1542 | */ |
1543 | if (!arch_spin_trylock(&trace_cmdline_lock)) |
1544 | - return; |
1545 | + return 0; |
1546 | |
1547 | idx = map_pid_to_cmdline[tsk->pid]; |
1548 | if (idx == NO_CMDLINE_MAP) { |
1549 | @@ -1488,6 +1488,8 @@ static void trace_save_cmdline(struct task_struct *tsk) |
1550 | memcpy(&saved_cmdlines[idx], tsk->comm, TASK_COMM_LEN); |
1551 | |
1552 | arch_spin_unlock(&trace_cmdline_lock); |
1553 | + |
1554 | + return 1; |
1555 | } |
1556 | |
1557 | void trace_find_cmdline(int pid, char comm[]) |
1558 | @@ -1529,9 +1531,8 @@ void tracing_record_cmdline(struct task_struct *tsk) |
1559 | if (!__this_cpu_read(trace_cmdline_save)) |
1560 | return; |
1561 | |
1562 | - __this_cpu_write(trace_cmdline_save, false); |
1563 | - |
1564 | - trace_save_cmdline(tsk); |
1565 | + if (trace_save_cmdline(tsk)) |
1566 | + __this_cpu_write(trace_cmdline_save, false); |
1567 | } |
1568 | |
1569 | void |
1570 | diff --git a/kernel/watchdog.c b/kernel/watchdog.c |
1571 | index 4431610f049a..c9b6f01bf853 100644 |
1572 | --- a/kernel/watchdog.c |
1573 | +++ b/kernel/watchdog.c |
1574 | @@ -524,10 +524,8 @@ static void update_timers_all_cpus(void) |
1575 | int cpu; |
1576 | |
1577 | get_online_cpus(); |
1578 | - preempt_disable(); |
1579 | for_each_online_cpu(cpu) |
1580 | update_timers(cpu); |
1581 | - preempt_enable(); |
1582 | put_online_cpus(); |
1583 | } |
1584 | |
1585 | diff --git a/lib/lz4/lz4_decompress.c b/lib/lz4/lz4_decompress.c |
1586 | index b74da447e81e..7a85967060a5 100644 |
1587 | --- a/lib/lz4/lz4_decompress.c |
1588 | +++ b/lib/lz4/lz4_decompress.c |
1589 | @@ -192,6 +192,8 @@ static int lz4_uncompress_unknownoutputsize(const char *source, char *dest, |
1590 | int s = 255; |
1591 | while ((ip < iend) && (s == 255)) { |
1592 | s = *ip++; |
1593 | + if (unlikely(length > (size_t)(length + s))) |
1594 | + goto _output_error; |
1595 | length += s; |
1596 | } |
1597 | } |
1598 | @@ -232,6 +234,8 @@ static int lz4_uncompress_unknownoutputsize(const char *source, char *dest, |
1599 | if (length == ML_MASK) { |
1600 | while (ip < iend) { |
1601 | int s = *ip++; |
1602 | + if (unlikely(length > (size_t)(length + s))) |
1603 | + goto _output_error; |
1604 | length += s; |
1605 | if (s == 255) |
1606 | continue; |
1607 | @@ -284,7 +288,7 @@ static int lz4_uncompress_unknownoutputsize(const char *source, char *dest, |
1608 | |
1609 | /* write overflow error detected */ |
1610 | _output_error: |
1611 | - return (int) (-(((char *) ip) - source)); |
1612 | + return -1; |
1613 | } |
1614 | |
1615 | int lz4_decompress(const unsigned char *src, size_t *src_len, |
1616 | diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c |
1617 | index 4f26ee46b51f..3d2d2c8108ca 100644 |
1618 | --- a/net/netfilter/ipvs/ip_vs_core.c |
1619 | +++ b/net/netfilter/ipvs/ip_vs_core.c |
1620 | @@ -1392,15 +1392,19 @@ ip_vs_in_icmp(struct sk_buff *skb, int *related, unsigned int hooknum) |
1621 | |
1622 | if (ipip) { |
1623 | __be32 info = ic->un.gateway; |
1624 | + __u8 type = ic->type; |
1625 | + __u8 code = ic->code; |
1626 | |
1627 | /* Update the MTU */ |
1628 | if (ic->type == ICMP_DEST_UNREACH && |
1629 | ic->code == ICMP_FRAG_NEEDED) { |
1630 | struct ip_vs_dest *dest = cp->dest; |
1631 | u32 mtu = ntohs(ic->un.frag.mtu); |
1632 | + __be16 frag_off = cih->frag_off; |
1633 | |
1634 | /* Strip outer IP and ICMP, go to IPIP header */ |
1635 | - __skb_pull(skb, ihl + sizeof(_icmph)); |
1636 | + if (pskb_pull(skb, ihl + sizeof(_icmph)) == NULL) |
1637 | + goto ignore_ipip; |
1638 | offset2 -= ihl + sizeof(_icmph); |
1639 | skb_reset_network_header(skb); |
1640 | IP_VS_DBG(12, "ICMP for IPIP %pI4->%pI4: mtu=%u\n", |
1641 | @@ -1408,7 +1412,7 @@ ip_vs_in_icmp(struct sk_buff *skb, int *related, unsigned int hooknum) |
1642 | ipv4_update_pmtu(skb, dev_net(skb->dev), |
1643 | mtu, 0, 0, 0, 0); |
1644 | /* Client uses PMTUD? */ |
1645 | - if (!(cih->frag_off & htons(IP_DF))) |
1646 | + if (!(frag_off & htons(IP_DF))) |
1647 | goto ignore_ipip; |
1648 | /* Prefer the resulting PMTU */ |
1649 | if (dest) { |
1650 | @@ -1427,12 +1431,13 @@ ip_vs_in_icmp(struct sk_buff *skb, int *related, unsigned int hooknum) |
1651 | /* Strip outer IP, ICMP and IPIP, go to IP header of |
1652 | * original request. |
1653 | */ |
1654 | - __skb_pull(skb, offset2); |
1655 | + if (pskb_pull(skb, offset2) == NULL) |
1656 | + goto ignore_ipip; |
1657 | skb_reset_network_header(skb); |
1658 | IP_VS_DBG(12, "Sending ICMP for %pI4->%pI4: t=%u, c=%u, i=%u\n", |
1659 | &ip_hdr(skb)->saddr, &ip_hdr(skb)->daddr, |
1660 | - ic->type, ic->code, ntohl(info)); |
1661 | - icmp_send(skb, ic->type, ic->code, info); |
1662 | + type, code, ntohl(info)); |
1663 | + icmp_send(skb, type, code, info); |
1664 | /* ICMP can be shorter but anyways, account it */ |
1665 | ip_vs_out_stats(cp, skb); |
1666 | |
1667 | diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c |
1668 | index 06c6ff0cb911..a4acaf2bcf18 100644 |
1669 | --- a/net/sunrpc/svc_xprt.c |
1670 | +++ b/net/sunrpc/svc_xprt.c |
1671 | @@ -730,6 +730,8 @@ static int svc_handle_xprt(struct svc_rqst *rqstp, struct svc_xprt *xprt) |
1672 | newxpt = xprt->xpt_ops->xpo_accept(xprt); |
1673 | if (newxpt) |
1674 | svc_add_new_temp_xprt(serv, newxpt); |
1675 | + else |
1676 | + module_put(xprt->xpt_class->xcl_owner); |
1677 | } else if (xprt->xpt_ops->xpo_has_wspace(xprt)) { |
1678 | /* XPT_DATA|XPT_DEFERRED case: */ |
1679 | dprintk("svc: server %p, pool %u, transport %p, inuse=%d\n", |
1680 | diff --git a/scripts/recordmcount.h b/scripts/recordmcount.h |
1681 | index 9d1421e63ff8..49b582a225b0 100644 |
1682 | --- a/scripts/recordmcount.h |
1683 | +++ b/scripts/recordmcount.h |
1684 | @@ -163,11 +163,11 @@ static int mcount_adjust = 0; |
1685 | |
1686 | static int MIPS_is_fake_mcount(Elf_Rel const *rp) |
1687 | { |
1688 | - static Elf_Addr old_r_offset; |
1689 | + static Elf_Addr old_r_offset = ~(Elf_Addr)0; |
1690 | Elf_Addr current_r_offset = _w(rp->r_offset); |
1691 | int is_fake; |
1692 | |
1693 | - is_fake = old_r_offset && |
1694 | + is_fake = (old_r_offset != ~(Elf_Addr)0) && |
1695 | (current_r_offset - old_r_offset == MIPS_FAKEMCOUNT_OFFSET); |
1696 | old_r_offset = current_r_offset; |
1697 | |
1698 | diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c |
1699 | index ce5b339d9333..3abfe2a642ec 100644 |
1700 | --- a/sound/pci/hda/patch_hdmi.c |
1701 | +++ b/sound/pci/hda/patch_hdmi.c |
1702 | @@ -2165,7 +2165,7 @@ static int generic_hdmi_resume(struct hda_codec *codec) |
1703 | struct hdmi_spec *spec = codec->spec; |
1704 | int pin_idx; |
1705 | |
1706 | - generic_hdmi_init(codec); |
1707 | + codec->patch_ops.init(codec); |
1708 | snd_hda_codec_resume_amp(codec); |
1709 | snd_hda_codec_resume_cache(codec); |
1710 | |
1711 | diff --git a/sound/usb/card.c b/sound/usb/card.c |
1712 | index d979050e6a6a..af1956042c9e 100644 |
1713 | --- a/sound/usb/card.c |
1714 | +++ b/sound/usb/card.c |
1715 | @@ -304,6 +304,11 @@ static int snd_usb_create_streams(struct snd_usb_audio *chip, int ctrlif) |
1716 | |
1717 | static int snd_usb_audio_free(struct snd_usb_audio *chip) |
1718 | { |
1719 | + struct list_head *p, *n; |
1720 | + |
1721 | + list_for_each_safe(p, n, &chip->ep_list) |
1722 | + snd_usb_endpoint_free(p); |
1723 | + |
1724 | mutex_destroy(&chip->mutex); |
1725 | kfree(chip); |
1726 | return 0; |
1727 | @@ -580,7 +585,7 @@ static void snd_usb_audio_disconnect(struct usb_device *dev, |
1728 | struct snd_usb_audio *chip) |
1729 | { |
1730 | struct snd_card *card; |
1731 | - struct list_head *p, *n; |
1732 | + struct list_head *p; |
1733 | |
1734 | if (chip == (void *)-1L) |
1735 | return; |
1736 | @@ -593,14 +598,16 @@ static void snd_usb_audio_disconnect(struct usb_device *dev, |
1737 | mutex_lock(®ister_mutex); |
1738 | chip->num_interfaces--; |
1739 | if (chip->num_interfaces <= 0) { |
1740 | + struct snd_usb_endpoint *ep; |
1741 | + |
1742 | snd_card_disconnect(card); |
1743 | /* release the pcm resources */ |
1744 | list_for_each(p, &chip->pcm_list) { |
1745 | snd_usb_stream_disconnect(p); |
1746 | } |
1747 | /* release the endpoint resources */ |
1748 | - list_for_each_safe(p, n, &chip->ep_list) { |
1749 | - snd_usb_endpoint_free(p); |
1750 | + list_for_each_entry(ep, &chip->ep_list, list) { |
1751 | + snd_usb_endpoint_release(ep); |
1752 | } |
1753 | /* release the midi resources */ |
1754 | list_for_each(p, &chip->midi_list) { |
1755 | diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c |
1756 | index 814430fec6a2..105ece3c14e3 100644 |
1757 | --- a/sound/usb/endpoint.c |
1758 | +++ b/sound/usb/endpoint.c |
1759 | @@ -981,19 +981,30 @@ void snd_usb_endpoint_deactivate(struct snd_usb_endpoint *ep) |
1760 | } |
1761 | |
1762 | /** |
1763 | + * snd_usb_endpoint_release: Tear down an snd_usb_endpoint |
1764 | + * |
1765 | + * @ep: the endpoint to release |
1766 | + * |
1767 | + * This function does not care for the endpoint's use count but will tear |
1768 | + * down all the streaming URBs immediately. |
1769 | + */ |
1770 | +void snd_usb_endpoint_release(struct snd_usb_endpoint *ep) |
1771 | +{ |
1772 | + release_urbs(ep, 1); |
1773 | +} |
1774 | + |
1775 | +/** |
1776 | * snd_usb_endpoint_free: Free the resources of an snd_usb_endpoint |
1777 | * |
1778 | * @ep: the list header of the endpoint to free |
1779 | * |
1780 | - * This function does not care for the endpoint's use count but will tear |
1781 | - * down all the streaming URBs immediately and free all resources. |
1782 | + * This free all resources of the given ep. |
1783 | */ |
1784 | void snd_usb_endpoint_free(struct list_head *head) |
1785 | { |
1786 | struct snd_usb_endpoint *ep; |
1787 | |
1788 | ep = list_entry(head, struct snd_usb_endpoint, list); |
1789 | - release_urbs(ep, 1); |
1790 | kfree(ep); |
1791 | } |
1792 | |
1793 | diff --git a/sound/usb/endpoint.h b/sound/usb/endpoint.h |
1794 | index 1c7e8ee48abc..e61ee5c356a3 100644 |
1795 | --- a/sound/usb/endpoint.h |
1796 | +++ b/sound/usb/endpoint.h |
1797 | @@ -23,6 +23,7 @@ void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep); |
1798 | void snd_usb_endpoint_sync_pending_stop(struct snd_usb_endpoint *ep); |
1799 | int snd_usb_endpoint_activate(struct snd_usb_endpoint *ep); |
1800 | void snd_usb_endpoint_deactivate(struct snd_usb_endpoint *ep); |
1801 | +void snd_usb_endpoint_release(struct snd_usb_endpoint *ep); |
1802 | void snd_usb_endpoint_free(struct list_head *head); |
1803 | |
1804 | int snd_usb_endpoint_implicit_feedback_sink(struct snd_usb_endpoint *ep); |