Annotation of /trunk/kernel-alx/patches-4.4/0130-4.4.31-all-fixes.patch
Parent Directory | Revision Log
Revision 2866 -
(hide annotations)
(download)
Mon Mar 27 13:49:10 2017 UTC (7 years, 6 months ago) by niro
File size: 60758 byte(s)
Mon Mar 27 13:49:10 2017 UTC (7 years, 6 months ago) by niro
File size: 60758 byte(s)
linux-4.4.31
1 | niro | 2866 | diff --git a/Makefile b/Makefile |
2 | index 98239d56924c..7c6f28e7a2f6 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 4 | ||
7 | PATCHLEVEL = 4 | ||
8 | -SUBLEVEL = 30 | ||
9 | +SUBLEVEL = 31 | ||
10 | EXTRAVERSION = | ||
11 | NAME = Blurry Fish Butt | ||
12 | |||
13 | @@ -617,6 +617,7 @@ include arch/$(SRCARCH)/Makefile | ||
14 | |||
15 | KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks,) | ||
16 | KBUILD_CFLAGS += $(call cc-disable-warning,maybe-uninitialized,) | ||
17 | +KBUILD_CFLAGS += $(call cc-disable-warning,frame-address,) | ||
18 | |||
19 | ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE | ||
20 | KBUILD_CFLAGS += -Os | ||
21 | diff --git a/arch/arm/include/asm/floppy.h b/arch/arm/include/asm/floppy.h | ||
22 | index f4882553fbb0..85a34cc8316a 100644 | ||
23 | --- a/arch/arm/include/asm/floppy.h | ||
24 | +++ b/arch/arm/include/asm/floppy.h | ||
25 | @@ -17,7 +17,7 @@ | ||
26 | |||
27 | #define fd_outb(val,port) \ | ||
28 | do { \ | ||
29 | - if ((port) == FD_DOR) \ | ||
30 | + if ((port) == (u32)FD_DOR) \ | ||
31 | fd_setdor((val)); \ | ||
32 | else \ | ||
33 | outb((val),(port)); \ | ||
34 | diff --git a/arch/h8300/include/asm/thread_info.h b/arch/h8300/include/asm/thread_info.h | ||
35 | index b408fe660cf8..3cef06875f5c 100644 | ||
36 | --- a/arch/h8300/include/asm/thread_info.h | ||
37 | +++ b/arch/h8300/include/asm/thread_info.h | ||
38 | @@ -31,7 +31,6 @@ struct thread_info { | ||
39 | int cpu; /* cpu we're on */ | ||
40 | int preempt_count; /* 0 => preemptable, <0 => BUG */ | ||
41 | mm_segment_t addr_limit; | ||
42 | - struct restart_block restart_block; | ||
43 | }; | ||
44 | |||
45 | /* | ||
46 | @@ -44,9 +43,6 @@ struct thread_info { | ||
47 | .cpu = 0, \ | ||
48 | .preempt_count = INIT_PREEMPT_COUNT, \ | ||
49 | .addr_limit = KERNEL_DS, \ | ||
50 | - .restart_block = { \ | ||
51 | - .fn = do_no_restart_syscall, \ | ||
52 | - }, \ | ||
53 | } | ||
54 | |||
55 | #define init_thread_info (init_thread_union.thread_info) | ||
56 | diff --git a/arch/h8300/kernel/signal.c b/arch/h8300/kernel/signal.c | ||
57 | index 380fffd081b2..036ad04edd2d 100644 | ||
58 | --- a/arch/h8300/kernel/signal.c | ||
59 | +++ b/arch/h8300/kernel/signal.c | ||
60 | @@ -79,7 +79,7 @@ restore_sigcontext(struct sigcontext *usc, int *pd0) | ||
61 | unsigned int er0; | ||
62 | |||
63 | /* Always make any pending restarted system calls return -EINTR */ | ||
64 | - current_thread_info()->restart_block.fn = do_no_restart_syscall; | ||
65 | + current->restart_block.fn = do_no_restart_syscall; | ||
66 | |||
67 | /* restore passed registers */ | ||
68 | #define COPY(r) do { err |= get_user(regs->r, &usc->sc_##r); } while (0) | ||
69 | diff --git a/arch/mips/kvm/emulate.c b/arch/mips/kvm/emulate.c | ||
70 | index 3251b206e55a..bbe56871245c 100644 | ||
71 | --- a/arch/mips/kvm/emulate.c | ||
72 | +++ b/arch/mips/kvm/emulate.c | ||
73 | @@ -752,15 +752,15 @@ enum emulation_result kvm_mips_emul_eret(struct kvm_vcpu *vcpu) | ||
74 | struct mips_coproc *cop0 = vcpu->arch.cop0; | ||
75 | enum emulation_result er = EMULATE_DONE; | ||
76 | |||
77 | - if (kvm_read_c0_guest_status(cop0) & ST0_EXL) { | ||
78 | + if (kvm_read_c0_guest_status(cop0) & ST0_ERL) { | ||
79 | + kvm_clear_c0_guest_status(cop0, ST0_ERL); | ||
80 | + vcpu->arch.pc = kvm_read_c0_guest_errorepc(cop0); | ||
81 | + } else if (kvm_read_c0_guest_status(cop0) & ST0_EXL) { | ||
82 | kvm_debug("[%#lx] ERET to %#lx\n", vcpu->arch.pc, | ||
83 | kvm_read_c0_guest_epc(cop0)); | ||
84 | kvm_clear_c0_guest_status(cop0, ST0_EXL); | ||
85 | vcpu->arch.pc = kvm_read_c0_guest_epc(cop0); | ||
86 | |||
87 | - } else if (kvm_read_c0_guest_status(cop0) & ST0_ERL) { | ||
88 | - kvm_clear_c0_guest_status(cop0, ST0_ERL); | ||
89 | - vcpu->arch.pc = kvm_read_c0_guest_errorepc(cop0); | ||
90 | } else { | ||
91 | kvm_err("[%#lx] ERET when MIPS_SR_EXL|MIPS_SR_ERL == 0\n", | ||
92 | vcpu->arch.pc); | ||
93 | diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S | ||
94 | index fbafa0d0e2bf..a86b19fccb63 100644 | ||
95 | --- a/arch/parisc/kernel/syscall.S | ||
96 | +++ b/arch/parisc/kernel/syscall.S | ||
97 | @@ -106,8 +106,6 @@ linux_gateway_entry: | ||
98 | mtsp %r0,%sr4 /* get kernel space into sr4 */ | ||
99 | mtsp %r0,%sr5 /* get kernel space into sr5 */ | ||
100 | mtsp %r0,%sr6 /* get kernel space into sr6 */ | ||
101 | - mfsp %sr7,%r1 /* save user sr7 */ | ||
102 | - mtsp %r1,%sr3 /* and store it in sr3 */ | ||
103 | |||
104 | #ifdef CONFIG_64BIT | ||
105 | /* for now we can *always* set the W bit on entry to the syscall | ||
106 | @@ -133,6 +131,14 @@ linux_gateway_entry: | ||
107 | depdi 0, 31, 32, %r21 | ||
108 | 1: | ||
109 | #endif | ||
110 | + | ||
111 | + /* We use a rsm/ssm pair to prevent sr3 from being clobbered | ||
112 | + * by external interrupts. | ||
113 | + */ | ||
114 | + mfsp %sr7,%r1 /* save user sr7 */ | ||
115 | + rsm PSW_SM_I, %r0 /* disable interrupts */ | ||
116 | + mtsp %r1,%sr3 /* and store it in sr3 */ | ||
117 | + | ||
118 | mfctl %cr30,%r1 | ||
119 | xor %r1,%r30,%r30 /* ye olde xor trick */ | ||
120 | xor %r1,%r30,%r1 | ||
121 | @@ -147,6 +153,7 @@ linux_gateway_entry: | ||
122 | */ | ||
123 | |||
124 | mtsp %r0,%sr7 /* get kernel space into sr7 */ | ||
125 | + ssm PSW_SM_I, %r0 /* enable interrupts */ | ||
126 | STREGM %r1,FRAME_SIZE(%r30) /* save r1 (usp) here for now */ | ||
127 | mfctl %cr30,%r1 /* get task ptr in %r1 */ | ||
128 | LDREG TI_TASK(%r1),%r1 | ||
129 | diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c | ||
130 | index 737c0d0b53ac..b38fd081b222 100644 | ||
131 | --- a/arch/powerpc/kernel/ptrace.c | ||
132 | +++ b/arch/powerpc/kernel/ptrace.c | ||
133 | @@ -376,7 +376,7 @@ static int fpr_get(struct task_struct *target, const struct user_regset *regset, | ||
134 | |||
135 | #else | ||
136 | BUILD_BUG_ON(offsetof(struct thread_fp_state, fpscr) != | ||
137 | - offsetof(struct thread_fp_state, fpr[32][0])); | ||
138 | + offsetof(struct thread_fp_state, fpr[32])); | ||
139 | |||
140 | return user_regset_copyout(&pos, &count, &kbuf, &ubuf, | ||
141 | &target->thread.fp_state, 0, -1); | ||
142 | @@ -404,7 +404,7 @@ static int fpr_set(struct task_struct *target, const struct user_regset *regset, | ||
143 | return 0; | ||
144 | #else | ||
145 | BUILD_BUG_ON(offsetof(struct thread_fp_state, fpscr) != | ||
146 | - offsetof(struct thread_fp_state, fpr[32][0])); | ||
147 | + offsetof(struct thread_fp_state, fpr[32])); | ||
148 | |||
149 | return user_regset_copyin(&pos, &count, &kbuf, &ubuf, | ||
150 | &target->thread.fp_state, 0, -1); | ||
151 | diff --git a/arch/x86/include/asm/uaccess.h b/arch/x86/include/asm/uaccess.h | ||
152 | index 09b1b0ab94b7..b8c75f3aade8 100644 | ||
153 | --- a/arch/x86/include/asm/uaccess.h | ||
154 | +++ b/arch/x86/include/asm/uaccess.h | ||
155 | @@ -332,7 +332,7 @@ do { \ | ||
156 | #define __get_user_asm_u64(x, ptr, retval, errret) \ | ||
157 | __get_user_asm(x, ptr, retval, "q", "", "=r", errret) | ||
158 | #define __get_user_asm_ex_u64(x, ptr) \ | ||
159 | - __get_user_asm_ex(x, ptr, "q", "", "=r") | ||
160 | + __get_user_asm_ex(x, ptr, "q", "", "=&r") | ||
161 | #endif | ||
162 | |||
163 | #define __get_user_size(x, ptr, size, retval, errret) \ | ||
164 | @@ -375,13 +375,13 @@ do { \ | ||
165 | __chk_user_ptr(ptr); \ | ||
166 | switch (size) { \ | ||
167 | case 1: \ | ||
168 | - __get_user_asm_ex(x, ptr, "b", "b", "=q"); \ | ||
169 | + __get_user_asm_ex(x, ptr, "b", "b", "=&q"); \ | ||
170 | break; \ | ||
171 | case 2: \ | ||
172 | - __get_user_asm_ex(x, ptr, "w", "w", "=r"); \ | ||
173 | + __get_user_asm_ex(x, ptr, "w", "w", "=&r"); \ | ||
174 | break; \ | ||
175 | case 4: \ | ||
176 | - __get_user_asm_ex(x, ptr, "l", "k", "=r"); \ | ||
177 | + __get_user_asm_ex(x, ptr, "l", "k", "=&r"); \ | ||
178 | break; \ | ||
179 | case 8: \ | ||
180 | __get_user_asm_ex_u64(x, ptr); \ | ||
181 | @@ -395,7 +395,7 @@ do { \ | ||
182 | asm volatile("1: mov"itype" %1,%"rtype"0\n" \ | ||
183 | "2:\n" \ | ||
184 | _ASM_EXTABLE_EX(1b, 2b) \ | ||
185 | - : ltype(x) : "m" (__m(addr))) | ||
186 | + : ltype(x) : "m" (__m(addr)), "0" (0)) | ||
187 | |||
188 | #define __put_user_nocheck(x, ptr, size) \ | ||
189 | ({ \ | ||
190 | diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c | ||
191 | index b9b09fec173b..5fa652c16a50 100644 | ||
192 | --- a/arch/x86/kvm/emulate.c | ||
193 | +++ b/arch/x86/kvm/emulate.c | ||
194 | @@ -5033,7 +5033,7 @@ done_prefixes: | ||
195 | /* Decode and fetch the destination operand: register or memory. */ | ||
196 | rc = decode_operand(ctxt, &ctxt->dst, (ctxt->d >> DstShift) & OpMask); | ||
197 | |||
198 | - if (ctxt->rip_relative) | ||
199 | + if (ctxt->rip_relative && likely(ctxt->memopp)) | ||
200 | ctxt->memopp->addr.mem.ea = address_mask(ctxt, | ||
201 | ctxt->memopp->addr.mem.ea + ctxt->_eip); | ||
202 | |||
203 | diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c | ||
204 | index d7cb9577fa31..685ef431a41d 100644 | ||
205 | --- a/arch/x86/kvm/x86.c | ||
206 | +++ b/arch/x86/kvm/x86.c | ||
207 | @@ -7252,10 +7252,12 @@ void kvm_put_guest_fpu(struct kvm_vcpu *vcpu) | ||
208 | |||
209 | void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu) | ||
210 | { | ||
211 | + void *wbinvd_dirty_mask = vcpu->arch.wbinvd_dirty_mask; | ||
212 | + | ||
213 | kvmclock_reset(vcpu); | ||
214 | |||
215 | - free_cpumask_var(vcpu->arch.wbinvd_dirty_mask); | ||
216 | kvm_x86_ops->vcpu_free(vcpu); | ||
217 | + free_cpumask_var(wbinvd_dirty_mask); | ||
218 | } | ||
219 | |||
220 | struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, | ||
221 | diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c | ||
222 | index cb5e266a8bf7..1e56ff583459 100644 | ||
223 | --- a/arch/x86/xen/mmu.c | ||
224 | +++ b/arch/x86/xen/mmu.c | ||
225 | @@ -1113,7 +1113,7 @@ static void __init xen_cleanhighmap(unsigned long vaddr, | ||
226 | |||
227 | /* NOTE: The loop is more greedy than the cleanup_highmap variant. | ||
228 | * We include the PMD passed in on _both_ boundaries. */ | ||
229 | - for (; vaddr <= vaddr_end && (pmd < (level2_kernel_pgt + PAGE_SIZE)); | ||
230 | + for (; vaddr <= vaddr_end && (pmd < (level2_kernel_pgt + PTRS_PER_PMD)); | ||
231 | pmd++, vaddr += PMD_SIZE) { | ||
232 | if (pmd_none(*pmd)) | ||
233 | continue; | ||
234 | diff --git a/drivers/android/binder.c b/drivers/android/binder.c | ||
235 | index 7d00b7a015ea..47ddfefe2443 100644 | ||
236 | --- a/drivers/android/binder.c | ||
237 | +++ b/drivers/android/binder.c | ||
238 | @@ -1003,7 +1003,7 @@ static int binder_dec_node(struct binder_node *node, int strong, int internal) | ||
239 | |||
240 | |||
241 | static struct binder_ref *binder_get_ref(struct binder_proc *proc, | ||
242 | - uint32_t desc) | ||
243 | + u32 desc, bool need_strong_ref) | ||
244 | { | ||
245 | struct rb_node *n = proc->refs_by_desc.rb_node; | ||
246 | struct binder_ref *ref; | ||
247 | @@ -1011,12 +1011,16 @@ static struct binder_ref *binder_get_ref(struct binder_proc *proc, | ||
248 | while (n) { | ||
249 | ref = rb_entry(n, struct binder_ref, rb_node_desc); | ||
250 | |||
251 | - if (desc < ref->desc) | ||
252 | + if (desc < ref->desc) { | ||
253 | n = n->rb_left; | ||
254 | - else if (desc > ref->desc) | ||
255 | + } else if (desc > ref->desc) { | ||
256 | n = n->rb_right; | ||
257 | - else | ||
258 | + } else if (need_strong_ref && !ref->strong) { | ||
259 | + binder_user_error("tried to use weak ref as strong ref\n"); | ||
260 | + return NULL; | ||
261 | + } else { | ||
262 | return ref; | ||
263 | + } | ||
264 | } | ||
265 | return NULL; | ||
266 | } | ||
267 | @@ -1286,7 +1290,10 @@ static void binder_transaction_buffer_release(struct binder_proc *proc, | ||
268 | } break; | ||
269 | case BINDER_TYPE_HANDLE: | ||
270 | case BINDER_TYPE_WEAK_HANDLE: { | ||
271 | - struct binder_ref *ref = binder_get_ref(proc, fp->handle); | ||
272 | + struct binder_ref *ref; | ||
273 | + | ||
274 | + ref = binder_get_ref(proc, fp->handle, | ||
275 | + fp->type == BINDER_TYPE_HANDLE); | ||
276 | |||
277 | if (ref == NULL) { | ||
278 | pr_err("transaction release %d bad handle %d\n", | ||
279 | @@ -1380,7 +1387,7 @@ static void binder_transaction(struct binder_proc *proc, | ||
280 | if (tr->target.handle) { | ||
281 | struct binder_ref *ref; | ||
282 | |||
283 | - ref = binder_get_ref(proc, tr->target.handle); | ||
284 | + ref = binder_get_ref(proc, tr->target.handle, true); | ||
285 | if (ref == NULL) { | ||
286 | binder_user_error("%d:%d got transaction to invalid handle\n", | ||
287 | proc->pid, thread->pid); | ||
288 | @@ -1571,7 +1578,9 @@ static void binder_transaction(struct binder_proc *proc, | ||
289 | fp->type = BINDER_TYPE_HANDLE; | ||
290 | else | ||
291 | fp->type = BINDER_TYPE_WEAK_HANDLE; | ||
292 | + fp->binder = 0; | ||
293 | fp->handle = ref->desc; | ||
294 | + fp->cookie = 0; | ||
295 | binder_inc_ref(ref, fp->type == BINDER_TYPE_HANDLE, | ||
296 | &thread->todo); | ||
297 | |||
298 | @@ -1583,7 +1592,10 @@ static void binder_transaction(struct binder_proc *proc, | ||
299 | } break; | ||
300 | case BINDER_TYPE_HANDLE: | ||
301 | case BINDER_TYPE_WEAK_HANDLE: { | ||
302 | - struct binder_ref *ref = binder_get_ref(proc, fp->handle); | ||
303 | + struct binder_ref *ref; | ||
304 | + | ||
305 | + ref = binder_get_ref(proc, fp->handle, | ||
306 | + fp->type == BINDER_TYPE_HANDLE); | ||
307 | |||
308 | if (ref == NULL) { | ||
309 | binder_user_error("%d:%d got transaction with invalid handle, %d\n", | ||
310 | @@ -1618,7 +1630,9 @@ static void binder_transaction(struct binder_proc *proc, | ||
311 | return_error = BR_FAILED_REPLY; | ||
312 | goto err_binder_get_ref_for_node_failed; | ||
313 | } | ||
314 | + fp->binder = 0; | ||
315 | fp->handle = new_ref->desc; | ||
316 | + fp->cookie = 0; | ||
317 | binder_inc_ref(new_ref, fp->type == BINDER_TYPE_HANDLE, NULL); | ||
318 | trace_binder_transaction_ref_to_ref(t, ref, | ||
319 | new_ref); | ||
320 | @@ -1672,6 +1686,7 @@ static void binder_transaction(struct binder_proc *proc, | ||
321 | binder_debug(BINDER_DEBUG_TRANSACTION, | ||
322 | " fd %d -> %d\n", fp->handle, target_fd); | ||
323 | /* TODO: fput? */ | ||
324 | + fp->binder = 0; | ||
325 | fp->handle = target_fd; | ||
326 | } break; | ||
327 | |||
328 | @@ -1794,7 +1809,9 @@ static int binder_thread_write(struct binder_proc *proc, | ||
329 | ref->desc); | ||
330 | } | ||
331 | } else | ||
332 | - ref = binder_get_ref(proc, target); | ||
333 | + ref = binder_get_ref(proc, target, | ||
334 | + cmd == BC_ACQUIRE || | ||
335 | + cmd == BC_RELEASE); | ||
336 | if (ref == NULL) { | ||
337 | binder_user_error("%d:%d refcount change on invalid ref %d\n", | ||
338 | proc->pid, thread->pid, target); | ||
339 | @@ -1990,7 +2007,7 @@ static int binder_thread_write(struct binder_proc *proc, | ||
340 | if (get_user(cookie, (binder_uintptr_t __user *)ptr)) | ||
341 | return -EFAULT; | ||
342 | ptr += sizeof(binder_uintptr_t); | ||
343 | - ref = binder_get_ref(proc, target); | ||
344 | + ref = binder_get_ref(proc, target, false); | ||
345 | if (ref == NULL) { | ||
346 | binder_user_error("%d:%d %s invalid ref %d\n", | ||
347 | proc->pid, thread->pid, | ||
348 | diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c | ||
349 | index d2406fe25533..090183f812be 100644 | ||
350 | --- a/drivers/char/virtio_console.c | ||
351 | +++ b/drivers/char/virtio_console.c | ||
352 | @@ -1533,19 +1533,29 @@ static void remove_port_data(struct port *port) | ||
353 | spin_lock_irq(&port->inbuf_lock); | ||
354 | /* Remove unused data this port might have received. */ | ||
355 | discard_port_data(port); | ||
356 | + spin_unlock_irq(&port->inbuf_lock); | ||
357 | |||
358 | /* Remove buffers we queued up for the Host to send us data in. */ | ||
359 | - while ((buf = virtqueue_detach_unused_buf(port->in_vq))) | ||
360 | - free_buf(buf, true); | ||
361 | - spin_unlock_irq(&port->inbuf_lock); | ||
362 | + do { | ||
363 | + spin_lock_irq(&port->inbuf_lock); | ||
364 | + buf = virtqueue_detach_unused_buf(port->in_vq); | ||
365 | + spin_unlock_irq(&port->inbuf_lock); | ||
366 | + if (buf) | ||
367 | + free_buf(buf, true); | ||
368 | + } while (buf); | ||
369 | |||
370 | spin_lock_irq(&port->outvq_lock); | ||
371 | reclaim_consumed_buffers(port); | ||
372 | + spin_unlock_irq(&port->outvq_lock); | ||
373 | |||
374 | /* Free pending buffers from the out-queue. */ | ||
375 | - while ((buf = virtqueue_detach_unused_buf(port->out_vq))) | ||
376 | - free_buf(buf, true); | ||
377 | - spin_unlock_irq(&port->outvq_lock); | ||
378 | + do { | ||
379 | + spin_lock_irq(&port->outvq_lock); | ||
380 | + buf = virtqueue_detach_unused_buf(port->out_vq); | ||
381 | + spin_unlock_irq(&port->outvq_lock); | ||
382 | + if (buf) | ||
383 | + free_buf(buf, true); | ||
384 | + } while (buf); | ||
385 | } | ||
386 | |||
387 | /* | ||
388 | diff --git a/drivers/firewire/net.c b/drivers/firewire/net.c | ||
389 | index f4ea80d602f7..b9d2f76a0cf7 100644 | ||
390 | --- a/drivers/firewire/net.c | ||
391 | +++ b/drivers/firewire/net.c | ||
392 | @@ -73,13 +73,13 @@ struct rfc2734_header { | ||
393 | |||
394 | #define fwnet_get_hdr_lf(h) (((h)->w0 & 0xc0000000) >> 30) | ||
395 | #define fwnet_get_hdr_ether_type(h) (((h)->w0 & 0x0000ffff)) | ||
396 | -#define fwnet_get_hdr_dg_size(h) (((h)->w0 & 0x0fff0000) >> 16) | ||
397 | +#define fwnet_get_hdr_dg_size(h) ((((h)->w0 & 0x0fff0000) >> 16) + 1) | ||
398 | #define fwnet_get_hdr_fg_off(h) (((h)->w0 & 0x00000fff)) | ||
399 | #define fwnet_get_hdr_dgl(h) (((h)->w1 & 0xffff0000) >> 16) | ||
400 | |||
401 | -#define fwnet_set_hdr_lf(lf) ((lf) << 30) | ||
402 | +#define fwnet_set_hdr_lf(lf) ((lf) << 30) | ||
403 | #define fwnet_set_hdr_ether_type(et) (et) | ||
404 | -#define fwnet_set_hdr_dg_size(dgs) ((dgs) << 16) | ||
405 | +#define fwnet_set_hdr_dg_size(dgs) (((dgs) - 1) << 16) | ||
406 | #define fwnet_set_hdr_fg_off(fgo) (fgo) | ||
407 | |||
408 | #define fwnet_set_hdr_dgl(dgl) ((dgl) << 16) | ||
409 | @@ -578,6 +578,9 @@ static int fwnet_incoming_packet(struct fwnet_device *dev, __be32 *buf, int len, | ||
410 | int retval; | ||
411 | u16 ether_type; | ||
412 | |||
413 | + if (len <= RFC2374_UNFRAG_HDR_SIZE) | ||
414 | + return 0; | ||
415 | + | ||
416 | hdr.w0 = be32_to_cpu(buf[0]); | ||
417 | lf = fwnet_get_hdr_lf(&hdr); | ||
418 | if (lf == RFC2374_HDR_UNFRAG) { | ||
419 | @@ -602,7 +605,12 @@ static int fwnet_incoming_packet(struct fwnet_device *dev, __be32 *buf, int len, | ||
420 | return fwnet_finish_incoming_packet(net, skb, source_node_id, | ||
421 | is_broadcast, ether_type); | ||
422 | } | ||
423 | + | ||
424 | /* A datagram fragment has been received, now the fun begins. */ | ||
425 | + | ||
426 | + if (len <= RFC2374_FRAG_HDR_SIZE) | ||
427 | + return 0; | ||
428 | + | ||
429 | hdr.w1 = ntohl(buf[1]); | ||
430 | buf += 2; | ||
431 | len -= RFC2374_FRAG_HDR_SIZE; | ||
432 | @@ -614,7 +622,10 @@ static int fwnet_incoming_packet(struct fwnet_device *dev, __be32 *buf, int len, | ||
433 | fg_off = fwnet_get_hdr_fg_off(&hdr); | ||
434 | } | ||
435 | datagram_label = fwnet_get_hdr_dgl(&hdr); | ||
436 | - dg_size = fwnet_get_hdr_dg_size(&hdr); /* ??? + 1 */ | ||
437 | + dg_size = fwnet_get_hdr_dg_size(&hdr); | ||
438 | + | ||
439 | + if (fg_off + len > dg_size) | ||
440 | + return 0; | ||
441 | |||
442 | spin_lock_irqsave(&dev->lock, flags); | ||
443 | |||
444 | @@ -722,6 +733,22 @@ static void fwnet_receive_packet(struct fw_card *card, struct fw_request *r, | ||
445 | fw_send_response(card, r, rcode); | ||
446 | } | ||
447 | |||
448 | +static int gasp_source_id(__be32 *p) | ||
449 | +{ | ||
450 | + return be32_to_cpu(p[0]) >> 16; | ||
451 | +} | ||
452 | + | ||
453 | +static u32 gasp_specifier_id(__be32 *p) | ||
454 | +{ | ||
455 | + return (be32_to_cpu(p[0]) & 0xffff) << 8 | | ||
456 | + (be32_to_cpu(p[1]) & 0xff000000) >> 24; | ||
457 | +} | ||
458 | + | ||
459 | +static u32 gasp_version(__be32 *p) | ||
460 | +{ | ||
461 | + return be32_to_cpu(p[1]) & 0xffffff; | ||
462 | +} | ||
463 | + | ||
464 | static void fwnet_receive_broadcast(struct fw_iso_context *context, | ||
465 | u32 cycle, size_t header_length, void *header, void *data) | ||
466 | { | ||
467 | @@ -731,9 +758,6 @@ static void fwnet_receive_broadcast(struct fw_iso_context *context, | ||
468 | __be32 *buf_ptr; | ||
469 | int retval; | ||
470 | u32 length; | ||
471 | - u16 source_node_id; | ||
472 | - u32 specifier_id; | ||
473 | - u32 ver; | ||
474 | unsigned long offset; | ||
475 | unsigned long flags; | ||
476 | |||
477 | @@ -750,22 +774,17 @@ static void fwnet_receive_broadcast(struct fw_iso_context *context, | ||
478 | |||
479 | spin_unlock_irqrestore(&dev->lock, flags); | ||
480 | |||
481 | - specifier_id = (be32_to_cpu(buf_ptr[0]) & 0xffff) << 8 | ||
482 | - | (be32_to_cpu(buf_ptr[1]) & 0xff000000) >> 24; | ||
483 | - ver = be32_to_cpu(buf_ptr[1]) & 0xffffff; | ||
484 | - source_node_id = be32_to_cpu(buf_ptr[0]) >> 16; | ||
485 | - | ||
486 | - if (specifier_id == IANA_SPECIFIER_ID && | ||
487 | - (ver == RFC2734_SW_VERSION | ||
488 | + if (length > IEEE1394_GASP_HDR_SIZE && | ||
489 | + gasp_specifier_id(buf_ptr) == IANA_SPECIFIER_ID && | ||
490 | + (gasp_version(buf_ptr) == RFC2734_SW_VERSION | ||
491 | #if IS_ENABLED(CONFIG_IPV6) | ||
492 | - || ver == RFC3146_SW_VERSION | ||
493 | + || gasp_version(buf_ptr) == RFC3146_SW_VERSION | ||
494 | #endif | ||
495 | - )) { | ||
496 | - buf_ptr += 2; | ||
497 | - length -= IEEE1394_GASP_HDR_SIZE; | ||
498 | - fwnet_incoming_packet(dev, buf_ptr, length, source_node_id, | ||
499 | + )) | ||
500 | + fwnet_incoming_packet(dev, buf_ptr + 2, | ||
501 | + length - IEEE1394_GASP_HDR_SIZE, | ||
502 | + gasp_source_id(buf_ptr), | ||
503 | context->card->generation, true); | ||
504 | - } | ||
505 | |||
506 | packet.payload_length = dev->rcv_buffer_size; | ||
507 | packet.interrupt = 1; | ||
508 | diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c | ||
509 | index 2485fb652716..7cb2815e815e 100644 | ||
510 | --- a/drivers/gpu/drm/drm_dp_mst_topology.c | ||
511 | +++ b/drivers/gpu/drm/drm_dp_mst_topology.c | ||
512 | @@ -909,6 +909,7 @@ static void drm_dp_destroy_port(struct kref *kref) | ||
513 | /* no need to clean up vcpi | ||
514 | * as if we have no connector we never setup a vcpi */ | ||
515 | drm_dp_port_teardown_pdt(port, port->pdt); | ||
516 | + port->pdt = DP_PEER_DEVICE_NONE; | ||
517 | } | ||
518 | kfree(port); | ||
519 | } | ||
520 | @@ -1154,7 +1155,9 @@ static void drm_dp_add_port(struct drm_dp_mst_branch *mstb, | ||
521 | drm_dp_put_port(port); | ||
522 | goto out; | ||
523 | } | ||
524 | - if (port->port_num >= DP_MST_LOGICAL_PORT_0) { | ||
525 | + if ((port->pdt == DP_PEER_DEVICE_DP_LEGACY_CONV || | ||
526 | + port->pdt == DP_PEER_DEVICE_SST_SINK) && | ||
527 | + port->port_num >= DP_MST_LOGICAL_PORT_0) { | ||
528 | port->cached_edid = drm_get_edid(port->connector, &port->aux.ddc); | ||
529 | drm_mode_connector_set_tile_property(port->connector); | ||
530 | } | ||
531 | @@ -2872,6 +2875,7 @@ static void drm_dp_destroy_connector_work(struct work_struct *work) | ||
532 | mgr->cbs->destroy_connector(mgr, port->connector); | ||
533 | |||
534 | drm_dp_port_teardown_pdt(port, port->pdt); | ||
535 | + port->pdt = DP_PEER_DEVICE_NONE; | ||
536 | |||
537 | if (!port->input && port->vcpi.vcpi > 0) { | ||
538 | drm_dp_mst_reset_vcpi_slots(mgr, port); | ||
539 | diff --git a/drivers/gpu/drm/exynos/exynos_drm_core.c b/drivers/gpu/drm/exynos/exynos_drm_core.c | ||
540 | index 7f55ba6771c6..011211e4167d 100644 | ||
541 | --- a/drivers/gpu/drm/exynos/exynos_drm_core.c | ||
542 | +++ b/drivers/gpu/drm/exynos/exynos_drm_core.c | ||
543 | @@ -101,7 +101,7 @@ int exynos_drm_subdrv_open(struct drm_device *dev, struct drm_file *file) | ||
544 | return 0; | ||
545 | |||
546 | err: | ||
547 | - list_for_each_entry_reverse(subdrv, &subdrv->list, list) { | ||
548 | + list_for_each_entry_continue_reverse(subdrv, &exynos_drm_subdrv_list, list) { | ||
549 | if (subdrv->close) | ||
550 | subdrv->close(dev, subdrv->dev, file); | ||
551 | } | ||
552 | diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c | ||
553 | index 158872eb78e4..a3a321208fd8 100644 | ||
554 | --- a/drivers/gpu/drm/radeon/ni.c | ||
555 | +++ b/drivers/gpu/drm/radeon/ni.c | ||
556 | @@ -1396,9 +1396,7 @@ static void cayman_pcie_gart_fini(struct radeon_device *rdev) | ||
557 | void cayman_cp_int_cntl_setup(struct radeon_device *rdev, | ||
558 | int ring, u32 cp_int_cntl) | ||
559 | { | ||
560 | - u32 srbm_gfx_cntl = RREG32(SRBM_GFX_CNTL) & ~3; | ||
561 | - | ||
562 | - WREG32(SRBM_GFX_CNTL, srbm_gfx_cntl | (ring & 3)); | ||
563 | + WREG32(SRBM_GFX_CNTL, RINGID(ring)); | ||
564 | WREG32(CP_INT_CNTL, cp_int_cntl); | ||
565 | } | ||
566 | |||
567 | diff --git a/drivers/gpu/drm/radeon/radeon_dp_auxch.c b/drivers/gpu/drm/radeon/radeon_dp_auxch.c | ||
568 | index db64e0062689..3b0c229d7dcd 100644 | ||
569 | --- a/drivers/gpu/drm/radeon/radeon_dp_auxch.c | ||
570 | +++ b/drivers/gpu/drm/radeon/radeon_dp_auxch.c | ||
571 | @@ -105,7 +105,7 @@ radeon_dp_aux_transfer_native(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg | ||
572 | |||
573 | tmp &= AUX_HPD_SEL(0x7); | ||
574 | tmp |= AUX_HPD_SEL(chan->rec.hpd); | ||
575 | - tmp |= AUX_EN | AUX_LS_READ_EN | AUX_HPD_DISCON(0x1); | ||
576 | + tmp |= AUX_EN | AUX_LS_READ_EN; | ||
577 | |||
578 | WREG32(AUX_CONTROL + aux_offset[instance], tmp); | ||
579 | |||
580 | diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c | ||
581 | index 472e0771832e..10191b935937 100644 | ||
582 | --- a/drivers/gpu/drm/radeon/si_dpm.c | ||
583 | +++ b/drivers/gpu/drm/radeon/si_dpm.c | ||
584 | @@ -2999,6 +2999,49 @@ static void si_apply_state_adjust_rules(struct radeon_device *rdev, | ||
585 | int i; | ||
586 | struct si_dpm_quirk *p = si_dpm_quirk_list; | ||
587 | |||
588 | + /* limit all SI kickers */ | ||
589 | + if (rdev->family == CHIP_PITCAIRN) { | ||
590 | + if ((rdev->pdev->revision == 0x81) || | ||
591 | + (rdev->pdev->device == 0x6810) || | ||
592 | + (rdev->pdev->device == 0x6811) || | ||
593 | + (rdev->pdev->device == 0x6816) || | ||
594 | + (rdev->pdev->device == 0x6817) || | ||
595 | + (rdev->pdev->device == 0x6806)) | ||
596 | + max_mclk = 120000; | ||
597 | + } else if (rdev->family == CHIP_VERDE) { | ||
598 | + if ((rdev->pdev->revision == 0x81) || | ||
599 | + (rdev->pdev->revision == 0x83) || | ||
600 | + (rdev->pdev->revision == 0x87) || | ||
601 | + (rdev->pdev->device == 0x6820) || | ||
602 | + (rdev->pdev->device == 0x6821) || | ||
603 | + (rdev->pdev->device == 0x6822) || | ||
604 | + (rdev->pdev->device == 0x6823) || | ||
605 | + (rdev->pdev->device == 0x682A) || | ||
606 | + (rdev->pdev->device == 0x682B)) { | ||
607 | + max_sclk = 75000; | ||
608 | + max_mclk = 80000; | ||
609 | + } | ||
610 | + } else if (rdev->family == CHIP_OLAND) { | ||
611 | + if ((rdev->pdev->revision == 0xC7) || | ||
612 | + (rdev->pdev->revision == 0x80) || | ||
613 | + (rdev->pdev->revision == 0x81) || | ||
614 | + (rdev->pdev->revision == 0x83) || | ||
615 | + (rdev->pdev->device == 0x6604) || | ||
616 | + (rdev->pdev->device == 0x6605)) { | ||
617 | + max_sclk = 75000; | ||
618 | + max_mclk = 80000; | ||
619 | + } | ||
620 | + } else if (rdev->family == CHIP_HAINAN) { | ||
621 | + if ((rdev->pdev->revision == 0x81) || | ||
622 | + (rdev->pdev->revision == 0x83) || | ||
623 | + (rdev->pdev->revision == 0xC3) || | ||
624 | + (rdev->pdev->device == 0x6664) || | ||
625 | + (rdev->pdev->device == 0x6665) || | ||
626 | + (rdev->pdev->device == 0x6667)) { | ||
627 | + max_sclk = 75000; | ||
628 | + max_mclk = 80000; | ||
629 | + } | ||
630 | + } | ||
631 | /* Apply dpm quirks */ | ||
632 | while (p && p->chip_device != 0) { | ||
633 | if (rdev->pdev->vendor == p->chip_vendor && | ||
634 | @@ -3011,16 +3054,6 @@ static void si_apply_state_adjust_rules(struct radeon_device *rdev, | ||
635 | } | ||
636 | ++p; | ||
637 | } | ||
638 | - /* limit mclk on all R7 370 parts for stability */ | ||
639 | - if (rdev->pdev->device == 0x6811 && | ||
640 | - rdev->pdev->revision == 0x81) | ||
641 | - max_mclk = 120000; | ||
642 | - /* limit sclk/mclk on Jet parts for stability */ | ||
643 | - if (rdev->pdev->device == 0x6665 && | ||
644 | - rdev->pdev->revision == 0xc3) { | ||
645 | - max_sclk = 75000; | ||
646 | - max_mclk = 80000; | ||
647 | - } | ||
648 | |||
649 | if (rps->vce_active) { | ||
650 | rps->evclk = rdev->pm.dpm.vce_states[rdev->pm.dpm.vce_level].evclk; | ||
651 | diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h | ||
652 | index 909ab0176ef2..e37030624165 100644 | ||
653 | --- a/drivers/hid/hid-ids.h | ||
654 | +++ b/drivers/hid/hid-ids.h | ||
655 | @@ -168,6 +168,7 @@ | ||
656 | #define USB_DEVICE_ID_ATEN_4PORTKVM 0x2205 | ||
657 | #define USB_DEVICE_ID_ATEN_4PORTKVMC 0x2208 | ||
658 | #define USB_DEVICE_ID_ATEN_CS682 0x2213 | ||
659 | +#define USB_DEVICE_ID_ATEN_CS692 0x8021 | ||
660 | |||
661 | #define USB_VENDOR_ID_ATMEL 0x03eb | ||
662 | #define USB_DEVICE_ID_ATMEL_MULTITOUCH 0x211c | ||
663 | diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c | ||
664 | index dc8e6adf95a4..6ca6ab00fa93 100644 | ||
665 | --- a/drivers/hid/usbhid/hid-quirks.c | ||
666 | +++ b/drivers/hid/usbhid/hid-quirks.c | ||
667 | @@ -61,6 +61,7 @@ static const struct hid_blacklist { | ||
668 | { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM, HID_QUIRK_NOGET }, | ||
669 | { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC, HID_QUIRK_NOGET }, | ||
670 | { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS682, HID_QUIRK_NOGET }, | ||
671 | + { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS692, HID_QUIRK_NOGET }, | ||
672 | { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FIGHTERSTICK, HID_QUIRK_NOGET }, | ||
673 | { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_COMBATSTICK, HID_QUIRK_NOGET }, | ||
674 | { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YOKE, HID_QUIRK_NOGET }, | ||
675 | diff --git a/drivers/hv/hv_util.c b/drivers/hv/hv_util.c | ||
676 | index 7994ec2e4151..41f5896224bd 100644 | ||
677 | --- a/drivers/hv/hv_util.c | ||
678 | +++ b/drivers/hv/hv_util.c | ||
679 | @@ -283,10 +283,14 @@ static void heartbeat_onchannelcallback(void *context) | ||
680 | u8 *hbeat_txf_buf = util_heartbeat.recv_buffer; | ||
681 | struct icmsg_negotiate *negop = NULL; | ||
682 | |||
683 | - vmbus_recvpacket(channel, hbeat_txf_buf, | ||
684 | - PAGE_SIZE, &recvlen, &requestid); | ||
685 | + while (1) { | ||
686 | + | ||
687 | + vmbus_recvpacket(channel, hbeat_txf_buf, | ||
688 | + PAGE_SIZE, &recvlen, &requestid); | ||
689 | + | ||
690 | + if (!recvlen) | ||
691 | + break; | ||
692 | |||
693 | - if (recvlen > 0) { | ||
694 | icmsghdrp = (struct icmsg_hdr *)&hbeat_txf_buf[ | ||
695 | sizeof(struct vmbuspipe_hdr)]; | ||
696 | |||
697 | diff --git a/drivers/i2c/busses/i2c-xgene-slimpro.c b/drivers/i2c/busses/i2c-xgene-slimpro.c | ||
698 | index 4233f5695352..3c38029e3fe9 100644 | ||
699 | --- a/drivers/i2c/busses/i2c-xgene-slimpro.c | ||
700 | +++ b/drivers/i2c/busses/i2c-xgene-slimpro.c | ||
701 | @@ -105,7 +105,7 @@ struct slimpro_i2c_dev { | ||
702 | struct mbox_chan *mbox_chan; | ||
703 | struct mbox_client mbox_client; | ||
704 | struct completion rd_complete; | ||
705 | - u8 dma_buffer[I2C_SMBUS_BLOCK_MAX]; | ||
706 | + u8 dma_buffer[I2C_SMBUS_BLOCK_MAX + 1]; /* dma_buffer[0] is used for length */ | ||
707 | u32 *resp_msg; | ||
708 | }; | ||
709 | |||
710 | diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c | ||
711 | index ba8eb087f224..d625167357cc 100644 | ||
712 | --- a/drivers/i2c/i2c-core.c | ||
713 | +++ b/drivers/i2c/i2c-core.c | ||
714 | @@ -1876,6 +1876,7 @@ int i2c_register_driver(struct module *owner, struct i2c_driver *driver) | ||
715 | /* add the driver to the list of i2c drivers in the driver core */ | ||
716 | driver->driver.owner = owner; | ||
717 | driver->driver.bus = &i2c_bus_type; | ||
718 | + INIT_LIST_HEAD(&driver->clients); | ||
719 | |||
720 | /* When registration returns, the driver core | ||
721 | * will have called probe() for all matching-but-unbound devices. | ||
722 | @@ -1886,7 +1887,6 @@ int i2c_register_driver(struct module *owner, struct i2c_driver *driver) | ||
723 | |||
724 | pr_debug("i2c-core: driver [%s] registered\n", driver->driver.name); | ||
725 | |||
726 | - INIT_LIST_HEAD(&driver->clients); | ||
727 | /* Walk the adapters that are already present */ | ||
728 | i2c_for_each_dev(driver, __process_new_driver); | ||
729 | |||
730 | diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h | ||
731 | index f4bfb4b2d50a..073246c7d163 100644 | ||
732 | --- a/drivers/input/serio/i8042-x86ia64io.h | ||
733 | +++ b/drivers/input/serio/i8042-x86ia64io.h | ||
734 | @@ -877,6 +877,13 @@ static const struct dmi_system_id __initconst i8042_dmi_kbdreset_table[] = { | ||
735 | DMI_MATCH(DMI_PRODUCT_NAME, "P34"), | ||
736 | }, | ||
737 | }, | ||
738 | + { | ||
739 | + /* Schenker XMG C504 - Elantech touchpad */ | ||
740 | + .matches = { | ||
741 | + DMI_MATCH(DMI_SYS_VENDOR, "XMG"), | ||
742 | + DMI_MATCH(DMI_PRODUCT_NAME, "C504"), | ||
743 | + }, | ||
744 | + }, | ||
745 | { } | ||
746 | }; | ||
747 | |||
748 | diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c | ||
749 | index f2a363a89629..115bd3846c3f 100644 | ||
750 | --- a/drivers/md/dm-raid1.c | ||
751 | +++ b/drivers/md/dm-raid1.c | ||
752 | @@ -1288,6 +1288,7 @@ static int mirror_end_io(struct dm_target *ti, struct bio *bio, int error) | ||
753 | |||
754 | dm_bio_restore(bd, bio); | ||
755 | bio_record->details.bi_bdev = NULL; | ||
756 | + bio->bi_error = 0; | ||
757 | |||
758 | queue_bio(ms, bio, rw); | ||
759 | return DM_ENDIO_INCOMPLETE; | ||
760 | diff --git a/drivers/md/dm.c b/drivers/md/dm.c | ||
761 | index 84aa8b1d0480..3384a3eef917 100644 | ||
762 | --- a/drivers/md/dm.c | ||
763 | +++ b/drivers/md/dm.c | ||
764 | @@ -2260,8 +2260,6 @@ static void cleanup_mapped_device(struct mapped_device *md) | ||
765 | if (md->bs) | ||
766 | bioset_free(md->bs); | ||
767 | |||
768 | - cleanup_srcu_struct(&md->io_barrier); | ||
769 | - | ||
770 | if (md->disk) { | ||
771 | spin_lock(&_minor_lock); | ||
772 | md->disk->private_data = NULL; | ||
773 | @@ -2273,6 +2271,8 @@ static void cleanup_mapped_device(struct mapped_device *md) | ||
774 | if (md->queue) | ||
775 | blk_cleanup_queue(md->queue); | ||
776 | |||
777 | + cleanup_srcu_struct(&md->io_barrier); | ||
778 | + | ||
779 | if (md->bdev) { | ||
780 | bdput(md->bdev); | ||
781 | md->bdev = NULL; | ||
782 | diff --git a/drivers/misc/genwqe/card_utils.c b/drivers/misc/genwqe/card_utils.c | ||
783 | index 222367cc8c81..524660510599 100644 | ||
784 | --- a/drivers/misc/genwqe/card_utils.c | ||
785 | +++ b/drivers/misc/genwqe/card_utils.c | ||
786 | @@ -352,17 +352,27 @@ int genwqe_alloc_sync_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl, | ||
787 | if (copy_from_user(sgl->lpage, user_addr + user_size - | ||
788 | sgl->lpage_size, sgl->lpage_size)) { | ||
789 | rc = -EFAULT; | ||
790 | - goto err_out1; | ||
791 | + goto err_out2; | ||
792 | } | ||
793 | } | ||
794 | return 0; | ||
795 | |||
796 | + err_out2: | ||
797 | + __genwqe_free_consistent(cd, PAGE_SIZE, sgl->lpage, | ||
798 | + sgl->lpage_dma_addr); | ||
799 | + sgl->lpage = NULL; | ||
800 | + sgl->lpage_dma_addr = 0; | ||
801 | err_out1: | ||
802 | __genwqe_free_consistent(cd, PAGE_SIZE, sgl->fpage, | ||
803 | sgl->fpage_dma_addr); | ||
804 | + sgl->fpage = NULL; | ||
805 | + sgl->fpage_dma_addr = 0; | ||
806 | err_out: | ||
807 | __genwqe_free_consistent(cd, sgl->sgl_size, sgl->sgl, | ||
808 | sgl->sgl_dma_addr); | ||
809 | + sgl->sgl = NULL; | ||
810 | + sgl->sgl_dma_addr = 0; | ||
811 | + sgl->sgl_size = 0; | ||
812 | return -ENOMEM; | ||
813 | } | ||
814 | |||
815 | diff --git a/drivers/misc/mei/hw-txe.c b/drivers/misc/mei/hw-txe.c | ||
816 | index bae680c648ff..396d75d9fb11 100644 | ||
817 | --- a/drivers/misc/mei/hw-txe.c | ||
818 | +++ b/drivers/misc/mei/hw-txe.c | ||
819 | @@ -972,11 +972,13 @@ static bool mei_txe_check_and_ack_intrs(struct mei_device *dev, bool do_ack) | ||
820 | hisr = mei_txe_br_reg_read(hw, HISR_REG); | ||
821 | |||
822 | aliveness = mei_txe_aliveness_get(dev); | ||
823 | - if (hhisr & IPC_HHIER_SEC && aliveness) | ||
824 | + if (hhisr & IPC_HHIER_SEC && aliveness) { | ||
825 | ipc_isr = mei_txe_sec_reg_read_silent(hw, | ||
826 | SEC_IPC_HOST_INT_STATUS_REG); | ||
827 | - else | ||
828 | + } else { | ||
829 | ipc_isr = 0; | ||
830 | + hhisr &= ~IPC_HHIER_SEC; | ||
831 | + } | ||
832 | |||
833 | generated = generated || | ||
834 | (hisr & HISR_INT_STS_MSK) || | ||
835 | diff --git a/drivers/mmc/host/dw_mmc-pltfm.c b/drivers/mmc/host/dw_mmc-pltfm.c | ||
836 | index 81bdeeb05a4d..7dcfb1d5034f 100644 | ||
837 | --- a/drivers/mmc/host/dw_mmc-pltfm.c | ||
838 | +++ b/drivers/mmc/host/dw_mmc-pltfm.c | ||
839 | @@ -59,12 +59,13 @@ int dw_mci_pltfm_register(struct platform_device *pdev, | ||
840 | host->pdata = pdev->dev.platform_data; | ||
841 | |||
842 | regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
843 | - /* Get registers' physical base address */ | ||
844 | - host->phy_regs = regs->start; | ||
845 | host->regs = devm_ioremap_resource(&pdev->dev, regs); | ||
846 | if (IS_ERR(host->regs)) | ||
847 | return PTR_ERR(host->regs); | ||
848 | |||
849 | + /* Get registers' physical base address */ | ||
850 | + host->phy_regs = regs->start; | ||
851 | + | ||
852 | platform_set_drvdata(pdev, host); | ||
853 | return dw_mci_probe(host); | ||
854 | } | ||
855 | diff --git a/drivers/mtd/ubi/fastmap.c b/drivers/mtd/ubi/fastmap.c | ||
856 | index 990898b9dc72..bba7dd1b5ebf 100644 | ||
857 | --- a/drivers/mtd/ubi/fastmap.c | ||
858 | +++ b/drivers/mtd/ubi/fastmap.c | ||
859 | @@ -513,10 +513,11 @@ static int scan_pool(struct ubi_device *ubi, struct ubi_attach_info *ai, | ||
860 | unsigned long long ec = be64_to_cpu(ech->ec); | ||
861 | unmap_peb(ai, pnum); | ||
862 | dbg_bld("Adding PEB to free: %i", pnum); | ||
863 | + | ||
864 | if (err == UBI_IO_FF_BITFLIPS) | ||
865 | - add_aeb(ai, free, pnum, ec, 1); | ||
866 | - else | ||
867 | - add_aeb(ai, free, pnum, ec, 0); | ||
868 | + scrub = 1; | ||
869 | + | ||
870 | + add_aeb(ai, free, pnum, ec, scrub); | ||
871 | continue; | ||
872 | } else if (err == 0 || err == UBI_IO_BITFLIPS) { | ||
873 | dbg_bld("Found non empty PEB:%i in pool", pnum); | ||
874 | @@ -748,11 +749,11 @@ static int ubi_attach_fastmap(struct ubi_device *ubi, | ||
875 | fmvhdr->vol_type, | ||
876 | be32_to_cpu(fmvhdr->last_eb_bytes)); | ||
877 | |||
878 | - if (!av) | ||
879 | - goto fail_bad; | ||
880 | - if (PTR_ERR(av) == -EINVAL) { | ||
881 | - ubi_err(ubi, "volume (ID %i) already exists", | ||
882 | - fmvhdr->vol_id); | ||
883 | + if (IS_ERR(av)) { | ||
884 | + if (PTR_ERR(av) == -EEXIST) | ||
885 | + ubi_err(ubi, "volume (ID %i) already exists", | ||
886 | + fmvhdr->vol_id); | ||
887 | + | ||
888 | goto fail_bad; | ||
889 | } | ||
890 | |||
891 | diff --git a/drivers/net/ethernet/smsc/smc91x.c b/drivers/net/ethernet/smsc/smc91x.c | ||
892 | index 8c44cf6ff7a2..23a038810083 100644 | ||
893 | --- a/drivers/net/ethernet/smsc/smc91x.c | ||
894 | +++ b/drivers/net/ethernet/smsc/smc91x.c | ||
895 | @@ -540,7 +540,7 @@ static inline void smc_rcv(struct net_device *dev) | ||
896 | #define smc_special_lock(lock, flags) spin_lock_irqsave(lock, flags) | ||
897 | #define smc_special_unlock(lock, flags) spin_unlock_irqrestore(lock, flags) | ||
898 | #else | ||
899 | -#define smc_special_trylock(lock, flags) (flags == flags) | ||
900 | +#define smc_special_trylock(lock, flags) ((void)flags, true) | ||
901 | #define smc_special_lock(lock, flags) do { flags = 0; } while (0) | ||
902 | #define smc_special_unlock(lock, flags) do { flags = 0; } while (0) | ||
903 | #endif | ||
904 | diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c | ||
905 | index 7831bc6b51dd..ec84ff8ad1b4 100644 | ||
906 | --- a/drivers/pwm/core.c | ||
907 | +++ b/drivers/pwm/core.c | ||
908 | @@ -321,6 +321,8 @@ int pwmchip_remove(struct pwm_chip *chip) | ||
909 | unsigned int i; | ||
910 | int ret = 0; | ||
911 | |||
912 | + pwmchip_sysfs_unexport_children(chip); | ||
913 | + | ||
914 | mutex_lock(&pwm_lock); | ||
915 | |||
916 | for (i = 0; i < chip->npwm; i++) { | ||
917 | diff --git a/drivers/pwm/sysfs.c b/drivers/pwm/sysfs.c | ||
918 | index 9c90886f4123..c20163b92991 100644 | ||
919 | --- a/drivers/pwm/sysfs.c | ||
920 | +++ b/drivers/pwm/sysfs.c | ||
921 | @@ -350,6 +350,24 @@ void pwmchip_sysfs_unexport(struct pwm_chip *chip) | ||
922 | } | ||
923 | } | ||
924 | |||
925 | +void pwmchip_sysfs_unexport_children(struct pwm_chip *chip) | ||
926 | +{ | ||
927 | + struct device *parent; | ||
928 | + unsigned int i; | ||
929 | + | ||
930 | + parent = class_find_device(&pwm_class, NULL, chip, | ||
931 | + pwmchip_sysfs_match); | ||
932 | + if (!parent) | ||
933 | + return; | ||
934 | + | ||
935 | + for (i = 0; i < chip->npwm; i++) { | ||
936 | + struct pwm_device *pwm = &chip->pwms[i]; | ||
937 | + | ||
938 | + if (test_bit(PWMF_EXPORTED, &pwm->flags)) | ||
939 | + pwm_unexport_child(parent, pwm); | ||
940 | + } | ||
941 | +} | ||
942 | + | ||
943 | static int __init pwm_sysfs_init(void) | ||
944 | { | ||
945 | return class_register(&pwm_class); | ||
946 | diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c | ||
947 | index 8db9f3a5844d..7aa01c1960ea 100644 | ||
948 | --- a/drivers/scsi/arcmsr/arcmsr_hba.c | ||
949 | +++ b/drivers/scsi/arcmsr/arcmsr_hba.c | ||
950 | @@ -2545,18 +2545,9 @@ static int arcmsr_queue_command_lck(struct scsi_cmnd *cmd, | ||
951 | struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; | ||
952 | struct CommandControlBlock *ccb; | ||
953 | int target = cmd->device->id; | ||
954 | - int lun = cmd->device->lun; | ||
955 | - uint8_t scsicmd = cmd->cmnd[0]; | ||
956 | cmd->scsi_done = done; | ||
957 | cmd->host_scribble = NULL; | ||
958 | cmd->result = 0; | ||
959 | - if ((scsicmd == SYNCHRONIZE_CACHE) ||(scsicmd == SEND_DIAGNOSTIC)){ | ||
960 | - if(acb->devstate[target][lun] == ARECA_RAID_GONE) { | ||
961 | - cmd->result = (DID_NO_CONNECT << 16); | ||
962 | - } | ||
963 | - cmd->scsi_done(cmd); | ||
964 | - return 0; | ||
965 | - } | ||
966 | if (target == 16) { | ||
967 | /* virtual device for iop message transfer */ | ||
968 | arcmsr_handle_virtual_command(acb, cmd); | ||
969 | diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c | ||
970 | index 278e10cd771f..17c440b9d086 100644 | ||
971 | --- a/drivers/scsi/megaraid/megaraid_sas_base.c | ||
972 | +++ b/drivers/scsi/megaraid/megaraid_sas_base.c | ||
973 | @@ -1688,16 +1688,13 @@ megasas_queue_command(struct Scsi_Host *shost, struct scsi_cmnd *scmd) | ||
974 | goto out_done; | ||
975 | } | ||
976 | |||
977 | - switch (scmd->cmnd[0]) { | ||
978 | - case SYNCHRONIZE_CACHE: | ||
979 | - /* | ||
980 | - * FW takes care of flush cache on its own | ||
981 | - * No need to send it down | ||
982 | - */ | ||
983 | + /* | ||
984 | + * FW takes care of flush cache on its own for Virtual Disk. | ||
985 | + * No need to send it down for VD. For JBOD send SYNCHRONIZE_CACHE to FW. | ||
986 | + */ | ||
987 | + if ((scmd->cmnd[0] == SYNCHRONIZE_CACHE) && MEGASAS_IS_LOGICAL(scmd)) { | ||
988 | scmd->result = DID_OK << 16; | ||
989 | goto out_done; | ||
990 | - default: | ||
991 | - break; | ||
992 | } | ||
993 | |||
994 | if (instance->instancet->build_and_issue_cmd(instance, scmd)) { | ||
995 | diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c | ||
996 | index d09d60293c27..e357a393d56e 100644 | ||
997 | --- a/drivers/scsi/scsi_debug.c | ||
998 | +++ b/drivers/scsi/scsi_debug.c | ||
999 | @@ -4981,6 +4981,7 @@ static void __exit scsi_debug_exit(void) | ||
1000 | bus_unregister(&pseudo_lld_bus); | ||
1001 | root_device_unregister(pseudo_primary); | ||
1002 | |||
1003 | + vfree(map_storep); | ||
1004 | vfree(dif_storep); | ||
1005 | vfree(fake_storep); | ||
1006 | } | ||
1007 | diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c | ||
1008 | index 136ebaaa9cc0..5ab54ef4f304 100644 | ||
1009 | --- a/drivers/tty/vt/vt.c | ||
1010 | +++ b/drivers/tty/vt/vt.c | ||
1011 | @@ -872,10 +872,15 @@ static int vc_do_resize(struct tty_struct *tty, struct vc_data *vc, | ||
1012 | if (new_cols == vc->vc_cols && new_rows == vc->vc_rows) | ||
1013 | return 0; | ||
1014 | |||
1015 | + if (new_screen_size > (4 << 20)) | ||
1016 | + return -EINVAL; | ||
1017 | newscreen = kmalloc(new_screen_size, GFP_USER); | ||
1018 | if (!newscreen) | ||
1019 | return -ENOMEM; | ||
1020 | |||
1021 | + if (vc == sel_cons) | ||
1022 | + clear_selection(); | ||
1023 | + | ||
1024 | old_rows = vc->vc_rows; | ||
1025 | old_row_size = vc->vc_size_row; | ||
1026 | |||
1027 | @@ -1173,7 +1178,7 @@ static void csi_J(struct vc_data *vc, int vpar) | ||
1028 | break; | ||
1029 | case 3: /* erase scroll-back buffer (and whole display) */ | ||
1030 | scr_memsetw(vc->vc_screenbuf, vc->vc_video_erase_char, | ||
1031 | - vc->vc_screenbuf_size >> 1); | ||
1032 | + vc->vc_screenbuf_size); | ||
1033 | set_origin(vc); | ||
1034 | if (CON_IS_VISIBLE(vc)) | ||
1035 | update_screen(vc); | ||
1036 | diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c | ||
1037 | index fb79dca9484b..5ae2b7d3a74a 100644 | ||
1038 | --- a/drivers/usb/dwc3/gadget.c | ||
1039 | +++ b/drivers/usb/dwc3/gadget.c | ||
1040 | @@ -2845,7 +2845,7 @@ err3: | ||
1041 | kfree(dwc->setup_buf); | ||
1042 | |||
1043 | err2: | ||
1044 | - dma_free_coherent(dwc->dev, sizeof(*dwc->ep0_trb), | ||
1045 | + dma_free_coherent(dwc->dev, sizeof(*dwc->ep0_trb) * 2, | ||
1046 | dwc->ep0_trb, dwc->ep0_trb_addr); | ||
1047 | |||
1048 | err1: | ||
1049 | @@ -2869,7 +2869,7 @@ void dwc3_gadget_exit(struct dwc3 *dwc) | ||
1050 | |||
1051 | kfree(dwc->setup_buf); | ||
1052 | |||
1053 | - dma_free_coherent(dwc->dev, sizeof(*dwc->ep0_trb), | ||
1054 | + dma_free_coherent(dwc->dev, sizeof(*dwc->ep0_trb) * 2, | ||
1055 | dwc->ep0_trb, dwc->ep0_trb_addr); | ||
1056 | |||
1057 | dma_free_coherent(dwc->dev, sizeof(*dwc->ctrl_req), | ||
1058 | diff --git a/drivers/usb/gadget/function/u_ether.c b/drivers/usb/gadget/function/u_ether.c | ||
1059 | index 6554322af2c1..b644248f4b8e 100644 | ||
1060 | --- a/drivers/usb/gadget/function/u_ether.c | ||
1061 | +++ b/drivers/usb/gadget/function/u_ether.c | ||
1062 | @@ -596,8 +596,9 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, | ||
1063 | |||
1064 | /* throttle high/super speed IRQ rate back slightly */ | ||
1065 | if (gadget_is_dualspeed(dev->gadget)) | ||
1066 | - req->no_interrupt = (dev->gadget->speed == USB_SPEED_HIGH || | ||
1067 | - dev->gadget->speed == USB_SPEED_SUPER) | ||
1068 | + req->no_interrupt = (((dev->gadget->speed == USB_SPEED_HIGH || | ||
1069 | + dev->gadget->speed == USB_SPEED_SUPER)) && | ||
1070 | + !list_empty(&dev->tx_reqs)) | ||
1071 | ? ((atomic_read(&dev->tx_qlen) % dev->qmult) != 0) | ||
1072 | : 0; | ||
1073 | |||
1074 | diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c | ||
1075 | index 760cb57e954e..9d1192aea9d0 100644 | ||
1076 | --- a/drivers/usb/host/ohci-hcd.c | ||
1077 | +++ b/drivers/usb/host/ohci-hcd.c | ||
1078 | @@ -72,7 +72,7 @@ | ||
1079 | static const char hcd_name [] = "ohci_hcd"; | ||
1080 | |||
1081 | #define STATECHANGE_DELAY msecs_to_jiffies(300) | ||
1082 | -#define IO_WATCHDOG_DELAY msecs_to_jiffies(250) | ||
1083 | +#define IO_WATCHDOG_DELAY msecs_to_jiffies(275) | ||
1084 | |||
1085 | #include "ohci.h" | ||
1086 | #include "pci-quirks.h" | ||
1087 | diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c | ||
1088 | index 1da876605e4d..b9d6940479da 100644 | ||
1089 | --- a/drivers/usb/host/xhci-hub.c | ||
1090 | +++ b/drivers/usb/host/xhci-hub.c | ||
1091 | @@ -1157,7 +1157,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, | ||
1092 | xhci_set_link_state(xhci, port_array, wIndex, | ||
1093 | XDEV_RESUME); | ||
1094 | spin_unlock_irqrestore(&xhci->lock, flags); | ||
1095 | - msleep(20); | ||
1096 | + msleep(USB_RESUME_TIMEOUT); | ||
1097 | spin_lock_irqsave(&xhci->lock, flags); | ||
1098 | xhci_set_link_state(xhci, port_array, wIndex, | ||
1099 | XDEV_U0); | ||
1100 | @@ -1401,7 +1401,7 @@ int xhci_bus_resume(struct usb_hcd *hcd) | ||
1101 | |||
1102 | if (need_usb2_u3_exit) { | ||
1103 | spin_unlock_irqrestore(&xhci->lock, flags); | ||
1104 | - msleep(20); | ||
1105 | + msleep(USB_RESUME_TIMEOUT); | ||
1106 | spin_lock_irqsave(&xhci->lock, flags); | ||
1107 | } | ||
1108 | |||
1109 | diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c | ||
1110 | index 963867c2c1d5..cf147ccac7d3 100644 | ||
1111 | --- a/drivers/usb/host/xhci-pci.c | ||
1112 | +++ b/drivers/usb/host/xhci-pci.c | ||
1113 | @@ -45,6 +45,7 @@ | ||
1114 | |||
1115 | #define PCI_DEVICE_ID_INTEL_LYNXPOINT_XHCI 0x8c31 | ||
1116 | #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31 | ||
1117 | +#define PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP_XHCI 0x9cb1 | ||
1118 | #define PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI 0x22b5 | ||
1119 | #define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_XHCI 0xa12f | ||
1120 | #define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_XHCI 0x9d2f | ||
1121 | @@ -154,7 +155,8 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) | ||
1122 | xhci->quirks |= XHCI_SPURIOUS_REBOOT; | ||
1123 | } | ||
1124 | if (pdev->vendor == PCI_VENDOR_ID_INTEL && | ||
1125 | - pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI) { | ||
1126 | + (pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI || | ||
1127 | + pdev->device == PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP_XHCI)) { | ||
1128 | xhci->quirks |= XHCI_SPURIOUS_REBOOT; | ||
1129 | xhci->quirks |= XHCI_SPURIOUS_WAKEUP; | ||
1130 | } | ||
1131 | diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c | ||
1132 | index 6eccded3bc33..976195e748a3 100644 | ||
1133 | --- a/drivers/usb/serial/cp210x.c | ||
1134 | +++ b/drivers/usb/serial/cp210x.c | ||
1135 | @@ -845,7 +845,9 @@ static int cp210x_tiocmget(struct tty_struct *tty) | ||
1136 | unsigned int control; | ||
1137 | int result; | ||
1138 | |||
1139 | - cp210x_get_config(port, CP210X_GET_MDMSTS, &control, 1); | ||
1140 | + result = cp210x_get_config(port, CP210X_GET_MDMSTS, &control, 1); | ||
1141 | + if (result) | ||
1142 | + return result; | ||
1143 | |||
1144 | result = ((control & CONTROL_DTR) ? TIOCM_DTR : 0) | ||
1145 | |((control & CONTROL_RTS) ? TIOCM_RTS : 0) | ||
1146 | diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c | ||
1147 | index 8c48c9d83d48..494167fe6a2c 100644 | ||
1148 | --- a/drivers/usb/serial/ftdi_sio.c | ||
1149 | +++ b/drivers/usb/serial/ftdi_sio.c | ||
1150 | @@ -986,7 +986,8 @@ static const struct usb_device_id id_table_combined[] = { | ||
1151 | /* ekey Devices */ | ||
1152 | { USB_DEVICE(FTDI_VID, FTDI_EKEY_CONV_USB_PID) }, | ||
1153 | /* Infineon Devices */ | ||
1154 | - { USB_DEVICE_INTERFACE_NUMBER(INFINEON_VID, INFINEON_TRIBOARD_PID, 1) }, | ||
1155 | + { USB_DEVICE_INTERFACE_NUMBER(INFINEON_VID, INFINEON_TRIBOARD_TC1798_PID, 1) }, | ||
1156 | + { USB_DEVICE_INTERFACE_NUMBER(INFINEON_VID, INFINEON_TRIBOARD_TC2X7_PID, 1) }, | ||
1157 | /* GE Healthcare devices */ | ||
1158 | { USB_DEVICE(GE_HEALTHCARE_VID, GE_HEALTHCARE_NEMO_TRACKER_PID) }, | ||
1159 | /* Active Research (Actisense) devices */ | ||
1160 | diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h | ||
1161 | index f87a938cf005..21011c0a4c64 100644 | ||
1162 | --- a/drivers/usb/serial/ftdi_sio_ids.h | ||
1163 | +++ b/drivers/usb/serial/ftdi_sio_ids.h | ||
1164 | @@ -626,8 +626,9 @@ | ||
1165 | /* | ||
1166 | * Infineon Technologies | ||
1167 | */ | ||
1168 | -#define INFINEON_VID 0x058b | ||
1169 | -#define INFINEON_TRIBOARD_PID 0x0028 /* DAS JTAG TriBoard TC1798 V1.0 */ | ||
1170 | +#define INFINEON_VID 0x058b | ||
1171 | +#define INFINEON_TRIBOARD_TC1798_PID 0x0028 /* DAS JTAG TriBoard TC1798 V1.0 */ | ||
1172 | +#define INFINEON_TRIBOARD_TC2X7_PID 0x0043 /* DAS JTAG TriBoard TC2X7 V1.0 */ | ||
1173 | |||
1174 | /* | ||
1175 | * Acton Research Corp. | ||
1176 | diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c | ||
1177 | index a0ca291bc07f..e7e29c797824 100644 | ||
1178 | --- a/drivers/usb/serial/usb-serial.c | ||
1179 | +++ b/drivers/usb/serial/usb-serial.c | ||
1180 | @@ -1077,7 +1077,8 @@ static int usb_serial_probe(struct usb_interface *interface, | ||
1181 | |||
1182 | serial->disconnected = 0; | ||
1183 | |||
1184 | - usb_serial_console_init(serial->port[0]->minor); | ||
1185 | + if (num_ports > 0) | ||
1186 | + usb_serial_console_init(serial->port[0]->minor); | ||
1187 | exit: | ||
1188 | module_put(type->driver.owner); | ||
1189 | return 0; | ||
1190 | diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c | ||
1191 | index dc2b94142f53..a01a41a41269 100644 | ||
1192 | --- a/drivers/virtio/virtio_ring.c | ||
1193 | +++ b/drivers/virtio/virtio_ring.c | ||
1194 | @@ -548,7 +548,8 @@ void virtqueue_disable_cb(struct virtqueue *_vq) | ||
1195 | |||
1196 | if (!(vq->avail_flags_shadow & VRING_AVAIL_F_NO_INTERRUPT)) { | ||
1197 | vq->avail_flags_shadow |= VRING_AVAIL_F_NO_INTERRUPT; | ||
1198 | - vq->vring.avail->flags = cpu_to_virtio16(_vq->vdev, vq->avail_flags_shadow); | ||
1199 | + if (!vq->event) | ||
1200 | + vq->vring.avail->flags = cpu_to_virtio16(_vq->vdev, vq->avail_flags_shadow); | ||
1201 | } | ||
1202 | |||
1203 | } | ||
1204 | @@ -580,7 +581,8 @@ unsigned virtqueue_enable_cb_prepare(struct virtqueue *_vq) | ||
1205 | * entry. Always do both to keep code simple. */ | ||
1206 | if (vq->avail_flags_shadow & VRING_AVAIL_F_NO_INTERRUPT) { | ||
1207 | vq->avail_flags_shadow &= ~VRING_AVAIL_F_NO_INTERRUPT; | ||
1208 | - vq->vring.avail->flags = cpu_to_virtio16(_vq->vdev, vq->avail_flags_shadow); | ||
1209 | + if (!vq->event) | ||
1210 | + vq->vring.avail->flags = cpu_to_virtio16(_vq->vdev, vq->avail_flags_shadow); | ||
1211 | } | ||
1212 | vring_used_event(&vq->vring) = cpu_to_virtio16(_vq->vdev, last_used_idx = vq->last_used_idx); | ||
1213 | END_USE(vq); | ||
1214 | @@ -648,10 +650,11 @@ bool virtqueue_enable_cb_delayed(struct virtqueue *_vq) | ||
1215 | * more to do. */ | ||
1216 | /* Depending on the VIRTIO_RING_F_USED_EVENT_IDX feature, we need to | ||
1217 | * either clear the flags bit or point the event index at the next | ||
1218 | - * entry. Always do both to keep code simple. */ | ||
1219 | + * entry. Always update the event index to keep code simple. */ | ||
1220 | if (vq->avail_flags_shadow & VRING_AVAIL_F_NO_INTERRUPT) { | ||
1221 | vq->avail_flags_shadow &= ~VRING_AVAIL_F_NO_INTERRUPT; | ||
1222 | - vq->vring.avail->flags = cpu_to_virtio16(_vq->vdev, vq->avail_flags_shadow); | ||
1223 | + if (!vq->event) | ||
1224 | + vq->vring.avail->flags = cpu_to_virtio16(_vq->vdev, vq->avail_flags_shadow); | ||
1225 | } | ||
1226 | /* TODO: tune this threshold */ | ||
1227 | bufs = (u16)(vq->avail_idx_shadow - vq->last_used_idx) * 3 / 4; | ||
1228 | @@ -770,7 +773,8 @@ struct virtqueue *vring_new_virtqueue(unsigned int index, | ||
1229 | /* No callback? Tell other side not to bother us. */ | ||
1230 | if (!callback) { | ||
1231 | vq->avail_flags_shadow |= VRING_AVAIL_F_NO_INTERRUPT; | ||
1232 | - vq->vring.avail->flags = cpu_to_virtio16(vdev, vq->avail_flags_shadow); | ||
1233 | + if (!vq->event) | ||
1234 | + vq->vring.avail->flags = cpu_to_virtio16(vdev, vq->avail_flags_shadow); | ||
1235 | } | ||
1236 | |||
1237 | /* Put everything in free lists. */ | ||
1238 | diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c | ||
1239 | index 1415f6d58633..f7441193bf35 100644 | ||
1240 | --- a/fs/btrfs/tree-log.c | ||
1241 | +++ b/fs/btrfs/tree-log.c | ||
1242 | @@ -2696,14 +2696,12 @@ static inline void btrfs_remove_all_log_ctxs(struct btrfs_root *root, | ||
1243 | int index, int error) | ||
1244 | { | ||
1245 | struct btrfs_log_ctx *ctx; | ||
1246 | + struct btrfs_log_ctx *safe; | ||
1247 | |||
1248 | - if (!error) { | ||
1249 | - INIT_LIST_HEAD(&root->log_ctxs[index]); | ||
1250 | - return; | ||
1251 | - } | ||
1252 | - | ||
1253 | - list_for_each_entry(ctx, &root->log_ctxs[index], list) | ||
1254 | + list_for_each_entry_safe(ctx, safe, &root->log_ctxs[index], list) { | ||
1255 | + list_del_init(&ctx->list); | ||
1256 | ctx->log_ret = error; | ||
1257 | + } | ||
1258 | |||
1259 | INIT_LIST_HEAD(&root->log_ctxs[index]); | ||
1260 | } | ||
1261 | @@ -2944,13 +2942,9 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, | ||
1262 | mutex_unlock(&root->log_mutex); | ||
1263 | |||
1264 | out_wake_log_root: | ||
1265 | - /* | ||
1266 | - * We needn't get log_mutex here because we are sure all | ||
1267 | - * the other tasks are blocked. | ||
1268 | - */ | ||
1269 | + mutex_lock(&log_root_tree->log_mutex); | ||
1270 | btrfs_remove_all_log_ctxs(log_root_tree, index2, ret); | ||
1271 | |||
1272 | - mutex_lock(&log_root_tree->log_mutex); | ||
1273 | log_root_tree->log_transid_committed++; | ||
1274 | atomic_set(&log_root_tree->log_commit[index2], 0); | ||
1275 | mutex_unlock(&log_root_tree->log_mutex); | ||
1276 | @@ -2961,10 +2955,8 @@ out_wake_log_root: | ||
1277 | if (waitqueue_active(&log_root_tree->log_commit_wait[index2])) | ||
1278 | wake_up(&log_root_tree->log_commit_wait[index2]); | ||
1279 | out: | ||
1280 | - /* See above. */ | ||
1281 | - btrfs_remove_all_log_ctxs(root, index1, ret); | ||
1282 | - | ||
1283 | mutex_lock(&root->log_mutex); | ||
1284 | + btrfs_remove_all_log_ctxs(root, index1, ret); | ||
1285 | root->log_transid_committed++; | ||
1286 | atomic_set(&root->log_commit[index1], 0); | ||
1287 | mutex_unlock(&root->log_mutex); | ||
1288 | diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c | ||
1289 | index ea0dd9ee138d..63a0d0ba36de 100644 | ||
1290 | --- a/fs/overlayfs/copy_up.c | ||
1291 | +++ b/fs/overlayfs/copy_up.c | ||
1292 | @@ -139,6 +139,8 @@ static int ovl_copy_up_data(struct path *old, struct path *new, loff_t len) | ||
1293 | len -= bytes; | ||
1294 | } | ||
1295 | |||
1296 | + if (!error) | ||
1297 | + error = vfs_fsync(new_file, 0); | ||
1298 | fput(new_file); | ||
1299 | out_fput: | ||
1300 | fput(old_file); | ||
1301 | diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c | ||
1302 | index e49bd2808bf3..f5d5ee43ae6e 100644 | ||
1303 | --- a/fs/ubifs/dir.c | ||
1304 | +++ b/fs/ubifs/dir.c | ||
1305 | @@ -350,7 +350,7 @@ static unsigned int vfs_dent_type(uint8_t type) | ||
1306 | */ | ||
1307 | static int ubifs_readdir(struct file *file, struct dir_context *ctx) | ||
1308 | { | ||
1309 | - int err; | ||
1310 | + int err = 0; | ||
1311 | struct qstr nm; | ||
1312 | union ubifs_key key; | ||
1313 | struct ubifs_dent_node *dent; | ||
1314 | @@ -452,14 +452,20 @@ out: | ||
1315 | kfree(file->private_data); | ||
1316 | file->private_data = NULL; | ||
1317 | |||
1318 | - if (err != -ENOENT) { | ||
1319 | + if (err != -ENOENT) | ||
1320 | ubifs_err(c, "cannot find next direntry, error %d", err); | ||
1321 | - return err; | ||
1322 | - } | ||
1323 | + else | ||
1324 | + /* | ||
1325 | + * -ENOENT is a non-fatal error in this context, the TNC uses | ||
1326 | + * it to indicate that the cursor moved past the current directory | ||
1327 | + * and readdir() has to stop. | ||
1328 | + */ | ||
1329 | + err = 0; | ||
1330 | + | ||
1331 | |||
1332 | /* 2 is a special value indicating that there are no more direntries */ | ||
1333 | ctx->pos = 2; | ||
1334 | - return 0; | ||
1335 | + return err; | ||
1336 | } | ||
1337 | |||
1338 | /* Free saved readdir() state when the directory is closed */ | ||
1339 | diff --git a/fs/xfs/libxfs/xfs_dquot_buf.c b/fs/xfs/libxfs/xfs_dquot_buf.c | ||
1340 | index 3cc3cf767474..ac9a003dd29a 100644 | ||
1341 | --- a/fs/xfs/libxfs/xfs_dquot_buf.c | ||
1342 | +++ b/fs/xfs/libxfs/xfs_dquot_buf.c | ||
1343 | @@ -191,8 +191,7 @@ xfs_dquot_buf_verify_crc( | ||
1344 | if (mp->m_quotainfo) | ||
1345 | ndquots = mp->m_quotainfo->qi_dqperchunk; | ||
1346 | else | ||
1347 | - ndquots = xfs_calc_dquots_per_chunk( | ||
1348 | - XFS_BB_TO_FSB(mp, bp->b_length)); | ||
1349 | + ndquots = xfs_calc_dquots_per_chunk(bp->b_length); | ||
1350 | |||
1351 | for (i = 0; i < ndquots; i++, d++) { | ||
1352 | if (!xfs_verify_cksum((char *)d, sizeof(struct xfs_dqblk), | ||
1353 | diff --git a/include/linux/pwm.h b/include/linux/pwm.h | ||
1354 | index cfc3ed46cad2..aa8736d5b2f3 100644 | ||
1355 | --- a/include/linux/pwm.h | ||
1356 | +++ b/include/linux/pwm.h | ||
1357 | @@ -331,6 +331,7 @@ static inline void pwm_remove_table(struct pwm_lookup *table, size_t num) | ||
1358 | #ifdef CONFIG_PWM_SYSFS | ||
1359 | void pwmchip_sysfs_export(struct pwm_chip *chip); | ||
1360 | void pwmchip_sysfs_unexport(struct pwm_chip *chip); | ||
1361 | +void pwmchip_sysfs_unexport_children(struct pwm_chip *chip); | ||
1362 | #else | ||
1363 | static inline void pwmchip_sysfs_export(struct pwm_chip *chip) | ||
1364 | { | ||
1365 | @@ -339,6 +340,10 @@ static inline void pwmchip_sysfs_export(struct pwm_chip *chip) | ||
1366 | static inline void pwmchip_sysfs_unexport(struct pwm_chip *chip) | ||
1367 | { | ||
1368 | } | ||
1369 | + | ||
1370 | +static inline void pwmchip_sysfs_unexport_children(struct pwm_chip *chip) | ||
1371 | +{ | ||
1372 | +} | ||
1373 | #endif /* CONFIG_PWM_SYSFS */ | ||
1374 | |||
1375 | #endif /* __LINUX_PWM_H */ | ||
1376 | diff --git a/kernel/cgroup.c b/kernel/cgroup.c | ||
1377 | index a3424f28aaf4..127c63e02d52 100644 | ||
1378 | --- a/kernel/cgroup.c | ||
1379 | +++ b/kernel/cgroup.c | ||
1380 | @@ -236,6 +236,9 @@ static int cgroup_addrm_files(struct cgroup_subsys_state *css, | ||
1381 | */ | ||
1382 | static bool cgroup_ssid_enabled(int ssid) | ||
1383 | { | ||
1384 | + if (CGROUP_SUBSYS_COUNT == 0) | ||
1385 | + return false; | ||
1386 | + | ||
1387 | return static_key_enabled(cgroup_subsys_enabled_key[ssid]); | ||
1388 | } | ||
1389 | |||
1390 | diff --git a/mm/cma.c b/mm/cma.c | ||
1391 | index ea506eb18cd6..bd0e1412475e 100644 | ||
1392 | --- a/mm/cma.c | ||
1393 | +++ b/mm/cma.c | ||
1394 | @@ -183,7 +183,8 @@ int __init cma_init_reserved_mem(phys_addr_t base, phys_addr_t size, | ||
1395 | return -EINVAL; | ||
1396 | |||
1397 | /* ensure minimal alignment required by mm core */ | ||
1398 | - alignment = PAGE_SIZE << max(MAX_ORDER - 1, pageblock_order); | ||
1399 | + alignment = PAGE_SIZE << | ||
1400 | + max_t(unsigned long, MAX_ORDER - 1, pageblock_order); | ||
1401 | |||
1402 | /* alignment should be aligned with order_per_bit */ | ||
1403 | if (!IS_ALIGNED(alignment >> PAGE_SHIFT, 1 << order_per_bit)) | ||
1404 | @@ -266,8 +267,8 @@ int __init cma_declare_contiguous(phys_addr_t base, | ||
1405 | * migratetype page by page allocator's buddy algorithm. In the case, | ||
1406 | * you couldn't get a contiguous memory, which is not what we want. | ||
1407 | */ | ||
1408 | - alignment = max(alignment, | ||
1409 | - (phys_addr_t)PAGE_SIZE << max(MAX_ORDER - 1, pageblock_order)); | ||
1410 | + alignment = max(alignment, (phys_addr_t)PAGE_SIZE << | ||
1411 | + max_t(unsigned long, MAX_ORDER - 1, pageblock_order)); | ||
1412 | base = ALIGN(base, alignment); | ||
1413 | size = ALIGN(size, alignment); | ||
1414 | limit &= ~(alignment - 1); | ||
1415 | diff --git a/mm/list_lru.c b/mm/list_lru.c | ||
1416 | index afc71ea9a381..5d8dffd5b57c 100644 | ||
1417 | --- a/mm/list_lru.c | ||
1418 | +++ b/mm/list_lru.c | ||
1419 | @@ -554,6 +554,8 @@ int __list_lru_init(struct list_lru *lru, bool memcg_aware, | ||
1420 | err = memcg_init_list_lru(lru, memcg_aware); | ||
1421 | if (err) { | ||
1422 | kfree(lru->node); | ||
1423 | + /* Do this so a list_lru_destroy() doesn't crash: */ | ||
1424 | + lru->node = NULL; | ||
1425 | goto out; | ||
1426 | } | ||
1427 | |||
1428 | diff --git a/mm/memcontrol.c b/mm/memcontrol.c | ||
1429 | index 6b90d184e9c0..5d9c8a3136bc 100644 | ||
1430 | --- a/mm/memcontrol.c | ||
1431 | +++ b/mm/memcontrol.c | ||
1432 | @@ -2055,6 +2055,15 @@ retry: | ||
1433 | current->flags & PF_EXITING)) | ||
1434 | goto force; | ||
1435 | |||
1436 | + /* | ||
1437 | + * Prevent unbounded recursion when reclaim operations need to | ||
1438 | + * allocate memory. This might exceed the limits temporarily, | ||
1439 | + * but we prefer facilitating memory reclaim and getting back | ||
1440 | + * under the limit over triggering OOM kills in these cases. | ||
1441 | + */ | ||
1442 | + if (unlikely(current->flags & PF_MEMALLOC)) | ||
1443 | + goto force; | ||
1444 | + | ||
1445 | if (unlikely(task_in_memcg_oom(current))) | ||
1446 | goto nomem; | ||
1447 | |||
1448 | diff --git a/mm/vmscan.c b/mm/vmscan.c | ||
1449 | index 0838e9f02b11..de1c59d8daa3 100644 | ||
1450 | --- a/mm/vmscan.c | ||
1451 | +++ b/mm/vmscan.c | ||
1452 | @@ -2910,7 +2910,9 @@ unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *memcg, | ||
1453 | sc.may_writepage, | ||
1454 | sc.gfp_mask); | ||
1455 | |||
1456 | + current->flags |= PF_MEMALLOC; | ||
1457 | nr_reclaimed = do_try_to_free_pages(zonelist, &sc); | ||
1458 | + current->flags &= ~PF_MEMALLOC; | ||
1459 | |||
1460 | trace_mm_vmscan_memcg_reclaim_end(nr_reclaimed); | ||
1461 | |||
1462 | diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c | ||
1463 | index a3bb8f7f5fc5..2b528389409f 100644 | ||
1464 | --- a/net/mac80211/rx.c | ||
1465 | +++ b/net/mac80211/rx.c | ||
1466 | @@ -2203,16 +2203,22 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx) | ||
1467 | if (!(status->rx_flags & IEEE80211_RX_AMSDU)) | ||
1468 | return RX_CONTINUE; | ||
1469 | |||
1470 | - if (ieee80211_has_a4(hdr->frame_control) && | ||
1471 | - rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && | ||
1472 | - !rx->sdata->u.vlan.sta) | ||
1473 | - return RX_DROP_UNUSABLE; | ||
1474 | + if (unlikely(ieee80211_has_a4(hdr->frame_control))) { | ||
1475 | + switch (rx->sdata->vif.type) { | ||
1476 | + case NL80211_IFTYPE_AP_VLAN: | ||
1477 | + if (!rx->sdata->u.vlan.sta) | ||
1478 | + return RX_DROP_UNUSABLE; | ||
1479 | + break; | ||
1480 | + case NL80211_IFTYPE_STATION: | ||
1481 | + if (!rx->sdata->u.mgd.use_4addr) | ||
1482 | + return RX_DROP_UNUSABLE; | ||
1483 | + break; | ||
1484 | + default: | ||
1485 | + return RX_DROP_UNUSABLE; | ||
1486 | + } | ||
1487 | + } | ||
1488 | |||
1489 | - if (is_multicast_ether_addr(hdr->addr1) && | ||
1490 | - ((rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && | ||
1491 | - rx->sdata->u.vlan.sta) || | ||
1492 | - (rx->sdata->vif.type == NL80211_IFTYPE_STATION && | ||
1493 | - rx->sdata->u.mgd.use_4addr))) | ||
1494 | + if (is_multicast_ether_addr(hdr->addr1)) | ||
1495 | return RX_DROP_UNUSABLE; | ||
1496 | |||
1497 | skb->dev = dev; | ||
1498 | diff --git a/security/keys/proc.c b/security/keys/proc.c | ||
1499 | index f0611a6368cd..b9f531c9e4fa 100644 | ||
1500 | --- a/security/keys/proc.c | ||
1501 | +++ b/security/keys/proc.c | ||
1502 | @@ -181,7 +181,7 @@ static int proc_keys_show(struct seq_file *m, void *v) | ||
1503 | struct timespec now; | ||
1504 | unsigned long timo; | ||
1505 | key_ref_t key_ref, skey_ref; | ||
1506 | - char xbuf[12]; | ||
1507 | + char xbuf[16]; | ||
1508 | int rc; | ||
1509 | |||
1510 | struct keyring_search_context ctx = { | ||
1511 | diff --git a/sound/pci/hda/hda_controller.c b/sound/pci/hda/hda_controller.c | ||
1512 | index 22dbfa563919..5baf8b56b6e7 100644 | ||
1513 | --- a/sound/pci/hda/hda_controller.c | ||
1514 | +++ b/sound/pci/hda/hda_controller.c | ||
1515 | @@ -956,7 +956,7 @@ irqreturn_t azx_interrupt(int irq, void *dev_id) | ||
1516 | status = azx_readb(chip, RIRBSTS); | ||
1517 | if (status & RIRB_INT_MASK) { | ||
1518 | if (status & RIRB_INT_RESPONSE) { | ||
1519 | - if (chip->driver_caps & AZX_DCAPS_RIRB_PRE_DELAY) | ||
1520 | + if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND) | ||
1521 | udelay(80); | ||
1522 | snd_hdac_bus_update_rirb(bus); | ||
1523 | } | ||
1524 | @@ -1055,11 +1055,6 @@ int azx_bus_init(struct azx *chip, const char *model, | ||
1525 | if (chip->driver_caps & AZX_DCAPS_CORBRP_SELF_CLEAR) | ||
1526 | bus->core.corbrp_self_clear = true; | ||
1527 | |||
1528 | - if (chip->driver_caps & AZX_DCAPS_RIRB_DELAY) { | ||
1529 | - dev_dbg(chip->card->dev, "Enable delay in RIRB handling\n"); | ||
1530 | - bus->needs_damn_long_delay = 1; | ||
1531 | - } | ||
1532 | - | ||
1533 | if (chip->driver_caps & AZX_DCAPS_4K_BDLE_BOUNDARY) | ||
1534 | bus->core.align_bdle_4k = true; | ||
1535 | |||
1536 | diff --git a/sound/pci/hda/hda_controller.h b/sound/pci/hda/hda_controller.h | ||
1537 | index 7b635d68cfe1..b17539537b2e 100644 | ||
1538 | --- a/sound/pci/hda/hda_controller.h | ||
1539 | +++ b/sound/pci/hda/hda_controller.h | ||
1540 | @@ -32,8 +32,8 @@ | ||
1541 | #define AZX_DCAPS_NO_MSI (1 << 9) /* No MSI support */ | ||
1542 | #define AZX_DCAPS_SNOOP_MASK (3 << 10) /* snoop type mask */ | ||
1543 | #define AZX_DCAPS_SNOOP_OFF (1 << 12) /* snoop default off */ | ||
1544 | -#define AZX_DCAPS_RIRB_DELAY (1 << 13) /* Long delay in read loop */ | ||
1545 | -#define AZX_DCAPS_RIRB_PRE_DELAY (1 << 14) /* Put a delay before read */ | ||
1546 | +/* 13 unused */ | ||
1547 | +/* 14 unused */ | ||
1548 | #define AZX_DCAPS_CTX_WORKAROUND (1 << 15) /* X-Fi workaround */ | ||
1549 | #define AZX_DCAPS_POSFIX_LPIB (1 << 16) /* Use LPIB as default */ | ||
1550 | #define AZX_DCAPS_POSFIX_VIA (1 << 17) /* Use VIACOMBO as default */ | ||
1551 | diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c | ||
1552 | index d4671973d889..ad4a1e9a3ae1 100644 | ||
1553 | --- a/sound/pci/hda/hda_intel.c | ||
1554 | +++ b/sound/pci/hda/hda_intel.c | ||
1555 | @@ -334,8 +334,7 @@ enum { | ||
1556 | |||
1557 | /* quirks for Nvidia */ | ||
1558 | #define AZX_DCAPS_PRESET_NVIDIA \ | ||
1559 | - (AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI | /*AZX_DCAPS_ALIGN_BUFSIZE |*/ \ | ||
1560 | - AZX_DCAPS_NO_64BIT | AZX_DCAPS_CORBRP_SELF_CLEAR |\ | ||
1561 | + (AZX_DCAPS_NO_MSI | AZX_DCAPS_CORBRP_SELF_CLEAR |\ | ||
1562 | AZX_DCAPS_SNOOP_TYPE(NVIDIA)) | ||
1563 | |||
1564 | #define AZX_DCAPS_PRESET_CTHDA \ | ||
1565 | @@ -1637,6 +1636,11 @@ static int azx_create(struct snd_card *card, struct pci_dev *pci, | ||
1566 | return err; | ||
1567 | } | ||
1568 | |||
1569 | + if (chip->driver_type == AZX_DRIVER_NVIDIA) { | ||
1570 | + dev_dbg(chip->card->dev, "Enable delay in RIRB handling\n"); | ||
1571 | + chip->bus.needs_damn_long_delay = 1; | ||
1572 | + } | ||
1573 | + | ||
1574 | err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); | ||
1575 | if (err < 0) { | ||
1576 | dev_err(card->dev, "Error creating device [card]!\n"); | ||
1577 | @@ -1720,6 +1724,10 @@ static int azx_first_init(struct azx *chip) | ||
1578 | } | ||
1579 | } | ||
1580 | |||
1581 | + /* NVidia hardware normally only supports up to 40 bits of DMA */ | ||
1582 | + if (chip->pci->vendor == PCI_VENDOR_ID_NVIDIA) | ||
1583 | + dma_bits = 40; | ||
1584 | + | ||
1585 | /* disable 64bit DMA address on some devices */ | ||
1586 | if (chip->driver_caps & AZX_DCAPS_NO_64BIT) { | ||
1587 | dev_dbg(card->dev, "Disabling 64bit DMA\n"); | ||
1588 | @@ -2406,14 +2414,12 @@ static const struct pci_device_id azx_ids[] = { | ||
1589 | .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8, | ||
1590 | .class_mask = 0xffffff, | ||
1591 | .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND | | ||
1592 | - AZX_DCAPS_NO_64BIT | | ||
1593 | - AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB }, | ||
1594 | + AZX_DCAPS_NO_64BIT | AZX_DCAPS_POSFIX_LPIB }, | ||
1595 | #else | ||
1596 | /* this entry seems still valid -- i.e. without emu20kx chip */ | ||
1597 | { PCI_DEVICE(0x1102, 0x0009), | ||
1598 | .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND | | ||
1599 | - AZX_DCAPS_NO_64BIT | | ||
1600 | - AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB }, | ||
1601 | + AZX_DCAPS_NO_64BIT | AZX_DCAPS_POSFIX_LPIB }, | ||
1602 | #endif | ||
1603 | /* CM8888 */ | ||
1604 | { PCI_DEVICE(0x13f6, 0x5011), | ||
1605 | diff --git a/sound/pci/hda/hda_tegra.c b/sound/pci/hda/hda_tegra.c | ||
1606 | index 58c0aad37284..17fd81736d3d 100644 | ||
1607 | --- a/sound/pci/hda/hda_tegra.c | ||
1608 | +++ b/sound/pci/hda/hda_tegra.c | ||
1609 | @@ -464,6 +464,8 @@ static int hda_tegra_create(struct snd_card *card, | ||
1610 | if (err < 0) | ||
1611 | return err; | ||
1612 | |||
1613 | + chip->bus.needs_damn_long_delay = 1; | ||
1614 | + | ||
1615 | err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); | ||
1616 | if (err < 0) { | ||
1617 | dev_err(card->dev, "Error creating device\n"); | ||
1618 | @@ -481,8 +483,7 @@ MODULE_DEVICE_TABLE(of, hda_tegra_match); | ||
1619 | |||
1620 | static int hda_tegra_probe(struct platform_device *pdev) | ||
1621 | { | ||
1622 | - const unsigned int driver_flags = AZX_DCAPS_RIRB_DELAY | | ||
1623 | - AZX_DCAPS_CORBRP_SELF_CLEAR; | ||
1624 | + const unsigned int driver_flags = AZX_DCAPS_CORBRP_SELF_CLEAR; | ||
1625 | struct snd_card *card; | ||
1626 | struct azx *chip; | ||
1627 | struct hda_tegra *hda; | ||
1628 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c | ||
1629 | index b1fa50aed888..f0986cac82f1 100644 | ||
1630 | --- a/sound/pci/hda/patch_realtek.c | ||
1631 | +++ b/sound/pci/hda/patch_realtek.c | ||
1632 | @@ -5793,8 +5793,6 @@ static const struct hda_model_fixup alc269_fixup_models[] = { | ||
1633 | #define ALC295_STANDARD_PINS \ | ||
1634 | {0x12, 0xb7a60130}, \ | ||
1635 | {0x14, 0x90170110}, \ | ||
1636 | - {0x17, 0x21014020}, \ | ||
1637 | - {0x18, 0x21a19030}, \ | ||
1638 | {0x21, 0x04211020} | ||
1639 | |||
1640 | #define ALC298_STANDARD_PINS \ | ||
1641 | @@ -5841,11 +5839,19 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = { | ||
1642 | {0x1b, 0x02011020}, | ||
1643 | {0x21, 0x0221101f}), | ||
1644 | SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, | ||
1645 | + {0x14, 0x90170110}, | ||
1646 | + {0x1b, 0x01011020}, | ||
1647 | + {0x21, 0x0221101f}), | ||
1648 | + SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, | ||
1649 | {0x14, 0x90170130}, | ||
1650 | {0x1b, 0x01014020}, | ||
1651 | {0x21, 0x0221103f}), | ||
1652 | SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, | ||
1653 | {0x14, 0x90170130}, | ||
1654 | + {0x1b, 0x01011020}, | ||
1655 | + {0x21, 0x0221103f}), | ||
1656 | + SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, | ||
1657 | + {0x14, 0x90170130}, | ||
1658 | {0x1b, 0x02011020}, | ||
1659 | {0x21, 0x0221103f}), | ||
1660 | SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, | ||
1661 | @@ -6021,7 +6027,13 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = { | ||
1662 | ALC292_STANDARD_PINS, | ||
1663 | {0x13, 0x90a60140}), | ||
1664 | SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, | ||
1665 | - ALC295_STANDARD_PINS), | ||
1666 | + ALC295_STANDARD_PINS, | ||
1667 | + {0x17, 0x21014020}, | ||
1668 | + {0x18, 0x21a19030}), | ||
1669 | + SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, | ||
1670 | + ALC295_STANDARD_PINS, | ||
1671 | + {0x17, 0x21014040}, | ||
1672 | + {0x18, 0x21a19050}), | ||
1673 | SND_HDA_PIN_QUIRK(0x10ec0298, 0x1028, "Dell", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE, | ||
1674 | ALC298_STANDARD_PINS, | ||
1675 | {0x17, 0x90170110}), | ||
1676 | diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h | ||
1677 | index c60a776e815d..8a59d4782a0f 100644 | ||
1678 | --- a/sound/usb/quirks-table.h | ||
1679 | +++ b/sound/usb/quirks-table.h | ||
1680 | @@ -2907,6 +2907,23 @@ AU0828_DEVICE(0x2040, 0x7260, "Hauppauge", "HVR-950Q"), | ||
1681 | AU0828_DEVICE(0x2040, 0x7213, "Hauppauge", "HVR-950Q"), | ||
1682 | AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"), | ||
1683 | |||
1684 | +/* Syntek STK1160 */ | ||
1685 | +{ | ||
1686 | + .match_flags = USB_DEVICE_ID_MATCH_DEVICE | | ||
1687 | + USB_DEVICE_ID_MATCH_INT_CLASS | | ||
1688 | + USB_DEVICE_ID_MATCH_INT_SUBCLASS, | ||
1689 | + .idVendor = 0x05e1, | ||
1690 | + .idProduct = 0x0408, | ||
1691 | + .bInterfaceClass = USB_CLASS_AUDIO, | ||
1692 | + .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, | ||
1693 | + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { | ||
1694 | + .vendor_name = "Syntek", | ||
1695 | + .product_name = "STK1160", | ||
1696 | + .ifnum = QUIRK_ANY_INTERFACE, | ||
1697 | + .type = QUIRK_AUDIO_ALIGN_TRANSFER | ||
1698 | + } | ||
1699 | +}, | ||
1700 | + | ||
1701 | /* Digidesign Mbox */ | ||
1702 | { | ||
1703 | /* Thanks to Clemens Ladisch <clemens@ladisch.de> */ | ||
1704 | diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf | ||
1705 | index 0d19d5447d6c..929a32ba15f5 100644 | ||
1706 | --- a/tools/perf/Makefile.perf | ||
1707 | +++ b/tools/perf/Makefile.perf | ||
1708 | @@ -420,7 +420,7 @@ $(LIBTRACEEVENT)-clean: | ||
1709 | $(call QUIET_CLEAN, libtraceevent) | ||
1710 | $(Q)$(MAKE) -C $(TRACE_EVENT_DIR) O=$(OUTPUT) clean >/dev/null | ||
1711 | |||
1712 | -install-traceevent-plugins: $(LIBTRACEEVENT) | ||
1713 | +install-traceevent-plugins: libtraceevent_plugins | ||
1714 | $(Q)$(MAKE) -C $(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) O=$(OUTPUT) install_plugins | ||
1715 | |||
1716 | $(LIBAPI): fixdep FORCE |