Magellan Linux

Contents of /trunk/kernel-alx/patches-3.10/0172-3.10.73-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2660 - (show annotations) (download)
Tue Jul 21 16:20:23 2015 UTC (8 years, 9 months ago) by niro
File size: 59416 byte(s)
-linux-3.10.73
1 diff --git a/Makefile b/Makefile
2 index 211bb34102bf..b1129094ebfd 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 3
7 PATCHLEVEL = 10
8 -SUBLEVEL = 72
9 +SUBLEVEL = 73
10 EXTRAVERSION =
11 NAME = TOSSUG Baby Fish
12
13 diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
14 index 2f5908f0b8c5..d8af0755bddc 100644
15 --- a/arch/arm/mach-at91/pm.h
16 +++ b/arch/arm/mach-at91/pm.h
17 @@ -37,7 +37,7 @@ static inline void at91rm9200_standby(void)
18 " mcr p15, 0, %0, c7, c0, 4\n\t"
19 " str %5, [%1, %2]"
20 :
21 - : "r" (0), "r" (AT91_BASE_SYS), "r" (AT91RM9200_SDRAMC_LPR),
22 + : "r" (0), "r" (at91_ramc_base[0]), "r" (AT91RM9200_SDRAMC_LPR),
23 "r" (1), "r" (AT91RM9200_SDRAMC_SRR),
24 "r" (lpr));
25 }
26 diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
27 index ee7ac5e6e28a..c5c640779549 100644
28 --- a/arch/powerpc/kernel/smp.c
29 +++ b/arch/powerpc/kernel/smp.c
30 @@ -544,8 +544,8 @@ int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
31 if (smp_ops->give_timebase)
32 smp_ops->give_timebase();
33
34 - /* Wait until cpu puts itself in the online map */
35 - while (!cpu_online(cpu))
36 + /* Wait until cpu puts itself in the online & active maps */
37 + while (!cpu_online(cpu) || !cpu_active(cpu))
38 cpu_relax();
39
40 return 0;
41 diff --git a/arch/sparc/kernel/perf_event.c b/arch/sparc/kernel/perf_event.c
42 index b5c38faa4ead..d461b7ddf30e 100644
43 --- a/arch/sparc/kernel/perf_event.c
44 +++ b/arch/sparc/kernel/perf_event.c
45 @@ -960,6 +960,8 @@ out:
46 cpuc->pcr[0] |= cpuc->event[0]->hw.config_base;
47 }
48
49 +static void sparc_pmu_start(struct perf_event *event, int flags);
50 +
51 /* On this PMU each PIC has it's own PCR control register. */
52 static void calculate_multiple_pcrs(struct cpu_hw_events *cpuc)
53 {
54 @@ -972,20 +974,13 @@ static void calculate_multiple_pcrs(struct cpu_hw_events *cpuc)
55 struct perf_event *cp = cpuc->event[i];
56 struct hw_perf_event *hwc = &cp->hw;
57 int idx = hwc->idx;
58 - u64 enc;
59
60 if (cpuc->current_idx[i] != PIC_NO_INDEX)
61 continue;
62
63 - sparc_perf_event_set_period(cp, hwc, idx);
64 cpuc->current_idx[i] = idx;
65
66 - enc = perf_event_get_enc(cpuc->events[i]);
67 - cpuc->pcr[idx] &= ~mask_for_index(idx);
68 - if (hwc->state & PERF_HES_STOPPED)
69 - cpuc->pcr[idx] |= nop_for_index(idx);
70 - else
71 - cpuc->pcr[idx] |= event_encoding(enc, idx);
72 + sparc_pmu_start(cp, PERF_EF_RELOAD);
73 }
74 out:
75 for (i = 0; i < cpuc->n_events; i++) {
76 @@ -1101,7 +1096,6 @@ static void sparc_pmu_del(struct perf_event *event, int _flags)
77 int i;
78
79 local_irq_save(flags);
80 - perf_pmu_disable(event->pmu);
81
82 for (i = 0; i < cpuc->n_events; i++) {
83 if (event == cpuc->event[i]) {
84 @@ -1127,7 +1121,6 @@ static void sparc_pmu_del(struct perf_event *event, int _flags)
85 }
86 }
87
88 - perf_pmu_enable(event->pmu);
89 local_irq_restore(flags);
90 }
91
92 @@ -1361,7 +1354,6 @@ static int sparc_pmu_add(struct perf_event *event, int ef_flags)
93 unsigned long flags;
94
95 local_irq_save(flags);
96 - perf_pmu_disable(event->pmu);
97
98 n0 = cpuc->n_events;
99 if (n0 >= sparc_pmu->max_hw_events)
100 @@ -1394,7 +1386,6 @@ nocheck:
101
102 ret = 0;
103 out:
104 - perf_pmu_enable(event->pmu);
105 local_irq_restore(flags);
106 return ret;
107 }
108 diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c
109 index b9cc9763faf4..036e43cef6fb 100644
110 --- a/arch/sparc/kernel/process_64.c
111 +++ b/arch/sparc/kernel/process_64.c
112 @@ -280,6 +280,8 @@ void arch_trigger_all_cpu_backtrace(void)
113 printk(" TPC[%lx] O7[%lx] I7[%lx] RPC[%lx]\n",
114 gp->tpc, gp->o7, gp->i7, gp->rpc);
115 }
116 +
117 + touch_nmi_watchdog();
118 }
119
120 memset(global_cpu_snapshot, 0, sizeof(global_cpu_snapshot));
121 @@ -352,6 +354,8 @@ static void pmu_snapshot_all_cpus(void)
122 (cpu == this_cpu ? '*' : ' '), cpu,
123 pp->pcr[0], pp->pcr[1], pp->pcr[2], pp->pcr[3],
124 pp->pic[0], pp->pic[1], pp->pic[2], pp->pic[3]);
125 +
126 + touch_nmi_watchdog();
127 }
128
129 memset(global_cpu_snapshot, 0, sizeof(global_cpu_snapshot));
130 diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c
131 index 2daaaa6eda23..be8db9bb7878 100644
132 --- a/arch/sparc/kernel/sys_sparc_64.c
133 +++ b/arch/sparc/kernel/sys_sparc_64.c
134 @@ -336,7 +336,7 @@ SYSCALL_DEFINE6(sparc_ipc, unsigned int, call, int, first, unsigned long, second
135 long err;
136
137 /* No need for backward compatibility. We can start fresh... */
138 - if (call <= SEMCTL) {
139 + if (call <= SEMTIMEDOP) {
140 switch (call) {
141 case SEMOP:
142 err = sys_semtimedop(first, ptr,
143 diff --git a/arch/sparc/lib/memmove.S b/arch/sparc/lib/memmove.S
144 index b7f6334e159f..857ad4f8905f 100644
145 --- a/arch/sparc/lib/memmove.S
146 +++ b/arch/sparc/lib/memmove.S
147 @@ -8,9 +8,11 @@
148
149 .text
150 ENTRY(memmove) /* o0=dst o1=src o2=len */
151 - mov %o0, %g1
152 + brz,pn %o2, 99f
153 + mov %o0, %g1
154 +
155 cmp %o0, %o1
156 - bleu,pt %xcc, memcpy
157 + bleu,pt %xcc, 2f
158 add %o1, %o2, %g7
159 cmp %g7, %o0
160 bleu,pt %xcc, memcpy
161 @@ -24,7 +26,34 @@ ENTRY(memmove) /* o0=dst o1=src o2=len */
162 stb %g7, [%o0]
163 bne,pt %icc, 1b
164 sub %o0, 1, %o0
165 -
166 +99:
167 retl
168 mov %g1, %o0
169 +
170 + /* We can't just call memcpy for these memmove cases. On some
171 + * chips the memcpy uses cache initializing stores and when dst
172 + * and src are close enough, those can clobber the source data
173 + * before we've loaded it in.
174 + */
175 +2: or %o0, %o1, %g7
176 + or %o2, %g7, %g7
177 + andcc %g7, 0x7, %g0
178 + bne,pn %xcc, 4f
179 + nop
180 +
181 +3: ldx [%o1], %g7
182 + add %o1, 8, %o1
183 + subcc %o2, 8, %o2
184 + add %o0, 8, %o0
185 + bne,pt %icc, 3b
186 + stx %g7, [%o0 - 0x8]
187 + ba,a,pt %xcc, 99b
188 +
189 +4: ldub [%o1], %g7
190 + add %o1, 1, %o1
191 + subcc %o2, 1, %o2
192 + add %o0, 1, %o0
193 + bne,pt %icc, 4b
194 + stb %g7, [%o0 - 0x1]
195 + ba,a,pt %xcc, 99b
196 ENDPROC(memmove)
197 diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c
198 index 036c2797dece..f58cb540ff94 100644
199 --- a/arch/sparc/mm/srmmu.c
200 +++ b/arch/sparc/mm/srmmu.c
201 @@ -455,10 +455,12 @@ static void __init sparc_context_init(int numctx)
202 void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm,
203 struct task_struct *tsk)
204 {
205 + unsigned long flags;
206 +
207 if (mm->context == NO_CONTEXT) {
208 - spin_lock(&srmmu_context_spinlock);
209 + spin_lock_irqsave(&srmmu_context_spinlock, flags);
210 alloc_context(old_mm, mm);
211 - spin_unlock(&srmmu_context_spinlock);
212 + spin_unlock_irqrestore(&srmmu_context_spinlock, flags);
213 srmmu_ctxd_set(&srmmu_context_table[mm->context], mm->pgd);
214 }
215
216 @@ -983,14 +985,15 @@ int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
217
218 void destroy_context(struct mm_struct *mm)
219 {
220 + unsigned long flags;
221
222 if (mm->context != NO_CONTEXT) {
223 flush_cache_mm(mm);
224 srmmu_ctxd_set(&srmmu_context_table[mm->context], srmmu_swapper_pg_dir);
225 flush_tlb_mm(mm);
226 - spin_lock(&srmmu_context_spinlock);
227 + spin_lock_irqsave(&srmmu_context_spinlock, flags);
228 free_context(mm->context);
229 - spin_unlock(&srmmu_context_spinlock);
230 + spin_unlock_irqrestore(&srmmu_context_spinlock, flags);
231 mm->context = NO_CONTEXT;
232 }
233 }
234 diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c
235 index f89e7490d303..990c9699b662 100644
236 --- a/arch/x86/crypto/aesni-intel_glue.c
237 +++ b/arch/x86/crypto/aesni-intel_glue.c
238 @@ -989,7 +989,7 @@ static int __driver_rfc4106_decrypt(struct aead_request *req)
239 src = kmalloc(req->cryptlen + req->assoclen, GFP_ATOMIC);
240 if (!src)
241 return -ENOMEM;
242 - assoc = (src + req->cryptlen + auth_tag_len);
243 + assoc = (src + req->cryptlen);
244 scatterwalk_map_and_copy(src, req->src, 0, req->cryptlen, 0);
245 scatterwalk_map_and_copy(assoc, req->assoc, 0,
246 req->assoclen, 0);
247 @@ -1014,7 +1014,7 @@ static int __driver_rfc4106_decrypt(struct aead_request *req)
248 scatterwalk_done(&src_sg_walk, 0, 0);
249 scatterwalk_done(&assoc_sg_walk, 0, 0);
250 } else {
251 - scatterwalk_map_and_copy(dst, req->dst, 0, req->cryptlen, 1);
252 + scatterwalk_map_and_copy(dst, req->dst, 0, tempCipherLen, 1);
253 kfree(src);
254 }
255 return retval;
256 diff --git a/arch/x86/include/asm/fpu-internal.h b/arch/x86/include/asm/fpu-internal.h
257 index e72b2e41499e..1b2fc5cf1963 100644
258 --- a/arch/x86/include/asm/fpu-internal.h
259 +++ b/arch/x86/include/asm/fpu-internal.h
260 @@ -370,7 +370,7 @@ static inline void drop_fpu(struct task_struct *tsk)
261 preempt_disable();
262 tsk->fpu_counter = 0;
263 __drop_fpu(tsk);
264 - clear_used_math();
265 + clear_stopped_child_used_math(tsk);
266 preempt_enable();
267 }
268
269 diff --git a/arch/x86/kernel/xsave.c b/arch/x86/kernel/xsave.c
270 index 1ee723298e90..92f37e7683c5 100644
271 --- a/arch/x86/kernel/xsave.c
272 +++ b/arch/x86/kernel/xsave.c
273 @@ -376,7 +376,7 @@ int __restore_xstate_sig(void __user *buf, void __user *buf_fx, int size)
274 * thread's fpu state, reconstruct fxstate from the fsave
275 * header. Sanitize the copied state etc.
276 */
277 - struct xsave_struct *xsave = &tsk->thread.fpu.state->xsave;
278 + struct fpu *fpu = &tsk->thread.fpu;
279 struct user_i387_ia32_struct env;
280 int err = 0;
281
282 @@ -390,14 +390,15 @@ int __restore_xstate_sig(void __user *buf, void __user *buf_fx, int size)
283 */
284 drop_fpu(tsk);
285
286 - if (__copy_from_user(xsave, buf_fx, state_size) ||
287 + if (__copy_from_user(&fpu->state->xsave, buf_fx, state_size) ||
288 __copy_from_user(&env, buf, sizeof(env))) {
289 + fpu_finit(fpu);
290 err = -1;
291 } else {
292 sanitize_restored_xstate(tsk, &env, xstate_bv, fx_only);
293 - set_used_math();
294 }
295
296 + set_used_math();
297 if (use_eager_fpu()) {
298 preempt_disable();
299 math_state_restore();
300 diff --git a/arch/x86/vdso/vdso32/sigreturn.S b/arch/x86/vdso/vdso32/sigreturn.S
301 index 31776d0efc8c..d7ec4e251c0a 100644
302 --- a/arch/x86/vdso/vdso32/sigreturn.S
303 +++ b/arch/x86/vdso/vdso32/sigreturn.S
304 @@ -17,6 +17,7 @@
305 .text
306 .globl __kernel_sigreturn
307 .type __kernel_sigreturn,@function
308 + nop /* this guy is needed for .LSTARTFDEDLSI1 below (watch for HACK) */
309 ALIGN
310 __kernel_sigreturn:
311 .LSTART_sigreturn:
312 diff --git a/drivers/char/tpm/tpm_ibmvtpm.c b/drivers/char/tpm/tpm_ibmvtpm.c
313 index 538856f3e68a..09df26f9621d 100644
314 --- a/drivers/char/tpm/tpm_ibmvtpm.c
315 +++ b/drivers/char/tpm/tpm_ibmvtpm.c
316 @@ -124,7 +124,7 @@ static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
317 {
318 struct ibmvtpm_dev *ibmvtpm;
319 struct ibmvtpm_crq crq;
320 - u64 *word = (u64 *) &crq;
321 + __be64 *word = (__be64 *)&crq;
322 int rc;
323
324 ibmvtpm = (struct ibmvtpm_dev *)TPM_VPRIV(chip);
325 @@ -145,11 +145,11 @@ static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
326 memcpy((void *)ibmvtpm->rtce_buf, (void *)buf, count);
327 crq.valid = (u8)IBMVTPM_VALID_CMD;
328 crq.msg = (u8)VTPM_TPM_COMMAND;
329 - crq.len = (u16)count;
330 - crq.data = ibmvtpm->rtce_dma_handle;
331 + crq.len = cpu_to_be16(count);
332 + crq.data = cpu_to_be32(ibmvtpm->rtce_dma_handle);
333
334 - rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(word[0]),
335 - cpu_to_be64(word[1]));
336 + rc = ibmvtpm_send_crq(ibmvtpm->vdev, be64_to_cpu(word[0]),
337 + be64_to_cpu(word[1]));
338 if (rc != H_SUCCESS) {
339 dev_err(ibmvtpm->dev, "tpm_ibmvtpm_send failed rc=%d\n", rc);
340 rc = 0;
341 diff --git a/drivers/char/tpm/tpm_ibmvtpm.h b/drivers/char/tpm/tpm_ibmvtpm.h
342 index bd82a791f995..b2c231b1beec 100644
343 --- a/drivers/char/tpm/tpm_ibmvtpm.h
344 +++ b/drivers/char/tpm/tpm_ibmvtpm.h
345 @@ -22,9 +22,9 @@
346 struct ibmvtpm_crq {
347 u8 valid;
348 u8 msg;
349 - u16 len;
350 - u32 data;
351 - u64 reserved;
352 + __be16 len;
353 + __be32 data;
354 + __be64 reserved;
355 } __attribute__((packed, aligned(8)));
356
357 struct ibmvtpm_crq_queue {
358 diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
359 index fc45567ad3ac..ec3bd62eeaf6 100644
360 --- a/drivers/char/virtio_console.c
361 +++ b/drivers/char/virtio_console.c
362 @@ -2023,12 +2023,13 @@ static int virtcons_probe(struct virtio_device *vdev)
363 spin_lock_init(&portdev->ports_lock);
364 INIT_LIST_HEAD(&portdev->ports);
365
366 + INIT_WORK(&portdev->control_work, &control_work_handler);
367 +
368 if (multiport) {
369 unsigned int nr_added_bufs;
370
371 spin_lock_init(&portdev->c_ivq_lock);
372 spin_lock_init(&portdev->c_ovq_lock);
373 - INIT_WORK(&portdev->control_work, &control_work_handler);
374
375 nr_added_bufs = fill_queue(portdev->c_ivq,
376 &portdev->c_ivq_lock);
377 diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
378 index ead08a49bec0..59ea6547306b 100644
379 --- a/drivers/gpu/drm/radeon/evergreen.c
380 +++ b/drivers/gpu/drm/radeon/evergreen.c
381 @@ -4016,6 +4016,9 @@ int evergreen_irq_set(struct radeon_device *rdev)
382 WREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, afmt5);
383 WREG32(AFMT_AUDIO_PACKET_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, afmt6);
384
385 + /* posting read */
386 + RREG32(SRBM_STATUS);
387 +
388 return 0;
389 }
390
391 diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
392 index 46470dd7c710..f9f0e3680d76 100644
393 --- a/drivers/gpu/drm/radeon/r100.c
394 +++ b/drivers/gpu/drm/radeon/r100.c
395 @@ -743,6 +743,10 @@ int r100_irq_set(struct radeon_device *rdev)
396 tmp |= RADEON_FP2_DETECT_MASK;
397 }
398 WREG32(RADEON_GEN_INT_CNTL, tmp);
399 +
400 + /* read back to post the write */
401 + RREG32(RADEON_GEN_INT_CNTL);
402 +
403 return 0;
404 }
405
406 diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
407 index 4cf21ec1abe3..90b007594e32 100644
408 --- a/drivers/gpu/drm/radeon/r600.c
409 +++ b/drivers/gpu/drm/radeon/r600.c
410 @@ -3459,6 +3459,9 @@ int r600_init(struct radeon_device *rdev)
411 rdev->accel_working = false;
412 }
413
414 + /* posting read */
415 + RREG32(R_000E50_SRBM_STATUS);
416 +
417 return 0;
418 }
419
420 diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
421 index 60af3cda587b..6627585da1e5 100644
422 --- a/drivers/gpu/drm/radeon/radeon_cs.c
423 +++ b/drivers/gpu/drm/radeon/radeon_cs.c
424 @@ -177,11 +177,13 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data)
425 u32 ring = RADEON_CS_RING_GFX;
426 s32 priority = 0;
427
428 + INIT_LIST_HEAD(&p->validated);
429 +
430 if (!cs->num_chunks) {
431 return 0;
432 }
433 +
434 /* get chunks */
435 - INIT_LIST_HEAD(&p->validated);
436 p->idx = 0;
437 p->ib.sa_bo = NULL;
438 p->ib.semaphore = NULL;
439 diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
440 index ae813fef0818..971d55f73e0c 100644
441 --- a/drivers/gpu/drm/radeon/rs600.c
442 +++ b/drivers/gpu/drm/radeon/rs600.c
443 @@ -636,6 +636,10 @@ int rs600_irq_set(struct radeon_device *rdev)
444 WREG32(R_007D18_DC_HOT_PLUG_DETECT2_INT_CONTROL, hpd2);
445 if (ASIC_IS_DCE2(rdev))
446 WREG32(R_007408_HDMI0_AUDIO_PACKET_CONTROL, hdmi0);
447 +
448 + /* posting read */
449 + RREG32(R_000040_GEN_INT_CNTL);
450 +
451 return 0;
452 }
453
454 diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
455 index 03add5d5542e..2410c38ff037 100644
456 --- a/drivers/gpu/drm/radeon/si.c
457 +++ b/drivers/gpu/drm/radeon/si.c
458 @@ -5704,8 +5704,7 @@ int si_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk)
459 WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_BYPASS_EN_MASK, ~UPLL_BYPASS_EN_MASK);
460
461 if (!vclk || !dclk) {
462 - /* keep the Bypass mode, put PLL to sleep */
463 - WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_SLEEP_MASK, ~UPLL_SLEEP_MASK);
464 + /* keep the Bypass mode */
465 return 0;
466 }
467
468 @@ -5721,8 +5720,7 @@ int si_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk)
469 /* set VCO_MODE to 1 */
470 WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_VCO_MODE_MASK, ~UPLL_VCO_MODE_MASK);
471
472 - /* toggle UPLL_SLEEP to 1 then back to 0 */
473 - WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_SLEEP_MASK, ~UPLL_SLEEP_MASK);
474 + /* disable sleep mode */
475 WREG32_P(CG_UPLL_FUNC_CNTL, 0, ~UPLL_SLEEP_MASK);
476
477 /* deassert UPLL_RESET */
478 @@ -5778,5 +5776,8 @@ int si_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk)
479
480 mdelay(100);
481
482 + /* posting read */
483 + RREG32(SRBM_STATUS);
484 +
485 return 0;
486 }
487 diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
488 index a4694aa20a3e..f66aeb79abdf 100644
489 --- a/drivers/net/can/dev.c
490 +++ b/drivers/net/can/dev.c
491 @@ -503,6 +503,14 @@ struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf)
492 skb->pkt_type = PACKET_BROADCAST;
493 skb->ip_summed = CHECKSUM_UNNECESSARY;
494
495 + skb_reset_mac_header(skb);
496 + skb_reset_network_header(skb);
497 + skb_reset_transport_header(skb);
498 +
499 + skb_reset_mac_header(skb);
500 + skb_reset_network_header(skb);
501 + skb_reset_transport_header(skb);
502 +
503 can_skb_reserve(skb);
504 can_skb_prv(skb)->ifindex = dev->ifindex;
505
506 diff --git a/drivers/net/usb/cx82310_eth.c b/drivers/net/usb/cx82310_eth.c
507 index 1e207f086b75..49ab45e17fe8 100644
508 --- a/drivers/net/usb/cx82310_eth.c
509 +++ b/drivers/net/usb/cx82310_eth.c
510 @@ -302,9 +302,18 @@ static const struct driver_info cx82310_info = {
511 .tx_fixup = cx82310_tx_fixup,
512 };
513
514 +#define USB_DEVICE_CLASS(vend, prod, cl, sc, pr) \
515 + .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
516 + USB_DEVICE_ID_MATCH_DEV_INFO, \
517 + .idVendor = (vend), \
518 + .idProduct = (prod), \
519 + .bDeviceClass = (cl), \
520 + .bDeviceSubClass = (sc), \
521 + .bDeviceProtocol = (pr)
522 +
523 static const struct usb_device_id products[] = {
524 {
525 - USB_DEVICE_AND_INTERFACE_INFO(0x0572, 0xcb01, 0xff, 0, 0),
526 + USB_DEVICE_CLASS(0x0572, 0xcb01, 0xff, 0, 0),
527 .driver_info = (unsigned long) &cx82310_info
528 },
529 { },
530 diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
531 index e873e8f0070d..283212aa103c 100644
532 --- a/drivers/regulator/core.c
533 +++ b/drivers/regulator/core.c
534 @@ -1596,10 +1596,12 @@ static int _regulator_do_enable(struct regulator_dev *rdev)
535 trace_regulator_enable(rdev_get_name(rdev));
536
537 if (rdev->ena_pin) {
538 - ret = regulator_ena_gpio_ctrl(rdev, true);
539 - if (ret < 0)
540 - return ret;
541 - rdev->ena_gpio_state = 1;
542 + if (!rdev->ena_gpio_state) {
543 + ret = regulator_ena_gpio_ctrl(rdev, true);
544 + if (ret < 0)
545 + return ret;
546 + rdev->ena_gpio_state = 1;
547 + }
548 } else if (rdev->desc->ops->enable) {
549 ret = rdev->desc->ops->enable(rdev);
550 if (ret < 0)
551 @@ -1701,10 +1703,12 @@ static int _regulator_do_disable(struct regulator_dev *rdev)
552 trace_regulator_disable(rdev_get_name(rdev));
553
554 if (rdev->ena_pin) {
555 - ret = regulator_ena_gpio_ctrl(rdev, false);
556 - if (ret < 0)
557 - return ret;
558 - rdev->ena_gpio_state = 0;
559 + if (rdev->ena_gpio_state) {
560 + ret = regulator_ena_gpio_ctrl(rdev, false);
561 + if (ret < 0)
562 + return ret;
563 + rdev->ena_gpio_state = 0;
564 + }
565
566 } else if (rdev->desc->ops->disable) {
567 ret = rdev->desc->ops->disable(rdev);
568 @@ -3614,12 +3618,6 @@ regulator_register(const struct regulator_desc *regulator_desc,
569 config->ena_gpio, ret);
570 goto wash;
571 }
572 -
573 - if (config->ena_gpio_flags & GPIOF_OUT_INIT_HIGH)
574 - rdev->ena_gpio_state = 1;
575 -
576 - if (config->ena_gpio_invert)
577 - rdev->ena_gpio_state = !rdev->ena_gpio_state;
578 }
579
580 /* set regulator constraints */
581 @@ -3788,9 +3786,11 @@ int regulator_suspend_finish(void)
582 list_for_each_entry(rdev, &regulator_list, list) {
583 mutex_lock(&rdev->mutex);
584 if (rdev->use_count > 0 || rdev->constraints->always_on) {
585 - error = _regulator_do_enable(rdev);
586 - if (error)
587 - ret = error;
588 + if (!_regulator_is_enabled(rdev)) {
589 + error = _regulator_do_enable(rdev);
590 + if (error)
591 + ret = error;
592 + }
593 } else {
594 if (!has_full_constraints)
595 goto unlock;
596 diff --git a/drivers/scsi/libsas/sas_discover.c b/drivers/scsi/libsas/sas_discover.c
597 index 62b58d38ce2e..60de66252fa2 100644
598 --- a/drivers/scsi/libsas/sas_discover.c
599 +++ b/drivers/scsi/libsas/sas_discover.c
600 @@ -500,6 +500,7 @@ static void sas_revalidate_domain(struct work_struct *work)
601 struct sas_discovery_event *ev = to_sas_discovery_event(work);
602 struct asd_sas_port *port = ev->port;
603 struct sas_ha_struct *ha = port->ha;
604 + struct domain_device *ddev = port->port_dev;
605
606 /* prevent revalidation from finding sata links in recovery */
607 mutex_lock(&ha->disco_mutex);
608 @@ -514,8 +515,9 @@ static void sas_revalidate_domain(struct work_struct *work)
609 SAS_DPRINTK("REVALIDATING DOMAIN on port %d, pid:%d\n", port->id,
610 task_pid_nr(current));
611
612 - if (port->port_dev)
613 - res = sas_ex_revalidate_domain(port->port_dev);
614 + if (ddev && (ddev->dev_type == SAS_FANOUT_EXPANDER_DEVICE ||
615 + ddev->dev_type == SAS_EDGE_EXPANDER_DEVICE))
616 + res = sas_ex_revalidate_domain(ddev);
617
618 SAS_DPRINTK("done REVALIDATING DOMAIN on port %d, pid:%d, res 0x%x\n",
619 port->id, task_pid_nr(current), res);
620 diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c
621 index 5266c89fc989..a6f0878d9bf1 100644
622 --- a/drivers/spi/spi-pl022.c
623 +++ b/drivers/spi/spi-pl022.c
624 @@ -508,12 +508,12 @@ static void giveback(struct pl022 *pl022)
625 pl022->cur_msg = NULL;
626 pl022->cur_transfer = NULL;
627 pl022->cur_chip = NULL;
628 - spi_finalize_current_message(pl022->master);
629
630 /* disable the SPI/SSP operation */
631 writew((readw(SSP_CR1(pl022->virtbase)) &
632 (~SSP_CR1_MASK_SSE)), SSP_CR1(pl022->virtbase));
633
634 + spi_finalize_current_message(pl022->master);
635 }
636
637 /**
638 diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
639 index 651b5768862f..9559ea749d83 100644
640 --- a/drivers/target/iscsi/iscsi_target.c
641 +++ b/drivers/target/iscsi/iscsi_target.c
642 @@ -4136,11 +4136,17 @@ int iscsit_close_connection(
643 pr_debug("Closing iSCSI connection CID %hu on SID:"
644 " %u\n", conn->cid, sess->sid);
645 /*
646 - * Always up conn_logout_comp just in case the RX Thread is sleeping
647 - * and the logout response never got sent because the connection
648 - * failed.
649 + * Always up conn_logout_comp for the traditional TCP case just in case
650 + * the RX Thread in iscsi_target_rx_opcode() is sleeping and the logout
651 + * response never got sent because the connection failed.
652 + *
653 + * However for iser-target, isert_wait4logout() is using conn_logout_comp
654 + * to signal logout response TX interrupt completion. Go ahead and skip
655 + * this for iser since isert_rx_opcode() does not wait on logout failure,
656 + * and to avoid iscsi_conn pointer dereference in iser-target code.
657 */
658 - complete(&conn->conn_logout_comp);
659 + if (conn->conn_transport->transport_type == ISCSI_TCP)
660 + complete(&conn->conn_logout_comp);
661
662 iscsi_release_thread_set(conn);
663
664 diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
665 index 27ec6e4d1c7c..7f85f4a6d73a 100644
666 --- a/drivers/target/target_core_pr.c
667 +++ b/drivers/target/target_core_pr.c
668 @@ -518,6 +518,18 @@ static int core_scsi3_pr_seq_non_holder(
669
670 return 0;
671 }
672 + } else if (we && registered_nexus) {
673 + /*
674 + * Reads are allowed for Write Exclusive locks
675 + * from all registrants.
676 + */
677 + if (cmd->data_direction == DMA_FROM_DEVICE) {
678 + pr_debug("Allowing READ CDB: 0x%02x for %s"
679 + " reservation\n", cdb[0],
680 + core_scsi3_pr_dump_type(pr_reg_type));
681 +
682 + return 0;
683 + }
684 }
685 pr_debug("%s Conflict for %sregistered nexus %s CDB: 0x%2x"
686 " for %s reservation\n", transport_dump_cmd_direction(cmd),
687 @@ -2397,6 +2409,7 @@ core_scsi3_pro_reserve(struct se_cmd *cmd, int type, int scope, u64 res_key)
688 spin_lock(&dev->dev_reservation_lock);
689 pr_res_holder = dev->dev_pr_res_holder;
690 if (pr_res_holder) {
691 + int pr_res_type = pr_res_holder->pr_res_type;
692 /*
693 * From spc4r17 Section 5.7.9: Reserving:
694 *
695 @@ -2407,7 +2420,9 @@ core_scsi3_pro_reserve(struct se_cmd *cmd, int type, int scope, u64 res_key)
696 * the logical unit, then the command shall be completed with
697 * RESERVATION CONFLICT status.
698 */
699 - if (pr_res_holder != pr_reg) {
700 + if ((pr_res_holder != pr_reg) &&
701 + (pr_res_type != PR_TYPE_WRITE_EXCLUSIVE_ALLREG) &&
702 + (pr_res_type != PR_TYPE_EXCLUSIVE_ACCESS_ALLREG)) {
703 struct se_node_acl *pr_res_nacl = pr_res_holder->pr_reg_nacl;
704 pr_err("SPC-3 PR: Attempted RESERVE from"
705 " [%s]: %s while reservation already held by"
706 @@ -4012,7 +4027,8 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)
707 unsigned char *buf;
708 u32 add_desc_len = 0, add_len = 0, desc_len, exp_desc_len;
709 u32 off = 8; /* off into first Full Status descriptor */
710 - int format_code = 0;
711 + int format_code = 0, pr_res_type = 0, pr_res_scope = 0;
712 + bool all_reg = false;
713
714 if (cmd->data_length < 8) {
715 pr_err("PRIN SA READ_FULL_STATUS SCSI Data Length: %u"
716 @@ -4029,6 +4045,19 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)
717 buf[2] = ((dev->t10_pr.pr_generation >> 8) & 0xff);
718 buf[3] = (dev->t10_pr.pr_generation & 0xff);
719
720 + spin_lock(&dev->dev_reservation_lock);
721 + if (dev->dev_pr_res_holder) {
722 + struct t10_pr_registration *pr_holder = dev->dev_pr_res_holder;
723 +
724 + if (pr_holder->pr_res_type == PR_TYPE_WRITE_EXCLUSIVE_ALLREG ||
725 + pr_holder->pr_res_type == PR_TYPE_EXCLUSIVE_ACCESS_ALLREG) {
726 + all_reg = true;
727 + pr_res_type = pr_holder->pr_res_type;
728 + pr_res_scope = pr_holder->pr_res_scope;
729 + }
730 + }
731 + spin_unlock(&dev->dev_reservation_lock);
732 +
733 spin_lock(&pr_tmpl->registration_lock);
734 list_for_each_entry_safe(pr_reg, pr_reg_tmp,
735 &pr_tmpl->registration_list, pr_reg_list) {
736 @@ -4078,14 +4107,20 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)
737 * reservation holder for PR_HOLDER bit.
738 *
739 * Also, if this registration is the reservation
740 - * holder, fill in SCOPE and TYPE in the next byte.
741 + * holder or there is an All Registrants reservation
742 + * active, fill in SCOPE and TYPE in the next byte.
743 */
744 if (pr_reg->pr_res_holder) {
745 buf[off++] |= 0x01;
746 buf[off++] = (pr_reg->pr_res_scope & 0xf0) |
747 (pr_reg->pr_res_type & 0x0f);
748 - } else
749 + } else if (all_reg) {
750 + buf[off++] |= 0x01;
751 + buf[off++] = (pr_res_scope & 0xf0) |
752 + (pr_res_type & 0x0f);
753 + } else {
754 off += 2;
755 + }
756
757 off += 4; /* Skip over reserved area */
758 /*
759 diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c
760 index 3250ba2594e0..b1e77ff9a636 100644
761 --- a/drivers/target/target_core_pscsi.c
762 +++ b/drivers/target/target_core_pscsi.c
763 @@ -1112,7 +1112,7 @@ static u32 pscsi_get_device_type(struct se_device *dev)
764 struct pscsi_dev_virt *pdv = PSCSI_DEV(dev);
765 struct scsi_device *sd = pdv->pdv_sd;
766
767 - return sd->type;
768 + return (sd) ? sd->type : TYPE_NO_LUN;
769 }
770
771 static sector_t pscsi_get_blocks(struct se_device *dev)
772 diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
773 index dcc5daa0ff1c..daf0f6357bb3 100644
774 --- a/drivers/target/target_core_transport.c
775 +++ b/drivers/target/target_core_transport.c
776 @@ -2222,6 +2222,10 @@ int target_get_sess_cmd(struct se_session *se_sess, struct se_cmd *se_cmd,
777
778 out:
779 spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
780 +
781 + if (ret && ack_kref)
782 + target_put_sess_cmd(se_sess, se_cmd);
783 +
784 return ret;
785 }
786 EXPORT_SYMBOL(target_get_sess_cmd);
787 diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
788 index 8d3c0b5e2878..98b8423793fd 100644
789 --- a/drivers/tty/serial/8250/8250_pci.c
790 +++ b/drivers/tty/serial/8250/8250_pci.c
791 @@ -68,7 +68,7 @@ static void moan_device(const char *str, struct pci_dev *dev)
792 "Please send the output of lspci -vv, this\n"
793 "message (0x%04x,0x%04x,0x%04x,0x%04x), the\n"
794 "manufacturer and name of serial board or\n"
795 - "modem board to rmk+serial@arm.linux.org.uk.\n",
796 + "modem board to <linux-serial@vger.kernel.org>.\n",
797 pci_name(dev), str, dev->vendor, dev->device,
798 dev->subsystem_vendor, dev->subsystem_device);
799 }
800 diff --git a/drivers/xen/xen-pciback/conf_space.c b/drivers/xen/xen-pciback/conf_space.c
801 index 46ae0f9f02ad..75fe3d466515 100644
802 --- a/drivers/xen/xen-pciback/conf_space.c
803 +++ b/drivers/xen/xen-pciback/conf_space.c
804 @@ -16,7 +16,7 @@
805 #include "conf_space.h"
806 #include "conf_space_quirks.h"
807
808 -static bool permissive;
809 +bool permissive;
810 module_param(permissive, bool, 0644);
811
812 /* This is where xen_pcibk_read_config_byte, xen_pcibk_read_config_word,
813 diff --git a/drivers/xen/xen-pciback/conf_space.h b/drivers/xen/xen-pciback/conf_space.h
814 index e56c934ad137..2e1d73d1d5d0 100644
815 --- a/drivers/xen/xen-pciback/conf_space.h
816 +++ b/drivers/xen/xen-pciback/conf_space.h
817 @@ -64,6 +64,8 @@ struct config_field_entry {
818 void *data;
819 };
820
821 +extern bool permissive;
822 +
823 #define OFFSET(cfg_entry) ((cfg_entry)->base_offset+(cfg_entry)->field->offset)
824
825 /* Add fields to a device - the add_fields macro expects to get a pointer to
826 diff --git a/drivers/xen/xen-pciback/conf_space_header.c b/drivers/xen/xen-pciback/conf_space_header.c
827 index 3daf862d739d..a5bb81a600f7 100644
828 --- a/drivers/xen/xen-pciback/conf_space_header.c
829 +++ b/drivers/xen/xen-pciback/conf_space_header.c
830 @@ -9,6 +9,10 @@
831 #include "pciback.h"
832 #include "conf_space.h"
833
834 +struct pci_cmd_info {
835 + u16 val;
836 +};
837 +
838 struct pci_bar_info {
839 u32 val;
840 u32 len_val;
841 @@ -18,22 +22,36 @@ struct pci_bar_info {
842 #define is_enable_cmd(value) ((value)&(PCI_COMMAND_MEMORY|PCI_COMMAND_IO))
843 #define is_master_cmd(value) ((value)&PCI_COMMAND_MASTER)
844
845 -static int command_read(struct pci_dev *dev, int offset, u16 *value, void *data)
846 +/* Bits guests are allowed to control in permissive mode. */
847 +#define PCI_COMMAND_GUEST (PCI_COMMAND_MASTER|PCI_COMMAND_SPECIAL| \
848 + PCI_COMMAND_INVALIDATE|PCI_COMMAND_VGA_PALETTE| \
849 + PCI_COMMAND_WAIT|PCI_COMMAND_FAST_BACK)
850 +
851 +static void *command_init(struct pci_dev *dev, int offset)
852 {
853 - int i;
854 - int ret;
855 -
856 - ret = xen_pcibk_read_config_word(dev, offset, value, data);
857 - if (!pci_is_enabled(dev))
858 - return ret;
859 -
860 - for (i = 0; i < PCI_ROM_RESOURCE; i++) {
861 - if (dev->resource[i].flags & IORESOURCE_IO)
862 - *value |= PCI_COMMAND_IO;
863 - if (dev->resource[i].flags & IORESOURCE_MEM)
864 - *value |= PCI_COMMAND_MEMORY;
865 + struct pci_cmd_info *cmd = kmalloc(sizeof(*cmd), GFP_KERNEL);
866 + int err;
867 +
868 + if (!cmd)
869 + return ERR_PTR(-ENOMEM);
870 +
871 + err = pci_read_config_word(dev, PCI_COMMAND, &cmd->val);
872 + if (err) {
873 + kfree(cmd);
874 + return ERR_PTR(err);
875 }
876
877 + return cmd;
878 +}
879 +
880 +static int command_read(struct pci_dev *dev, int offset, u16 *value, void *data)
881 +{
882 + int ret = pci_read_config_word(dev, offset, value);
883 + const struct pci_cmd_info *cmd = data;
884 +
885 + *value &= PCI_COMMAND_GUEST;
886 + *value |= cmd->val & ~PCI_COMMAND_GUEST;
887 +
888 return ret;
889 }
890
891 @@ -41,6 +59,8 @@ static int command_write(struct pci_dev *dev, int offset, u16 value, void *data)
892 {
893 struct xen_pcibk_dev_data *dev_data;
894 int err;
895 + u16 val;
896 + struct pci_cmd_info *cmd = data;
897
898 dev_data = pci_get_drvdata(dev);
899 if (!pci_is_enabled(dev) && is_enable_cmd(value)) {
900 @@ -83,6 +103,19 @@ static int command_write(struct pci_dev *dev, int offset, u16 value, void *data)
901 }
902 }
903
904 + cmd->val = value;
905 +
906 + if (!permissive && (!dev_data || !dev_data->permissive))
907 + return 0;
908 +
909 + /* Only allow the guest to control certain bits. */
910 + err = pci_read_config_word(dev, offset, &val);
911 + if (err || val == value)
912 + return err;
913 +
914 + value &= PCI_COMMAND_GUEST;
915 + value |= val & ~PCI_COMMAND_GUEST;
916 +
917 return pci_write_config_word(dev, offset, value);
918 }
919
920 @@ -282,6 +315,8 @@ static const struct config_field header_common[] = {
921 {
922 .offset = PCI_COMMAND,
923 .size = 2,
924 + .init = command_init,
925 + .release = bar_release,
926 .u.w.read = command_read,
927 .u.w.write = command_write,
928 },
929 diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
930 index 23bf1a52a5da..b535008b6c4c 100644
931 --- a/fs/fuse/dev.c
932 +++ b/fs/fuse/dev.c
933 @@ -819,8 +819,8 @@ static int fuse_try_move_page(struct fuse_copy_state *cs, struct page **pagep)
934
935 newpage = buf->page;
936
937 - if (WARN_ON(!PageUptodate(newpage)))
938 - return -EIO;
939 + if (!PageUptodate(newpage))
940 + SetPageUptodate(newpage);
941
942 ClearPageMappedToDisk(newpage);
943
944 @@ -1725,6 +1725,9 @@ copy_finish:
945 static int fuse_notify(struct fuse_conn *fc, enum fuse_notify_code code,
946 unsigned int size, struct fuse_copy_state *cs)
947 {
948 + /* Don't try to move pages (yet) */
949 + cs->move_pages = 0;
950 +
951 switch (code) {
952 case FUSE_NOTIFY_POLL:
953 return fuse_notify_poll(fc, size, cs);
954 diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
955 index b3c95c1a4700..99294a286e66 100644
956 --- a/fs/nilfs2/segment.c
957 +++ b/fs/nilfs2/segment.c
958 @@ -1906,6 +1906,7 @@ static void nilfs_segctor_drop_written_files(struct nilfs_sc_info *sci,
959 struct the_nilfs *nilfs)
960 {
961 struct nilfs_inode_info *ii, *n;
962 + int during_mount = !(sci->sc_super->s_flags & MS_ACTIVE);
963 int defer_iput = false;
964
965 spin_lock(&nilfs->ns_inode_lock);
966 @@ -1918,10 +1919,10 @@ static void nilfs_segctor_drop_written_files(struct nilfs_sc_info *sci,
967 brelse(ii->i_bh);
968 ii->i_bh = NULL;
969 list_del_init(&ii->i_dirty);
970 - if (!ii->vfs_inode.i_nlink) {
971 + if (!ii->vfs_inode.i_nlink || during_mount) {
972 /*
973 - * Defer calling iput() to avoid a deadlock
974 - * over I_SYNC flag for inodes with i_nlink == 0
975 + * Defer calling iput() to avoid deadlocks if
976 + * i_nlink == 0 or mount is not yet finished.
977 */
978 list_add_tail(&ii->i_dirty, &sci->sc_iput_queue);
979 defer_iput = true;
980 diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h
981 index ff28cf578d01..120dd354849d 100644
982 --- a/include/linux/workqueue.h
983 +++ b/include/linux/workqueue.h
984 @@ -71,7 +71,8 @@ enum {
985 /* data contains off-queue information when !WORK_STRUCT_PWQ */
986 WORK_OFFQ_FLAG_BASE = WORK_STRUCT_COLOR_SHIFT,
987
988 - WORK_OFFQ_CANCELING = (1 << WORK_OFFQ_FLAG_BASE),
989 + __WORK_OFFQ_CANCELING = WORK_OFFQ_FLAG_BASE,
990 + WORK_OFFQ_CANCELING = (1 << __WORK_OFFQ_CANCELING),
991
992 /*
993 * When a work item is off queue, its high bits point to the last
994 diff --git a/kernel/workqueue.c b/kernel/workqueue.c
995 index 16730a9c8cac..fe7c4b91d2e7 100644
996 --- a/kernel/workqueue.c
997 +++ b/kernel/workqueue.c
998 @@ -2861,19 +2861,57 @@ bool flush_work(struct work_struct *work)
999 }
1000 EXPORT_SYMBOL_GPL(flush_work);
1001
1002 +struct cwt_wait {
1003 + wait_queue_t wait;
1004 + struct work_struct *work;
1005 +};
1006 +
1007 +static int cwt_wakefn(wait_queue_t *wait, unsigned mode, int sync, void *key)
1008 +{
1009 + struct cwt_wait *cwait = container_of(wait, struct cwt_wait, wait);
1010 +
1011 + if (cwait->work != key)
1012 + return 0;
1013 + return autoremove_wake_function(wait, mode, sync, key);
1014 +}
1015 +
1016 static bool __cancel_work_timer(struct work_struct *work, bool is_dwork)
1017 {
1018 + static DECLARE_WAIT_QUEUE_HEAD(cancel_waitq);
1019 unsigned long flags;
1020 int ret;
1021
1022 do {
1023 ret = try_to_grab_pending(work, is_dwork, &flags);
1024 /*
1025 - * If someone else is canceling, wait for the same event it
1026 - * would be waiting for before retrying.
1027 + * If someone else is already canceling, wait for it to
1028 + * finish. flush_work() doesn't work for PREEMPT_NONE
1029 + * because we may get scheduled between @work's completion
1030 + * and the other canceling task resuming and clearing
1031 + * CANCELING - flush_work() will return false immediately
1032 + * as @work is no longer busy, try_to_grab_pending() will
1033 + * return -ENOENT as @work is still being canceled and the
1034 + * other canceling task won't be able to clear CANCELING as
1035 + * we're hogging the CPU.
1036 + *
1037 + * Let's wait for completion using a waitqueue. As this
1038 + * may lead to the thundering herd problem, use a custom
1039 + * wake function which matches @work along with exclusive
1040 + * wait and wakeup.
1041 */
1042 - if (unlikely(ret == -ENOENT))
1043 - flush_work(work);
1044 + if (unlikely(ret == -ENOENT)) {
1045 + struct cwt_wait cwait;
1046 +
1047 + init_wait(&cwait.wait);
1048 + cwait.wait.func = cwt_wakefn;
1049 + cwait.work = work;
1050 +
1051 + prepare_to_wait_exclusive(&cancel_waitq, &cwait.wait,
1052 + TASK_UNINTERRUPTIBLE);
1053 + if (work_is_canceling(work))
1054 + schedule();
1055 + finish_wait(&cancel_waitq, &cwait.wait);
1056 + }
1057 } while (unlikely(ret < 0));
1058
1059 /* tell other tasks trying to grab @work to back off */
1060 @@ -2882,6 +2920,16 @@ static bool __cancel_work_timer(struct work_struct *work, bool is_dwork)
1061
1062 flush_work(work);
1063 clear_work_data(work);
1064 +
1065 + /*
1066 + * Paired with prepare_to_wait() above so that either
1067 + * waitqueue_active() is visible here or !work_is_canceling() is
1068 + * visible there.
1069 + */
1070 + smp_mb();
1071 + if (waitqueue_active(&cancel_waitq))
1072 + __wake_up(&cancel_waitq, TASK_NORMAL, 1, work);
1073 +
1074 return ret;
1075 }
1076
1077 diff --git a/net/caif/caif_socket.c b/net/caif/caif_socket.c
1078 index d6be3edb7a43..526bf56f4d31 100644
1079 --- a/net/caif/caif_socket.c
1080 +++ b/net/caif/caif_socket.c
1081 @@ -283,7 +283,7 @@ static int caif_seqpkt_recvmsg(struct kiocb *iocb, struct socket *sock,
1082 int copylen;
1083
1084 ret = -EOPNOTSUPP;
1085 - if (m->msg_flags&MSG_OOB)
1086 + if (flags & MSG_OOB)
1087 goto read_error;
1088
1089 skb = skb_recv_datagram(sk, flags, 0 , &ret);
1090 diff --git a/net/can/af_can.c b/net/can/af_can.c
1091 index f59859a3f562..d3668c55b088 100644
1092 --- a/net/can/af_can.c
1093 +++ b/net/can/af_can.c
1094 @@ -262,6 +262,9 @@ int can_send(struct sk_buff *skb, int loop)
1095 goto inval_skb;
1096 }
1097
1098 + skb->ip_summed = CHECKSUM_UNNECESSARY;
1099 +
1100 + skb_reset_mac_header(skb);
1101 skb_reset_network_header(skb);
1102 skb_reset_transport_header(skb);
1103
1104 diff --git a/net/compat.c b/net/compat.c
1105 index 275af79c131b..d12529050b29 100644
1106 --- a/net/compat.c
1107 +++ b/net/compat.c
1108 @@ -71,6 +71,13 @@ int get_compat_msghdr(struct msghdr *kmsg, struct compat_msghdr __user *umsg)
1109 __get_user(kmsg->msg_controllen, &umsg->msg_controllen) ||
1110 __get_user(kmsg->msg_flags, &umsg->msg_flags))
1111 return -EFAULT;
1112 +
1113 + if (!tmp1)
1114 + kmsg->msg_namelen = 0;
1115 +
1116 + if (kmsg->msg_namelen < 0)
1117 + return -EINVAL;
1118 +
1119 if (kmsg->msg_namelen > sizeof(struct sockaddr_storage))
1120 kmsg->msg_namelen = sizeof(struct sockaddr_storage);
1121 kmsg->msg_name = compat_ptr(tmp1);
1122 diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
1123 index 2ff093b7c45e..0a327b66a344 100644
1124 --- a/net/core/sysctl_net_core.c
1125 +++ b/net/core/sysctl_net_core.c
1126 @@ -23,6 +23,8 @@
1127 static int zero = 0;
1128 static int one = 1;
1129 static int ushort_max = USHRT_MAX;
1130 +static int min_sndbuf = SOCK_MIN_SNDBUF;
1131 +static int min_rcvbuf = SOCK_MIN_RCVBUF;
1132
1133 #ifdef CONFIG_RPS
1134 static int rps_sock_flow_sysctl(ctl_table *table, int write,
1135 @@ -97,7 +99,7 @@ static struct ctl_table net_core_table[] = {
1136 .maxlen = sizeof(int),
1137 .mode = 0644,
1138 .proc_handler = proc_dointvec_minmax,
1139 - .extra1 = &one,
1140 + .extra1 = &min_sndbuf,
1141 },
1142 {
1143 .procname = "rmem_max",
1144 @@ -105,7 +107,7 @@ static struct ctl_table net_core_table[] = {
1145 .maxlen = sizeof(int),
1146 .mode = 0644,
1147 .proc_handler = proc_dointvec_minmax,
1148 - .extra1 = &one,
1149 + .extra1 = &min_rcvbuf,
1150 },
1151 {
1152 .procname = "wmem_default",
1153 @@ -113,7 +115,7 @@ static struct ctl_table net_core_table[] = {
1154 .maxlen = sizeof(int),
1155 .mode = 0644,
1156 .proc_handler = proc_dointvec_minmax,
1157 - .extra1 = &one,
1158 + .extra1 = &min_sndbuf,
1159 },
1160 {
1161 .procname = "rmem_default",
1162 @@ -121,7 +123,7 @@ static struct ctl_table net_core_table[] = {
1163 .maxlen = sizeof(int),
1164 .mode = 0644,
1165 .proc_handler = proc_dointvec_minmax,
1166 - .extra1 = &one,
1167 + .extra1 = &min_rcvbuf,
1168 },
1169 {
1170 .procname = "dev_weight",
1171 diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c
1172 index 45dbdab915e2..14a1ed611b05 100644
1173 --- a/net/ipv4/inet_diag.c
1174 +++ b/net/ipv4/inet_diag.c
1175 @@ -71,6 +71,20 @@ static inline void inet_diag_unlock_handler(
1176 mutex_unlock(&inet_diag_table_mutex);
1177 }
1178
1179 +static size_t inet_sk_attr_size(void)
1180 +{
1181 + return nla_total_size(sizeof(struct tcp_info))
1182 + + nla_total_size(1) /* INET_DIAG_SHUTDOWN */
1183 + + nla_total_size(1) /* INET_DIAG_TOS */
1184 + + nla_total_size(1) /* INET_DIAG_TCLASS */
1185 + + nla_total_size(sizeof(struct inet_diag_meminfo))
1186 + + nla_total_size(sizeof(struct inet_diag_msg))
1187 + + nla_total_size(SK_MEMINFO_VARS * sizeof(u32))
1188 + + nla_total_size(TCP_CA_NAME_MAX)
1189 + + nla_total_size(sizeof(struct tcpvegas_info))
1190 + + 64;
1191 +}
1192 +
1193 int inet_sk_diag_fill(struct sock *sk, struct inet_connection_sock *icsk,
1194 struct sk_buff *skb, struct inet_diag_req_v2 *req,
1195 struct user_namespace *user_ns,
1196 @@ -326,9 +340,7 @@ int inet_diag_dump_one_icsk(struct inet_hashinfo *hashinfo, struct sk_buff *in_s
1197 if (err)
1198 goto out;
1199
1200 - rep = nlmsg_new(sizeof(struct inet_diag_msg) +
1201 - sizeof(struct inet_diag_meminfo) +
1202 - sizeof(struct tcp_info) + 64, GFP_KERNEL);
1203 + rep = nlmsg_new(inet_sk_attr_size(), GFP_KERNEL);
1204 if (!rep) {
1205 err = -ENOMEM;
1206 goto out;
1207 diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
1208 index 923146c4f007..913dc4f49b10 100644
1209 --- a/net/ipv4/tcp_output.c
1210 +++ b/net/ipv4/tcp_output.c
1211 @@ -2593,15 +2593,11 @@ void tcp_send_fin(struct sock *sk)
1212 } else {
1213 /* Socket is locked, keep trying until memory is available. */
1214 for (;;) {
1215 - skb = alloc_skb_fclone(MAX_TCP_HEADER,
1216 - sk->sk_allocation);
1217 + skb = sk_stream_alloc_skb(sk, 0, sk->sk_allocation);
1218 if (skb)
1219 break;
1220 yield();
1221 }
1222 -
1223 - /* Reserve space for headers and prepare control bits. */
1224 - skb_reserve(skb, MAX_TCP_HEADER);
1225 /* FIN eats a sequence byte, write_seq advanced by tcp_queue_skb(). */
1226 tcp_init_nondata_skb(skb, tp->write_seq,
1227 TCPHDR_ACK | TCPHDR_FIN);
1228 @@ -2875,9 +2871,9 @@ static int tcp_send_syn_data(struct sock *sk, struct sk_buff *syn)
1229 {
1230 struct tcp_sock *tp = tcp_sk(sk);
1231 struct tcp_fastopen_request *fo = tp->fastopen_req;
1232 - int syn_loss = 0, space, i, err = 0, iovlen = fo->data->msg_iovlen;
1233 - struct sk_buff *syn_data = NULL, *data;
1234 + int syn_loss = 0, space, err = 0;
1235 unsigned long last_syn_loss = 0;
1236 + struct sk_buff *syn_data;
1237
1238 tp->rx_opt.mss_clamp = tp->advmss; /* If MSS is not cached */
1239 tcp_fastopen_cache_get(sk, &tp->rx_opt.mss_clamp, &fo->cookie,
1240 @@ -2908,42 +2904,38 @@ static int tcp_send_syn_data(struct sock *sk, struct sk_buff *syn)
1241 /* limit to order-0 allocations */
1242 space = min_t(size_t, space, SKB_MAX_HEAD(MAX_TCP_HEADER));
1243
1244 - syn_data = skb_copy_expand(syn, MAX_TCP_HEADER, space,
1245 - sk->sk_allocation);
1246 - if (syn_data == NULL)
1247 + syn_data = sk_stream_alloc_skb(sk, space, sk->sk_allocation);
1248 + if (!syn_data)
1249 goto fallback;
1250 + syn_data->ip_summed = CHECKSUM_PARTIAL;
1251 + memcpy(syn_data->cb, syn->cb, sizeof(syn->cb));
1252 + if (unlikely(memcpy_fromiovecend(skb_put(syn_data, space),
1253 + fo->data->msg_iov, 0, space))) {
1254 + kfree_skb(syn_data);
1255 + goto fallback;
1256 + }
1257
1258 - for (i = 0; i < iovlen && syn_data->len < space; ++i) {
1259 - struct iovec *iov = &fo->data->msg_iov[i];
1260 - unsigned char __user *from = iov->iov_base;
1261 - int len = iov->iov_len;
1262 -
1263 - if (syn_data->len + len > space)
1264 - len = space - syn_data->len;
1265 - else if (i + 1 == iovlen)
1266 - /* No more data pending in inet_wait_for_connect() */
1267 - fo->data = NULL;
1268 + /* No more data pending in inet_wait_for_connect() */
1269 + if (space == fo->size)
1270 + fo->data = NULL;
1271 + fo->copied = space;
1272
1273 - if (skb_add_data(syn_data, from, len))
1274 - goto fallback;
1275 - }
1276 + tcp_connect_queue_skb(sk, syn_data);
1277
1278 - /* Queue a data-only packet after the regular SYN for retransmission */
1279 - data = pskb_copy(syn_data, sk->sk_allocation);
1280 - if (data == NULL)
1281 - goto fallback;
1282 - TCP_SKB_CB(data)->seq++;
1283 - TCP_SKB_CB(data)->tcp_flags &= ~TCPHDR_SYN;
1284 - TCP_SKB_CB(data)->tcp_flags = (TCPHDR_ACK|TCPHDR_PSH);
1285 - tcp_connect_queue_skb(sk, data);
1286 - fo->copied = data->len;
1287 + err = tcp_transmit_skb(sk, syn_data, 1, sk->sk_allocation);
1288
1289 - if (tcp_transmit_skb(sk, syn_data, 0, sk->sk_allocation) == 0) {
1290 + /* Now full SYN+DATA was cloned and sent (or not),
1291 + * remove the SYN from the original skb (syn_data)
1292 + * we keep in write queue in case of a retransmit, as we
1293 + * also have the SYN packet (with no data) in the same queue.
1294 + */
1295 + TCP_SKB_CB(syn_data)->seq++;
1296 + TCP_SKB_CB(syn_data)->tcp_flags = TCPHDR_ACK | TCPHDR_PSH;
1297 + if (!err) {
1298 tp->syn_data = (fo->copied > 0);
1299 NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPFASTOPENACTIVE);
1300 goto done;
1301 }
1302 - syn_data = NULL;
1303
1304 fallback:
1305 /* Send a regular SYN with Fast Open cookie request option */
1306 @@ -2952,7 +2944,6 @@ fallback:
1307 err = tcp_transmit_skb(sk, syn, 1, sk->sk_allocation);
1308 if (err)
1309 tp->syn_fastopen = 0;
1310 - kfree_skb(syn_data);
1311 done:
1312 fo->cookie.len = -1; /* Exclude Fast Open option for SYN retries */
1313 return err;
1314 @@ -2972,13 +2963,10 @@ int tcp_connect(struct sock *sk)
1315 return 0;
1316 }
1317
1318 - buff = alloc_skb_fclone(MAX_TCP_HEADER + 15, sk->sk_allocation);
1319 - if (unlikely(buff == NULL))
1320 + buff = sk_stream_alloc_skb(sk, 0, sk->sk_allocation);
1321 + if (unlikely(!buff))
1322 return -ENOBUFS;
1323
1324 - /* Reserve space for headers. */
1325 - skb_reserve(buff, MAX_TCP_HEADER);
1326 -
1327 tcp_init_nondata_skb(buff, tp->write_seq++, TCPHDR_SYN);
1328 tp->retrans_stamp = TCP_SKB_CB(buff)->when = tcp_time_stamp;
1329 tcp_connect_queue_skb(sk, buff);
1330 diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c
1331 index 26b9a986a87f..1c6a71c41e62 100644
1332 --- a/net/netfilter/ipvs/ip_vs_core.c
1333 +++ b/net/netfilter/ipvs/ip_vs_core.c
1334 @@ -650,16 +650,24 @@ static inline int ip_vs_gather_frags(struct sk_buff *skb, u_int32_t user)
1335 return err;
1336 }
1337
1338 -static int ip_vs_route_me_harder(int af, struct sk_buff *skb)
1339 +static int ip_vs_route_me_harder(int af, struct sk_buff *skb,
1340 + unsigned int hooknum)
1341 {
1342 + if (!sysctl_snat_reroute(skb))
1343 + return 0;
1344 + /* Reroute replies only to remote clients (FORWARD and LOCAL_OUT) */
1345 + if (NF_INET_LOCAL_IN == hooknum)
1346 + return 0;
1347 #ifdef CONFIG_IP_VS_IPV6
1348 if (af == AF_INET6) {
1349 - if (sysctl_snat_reroute(skb) && ip6_route_me_harder(skb) != 0)
1350 + struct dst_entry *dst = skb_dst(skb);
1351 +
1352 + if (dst->dev && !(dst->dev->flags & IFF_LOOPBACK) &&
1353 + ip6_route_me_harder(skb) != 0)
1354 return 1;
1355 } else
1356 #endif
1357 - if ((sysctl_snat_reroute(skb) ||
1358 - skb_rtable(skb)->rt_flags & RTCF_LOCAL) &&
1359 + if (!(skb_rtable(skb)->rt_flags & RTCF_LOCAL) &&
1360 ip_route_me_harder(skb, RTN_LOCAL) != 0)
1361 return 1;
1362
1363 @@ -782,7 +790,8 @@ static int handle_response_icmp(int af, struct sk_buff *skb,
1364 union nf_inet_addr *snet,
1365 __u8 protocol, struct ip_vs_conn *cp,
1366 struct ip_vs_protocol *pp,
1367 - unsigned int offset, unsigned int ihl)
1368 + unsigned int offset, unsigned int ihl,
1369 + unsigned int hooknum)
1370 {
1371 unsigned int verdict = NF_DROP;
1372
1373 @@ -812,7 +821,7 @@ static int handle_response_icmp(int af, struct sk_buff *skb,
1374 #endif
1375 ip_vs_nat_icmp(skb, pp, cp, 1);
1376
1377 - if (ip_vs_route_me_harder(af, skb))
1378 + if (ip_vs_route_me_harder(af, skb, hooknum))
1379 goto out;
1380
1381 /* do the statistics and put it back */
1382 @@ -907,7 +916,7 @@ static int ip_vs_out_icmp(struct sk_buff *skb, int *related,
1383
1384 snet.ip = iph->saddr;
1385 return handle_response_icmp(AF_INET, skb, &snet, cih->protocol, cp,
1386 - pp, ciph.len, ihl);
1387 + pp, ciph.len, ihl, hooknum);
1388 }
1389
1390 #ifdef CONFIG_IP_VS_IPV6
1391 @@ -972,7 +981,8 @@ static int ip_vs_out_icmp_v6(struct sk_buff *skb, int *related,
1392 snet.in6 = ciph.saddr.in6;
1393 writable = ciph.len;
1394 return handle_response_icmp(AF_INET6, skb, &snet, ciph.protocol, cp,
1395 - pp, writable, sizeof(struct ipv6hdr));
1396 + pp, writable, sizeof(struct ipv6hdr),
1397 + hooknum);
1398 }
1399 #endif
1400
1401 @@ -1031,7 +1041,8 @@ static inline bool is_new_conn(const struct sk_buff *skb,
1402 */
1403 static unsigned int
1404 handle_response(int af, struct sk_buff *skb, struct ip_vs_proto_data *pd,
1405 - struct ip_vs_conn *cp, struct ip_vs_iphdr *iph)
1406 + struct ip_vs_conn *cp, struct ip_vs_iphdr *iph,
1407 + unsigned int hooknum)
1408 {
1409 struct ip_vs_protocol *pp = pd->pp;
1410
1411 @@ -1069,7 +1080,7 @@ handle_response(int af, struct sk_buff *skb, struct ip_vs_proto_data *pd,
1412 * if it came from this machine itself. So re-compute
1413 * the routing information.
1414 */
1415 - if (ip_vs_route_me_harder(af, skb))
1416 + if (ip_vs_route_me_harder(af, skb, hooknum))
1417 goto drop;
1418
1419 IP_VS_DBG_PKT(10, af, pp, skb, 0, "After SNAT");
1420 @@ -1172,7 +1183,7 @@ ip_vs_out(unsigned int hooknum, struct sk_buff *skb, int af)
1421 cp = pp->conn_out_get(af, skb, &iph, 0);
1422
1423 if (likely(cp))
1424 - return handle_response(af, skb, pd, cp, &iph);
1425 + return handle_response(af, skb, pd, cp, &iph, hooknum);
1426 if (sysctl_nat_icmp_send(net) &&
1427 (pp->protocol == IPPROTO_TCP ||
1428 pp->protocol == IPPROTO_UDP ||
1429 diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_sync.c
1430 index f6046d9af8d3..e476cc7dc801 100644
1431 --- a/net/netfilter/ipvs/ip_vs_sync.c
1432 +++ b/net/netfilter/ipvs/ip_vs_sync.c
1433 @@ -878,6 +878,8 @@ static void ip_vs_proc_conn(struct net *net, struct ip_vs_conn_param *param,
1434 IP_VS_DBG(2, "BACKUP, add new conn. failed\n");
1435 return;
1436 }
1437 + if (!(flags & IP_VS_CONN_F_TEMPLATE))
1438 + kfree(param->pe_data);
1439 }
1440
1441 if (opt)
1442 @@ -1151,6 +1153,7 @@ static inline int ip_vs_proc_sync_conn(struct net *net, __u8 *p, __u8 *msg_end)
1443 (opt_flags & IPVS_OPT_F_SEQ_DATA ? &opt : NULL)
1444 );
1445 #endif
1446 + ip_vs_pe_put(param.pe);
1447 return 0;
1448 /* Error exit */
1449 out:
1450 diff --git a/net/rds/iw_rdma.c b/net/rds/iw_rdma.c
1451 index a817705ce2d0..dba8d0864f18 100644
1452 --- a/net/rds/iw_rdma.c
1453 +++ b/net/rds/iw_rdma.c
1454 @@ -88,7 +88,9 @@ static unsigned int rds_iw_unmap_fastreg_list(struct rds_iw_mr_pool *pool,
1455 int *unpinned);
1456 static void rds_iw_destroy_fastreg(struct rds_iw_mr_pool *pool, struct rds_iw_mr *ibmr);
1457
1458 -static int rds_iw_get_device(struct rds_sock *rs, struct rds_iw_device **rds_iwdev, struct rdma_cm_id **cm_id)
1459 +static int rds_iw_get_device(struct sockaddr_in *src, struct sockaddr_in *dst,
1460 + struct rds_iw_device **rds_iwdev,
1461 + struct rdma_cm_id **cm_id)
1462 {
1463 struct rds_iw_device *iwdev;
1464 struct rds_iw_cm_id *i_cm_id;
1465 @@ -112,15 +114,15 @@ static int rds_iw_get_device(struct rds_sock *rs, struct rds_iw_device **rds_iwd
1466 src_addr->sin_port,
1467 dst_addr->sin_addr.s_addr,
1468 dst_addr->sin_port,
1469 - rs->rs_bound_addr,
1470 - rs->rs_bound_port,
1471 - rs->rs_conn_addr,
1472 - rs->rs_conn_port);
1473 + src->sin_addr.s_addr,
1474 + src->sin_port,
1475 + dst->sin_addr.s_addr,
1476 + dst->sin_port);
1477 #ifdef WORKING_TUPLE_DETECTION
1478 - if (src_addr->sin_addr.s_addr == rs->rs_bound_addr &&
1479 - src_addr->sin_port == rs->rs_bound_port &&
1480 - dst_addr->sin_addr.s_addr == rs->rs_conn_addr &&
1481 - dst_addr->sin_port == rs->rs_conn_port) {
1482 + if (src_addr->sin_addr.s_addr == src->sin_addr.s_addr &&
1483 + src_addr->sin_port == src->sin_port &&
1484 + dst_addr->sin_addr.s_addr == dst->sin_addr.s_addr &&
1485 + dst_addr->sin_port == dst->sin_port) {
1486 #else
1487 /* FIXME - needs to compare the local and remote
1488 * ipaddr/port tuple, but the ipaddr is the only
1489 @@ -128,7 +130,7 @@ static int rds_iw_get_device(struct rds_sock *rs, struct rds_iw_device **rds_iwd
1490 * zero'ed. It doesn't appear to be properly populated
1491 * during connection setup...
1492 */
1493 - if (src_addr->sin_addr.s_addr == rs->rs_bound_addr) {
1494 + if (src_addr->sin_addr.s_addr == src->sin_addr.s_addr) {
1495 #endif
1496 spin_unlock_irq(&iwdev->spinlock);
1497 *rds_iwdev = iwdev;
1498 @@ -180,19 +182,13 @@ int rds_iw_update_cm_id(struct rds_iw_device *rds_iwdev, struct rdma_cm_id *cm_i
1499 {
1500 struct sockaddr_in *src_addr, *dst_addr;
1501 struct rds_iw_device *rds_iwdev_old;
1502 - struct rds_sock rs;
1503 struct rdma_cm_id *pcm_id;
1504 int rc;
1505
1506 src_addr = (struct sockaddr_in *)&cm_id->route.addr.src_addr;
1507 dst_addr = (struct sockaddr_in *)&cm_id->route.addr.dst_addr;
1508
1509 - rs.rs_bound_addr = src_addr->sin_addr.s_addr;
1510 - rs.rs_bound_port = src_addr->sin_port;
1511 - rs.rs_conn_addr = dst_addr->sin_addr.s_addr;
1512 - rs.rs_conn_port = dst_addr->sin_port;
1513 -
1514 - rc = rds_iw_get_device(&rs, &rds_iwdev_old, &pcm_id);
1515 + rc = rds_iw_get_device(src_addr, dst_addr, &rds_iwdev_old, &pcm_id);
1516 if (rc)
1517 rds_iw_remove_cm_id(rds_iwdev, cm_id);
1518
1519 @@ -598,9 +594,17 @@ void *rds_iw_get_mr(struct scatterlist *sg, unsigned long nents,
1520 struct rds_iw_device *rds_iwdev;
1521 struct rds_iw_mr *ibmr = NULL;
1522 struct rdma_cm_id *cm_id;
1523 + struct sockaddr_in src = {
1524 + .sin_addr.s_addr = rs->rs_bound_addr,
1525 + .sin_port = rs->rs_bound_port,
1526 + };
1527 + struct sockaddr_in dst = {
1528 + .sin_addr.s_addr = rs->rs_conn_addr,
1529 + .sin_port = rs->rs_conn_port,
1530 + };
1531 int ret;
1532
1533 - ret = rds_iw_get_device(rs, &rds_iwdev, &cm_id);
1534 + ret = rds_iw_get_device(&src, &dst, &rds_iwdev, &cm_id);
1535 if (ret || !cm_id) {
1536 ret = -ENODEV;
1537 goto out;
1538 diff --git a/net/rxrpc/ar-recvmsg.c b/net/rxrpc/ar-recvmsg.c
1539 index 898492a8d61b..5cc2da5d295d 100644
1540 --- a/net/rxrpc/ar-recvmsg.c
1541 +++ b/net/rxrpc/ar-recvmsg.c
1542 @@ -87,7 +87,7 @@ int rxrpc_recvmsg(struct kiocb *iocb, struct socket *sock,
1543 if (!skb) {
1544 /* nothing remains on the queue */
1545 if (copied &&
1546 - (msg->msg_flags & MSG_PEEK || timeo == 0))
1547 + (flags & MSG_PEEK || timeo == 0))
1548 goto out;
1549
1550 /* wait for a message to turn up */
1551 diff --git a/sound/core/control.c b/sound/core/control.c
1552 index 98a29b26c5f4..f2082a35b890 100644
1553 --- a/sound/core/control.c
1554 +++ b/sound/core/control.c
1555 @@ -1168,6 +1168,10 @@ static int snd_ctl_elem_add(struct snd_ctl_file *file,
1556
1557 if (info->count < 1)
1558 return -EINVAL;
1559 + if (!*info->id.name)
1560 + return -EINVAL;
1561 + if (strnlen(info->id.name, sizeof(info->id.name)) >= sizeof(info->id.name))
1562 + return -EINVAL;
1563 access = info->access == 0 ? SNDRV_CTL_ELEM_ACCESS_READWRITE :
1564 (info->access & (SNDRV_CTL_ELEM_ACCESS_READWRITE|
1565 SNDRV_CTL_ELEM_ACCESS_INACTIVE|
1566 diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
1567 index cb4d3700f330..db67e5b596d3 100644
1568 --- a/sound/pci/hda/hda_generic.c
1569 +++ b/sound/pci/hda/hda_generic.c
1570 @@ -642,12 +642,45 @@ static int get_amp_val_to_activate(struct hda_codec *codec, hda_nid_t nid,
1571 return val;
1572 }
1573
1574 +/* is this a stereo widget or a stereo-to-mono mix? */
1575 +static bool is_stereo_amps(struct hda_codec *codec, hda_nid_t nid, int dir)
1576 +{
1577 + unsigned int wcaps = get_wcaps(codec, nid);
1578 + hda_nid_t conn;
1579 +
1580 + if (wcaps & AC_WCAP_STEREO)
1581 + return true;
1582 + if (dir != HDA_INPUT || get_wcaps_type(wcaps) != AC_WID_AUD_MIX)
1583 + return false;
1584 + if (snd_hda_get_num_conns(codec, nid) != 1)
1585 + return false;
1586 + if (snd_hda_get_connections(codec, nid, &conn, 1) < 0)
1587 + return false;
1588 + return !!(get_wcaps(codec, conn) & AC_WCAP_STEREO);
1589 +}
1590 +
1591 /* initialize the amp value (only at the first time) */
1592 static void init_amp(struct hda_codec *codec, hda_nid_t nid, int dir, int idx)
1593 {
1594 unsigned int caps = query_amp_caps(codec, nid, dir);
1595 int val = get_amp_val_to_activate(codec, nid, dir, caps, false);
1596 - snd_hda_codec_amp_init_stereo(codec, nid, dir, idx, 0xff, val);
1597 +
1598 + if (is_stereo_amps(codec, nid, dir))
1599 + snd_hda_codec_amp_init_stereo(codec, nid, dir, idx, 0xff, val);
1600 + else
1601 + snd_hda_codec_amp_init(codec, nid, 0, dir, idx, 0xff, val);
1602 +}
1603 +
1604 +/* update the amp, doing in stereo or mono depending on NID */
1605 +static int update_amp(struct hda_codec *codec, hda_nid_t nid, int dir, int idx,
1606 + unsigned int mask, unsigned int val)
1607 +{
1608 + if (is_stereo_amps(codec, nid, dir))
1609 + return snd_hda_codec_amp_stereo(codec, nid, dir, idx,
1610 + mask, val);
1611 + else
1612 + return snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
1613 + mask, val);
1614 }
1615
1616 /* calculate amp value mask we can modify;
1617 @@ -687,7 +720,7 @@ static void activate_amp(struct hda_codec *codec, hda_nid_t nid, int dir,
1618 return;
1619
1620 val &= mask;
1621 - snd_hda_codec_amp_stereo(codec, nid, dir, idx, mask, val);
1622 + update_amp(codec, nid, dir, idx, mask, val);
1623 }
1624
1625 static void activate_amp_out(struct hda_codec *codec, struct nid_path *path,
1626 @@ -4235,13 +4268,11 @@ static void mute_all_mixer_nid(struct hda_codec *codec, hda_nid_t mix)
1627 has_amp = nid_has_mute(codec, mix, HDA_INPUT);
1628 for (i = 0; i < nums; i++) {
1629 if (has_amp)
1630 - snd_hda_codec_amp_stereo(codec, mix,
1631 - HDA_INPUT, i,
1632 - 0xff, HDA_AMP_MUTE);
1633 + update_amp(codec, mix, HDA_INPUT, i,
1634 + 0xff, HDA_AMP_MUTE);
1635 else if (nid_has_volume(codec, conn[i], HDA_OUTPUT))
1636 - snd_hda_codec_amp_stereo(codec, conn[i],
1637 - HDA_OUTPUT, 0,
1638 - 0xff, HDA_AMP_MUTE);
1639 + update_amp(codec, conn[i], HDA_OUTPUT, 0,
1640 + 0xff, HDA_AMP_MUTE);
1641 }
1642 }
1643
1644 diff --git a/sound/pci/hda/hda_proc.c b/sound/pci/hda/hda_proc.c
1645 index 0fee8fae590a..eb94e495c754 100644
1646 --- a/sound/pci/hda/hda_proc.c
1647 +++ b/sound/pci/hda/hda_proc.c
1648 @@ -129,13 +129,38 @@ static void print_amp_caps(struct snd_info_buffer *buffer,
1649 (caps & AC_AMPCAP_MUTE) >> AC_AMPCAP_MUTE_SHIFT);
1650 }
1651
1652 +/* is this a stereo widget or a stereo-to-mono mix? */
1653 +static bool is_stereo_amps(struct hda_codec *codec, hda_nid_t nid,
1654 + int dir, unsigned int wcaps, int indices)
1655 +{
1656 + hda_nid_t conn;
1657 +
1658 + if (wcaps & AC_WCAP_STEREO)
1659 + return true;
1660 + /* check for a stereo-to-mono mix; it must be:
1661 + * only a single connection, only for input, and only a mixer widget
1662 + */
1663 + if (indices != 1 || dir != HDA_INPUT ||
1664 + get_wcaps_type(wcaps) != AC_WID_AUD_MIX)
1665 + return false;
1666 +
1667 + if (snd_hda_get_raw_connections(codec, nid, &conn, 1) < 0)
1668 + return false;
1669 + /* the connection source is a stereo? */
1670 + wcaps = snd_hda_param_read(codec, conn, AC_PAR_AUDIO_WIDGET_CAP);
1671 + return !!(wcaps & AC_WCAP_STEREO);
1672 +}
1673 +
1674 static void print_amp_vals(struct snd_info_buffer *buffer,
1675 struct hda_codec *codec, hda_nid_t nid,
1676 - int dir, int stereo, int indices)
1677 + int dir, unsigned int wcaps, int indices)
1678 {
1679 unsigned int val;
1680 + bool stereo;
1681 int i;
1682
1683 + stereo = is_stereo_amps(codec, nid, dir, wcaps, indices);
1684 +
1685 dir = dir == HDA_OUTPUT ? AC_AMP_GET_OUTPUT : AC_AMP_GET_INPUT;
1686 for (i = 0; i < indices; i++) {
1687 snd_iprintf(buffer, " [");
1688 @@ -682,12 +707,10 @@ static void print_codec_info(struct snd_info_entry *entry,
1689 (codec->single_adc_amp &&
1690 wid_type == AC_WID_AUD_IN))
1691 print_amp_vals(buffer, codec, nid, HDA_INPUT,
1692 - wid_caps & AC_WCAP_STEREO,
1693 - 1);
1694 + wid_caps, 1);
1695 else
1696 print_amp_vals(buffer, codec, nid, HDA_INPUT,
1697 - wid_caps & AC_WCAP_STEREO,
1698 - conn_len);
1699 + wid_caps, conn_len);
1700 }
1701 if (wid_caps & AC_WCAP_OUT_AMP) {
1702 snd_iprintf(buffer, " Amp-Out caps: ");
1703 @@ -696,11 +719,10 @@ static void print_codec_info(struct snd_info_entry *entry,
1704 if (wid_type == AC_WID_PIN &&
1705 codec->pin_amp_workaround)
1706 print_amp_vals(buffer, codec, nid, HDA_OUTPUT,
1707 - wid_caps & AC_WCAP_STEREO,
1708 - conn_len);
1709 + wid_caps, conn_len);
1710 else
1711 print_amp_vals(buffer, codec, nid, HDA_OUTPUT,
1712 - wid_caps & AC_WCAP_STEREO, 1);
1713 + wid_caps, 1);
1714 }
1715
1716 switch (wid_type) {
1717 diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
1718 index cccaf9c7a7bb..e2642ba88b2d 100644
1719 --- a/sound/pci/hda/patch_cirrus.c
1720 +++ b/sound/pci/hda/patch_cirrus.c
1721 @@ -363,6 +363,7 @@ static const struct snd_pci_quirk cs420x_fixup_tbl[] = {
1722 SND_PCI_QUIRK(0x106b, 0x1c00, "MacBookPro 8,1", CS420X_MBP81),
1723 SND_PCI_QUIRK(0x106b, 0x2000, "iMac 12,2", CS420X_IMAC27_122),
1724 SND_PCI_QUIRK(0x106b, 0x2800, "MacBookPro 10,1", CS420X_MBP101),
1725 + SND_PCI_QUIRK(0x106b, 0x5600, "MacBookAir 5,2", CS420X_MBP81),
1726 SND_PCI_QUIRK(0x106b, 0x5b00, "MacBookAir 4,2", CS420X_MBA42),
1727 SND_PCI_QUIRK_VENDOR(0x106b, "Apple", CS420X_APPLE),
1728 {} /* terminator */
1729 @@ -531,6 +532,7 @@ static int patch_cs420x(struct hda_codec *codec)
1730 return -ENOMEM;
1731
1732 spec->gen.automute_hook = cs_automute;
1733 + codec->single_adc_amp = 1;
1734
1735 snd_hda_pick_fixup(codec, cs420x_models, cs420x_fixup_tbl,
1736 cs420x_fixups);
1737 diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
1738 index 1868d3a6e310..fab909908a42 100644
1739 --- a/sound/pci/hda/patch_conexant.c
1740 +++ b/sound/pci/hda/patch_conexant.c
1741 @@ -3223,6 +3223,7 @@ enum {
1742 CXT_PINCFG_LENOVO_TP410,
1743 CXT_PINCFG_LEMOTE_A1004,
1744 CXT_PINCFG_LEMOTE_A1205,
1745 + CXT_PINCFG_COMPAQ_CQ60,
1746 CXT_FIXUP_STEREO_DMIC,
1747 CXT_FIXUP_INC_MIC_BOOST,
1748 CXT_FIXUP_GPIO1,
1749 @@ -3296,6 +3297,15 @@ static const struct hda_fixup cxt_fixups[] = {
1750 .type = HDA_FIXUP_PINS,
1751 .v.pins = cxt_pincfg_lemote,
1752 },
1753 + [CXT_PINCFG_COMPAQ_CQ60] = {
1754 + .type = HDA_FIXUP_PINS,
1755 + .v.pins = (const struct hda_pintbl[]) {
1756 + /* 0x17 was falsely set up as a mic, it should 0x1d */
1757 + { 0x17, 0x400001f0 },
1758 + { 0x1d, 0x97a70120 },
1759 + { }
1760 + }
1761 + },
1762 [CXT_FIXUP_STEREO_DMIC] = {
1763 .type = HDA_FIXUP_FUNC,
1764 .v.func = cxt_fixup_stereo_dmic,
1765 @@ -3316,6 +3326,7 @@ static const struct hda_fixup cxt_fixups[] = {
1766 };
1767
1768 static const struct snd_pci_quirk cxt5051_fixups[] = {
1769 + SND_PCI_QUIRK(0x103c, 0x360b, "Compaq CQ60", CXT_PINCFG_COMPAQ_CQ60),
1770 SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo X200", CXT_PINCFG_LENOVO_X200),
1771 {}
1772 };