Contents of /trunk/kernel-alx/patches-4.4/0130-4.4.31-all-fixes.patch
Parent Directory | Revision Log
Revision 2866 -
(show 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 | 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 |