Magellan Linux

Annotation of /trunk/kernel-alx-legacy/patches-4.9/0106-4.9.7-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3608 - (hide annotations) (download)
Fri Aug 14 07:34:29 2020 UTC (3 years, 9 months ago) by niro
File size: 71811 byte(s)
-added kerenl-alx-legacy pkg
1 niro 3608 diff --git a/Makefile b/Makefile
2     index ef95231d1625..da704d903321 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 9
8     -SUBLEVEL = 6
9     +SUBLEVEL = 7
10     EXTRAVERSION =
11     NAME = Roaring Lionus
12    
13     diff --git a/arch/arc/include/asm/delay.h b/arch/arc/include/asm/delay.h
14     index a36e8601114d..d5da2115d78a 100644
15     --- a/arch/arc/include/asm/delay.h
16     +++ b/arch/arc/include/asm/delay.h
17     @@ -26,7 +26,9 @@ static inline void __delay(unsigned long loops)
18     " lp 1f \n"
19     " nop \n"
20     "1: \n"
21     - : : "r"(loops));
22     + :
23     + : "r"(loops)
24     + : "lp_count");
25     }
26    
27     extern void __bad_udelay(void);
28     diff --git a/arch/arc/kernel/unaligned.c b/arch/arc/kernel/unaligned.c
29     index abd961f3e763..91ebe382147f 100644
30     --- a/arch/arc/kernel/unaligned.c
31     +++ b/arch/arc/kernel/unaligned.c
32     @@ -241,8 +241,9 @@ int misaligned_fixup(unsigned long address, struct pt_regs *regs,
33     if (state.fault)
34     goto fault;
35    
36     + /* clear any remanants of delay slot */
37     if (delay_mode(regs)) {
38     - regs->ret = regs->bta;
39     + regs->ret = regs->bta ~1U;
40     regs->status32 &= ~STATUS_DE_MASK;
41     } else {
42     regs->ret += state.instr_len;
43     diff --git a/arch/parisc/include/asm/bitops.h b/arch/parisc/include/asm/bitops.h
44     index 3f9406d9b9d6..da87943328a5 100644
45     --- a/arch/parisc/include/asm/bitops.h
46     +++ b/arch/parisc/include/asm/bitops.h
47     @@ -6,7 +6,7 @@
48     #endif
49    
50     #include <linux/compiler.h>
51     -#include <asm/types.h> /* for BITS_PER_LONG/SHIFT_PER_LONG */
52     +#include <asm/types.h>
53     #include <asm/byteorder.h>
54     #include <asm/barrier.h>
55     #include <linux/atomic.h>
56     @@ -17,6 +17,12 @@
57     * to include/asm-i386/bitops.h or kerneldoc
58     */
59    
60     +#if __BITS_PER_LONG == 64
61     +#define SHIFT_PER_LONG 6
62     +#else
63     +#define SHIFT_PER_LONG 5
64     +#endif
65     +
66     #define CHOP_SHIFTCOUNT(x) (((unsigned long) (x)) & (BITS_PER_LONG - 1))
67    
68    
69     diff --git a/arch/parisc/include/uapi/asm/bitsperlong.h b/arch/parisc/include/uapi/asm/bitsperlong.h
70     index e0a23c7bdd43..07fa7e50bdc0 100644
71     --- a/arch/parisc/include/uapi/asm/bitsperlong.h
72     +++ b/arch/parisc/include/uapi/asm/bitsperlong.h
73     @@ -3,10 +3,8 @@
74    
75     #if defined(__LP64__)
76     #define __BITS_PER_LONG 64
77     -#define SHIFT_PER_LONG 6
78     #else
79     #define __BITS_PER_LONG 32
80     -#define SHIFT_PER_LONG 5
81     #endif
82    
83     #include <asm-generic/bitsperlong.h>
84     diff --git a/arch/parisc/include/uapi/asm/swab.h b/arch/parisc/include/uapi/asm/swab.h
85     index e78403b129ef..928e1bbac98f 100644
86     --- a/arch/parisc/include/uapi/asm/swab.h
87     +++ b/arch/parisc/include/uapi/asm/swab.h
88     @@ -1,6 +1,7 @@
89     #ifndef _PARISC_SWAB_H
90     #define _PARISC_SWAB_H
91    
92     +#include <asm/bitsperlong.h>
93     #include <linux/types.h>
94     #include <linux/compiler.h>
95    
96     @@ -38,7 +39,7 @@ static inline __attribute_const__ __u32 __arch_swab32(__u32 x)
97     }
98     #define __arch_swab32 __arch_swab32
99    
100     -#if BITS_PER_LONG > 32
101     +#if __BITS_PER_LONG > 32
102     /*
103     ** From "PA-RISC 2.0 Architecture", HP Professional Books.
104     ** See Appendix I page 8 , "Endian Byte Swapping".
105     @@ -61,6 +62,6 @@ static inline __attribute_const__ __u64 __arch_swab64(__u64 x)
106     return x;
107     }
108     #define __arch_swab64 __arch_swab64
109     -#endif /* BITS_PER_LONG > 32 */
110     +#endif /* __BITS_PER_LONG > 32 */
111    
112     #endif /* _PARISC_SWAB_H */
113     diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c
114     index 9336e824e2db..fc2974b929c3 100644
115     --- a/arch/s390/kernel/ptrace.c
116     +++ b/arch/s390/kernel/ptrace.c
117     @@ -963,6 +963,11 @@ static int s390_fpregs_set(struct task_struct *target,
118     if (target == current)
119     save_fpu_regs();
120    
121     + if (MACHINE_HAS_VX)
122     + convert_vx_to_fp(fprs, target->thread.fpu.vxrs);
123     + else
124     + memcpy(&fprs, target->thread.fpu.fprs, sizeof(fprs));
125     +
126     /* If setting FPC, must validate it first. */
127     if (count > 0 && pos < offsetof(s390_fp_regs, fprs)) {
128     u32 ufpc[2] = { target->thread.fpu.fpc, 0 };
129     @@ -1067,6 +1072,9 @@ static int s390_vxrs_low_set(struct task_struct *target,
130     if (target == current)
131     save_fpu_regs();
132    
133     + for (i = 0; i < __NUM_VXRS_LOW; i++)
134     + vxrs[i] = *((__u64 *)(target->thread.fpu.vxrs + i) + 1);
135     +
136     rc = user_regset_copyin(&pos, &count, &kbuf, &ubuf, vxrs, 0, -1);
137     if (rc == 0)
138     for (i = 0; i < __NUM_VXRS_LOW; i++)
139     diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c
140     index 7a1897c51c54..d56ef26d4681 100644
141     --- a/arch/s390/mm/pgtable.c
142     +++ b/arch/s390/mm/pgtable.c
143     @@ -202,7 +202,7 @@ static inline pgste_t ptep_xchg_start(struct mm_struct *mm,
144     return pgste;
145     }
146    
147     -static inline void ptep_xchg_commit(struct mm_struct *mm,
148     +static inline pte_t ptep_xchg_commit(struct mm_struct *mm,
149     unsigned long addr, pte_t *ptep,
150     pgste_t pgste, pte_t old, pte_t new)
151     {
152     @@ -220,6 +220,7 @@ static inline void ptep_xchg_commit(struct mm_struct *mm,
153     } else {
154     *ptep = new;
155     }
156     + return old;
157     }
158    
159     pte_t ptep_xchg_direct(struct mm_struct *mm, unsigned long addr,
160     @@ -231,7 +232,7 @@ pte_t ptep_xchg_direct(struct mm_struct *mm, unsigned long addr,
161     preempt_disable();
162     pgste = ptep_xchg_start(mm, addr, ptep);
163     old = ptep_flush_direct(mm, addr, ptep);
164     - ptep_xchg_commit(mm, addr, ptep, pgste, old, new);
165     + old = ptep_xchg_commit(mm, addr, ptep, pgste, old, new);
166     preempt_enable();
167     return old;
168     }
169     @@ -246,7 +247,7 @@ pte_t ptep_xchg_lazy(struct mm_struct *mm, unsigned long addr,
170     preempt_disable();
171     pgste = ptep_xchg_start(mm, addr, ptep);
172     old = ptep_flush_lazy(mm, addr, ptep);
173     - ptep_xchg_commit(mm, addr, ptep, pgste, old, new);
174     + old = ptep_xchg_commit(mm, addr, ptep, pgste, old, new);
175     preempt_enable();
176     return old;
177     }
178     diff --git a/arch/tile/kernel/ptrace.c b/arch/tile/kernel/ptrace.c
179     index d89b7011667c..e279572824b1 100644
180     --- a/arch/tile/kernel/ptrace.c
181     +++ b/arch/tile/kernel/ptrace.c
182     @@ -111,7 +111,7 @@ static int tile_gpr_set(struct task_struct *target,
183     const void *kbuf, const void __user *ubuf)
184     {
185     int ret;
186     - struct pt_regs regs;
187     + struct pt_regs regs = *task_pt_regs(target);
188    
189     ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &regs, 0,
190     sizeof(regs));
191     diff --git a/arch/x86/platform/mellanox/mlx-platform.c b/arch/x86/platform/mellanox/mlx-platform.c
192     index 7dcfcca97399..c0355d789fce 100644
193     --- a/arch/x86/platform/mellanox/mlx-platform.c
194     +++ b/arch/x86/platform/mellanox/mlx-platform.c
195     @@ -233,7 +233,7 @@ static int __init mlxplat_init(void)
196     return 0;
197    
198     fail_platform_mux_register:
199     - for (i--; i > 0 ; i--)
200     + while (--i >= 0)
201     platform_device_unregister(priv->pdev_mux[i]);
202     platform_device_unregister(priv->pdev_i2c);
203     fail_alloc:
204     diff --git a/drivers/base/memory.c b/drivers/base/memory.c
205     index 62c63c0c5c22..e7f86a8887d2 100644
206     --- a/drivers/base/memory.c
207     +++ b/drivers/base/memory.c
208     @@ -410,14 +410,14 @@ static ssize_t show_valid_zones(struct device *dev,
209     sprintf(buf, "%s", zone->name);
210    
211     /* MMOP_ONLINE_KERNEL */
212     - zone_shift = zone_can_shift(start_pfn, nr_pages, ZONE_NORMAL);
213     + zone_can_shift(start_pfn, nr_pages, ZONE_NORMAL, &zone_shift);
214     if (zone_shift) {
215     strcat(buf, " ");
216     strcat(buf, (zone + zone_shift)->name);
217     }
218    
219     /* MMOP_ONLINE_MOVABLE */
220     - zone_shift = zone_can_shift(start_pfn, nr_pages, ZONE_MOVABLE);
221     + zone_can_shift(start_pfn, nr_pages, ZONE_MOVABLE, &zone_shift);
222     if (zone_shift) {
223     strcat(buf, " ");
224     strcat(buf, (zone + zone_shift)->name);
225     diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
226     index 338766c64c99..a05bb3891119 100644
227     --- a/drivers/gpu/drm/drm_atomic_helper.c
228     +++ b/drivers/gpu/drm/drm_atomic_helper.c
229     @@ -3115,6 +3115,8 @@ void __drm_atomic_helper_plane_duplicate_state(struct drm_plane *plane,
230    
231     if (state->fb)
232     drm_framebuffer_reference(state->fb);
233     +
234     + state->fence = NULL;
235     }
236     EXPORT_SYMBOL(__drm_atomic_helper_plane_duplicate_state);
237    
238     diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
239     index 53f07ac7c174..e14366de0e6e 100644
240     --- a/drivers/gpu/drm/drm_modes.c
241     +++ b/drivers/gpu/drm/drm_modes.c
242     @@ -1462,6 +1462,13 @@ drm_mode_create_from_cmdline_mode(struct drm_device *dev,
243     return NULL;
244    
245     mode->type |= DRM_MODE_TYPE_USERDEF;
246     + /* fix up 1368x768: GFT/CVT can't express 1366 width due to alignment */
247     + if (cmd->xres == 1366 && mode->hdisplay == 1368) {
248     + mode->hdisplay = 1366;
249     + mode->hsync_start--;
250     + mode->hsync_end--;
251     + drm_mode_set_name(mode);
252     + }
253     drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V);
254     return mode;
255     }
256     diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c
257     index f6b64d7d3528..276474d13763 100644
258     --- a/drivers/gpu/drm/drm_probe_helper.c
259     +++ b/drivers/gpu/drm/drm_probe_helper.c
260     @@ -143,8 +143,18 @@ void drm_kms_helper_poll_enable_locked(struct drm_device *dev)
261     }
262    
263     if (dev->mode_config.delayed_event) {
264     + /*
265     + * FIXME:
266     + *
267     + * Use short (1s) delay to handle the initial delayed event.
268     + * This delay should not be needed, but Optimus/nouveau will
269     + * fail in a mysterious way if the delayed event is handled as
270     + * soon as possible like it is done in
271     + * drm_helper_probe_single_connector_modes() in case the poll
272     + * was enabled before.
273     + */
274     poll = true;
275     - delay = 0;
276     + delay = HZ;
277     }
278    
279     if (poll)
280     diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
281     index 18dfdd5c1b3b..670beebc32f6 100644
282     --- a/drivers/gpu/drm/i915/i915_drv.c
283     +++ b/drivers/gpu/drm/i915/i915_drv.c
284     @@ -2372,7 +2372,7 @@ static int intel_runtime_suspend(struct device *kdev)
285    
286     assert_forcewakes_inactive(dev_priv);
287    
288     - if (!IS_VALLEYVIEW(dev_priv) || !IS_CHERRYVIEW(dev_priv))
289     + if (!IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv))
290     intel_hpd_poll_init(dev_priv);
291    
292     DRM_DEBUG_KMS("Device suspended\n");
293     diff --git a/drivers/gpu/drm/i915/i915_gem_evict.c b/drivers/gpu/drm/i915/i915_gem_evict.c
294     index 5b6f81c1dbca..7467355e4a18 100644
295     --- a/drivers/gpu/drm/i915/i915_gem_evict.c
296     +++ b/drivers/gpu/drm/i915/i915_gem_evict.c
297     @@ -194,6 +194,7 @@ i915_gem_evict_something(struct i915_address_space *vm,
298     }
299    
300     /* Unbinding will emit any required flushes */
301     + ret = 0;
302     while (!list_empty(&eviction_list)) {
303     vma = list_first_entry(&eviction_list,
304     struct i915_vma,
305     diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
306     index dfbcf16b41df..4149a0fbe8bd 100644
307     --- a/drivers/gpu/drm/i915/intel_crt.c
308     +++ b/drivers/gpu/drm/i915/intel_crt.c
309     @@ -499,6 +499,7 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector)
310     struct drm_i915_private *dev_priv = to_i915(crt->base.base.dev);
311     struct edid *edid;
312     struct i2c_adapter *i2c;
313     + bool ret = false;
314    
315     BUG_ON(crt->base.type != INTEL_OUTPUT_ANALOG);
316    
317     @@ -515,17 +516,17 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector)
318     */
319     if (!is_digital) {
320     DRM_DEBUG_KMS("CRT detected via DDC:0x50 [EDID]\n");
321     - return true;
322     + ret = true;
323     + } else {
324     + DRM_DEBUG_KMS("CRT not detected via DDC:0x50 [EDID reports a digital panel]\n");
325     }
326     -
327     - DRM_DEBUG_KMS("CRT not detected via DDC:0x50 [EDID reports a digital panel]\n");
328     } else {
329     DRM_DEBUG_KMS("CRT not detected via DDC:0x50 [no valid EDID found]\n");
330     }
331    
332     kfree(edid);
333    
334     - return false;
335     + return ret;
336     }
337    
338     static enum drm_connector_status
339     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
340     index 869b29fe9ec4..8079e5b380cb 100644
341     --- a/drivers/gpu/drm/i915/intel_display.c
342     +++ b/drivers/gpu/drm/i915/intel_display.c
343     @@ -2587,8 +2587,9 @@ intel_fill_fb_info(struct drm_i915_private *dev_priv,
344     * We only keep the x/y offsets, so push all of the
345     * gtt offset into the x/y offsets.
346     */
347     - _intel_adjust_tile_offset(&x, &y, tile_size,
348     - tile_width, tile_height, pitch_tiles,
349     + _intel_adjust_tile_offset(&x, &y,
350     + tile_width, tile_height,
351     + tile_size, pitch_tiles,
352     gtt_offset_rotated * tile_size, 0);
353    
354     gtt_offset_rotated += rot_info->plane[i].width * rot_info->plane[i].height;
355     @@ -2975,6 +2976,9 @@ int skl_check_plane_surface(struct intel_plane_state *plane_state)
356     unsigned int rotation = plane_state->base.rotation;
357     int ret;
358    
359     + if (!plane_state->base.visible)
360     + return 0;
361     +
362     /* Rotate src coordinates to match rotated GTT view */
363     if (intel_rotation_90_or_270(rotation))
364     drm_rect_rotate(&plane_state->base.src,
365     @@ -6865,6 +6869,12 @@ static void intel_crtc_disable_noatomic(struct drm_crtc *crtc)
366     }
367    
368     state = drm_atomic_state_alloc(crtc->dev);
369     + if (!state) {
370     + DRM_DEBUG_KMS("failed to disable [CRTC:%d:%s], out of memory",
371     + crtc->base.id, crtc->name);
372     + return;
373     + }
374     +
375     state->acquire_ctx = crtc->dev->mode_config.acquire_ctx;
376    
377     /* Everything's already locked, -EDEADLK can't happen. */
378     diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c
379     index b7098f98bb67..9127e57f383c 100644
380     --- a/drivers/gpu/drm/i915/intel_fbdev.c
381     +++ b/drivers/gpu/drm/i915/intel_fbdev.c
382     @@ -745,6 +745,9 @@ void intel_fbdev_initial_config_async(struct drm_device *dev)
383     {
384     struct intel_fbdev *ifbdev = to_i915(dev)->fbdev;
385    
386     + if (!ifbdev)
387     + return;
388     +
389     ifbdev->cookie = async_schedule(intel_fbdev_initial_config, ifbdev);
390     }
391    
392     diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
393     index 0adb879833ff..67db1577ee49 100644
394     --- a/drivers/gpu/drm/i915/intel_lrc.c
395     +++ b/drivers/gpu/drm/i915/intel_lrc.c
396     @@ -858,8 +858,7 @@ static inline int gen8_emit_flush_coherentl3_wa(struct intel_engine_cs *engine,
397     * this batch updates GEN8_L3SQCREG4 with default value we need to
398     * set this bit here to retain the WA during flush.
399     */
400     - if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_E0) ||
401     - IS_KBL_REVID(dev_priv, 0, KBL_REVID_E0))
402     + if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_E0))
403     l3sqc4_flush |= GEN8_LQSC_RO_PERF_DIS;
404    
405     wa_ctx_emit(batch, index, (MI_STORE_REGISTER_MEM_GEN8 |
406     diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
407     index ed9955dce156..8babfe0ce4e3 100644
408     --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
409     +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
410     @@ -1153,14 +1153,6 @@ static int kbl_init_workarounds(struct intel_engine_cs *engine)
411     WA_SET_BIT_MASKED(HDC_CHICKEN0,
412     HDC_FENCE_DEST_SLM_DISABLE);
413    
414     - /* GEN8_L3SQCREG4 has a dependency with WA batch so any new changes
415     - * involving this register should also be added to WA batch as required.
416     - */
417     - if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_E0))
418     - /* WaDisableLSQCROPERFforOCL:kbl */
419     - I915_WRITE(GEN8_L3SQCREG4, I915_READ(GEN8_L3SQCREG4) |
420     - GEN8_LQSC_RO_PERF_DIS);
421     -
422     /* WaToEnableHwFixForPushConstHWBug:kbl */
423     if (IS_KBL_REVID(dev_priv, KBL_REVID_C0, REVID_FOREVER))
424     WA_SET_BIT_MASKED(COMMON_SLICE_CHICKEN2,
425     diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
426     index 00ea0002b539..e0c143b865f3 100644
427     --- a/drivers/gpu/drm/radeon/radeon_drv.c
428     +++ b/drivers/gpu/drm/radeon/radeon_drv.c
429     @@ -366,11 +366,10 @@ static void
430     radeon_pci_shutdown(struct pci_dev *pdev)
431     {
432     /* if we are running in a VM, make sure the device
433     - * torn down properly on reboot/shutdown.
434     - * unfortunately we can't detect certain
435     - * hypervisors so just do this all the time.
436     + * torn down properly on reboot/shutdown
437     */
438     - radeon_pci_remove(pdev);
439     + if (radeon_device_is_virtual())
440     + radeon_pci_remove(pdev);
441     }
442    
443     static int radeon_pmops_suspend(struct device *dev)
444     diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
445     index 7f08d681a74b..d544ff9b0d46 100644
446     --- a/drivers/gpu/drm/vc4/vc4_crtc.c
447     +++ b/drivers/gpu/drm/vc4/vc4_crtc.c
448     @@ -832,7 +832,7 @@ static void vc4_crtc_destroy_state(struct drm_crtc *crtc,
449    
450     }
451    
452     - __drm_atomic_helper_crtc_destroy_state(state);
453     + drm_atomic_helper_crtc_destroy_state(crtc, state);
454     }
455    
456     static const struct drm_crtc_funcs vc4_crtc_funcs = {
457     diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c
458     index 303f23c96220..18e37171e9c8 100644
459     --- a/drivers/gpu/drm/vc4/vc4_gem.c
460     +++ b/drivers/gpu/drm/vc4/vc4_gem.c
461     @@ -594,12 +594,14 @@ vc4_get_bcl(struct drm_device *dev, struct vc4_exec_info *exec)
462     args->shader_rec_count);
463     struct vc4_bo *bo;
464    
465     - if (uniforms_offset < shader_rec_offset ||
466     + if (shader_rec_offset < args->bin_cl_size ||
467     + uniforms_offset < shader_rec_offset ||
468     exec_size < uniforms_offset ||
469     args->shader_rec_count >= (UINT_MAX /
470     sizeof(struct vc4_shader_state)) ||
471     temp_size < exec_size) {
472     DRM_ERROR("overflow in exec arguments\n");
473     + ret = -EINVAL;
474     goto fail;
475     }
476    
477     diff --git a/drivers/gpu/drm/vc4/vc4_render_cl.c b/drivers/gpu/drm/vc4/vc4_render_cl.c
478     index 08886a309757..5cdd003605f5 100644
479     --- a/drivers/gpu/drm/vc4/vc4_render_cl.c
480     +++ b/drivers/gpu/drm/vc4/vc4_render_cl.c
481     @@ -461,7 +461,7 @@ static int vc4_rcl_surface_setup(struct vc4_exec_info *exec,
482     }
483    
484     ret = vc4_full_res_bounds_check(exec, *obj, surf);
485     - if (!ret)
486     + if (ret)
487     return ret;
488    
489     return 0;
490     diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
491     index 2a6fc47a1dfb..c25768c2dd3b 100644
492     --- a/drivers/infiniband/core/cma.c
493     +++ b/drivers/infiniband/core/cma.c
494     @@ -2768,7 +2768,8 @@ static int cma_bind_addr(struct rdma_cm_id *id, struct sockaddr *src_addr,
495     if (!src_addr || !src_addr->sa_family) {
496     src_addr = (struct sockaddr *) &id->route.addr.src_addr;
497     src_addr->sa_family = dst_addr->sa_family;
498     - if (dst_addr->sa_family == AF_INET6) {
499     + if (IS_ENABLED(CONFIG_IPV6) &&
500     + dst_addr->sa_family == AF_INET6) {
501     struct sockaddr_in6 *src_addr6 = (struct sockaddr_in6 *) src_addr;
502     struct sockaddr_in6 *dst_addr6 = (struct sockaddr_in6 *) dst_addr;
503     src_addr6->sin6_scope_id = dst_addr6->sin6_scope_id;
504     diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c
505     index 84b4eff90395..c22fde6207d1 100644
506     --- a/drivers/infiniband/core/umem.c
507     +++ b/drivers/infiniband/core/umem.c
508     @@ -134,6 +134,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
509     IB_ACCESS_REMOTE_ATOMIC | IB_ACCESS_MW_BIND));
510    
511     if (access & IB_ACCESS_ON_DEMAND) {
512     + put_pid(umem->pid);
513     ret = ib_umem_odp_get(context, umem);
514     if (ret) {
515     kfree(umem);
516     @@ -149,6 +150,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
517    
518     page_list = (struct page **) __get_free_page(GFP_KERNEL);
519     if (!page_list) {
520     + put_pid(umem->pid);
521     kfree(umem);
522     return ERR_PTR(-ENOMEM);
523     }
524     diff --git a/drivers/infiniband/hw/cxgb4/device.c b/drivers/infiniband/hw/cxgb4/device.c
525     index b99dc9e0ffb2..b85a1a983e07 100644
526     --- a/drivers/infiniband/hw/cxgb4/device.c
527     +++ b/drivers/infiniband/hw/cxgb4/device.c
528     @@ -848,9 +848,17 @@ static int c4iw_rdev_open(struct c4iw_rdev *rdev)
529     }
530     }
531    
532     + rdev->free_workq = create_singlethread_workqueue("iw_cxgb4_free");
533     + if (!rdev->free_workq) {
534     + err = -ENOMEM;
535     + goto err_free_status_page;
536     + }
537     +
538     rdev->status_page->db_off = 0;
539    
540     return 0;
541     +err_free_status_page:
542     + free_page((unsigned long)rdev->status_page);
543     destroy_ocqp_pool:
544     c4iw_ocqp_pool_destroy(rdev);
545     destroy_rqtpool:
546     @@ -864,6 +872,7 @@ static int c4iw_rdev_open(struct c4iw_rdev *rdev)
547    
548     static void c4iw_rdev_close(struct c4iw_rdev *rdev)
549     {
550     + destroy_workqueue(rdev->free_workq);
551     kfree(rdev->wr_log);
552     free_page((unsigned long)rdev->status_page);
553     c4iw_pblpool_destroy(rdev);
554     diff --git a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
555     index 4788e1a46fde..7d540667dad2 100644
556     --- a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
557     +++ b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
558     @@ -45,6 +45,7 @@
559     #include <linux/kref.h>
560     #include <linux/timer.h>
561     #include <linux/io.h>
562     +#include <linux/workqueue.h>
563    
564     #include <asm/byteorder.h>
565    
566     @@ -107,6 +108,7 @@ struct c4iw_dev_ucontext {
567     struct list_head qpids;
568     struct list_head cqids;
569     struct mutex lock;
570     + struct kref kref;
571     };
572    
573     enum c4iw_rdev_flags {
574     @@ -183,6 +185,7 @@ struct c4iw_rdev {
575     atomic_t wr_log_idx;
576     struct wr_log_entry *wr_log;
577     int wr_log_size;
578     + struct workqueue_struct *free_workq;
579     };
580    
581     static inline int c4iw_fatal_error(struct c4iw_rdev *rdev)
582     @@ -482,6 +485,8 @@ struct c4iw_qp {
583     int sq_sig_all;
584     struct completion rq_drained;
585     struct completion sq_drained;
586     + struct work_struct free_work;
587     + struct c4iw_ucontext *ucontext;
588     };
589    
590     static inline struct c4iw_qp *to_c4iw_qp(struct ib_qp *ibqp)
591     @@ -495,6 +500,7 @@ struct c4iw_ucontext {
592     u32 key;
593     spinlock_t mmap_lock;
594     struct list_head mmaps;
595     + struct kref kref;
596     };
597    
598     static inline struct c4iw_ucontext *to_c4iw_ucontext(struct ib_ucontext *c)
599     @@ -502,6 +508,18 @@ static inline struct c4iw_ucontext *to_c4iw_ucontext(struct ib_ucontext *c)
600     return container_of(c, struct c4iw_ucontext, ibucontext);
601     }
602    
603     +void _c4iw_free_ucontext(struct kref *kref);
604     +
605     +static inline void c4iw_put_ucontext(struct c4iw_ucontext *ucontext)
606     +{
607     + kref_put(&ucontext->kref, _c4iw_free_ucontext);
608     +}
609     +
610     +static inline void c4iw_get_ucontext(struct c4iw_ucontext *ucontext)
611     +{
612     + kref_get(&ucontext->kref);
613     +}
614     +
615     struct c4iw_mm_entry {
616     struct list_head entry;
617     u64 addr;
618     diff --git a/drivers/infiniband/hw/cxgb4/provider.c b/drivers/infiniband/hw/cxgb4/provider.c
619     index 645e606a17c5..8278ba06f995 100644
620     --- a/drivers/infiniband/hw/cxgb4/provider.c
621     +++ b/drivers/infiniband/hw/cxgb4/provider.c
622     @@ -91,17 +91,28 @@ static int c4iw_process_mad(struct ib_device *ibdev, int mad_flags,
623     return -ENOSYS;
624     }
625    
626     -static int c4iw_dealloc_ucontext(struct ib_ucontext *context)
627     +void _c4iw_free_ucontext(struct kref *kref)
628     {
629     - struct c4iw_dev *rhp = to_c4iw_dev(context->device);
630     - struct c4iw_ucontext *ucontext = to_c4iw_ucontext(context);
631     + struct c4iw_ucontext *ucontext;
632     + struct c4iw_dev *rhp;
633     struct c4iw_mm_entry *mm, *tmp;
634    
635     - PDBG("%s context %p\n", __func__, context);
636     + ucontext = container_of(kref, struct c4iw_ucontext, kref);
637     + rhp = to_c4iw_dev(ucontext->ibucontext.device);
638     +
639     + PDBG("%s ucontext %p\n", __func__, ucontext);
640     list_for_each_entry_safe(mm, tmp, &ucontext->mmaps, entry)
641     kfree(mm);
642     c4iw_release_dev_ucontext(&rhp->rdev, &ucontext->uctx);
643     kfree(ucontext);
644     +}
645     +
646     +static int c4iw_dealloc_ucontext(struct ib_ucontext *context)
647     +{
648     + struct c4iw_ucontext *ucontext = to_c4iw_ucontext(context);
649     +
650     + PDBG("%s context %p\n", __func__, context);
651     + c4iw_put_ucontext(ucontext);
652     return 0;
653     }
654    
655     @@ -125,6 +136,7 @@ static struct ib_ucontext *c4iw_alloc_ucontext(struct ib_device *ibdev,
656     c4iw_init_dev_ucontext(&rhp->rdev, &context->uctx);
657     INIT_LIST_HEAD(&context->mmaps);
658     spin_lock_init(&context->mmap_lock);
659     + kref_init(&context->kref);
660    
661     if (udata->outlen < sizeof(uresp) - sizeof(uresp.reserved)) {
662     if (!warned++)
663     diff --git a/drivers/infiniband/hw/cxgb4/qp.c b/drivers/infiniband/hw/cxgb4/qp.c
664     index b7ac97b27c88..bb0fde6e2047 100644
665     --- a/drivers/infiniband/hw/cxgb4/qp.c
666     +++ b/drivers/infiniband/hw/cxgb4/qp.c
667     @@ -714,13 +714,32 @@ static int build_inv_stag(union t4_wr *wqe, struct ib_send_wr *wr, u8 *len16)
668     return 0;
669     }
670    
671     -static void _free_qp(struct kref *kref)
672     +static void free_qp_work(struct work_struct *work)
673     +{
674     + struct c4iw_ucontext *ucontext;
675     + struct c4iw_qp *qhp;
676     + struct c4iw_dev *rhp;
677     +
678     + qhp = container_of(work, struct c4iw_qp, free_work);
679     + ucontext = qhp->ucontext;
680     + rhp = qhp->rhp;
681     +
682     + PDBG("%s qhp %p ucontext %p\n", __func__, qhp, ucontext);
683     + destroy_qp(&rhp->rdev, &qhp->wq,
684     + ucontext ? &ucontext->uctx : &rhp->rdev.uctx);
685     +
686     + if (ucontext)
687     + c4iw_put_ucontext(ucontext);
688     + kfree(qhp);
689     +}
690     +
691     +static void queue_qp_free(struct kref *kref)
692     {
693     struct c4iw_qp *qhp;
694    
695     qhp = container_of(kref, struct c4iw_qp, kref);
696     PDBG("%s qhp %p\n", __func__, qhp);
697     - kfree(qhp);
698     + queue_work(qhp->rhp->rdev.free_workq, &qhp->free_work);
699     }
700    
701     void c4iw_qp_add_ref(struct ib_qp *qp)
702     @@ -732,7 +751,7 @@ void c4iw_qp_add_ref(struct ib_qp *qp)
703     void c4iw_qp_rem_ref(struct ib_qp *qp)
704     {
705     PDBG("%s ib_qp %p\n", __func__, qp);
706     - kref_put(&to_c4iw_qp(qp)->kref, _free_qp);
707     + kref_put(&to_c4iw_qp(qp)->kref, queue_qp_free);
708     }
709    
710     static void add_to_fc_list(struct list_head *head, struct list_head *entry)
711     @@ -1642,7 +1661,6 @@ int c4iw_destroy_qp(struct ib_qp *ib_qp)
712     struct c4iw_dev *rhp;
713     struct c4iw_qp *qhp;
714     struct c4iw_qp_attributes attrs;
715     - struct c4iw_ucontext *ucontext;
716    
717     qhp = to_c4iw_qp(ib_qp);
718     rhp = qhp->rhp;
719     @@ -1662,11 +1680,6 @@ int c4iw_destroy_qp(struct ib_qp *ib_qp)
720     spin_unlock_irq(&rhp->lock);
721     free_ird(rhp, qhp->attr.max_ird);
722    
723     - ucontext = ib_qp->uobject ?
724     - to_c4iw_ucontext(ib_qp->uobject->context) : NULL;
725     - destroy_qp(&rhp->rdev, &qhp->wq,
726     - ucontext ? &ucontext->uctx : &rhp->rdev.uctx);
727     -
728     c4iw_qp_rem_ref(ib_qp);
729    
730     PDBG("%s ib_qp %p qpid 0x%0x\n", __func__, ib_qp, qhp->wq.sq.qid);
731     @@ -1767,6 +1780,7 @@ struct ib_qp *c4iw_create_qp(struct ib_pd *pd, struct ib_qp_init_attr *attrs,
732     mutex_init(&qhp->mutex);
733     init_waitqueue_head(&qhp->wait);
734     kref_init(&qhp->kref);
735     + INIT_WORK(&qhp->free_work, free_qp_work);
736    
737     ret = insert_handle(rhp, &rhp->qpidr, qhp, qhp->wq.sq.qid);
738     if (ret)
739     @@ -1853,6 +1867,9 @@ struct ib_qp *c4iw_create_qp(struct ib_pd *pd, struct ib_qp_init_attr *attrs,
740     ma_sync_key_mm->len = PAGE_SIZE;
741     insert_mmap(ucontext, ma_sync_key_mm);
742     }
743     +
744     + c4iw_get_ucontext(ucontext);
745     + qhp->ucontext = ucontext;
746     }
747     qhp->ibqp.qp_num = qhp->wq.sq.qid;
748     init_timer(&(qhp->timer));
749     diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c
750     index ffff5a54cb34..f4f3942ebbd1 100644
751     --- a/drivers/infiniband/sw/rxe/rxe_net.c
752     +++ b/drivers/infiniband/sw/rxe/rxe_net.c
753     @@ -554,7 +554,7 @@ struct rxe_dev *rxe_net_add(struct net_device *ndev)
754     }
755    
756     spin_lock_bh(&dev_list_lock);
757     - list_add_tail(&rxe_dev_list, &rxe->list);
758     + list_add_tail(&rxe->list, &rxe_dev_list);
759     spin_unlock_bh(&dev_list_lock);
760     return rxe;
761     }
762     diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
763     index 486d576e55bc..44b2108253bd 100644
764     --- a/drivers/infiniband/sw/rxe/rxe_qp.c
765     +++ b/drivers/infiniband/sw/rxe/rxe_qp.c
766     @@ -813,8 +813,7 @@ void rxe_qp_destroy(struct rxe_qp *qp)
767     del_timer_sync(&qp->rnr_nak_timer);
768    
769     rxe_cleanup_task(&qp->req.task);
770     - if (qp_type(qp) == IB_QPT_RC)
771     - rxe_cleanup_task(&qp->comp.task);
772     + rxe_cleanup_task(&qp->comp.task);
773    
774     /* flush out any receive wr's or pending requests */
775     __rxe_do_task(&qp->req.task);
776     diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c b/drivers/infiniband/ulp/iser/iscsi_iser.c
777     index 64b3d11dcf1e..140f3f354cf3 100644
778     --- a/drivers/infiniband/ulp/iser/iscsi_iser.c
779     +++ b/drivers/infiniband/ulp/iser/iscsi_iser.c
780     @@ -651,13 +651,6 @@ iscsi_iser_session_create(struct iscsi_endpoint *ep,
781     SHOST_DIX_GUARD_CRC);
782     }
783    
784     - /*
785     - * Limit the sg_tablesize and max_sectors based on the device
786     - * max fastreg page list length.
787     - */
788     - shost->sg_tablesize = min_t(unsigned short, shost->sg_tablesize,
789     - ib_conn->device->ib_device->attrs.max_fast_reg_page_list_len);
790     -
791     if (iscsi_host_add(shost,
792     ib_conn->device->ib_device->dma_device)) {
793     mutex_unlock(&iser_conn->state_mutex);
794     diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
795     index d980fb458ad4..e7dcf14a76e2 100644
796     --- a/drivers/infiniband/ulp/srp/ib_srp.c
797     +++ b/drivers/infiniband/ulp/srp/ib_srp.c
798     @@ -366,6 +366,7 @@ static struct srp_fr_pool *srp_create_fr_pool(struct ib_device *device,
799     struct srp_fr_desc *d;
800     struct ib_mr *mr;
801     int i, ret = -EINVAL;
802     + enum ib_mr_type mr_type;
803    
804     if (pool_size <= 0)
805     goto err;
806     @@ -379,9 +380,13 @@ static struct srp_fr_pool *srp_create_fr_pool(struct ib_device *device,
807     spin_lock_init(&pool->lock);
808     INIT_LIST_HEAD(&pool->free_list);
809    
810     + if (device->attrs.device_cap_flags & IB_DEVICE_SG_GAPS_REG)
811     + mr_type = IB_MR_TYPE_SG_GAPS;
812     + else
813     + mr_type = IB_MR_TYPE_MEM_REG;
814     +
815     for (i = 0, d = &pool->desc[0]; i < pool->size; i++, d++) {
816     - mr = ib_alloc_mr(pd, IB_MR_TYPE_MEM_REG,
817     - max_page_list_len);
818     + mr = ib_alloc_mr(pd, mr_type, max_page_list_len);
819     if (IS_ERR(mr)) {
820     ret = PTR_ERR(mr);
821     goto destroy_pool;
822     @@ -3678,6 +3683,12 @@ static int __init srp_init_module(void)
823     indirect_sg_entries = cmd_sg_entries;
824     }
825    
826     + if (indirect_sg_entries > SG_MAX_SEGMENTS) {
827     + pr_warn("Clamping indirect_sg_entries to %u\n",
828     + SG_MAX_SEGMENTS);
829     + indirect_sg_entries = SG_MAX_SEGMENTS;
830     + }
831     +
832     srp_remove_wq = create_workqueue("srp_remove");
833     if (!srp_remove_wq) {
834     ret = -ENOMEM;
835     diff --git a/drivers/isdn/hardware/eicon/message.c b/drivers/isdn/hardware/eicon/message.c
836     index 1a1d99704fe6..296f1411fe84 100644
837     --- a/drivers/isdn/hardware/eicon/message.c
838     +++ b/drivers/isdn/hardware/eicon/message.c
839     @@ -11297,7 +11297,8 @@ static void mixer_notify_update(PLCI *plci, byte others)
840     ((CAPI_MSG *) msg)->header.ncci = 0;
841     ((CAPI_MSG *) msg)->info.facility_req.Selector = SELECTOR_LINE_INTERCONNECT;
842     ((CAPI_MSG *) msg)->info.facility_req.structs[0] = 3;
843     - PUT_WORD(&(((CAPI_MSG *) msg)->info.facility_req.structs[1]), LI_REQ_SILENT_UPDATE);
844     + ((CAPI_MSG *) msg)->info.facility_req.structs[1] = LI_REQ_SILENT_UPDATE & 0xff;
845     + ((CAPI_MSG *) msg)->info.facility_req.structs[2] = LI_REQ_SILENT_UPDATE >> 8;
846     ((CAPI_MSG *) msg)->info.facility_req.structs[3] = 0;
847     w = api_put(notify_plci->appl, (CAPI_MSG *) msg);
848     if (w != _QUEUE_FULL)
849     diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig
850     index 2669b4bad910..5a27bffa02fb 100644
851     --- a/drivers/media/i2c/Kconfig
852     +++ b/drivers/media/i2c/Kconfig
853     @@ -655,6 +655,7 @@ config VIDEO_S5K6A3
854     config VIDEO_S5K4ECGX
855     tristate "Samsung S5K4ECGX sensor support"
856     depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API
857     + select CRC32
858     ---help---
859     This is a V4L2 sensor-level driver for Samsung S5K4ECGX 5M
860     camera sensor with an embedded SoC image signal processor.
861     diff --git a/drivers/media/i2c/tvp5150.c b/drivers/media/i2c/tvp5150.c
862     index 7268e706e216..59aa4dafb60b 100644
863     --- a/drivers/media/i2c/tvp5150.c
864     +++ b/drivers/media/i2c/tvp5150.c
865     @@ -288,8 +288,12 @@ static inline void tvp5150_selmux(struct v4l2_subdev *sd)
866     tvp5150_write(sd, TVP5150_OP_MODE_CTL, opmode);
867     tvp5150_write(sd, TVP5150_VD_IN_SRC_SEL_1, input);
868    
869     - /* Svideo should enable YCrCb output and disable GPCL output
870     - * For Composite and TV, it should be the reverse
871     + /*
872     + * Setup the FID/GLCO/VLK/HVLK and INTREQ/GPCL/VBLK output signals. For
873     + * S-Video we output the vertical lock (VLK) signal on FID/GLCO/VLK/HVLK
874     + * and set INTREQ/GPCL/VBLK to logic 0. For composite we output the
875     + * field indicator (FID) signal on FID/GLCO/VLK/HVLK and set
876     + * INTREQ/GPCL/VBLK to logic 1.
877     */
878     val = tvp5150_read(sd, TVP5150_MISC_CTL);
879     if (val < 0) {
880     @@ -298,9 +302,9 @@ static inline void tvp5150_selmux(struct v4l2_subdev *sd)
881     }
882    
883     if (decoder->input == TVP5150_SVIDEO)
884     - val = (val & ~0x40) | 0x10;
885     + val = (val & ~TVP5150_MISC_CTL_GPCL) | TVP5150_MISC_CTL_HVLK;
886     else
887     - val = (val & ~0x10) | 0x40;
888     + val = (val & ~TVP5150_MISC_CTL_HVLK) | TVP5150_MISC_CTL_GPCL;
889     tvp5150_write(sd, TVP5150_MISC_CTL, val);
890     };
891    
892     @@ -452,7 +456,12 @@ static const struct i2c_reg_value tvp5150_init_enable[] = {
893     },{ /* Automatic offset and AGC enabled */
894     TVP5150_ANAL_CHL_CTL, 0x15
895     },{ /* Activate YCrCb output 0x9 or 0xd ? */
896     - TVP5150_MISC_CTL, 0x6f
897     + TVP5150_MISC_CTL, TVP5150_MISC_CTL_GPCL |
898     + TVP5150_MISC_CTL_INTREQ_OE |
899     + TVP5150_MISC_CTL_YCBCR_OE |
900     + TVP5150_MISC_CTL_SYNC_OE |
901     + TVP5150_MISC_CTL_VBLANK |
902     + TVP5150_MISC_CTL_CLOCK_OE,
903     },{ /* Activates video std autodetection for all standards */
904     TVP5150_AUTOSW_MSK, 0x0
905     },{ /* Default format: 0x47. For 4:2:2: 0x40 */
906     @@ -858,8 +867,6 @@ static int tvp5150_fill_fmt(struct v4l2_subdev *sd,
907    
908     f = &format->format;
909    
910     - tvp5150_reset(sd, 0);
911     -
912     f->width = decoder->rect.width;
913     f->height = decoder->rect.height / 2;
914    
915     @@ -1048,21 +1055,27 @@ static const struct media_entity_operations tvp5150_sd_media_ops = {
916     static int tvp5150_s_stream(struct v4l2_subdev *sd, int enable)
917     {
918     struct tvp5150 *decoder = to_tvp5150(sd);
919     - /* Output format: 8-bit ITU-R BT.656 with embedded syncs */
920     - int val = 0x09;
921     -
922     - /* Output format: 8-bit 4:2:2 YUV with discrete sync */
923     - if (decoder->mbus_type == V4L2_MBUS_PARALLEL)
924     - val = 0x0d;
925     + int val;
926    
927     - /* Initializes TVP5150 to its default values */
928     - /* # set PCLK (27MHz) */
929     - tvp5150_write(sd, TVP5150_CONF_SHARED_PIN, 0x00);
930     + /* Enable or disable the video output signals. */
931     + val = tvp5150_read(sd, TVP5150_MISC_CTL);
932     + if (val < 0)
933     + return val;
934     +
935     + val &= ~(TVP5150_MISC_CTL_YCBCR_OE | TVP5150_MISC_CTL_SYNC_OE |
936     + TVP5150_MISC_CTL_CLOCK_OE);
937     +
938     + if (enable) {
939     + /*
940     + * Enable the YCbCr and clock outputs. In discrete sync mode
941     + * (non-BT.656) additionally enable the the sync outputs.
942     + */
943     + val |= TVP5150_MISC_CTL_YCBCR_OE | TVP5150_MISC_CTL_CLOCK_OE;
944     + if (decoder->mbus_type == V4L2_MBUS_PARALLEL)
945     + val |= TVP5150_MISC_CTL_SYNC_OE;
946     + }
947    
948     - if (enable)
949     - tvp5150_write(sd, TVP5150_MISC_CTL, val);
950     - else
951     - tvp5150_write(sd, TVP5150_MISC_CTL, 0x00);
952     + tvp5150_write(sd, TVP5150_MISC_CTL, val);
953    
954     return 0;
955     }
956     @@ -1521,7 +1534,6 @@ static int tvp5150_probe(struct i2c_client *c,
957     res = core->hdl.error;
958     goto err;
959     }
960     - v4l2_ctrl_handler_setup(&core->hdl);
961    
962     /* Default is no cropping */
963     core->rect.top = 0;
964     @@ -1532,6 +1544,8 @@ static int tvp5150_probe(struct i2c_client *c,
965     core->rect.left = 0;
966     core->rect.width = TVP5150_H_MAX;
967    
968     + tvp5150_reset(sd, 0); /* Calls v4l2_ctrl_handler_setup() */
969     +
970     res = v4l2_async_register_subdev(sd);
971     if (res < 0)
972     goto err;
973     diff --git a/drivers/media/i2c/tvp5150_reg.h b/drivers/media/i2c/tvp5150_reg.h
974     index 25a994944918..30a48c28d05a 100644
975     --- a/drivers/media/i2c/tvp5150_reg.h
976     +++ b/drivers/media/i2c/tvp5150_reg.h
977     @@ -9,6 +9,15 @@
978     #define TVP5150_ANAL_CHL_CTL 0x01 /* Analog channel controls */
979     #define TVP5150_OP_MODE_CTL 0x02 /* Operation mode controls */
980     #define TVP5150_MISC_CTL 0x03 /* Miscellaneous controls */
981     +#define TVP5150_MISC_CTL_VBLK_GPCL BIT(7)
982     +#define TVP5150_MISC_CTL_GPCL BIT(6)
983     +#define TVP5150_MISC_CTL_INTREQ_OE BIT(5)
984     +#define TVP5150_MISC_CTL_HVLK BIT(4)
985     +#define TVP5150_MISC_CTL_YCBCR_OE BIT(3)
986     +#define TVP5150_MISC_CTL_SYNC_OE BIT(2)
987     +#define TVP5150_MISC_CTL_VBLANK BIT(1)
988     +#define TVP5150_MISC_CTL_CLOCK_OE BIT(0)
989     +
990     #define TVP5150_AUTOSW_MSK 0x04 /* Autoswitch mask: TVP5150A / TVP5150AM */
991    
992     /* Reserved 05h */
993     diff --git a/drivers/media/usb/dvb-usb/pctv452e.c b/drivers/media/usb/dvb-usb/pctv452e.c
994     index 07fa08be9e99..d54ebe7e0215 100644
995     --- a/drivers/media/usb/dvb-usb/pctv452e.c
996     +++ b/drivers/media/usb/dvb-usb/pctv452e.c
997     @@ -97,14 +97,13 @@ struct pctv452e_state {
998     u8 c; /* transaction counter, wraps around... */
999     u8 initialized; /* set to 1 if 0x15 has been sent */
1000     u16 last_rc_key;
1001     -
1002     - unsigned char data[80];
1003     };
1004    
1005     static int tt3650_ci_msg(struct dvb_usb_device *d, u8 cmd, u8 *data,
1006     unsigned int write_len, unsigned int read_len)
1007     {
1008     struct pctv452e_state *state = (struct pctv452e_state *)d->priv;
1009     + u8 *buf;
1010     u8 id;
1011     unsigned int rlen;
1012     int ret;
1013     @@ -114,36 +113,39 @@ static int tt3650_ci_msg(struct dvb_usb_device *d, u8 cmd, u8 *data,
1014     return -EIO;
1015     }
1016    
1017     - mutex_lock(&state->ca_mutex);
1018     + buf = kmalloc(64, GFP_KERNEL);
1019     + if (!buf)
1020     + return -ENOMEM;
1021     +
1022     id = state->c++;
1023    
1024     - state->data[0] = SYNC_BYTE_OUT;
1025     - state->data[1] = id;
1026     - state->data[2] = cmd;
1027     - state->data[3] = write_len;
1028     + buf[0] = SYNC_BYTE_OUT;
1029     + buf[1] = id;
1030     + buf[2] = cmd;
1031     + buf[3] = write_len;
1032    
1033     - memcpy(state->data + 4, data, write_len);
1034     + memcpy(buf + 4, data, write_len);
1035    
1036     rlen = (read_len > 0) ? 64 : 0;
1037     - ret = dvb_usb_generic_rw(d, state->data, 4 + write_len,
1038     - state->data, rlen, /* delay_ms */ 0);
1039     + ret = dvb_usb_generic_rw(d, buf, 4 + write_len,
1040     + buf, rlen, /* delay_ms */ 0);
1041     if (0 != ret)
1042     goto failed;
1043    
1044     ret = -EIO;
1045     - if (SYNC_BYTE_IN != state->data[0] || id != state->data[1])
1046     + if (SYNC_BYTE_IN != buf[0] || id != buf[1])
1047     goto failed;
1048    
1049     - memcpy(data, state->data + 4, read_len);
1050     + memcpy(data, buf + 4, read_len);
1051    
1052     - mutex_unlock(&state->ca_mutex);
1053     + kfree(buf);
1054     return 0;
1055    
1056     failed:
1057     err("CI error %d; %02X %02X %02X -> %*ph.",
1058     - ret, SYNC_BYTE_OUT, id, cmd, 3, state->data);
1059     + ret, SYNC_BYTE_OUT, id, cmd, 3, buf);
1060    
1061     - mutex_unlock(&state->ca_mutex);
1062     + kfree(buf);
1063     return ret;
1064     }
1065    
1066     @@ -410,53 +412,57 @@ static int pctv452e_i2c_msg(struct dvb_usb_device *d, u8 addr,
1067     u8 *rcv_buf, u8 rcv_len)
1068     {
1069     struct pctv452e_state *state = (struct pctv452e_state *)d->priv;
1070     + u8 *buf;
1071     u8 id;
1072     int ret;
1073    
1074     - mutex_lock(&state->ca_mutex);
1075     + buf = kmalloc(64, GFP_KERNEL);
1076     + if (!buf)
1077     + return -ENOMEM;
1078     +
1079     id = state->c++;
1080    
1081     ret = -EINVAL;
1082     if (snd_len > 64 - 7 || rcv_len > 64 - 7)
1083     goto failed;
1084    
1085     - state->data[0] = SYNC_BYTE_OUT;
1086     - state->data[1] = id;
1087     - state->data[2] = PCTV_CMD_I2C;
1088     - state->data[3] = snd_len + 3;
1089     - state->data[4] = addr << 1;
1090     - state->data[5] = snd_len;
1091     - state->data[6] = rcv_len;
1092     + buf[0] = SYNC_BYTE_OUT;
1093     + buf[1] = id;
1094     + buf[2] = PCTV_CMD_I2C;
1095     + buf[3] = snd_len + 3;
1096     + buf[4] = addr << 1;
1097     + buf[5] = snd_len;
1098     + buf[6] = rcv_len;
1099    
1100     - memcpy(state->data + 7, snd_buf, snd_len);
1101     + memcpy(buf + 7, snd_buf, snd_len);
1102    
1103     - ret = dvb_usb_generic_rw(d, state->data, 7 + snd_len,
1104     - state->data, /* rcv_len */ 64,
1105     + ret = dvb_usb_generic_rw(d, buf, 7 + snd_len,
1106     + buf, /* rcv_len */ 64,
1107     /* delay_ms */ 0);
1108     if (ret < 0)
1109     goto failed;
1110    
1111     /* TT USB protocol error. */
1112     ret = -EIO;
1113     - if (SYNC_BYTE_IN != state->data[0] || id != state->data[1])
1114     + if (SYNC_BYTE_IN != buf[0] || id != buf[1])
1115     goto failed;
1116    
1117     /* I2C device didn't respond as expected. */
1118     ret = -EREMOTEIO;
1119     - if (state->data[5] < snd_len || state->data[6] < rcv_len)
1120     + if (buf[5] < snd_len || buf[6] < rcv_len)
1121     goto failed;
1122    
1123     - memcpy(rcv_buf, state->data + 7, rcv_len);
1124     - mutex_unlock(&state->ca_mutex);
1125     + memcpy(rcv_buf, buf + 7, rcv_len);
1126    
1127     + kfree(buf);
1128     return rcv_len;
1129    
1130     failed:
1131     err("I2C error %d; %02X %02X %02X %02X %02X -> %*ph",
1132     ret, SYNC_BYTE_OUT, id, addr << 1, snd_len, rcv_len,
1133     - 7, state->data);
1134     + 7, buf);
1135    
1136     - mutex_unlock(&state->ca_mutex);
1137     + kfree(buf);
1138     return ret;
1139     }
1140    
1141     @@ -505,7 +511,7 @@ static u32 pctv452e_i2c_func(struct i2c_adapter *adapter)
1142     static int pctv452e_power_ctrl(struct dvb_usb_device *d, int i)
1143     {
1144     struct pctv452e_state *state = (struct pctv452e_state *)d->priv;
1145     - u8 *rx;
1146     + u8 *b0, *rx;
1147     int ret;
1148    
1149     info("%s: %d\n", __func__, i);
1150     @@ -516,11 +522,12 @@ static int pctv452e_power_ctrl(struct dvb_usb_device *d, int i)
1151     if (state->initialized)
1152     return 0;
1153    
1154     - rx = kmalloc(PCTV_ANSWER_LEN, GFP_KERNEL);
1155     - if (!rx)
1156     + b0 = kmalloc(5 + PCTV_ANSWER_LEN, GFP_KERNEL);
1157     + if (!b0)
1158     return -ENOMEM;
1159    
1160     - mutex_lock(&state->ca_mutex);
1161     + rx = b0 + 5;
1162     +
1163     /* hmm where shoud this should go? */
1164     ret = usb_set_interface(d->udev, 0, ISOC_INTERFACE_ALTERNATIVE);
1165     if (ret != 0)
1166     @@ -528,66 +535,70 @@ static int pctv452e_power_ctrl(struct dvb_usb_device *d, int i)
1167     __func__, ret);
1168    
1169     /* this is a one-time initialization, dont know where to put */
1170     - state->data[0] = 0xaa;
1171     - state->data[1] = state->c++;
1172     - state->data[2] = PCTV_CMD_RESET;
1173     - state->data[3] = 1;
1174     - state->data[4] = 0;
1175     + b0[0] = 0xaa;
1176     + b0[1] = state->c++;
1177     + b0[2] = PCTV_CMD_RESET;
1178     + b0[3] = 1;
1179     + b0[4] = 0;
1180     /* reset board */
1181     - ret = dvb_usb_generic_rw(d, state->data, 5, rx, PCTV_ANSWER_LEN, 0);
1182     + ret = dvb_usb_generic_rw(d, b0, 5, rx, PCTV_ANSWER_LEN, 0);
1183     if (ret)
1184     goto ret;
1185    
1186     - state->data[1] = state->c++;
1187     - state->data[4] = 1;
1188     + b0[1] = state->c++;
1189     + b0[4] = 1;
1190     /* reset board (again?) */
1191     - ret = dvb_usb_generic_rw(d, state->data, 5, rx, PCTV_ANSWER_LEN, 0);
1192     + ret = dvb_usb_generic_rw(d, b0, 5, rx, PCTV_ANSWER_LEN, 0);
1193     if (ret)
1194     goto ret;
1195    
1196     state->initialized = 1;
1197    
1198     ret:
1199     - mutex_unlock(&state->ca_mutex);
1200     - kfree(rx);
1201     + kfree(b0);
1202     return ret;
1203     }
1204    
1205     static int pctv452e_rc_query(struct dvb_usb_device *d)
1206     {
1207     struct pctv452e_state *state = (struct pctv452e_state *)d->priv;
1208     + u8 *b, *rx;
1209     int ret, i;
1210     u8 id;
1211    
1212     - mutex_lock(&state->ca_mutex);
1213     + b = kmalloc(CMD_BUFFER_SIZE + PCTV_ANSWER_LEN, GFP_KERNEL);
1214     + if (!b)
1215     + return -ENOMEM;
1216     +
1217     + rx = b + CMD_BUFFER_SIZE;
1218     +
1219     id = state->c++;
1220    
1221     /* prepare command header */
1222     - state->data[0] = SYNC_BYTE_OUT;
1223     - state->data[1] = id;
1224     - state->data[2] = PCTV_CMD_IR;
1225     - state->data[3] = 0;
1226     + b[0] = SYNC_BYTE_OUT;
1227     + b[1] = id;
1228     + b[2] = PCTV_CMD_IR;
1229     + b[3] = 0;
1230    
1231     /* send ir request */
1232     - ret = dvb_usb_generic_rw(d, state->data, 4,
1233     - state->data, PCTV_ANSWER_LEN, 0);
1234     + ret = dvb_usb_generic_rw(d, b, 4, rx, PCTV_ANSWER_LEN, 0);
1235     if (ret != 0)
1236     goto ret;
1237    
1238     if (debug > 3) {
1239     - info("%s: read: %2d: %*ph: ", __func__, ret, 3, state->data);
1240     - for (i = 0; (i < state->data[3]) && ((i + 3) < PCTV_ANSWER_LEN); i++)
1241     - info(" %02x", state->data[i + 3]);
1242     + info("%s: read: %2d: %*ph: ", __func__, ret, 3, rx);
1243     + for (i = 0; (i < rx[3]) && ((i+3) < PCTV_ANSWER_LEN); i++)
1244     + info(" %02x", rx[i+3]);
1245    
1246     info("\n");
1247     }
1248    
1249     - if ((state->data[3] == 9) && (state->data[12] & 0x01)) {
1250     + if ((rx[3] == 9) && (rx[12] & 0x01)) {
1251     /* got a "press" event */
1252     - state->last_rc_key = RC_SCANCODE_RC5(state->data[7], state->data[6]);
1253     + state->last_rc_key = RC_SCANCODE_RC5(rx[7], rx[6]);
1254     if (debug > 2)
1255     info("%s: cmd=0x%02x sys=0x%02x\n",
1256     - __func__, state->data[6], state->data[7]);
1257     + __func__, rx[6], rx[7]);
1258    
1259     rc_keydown(d->rc_dev, RC_TYPE_RC5, state->last_rc_key, 0);
1260     } else if (state->last_rc_key) {
1261     @@ -595,7 +606,7 @@ static int pctv452e_rc_query(struct dvb_usb_device *d)
1262     state->last_rc_key = 0;
1263     }
1264     ret:
1265     - mutex_unlock(&state->ca_mutex);
1266     + kfree(b);
1267     return ret;
1268     }
1269    
1270     diff --git a/drivers/net/can/c_can/c_can_pci.c b/drivers/net/can/c_can/c_can_pci.c
1271     index 7be393c96b1a..cf7c18947189 100644
1272     --- a/drivers/net/can/c_can/c_can_pci.c
1273     +++ b/drivers/net/can/c_can/c_can_pci.c
1274     @@ -161,6 +161,7 @@ static int c_can_pci_probe(struct pci_dev *pdev,
1275    
1276     dev->irq = pdev->irq;
1277     priv->base = addr;
1278     + priv->device = &pdev->dev;
1279    
1280     if (!c_can_pci_data->freq) {
1281     dev_err(&pdev->dev, "no clock frequency defined\n");
1282     diff --git a/drivers/net/can/ti_hecc.c b/drivers/net/can/ti_hecc.c
1283     index 680d1ff07a55..6749b1829469 100644
1284     --- a/drivers/net/can/ti_hecc.c
1285     +++ b/drivers/net/can/ti_hecc.c
1286     @@ -948,7 +948,12 @@ static int ti_hecc_probe(struct platform_device *pdev)
1287     netif_napi_add(ndev, &priv->napi, ti_hecc_rx_poll,
1288     HECC_DEF_NAPI_WEIGHT);
1289    
1290     - clk_enable(priv->clk);
1291     + err = clk_prepare_enable(priv->clk);
1292     + if (err) {
1293     + dev_err(&pdev->dev, "clk_prepare_enable() failed\n");
1294     + goto probe_exit_clk;
1295     + }
1296     +
1297     err = register_candev(ndev);
1298     if (err) {
1299     dev_err(&pdev->dev, "register_candev() failed\n");
1300     @@ -981,7 +986,7 @@ static int ti_hecc_remove(struct platform_device *pdev)
1301     struct ti_hecc_priv *priv = netdev_priv(ndev);
1302    
1303     unregister_candev(ndev);
1304     - clk_disable(priv->clk);
1305     + clk_disable_unprepare(priv->clk);
1306     clk_put(priv->clk);
1307     res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1308     iounmap(priv->base);
1309     @@ -1006,7 +1011,7 @@ static int ti_hecc_suspend(struct platform_device *pdev, pm_message_t state)
1310     hecc_set_bit(priv, HECC_CANMC, HECC_CANMC_PDR);
1311     priv->can.state = CAN_STATE_SLEEPING;
1312    
1313     - clk_disable(priv->clk);
1314     + clk_disable_unprepare(priv->clk);
1315    
1316     return 0;
1317     }
1318     @@ -1015,8 +1020,11 @@ static int ti_hecc_resume(struct platform_device *pdev)
1319     {
1320     struct net_device *dev = platform_get_drvdata(pdev);
1321     struct ti_hecc_priv *priv = netdev_priv(dev);
1322     + int err;
1323    
1324     - clk_enable(priv->clk);
1325     + err = clk_prepare_enable(priv->clk);
1326     + if (err)
1327     + return err;
1328    
1329     hecc_clear_bit(priv, HECC_CANMC, HECC_CANMC_PDR);
1330     priv->can.state = CAN_STATE_ERROR_ACTIVE;
1331     diff --git a/drivers/pinctrl/intel/pinctrl-baytrail.c b/drivers/pinctrl/intel/pinctrl-baytrail.c
1332     index 71bbeb9321ba..079015385fd8 100644
1333     --- a/drivers/pinctrl/intel/pinctrl-baytrail.c
1334     +++ b/drivers/pinctrl/intel/pinctrl-baytrail.c
1335     @@ -1092,6 +1092,7 @@ static int byt_pin_config_get(struct pinctrl_dev *pctl_dev, unsigned int offset,
1336     enum pin_config_param param = pinconf_to_config_param(*config);
1337     void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
1338     void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1339     + void __iomem *db_reg = byt_gpio_reg(vg, offset, BYT_DEBOUNCE_REG);
1340     unsigned long flags;
1341     u32 conf, pull, val, debounce;
1342     u16 arg = 0;
1343     @@ -1128,7 +1129,7 @@ static int byt_pin_config_get(struct pinctrl_dev *pctl_dev, unsigned int offset,
1344     return -EINVAL;
1345    
1346     raw_spin_lock_irqsave(&vg->lock, flags);
1347     - debounce = readl(byt_gpio_reg(vg, offset, BYT_DEBOUNCE_REG));
1348     + debounce = readl(db_reg);
1349     raw_spin_unlock_irqrestore(&vg->lock, flags);
1350    
1351     switch (debounce & BYT_DEBOUNCE_PULSE_MASK) {
1352     @@ -1176,6 +1177,7 @@ static int byt_pin_config_set(struct pinctrl_dev *pctl_dev,
1353     unsigned int param, arg;
1354     void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
1355     void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1356     + void __iomem *db_reg = byt_gpio_reg(vg, offset, BYT_DEBOUNCE_REG);
1357     unsigned long flags;
1358     u32 conf, val, debounce;
1359     int i, ret = 0;
1360     @@ -1238,36 +1240,40 @@ static int byt_pin_config_set(struct pinctrl_dev *pctl_dev,
1361    
1362     break;
1363     case PIN_CONFIG_INPUT_DEBOUNCE:
1364     - debounce = readl(byt_gpio_reg(vg, offset,
1365     - BYT_DEBOUNCE_REG));
1366     - conf &= ~BYT_DEBOUNCE_PULSE_MASK;
1367     + debounce = readl(db_reg);
1368     + debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
1369    
1370     switch (arg) {
1371     + case 0:
1372     + conf &= BYT_DEBOUNCE_EN;
1373     + break;
1374     case 375:
1375     - conf |= BYT_DEBOUNCE_PULSE_375US;
1376     + debounce |= BYT_DEBOUNCE_PULSE_375US;
1377     break;
1378     case 750:
1379     - conf |= BYT_DEBOUNCE_PULSE_750US;
1380     + debounce |= BYT_DEBOUNCE_PULSE_750US;
1381     break;
1382     case 1500:
1383     - conf |= BYT_DEBOUNCE_PULSE_1500US;
1384     + debounce |= BYT_DEBOUNCE_PULSE_1500US;
1385     break;
1386     case 3000:
1387     - conf |= BYT_DEBOUNCE_PULSE_3MS;
1388     + debounce |= BYT_DEBOUNCE_PULSE_3MS;
1389     break;
1390     case 6000:
1391     - conf |= BYT_DEBOUNCE_PULSE_6MS;
1392     + debounce |= BYT_DEBOUNCE_PULSE_6MS;
1393     break;
1394     case 12000:
1395     - conf |= BYT_DEBOUNCE_PULSE_12MS;
1396     + debounce |= BYT_DEBOUNCE_PULSE_12MS;
1397     break;
1398     case 24000:
1399     - conf |= BYT_DEBOUNCE_PULSE_24MS;
1400     + debounce |= BYT_DEBOUNCE_PULSE_24MS;
1401     break;
1402     default:
1403     ret = -EINVAL;
1404     }
1405    
1406     + if (!ret)
1407     + writel(debounce, db_reg);
1408     break;
1409     default:
1410     ret = -ENOTSUPP;
1411     diff --git a/drivers/pinctrl/intel/pinctrl-broxton.c b/drivers/pinctrl/intel/pinctrl-broxton.c
1412     index 59cb7a6fc5be..901b356b09d7 100644
1413     --- a/drivers/pinctrl/intel/pinctrl-broxton.c
1414     +++ b/drivers/pinctrl/intel/pinctrl-broxton.c
1415     @@ -19,7 +19,7 @@
1416    
1417     #define BXT_PAD_OWN 0x020
1418     #define BXT_HOSTSW_OWN 0x080
1419     -#define BXT_PADCFGLOCK 0x090
1420     +#define BXT_PADCFGLOCK 0x060
1421     #define BXT_GPI_IE 0x110
1422    
1423     #define BXT_COMMUNITY(s, e) \
1424     diff --git a/drivers/pinctrl/uniphier/pinctrl-uniphier-ld20.c b/drivers/pinctrl/uniphier/pinctrl-uniphier-ld20.c
1425     index aa8bd9794683..96686336e3a3 100644
1426     --- a/drivers/pinctrl/uniphier/pinctrl-uniphier-ld20.c
1427     +++ b/drivers/pinctrl/uniphier/pinctrl-uniphier-ld20.c
1428     @@ -561,7 +561,7 @@ static const int ether_rgmii_muxvals[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1429     0, 0, 0, 0};
1430     static const unsigned ether_rmii_pins[] = {30, 31, 32, 33, 34, 35, 36, 37, 39,
1431     41, 42, 45};
1432     -static const int ether_rmii_muxvals[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
1433     +static const int ether_rmii_muxvals[] = {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1};
1434     static const unsigned i2c0_pins[] = {63, 64};
1435     static const int i2c0_muxvals[] = {0, 0};
1436     static const unsigned i2c1_pins[] = {65, 66};
1437     diff --git a/drivers/platform/x86/intel_mid_powerbtn.c b/drivers/platform/x86/intel_mid_powerbtn.c
1438     index 1fc0de870ff8..361770568ad0 100644
1439     --- a/drivers/platform/x86/intel_mid_powerbtn.c
1440     +++ b/drivers/platform/x86/intel_mid_powerbtn.c
1441     @@ -77,7 +77,7 @@ static int mfld_pb_probe(struct platform_device *pdev)
1442    
1443     input_set_capability(input, EV_KEY, KEY_POWER);
1444    
1445     - error = request_threaded_irq(irq, NULL, mfld_pb_isr, 0,
1446     + error = request_threaded_irq(irq, NULL, mfld_pb_isr, IRQF_ONESHOT,
1447     DRIVER_NAME, input);
1448     if (error) {
1449     dev_err(&pdev->dev, "Unable to request irq %d for mfld power"
1450     diff --git a/drivers/video/fbdev/core/fbcmap.c b/drivers/video/fbdev/core/fbcmap.c
1451     index f89245b8ba8e..68a113594808 100644
1452     --- a/drivers/video/fbdev/core/fbcmap.c
1453     +++ b/drivers/video/fbdev/core/fbcmap.c
1454     @@ -163,17 +163,18 @@ void fb_dealloc_cmap(struct fb_cmap *cmap)
1455    
1456     int fb_copy_cmap(const struct fb_cmap *from, struct fb_cmap *to)
1457     {
1458     - int tooff = 0, fromoff = 0;
1459     - int size;
1460     + unsigned int tooff = 0, fromoff = 0;
1461     + size_t size;
1462    
1463     if (to->start > from->start)
1464     fromoff = to->start - from->start;
1465     else
1466     tooff = from->start - to->start;
1467     - size = to->len - tooff;
1468     - if (size > (int) (from->len - fromoff))
1469     - size = from->len - fromoff;
1470     - if (size <= 0)
1471     + if (fromoff >= from->len || tooff >= to->len)
1472     + return -EINVAL;
1473     +
1474     + size = min_t(size_t, to->len - tooff, from->len - fromoff);
1475     + if (size == 0)
1476     return -EINVAL;
1477     size *= sizeof(u16);
1478    
1479     @@ -187,17 +188,18 @@ int fb_copy_cmap(const struct fb_cmap *from, struct fb_cmap *to)
1480    
1481     int fb_cmap_to_user(const struct fb_cmap *from, struct fb_cmap_user *to)
1482     {
1483     - int tooff = 0, fromoff = 0;
1484     - int size;
1485     + unsigned int tooff = 0, fromoff = 0;
1486     + size_t size;
1487    
1488     if (to->start > from->start)
1489     fromoff = to->start - from->start;
1490     else
1491     tooff = from->start - to->start;
1492     - size = to->len - tooff;
1493     - if (size > (int) (from->len - fromoff))
1494     - size = from->len - fromoff;
1495     - if (size <= 0)
1496     + if (fromoff >= from->len || tooff >= to->len)
1497     + return -EINVAL;
1498     +
1499     + size = min_t(size_t, to->len - tooff, from->len - fromoff);
1500     + if (size == 0)
1501     return -EINVAL;
1502     size *= sizeof(u16);
1503    
1504     diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c
1505     index 48bfea91dbca..50840984fbfa 100644
1506     --- a/drivers/virtio/virtio_mmio.c
1507     +++ b/drivers/virtio/virtio_mmio.c
1508     @@ -59,6 +59,7 @@
1509     #define pr_fmt(fmt) "virtio-mmio: " fmt
1510    
1511     #include <linux/acpi.h>
1512     +#include <linux/dma-mapping.h>
1513     #include <linux/highmem.h>
1514     #include <linux/interrupt.h>
1515     #include <linux/io.h>
1516     @@ -497,6 +498,7 @@ static int virtio_mmio_probe(struct platform_device *pdev)
1517     struct virtio_mmio_device *vm_dev;
1518     struct resource *mem;
1519     unsigned long magic;
1520     + int rc;
1521    
1522     mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1523     if (!mem)
1524     @@ -545,9 +547,25 @@ static int virtio_mmio_probe(struct platform_device *pdev)
1525     }
1526     vm_dev->vdev.id.vendor = readl(vm_dev->base + VIRTIO_MMIO_VENDOR_ID);
1527    
1528     - if (vm_dev->version == 1)
1529     + if (vm_dev->version == 1) {
1530     writel(PAGE_SIZE, vm_dev->base + VIRTIO_MMIO_GUEST_PAGE_SIZE);
1531    
1532     + rc = dma_set_mask(&pdev->dev, DMA_BIT_MASK(64));
1533     + /*
1534     + * In the legacy case, ensure our coherently-allocated virtio
1535     + * ring will be at an address expressable as a 32-bit PFN.
1536     + */
1537     + if (!rc)
1538     + dma_set_coherent_mask(&pdev->dev,
1539     + DMA_BIT_MASK(32 + PAGE_SHIFT));
1540     + } else {
1541     + rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
1542     + }
1543     + if (rc)
1544     + rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
1545     + if (rc)
1546     + dev_warn(&pdev->dev, "Failed to enable 64-bit or 32-bit DMA. Trying to continue, but this might not work.\n");
1547     +
1548     platform_set_drvdata(pdev, vm_dev);
1549    
1550     return register_virtio_device(&vm_dev->vdev);
1551     diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
1552     index 489bfc61cf30..f1360487a594 100644
1553     --- a/drivers/virtio/virtio_ring.c
1554     +++ b/drivers/virtio/virtio_ring.c
1555     @@ -159,6 +159,13 @@ static bool vring_use_dma_api(struct virtio_device *vdev)
1556     if (xen_domain())
1557     return true;
1558    
1559     + /*
1560     + * On ARM-based machines, the DMA ops will do the right thing,
1561     + * so always use them with legacy devices.
1562     + */
1563     + if (IS_ENABLED(CONFIG_ARM) || IS_ENABLED(CONFIG_ARM64))
1564     + return !virtio_has_feature(vdev, VIRTIO_F_VERSION_1);
1565     +
1566     return false;
1567     }
1568    
1569     diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
1570     index 8e3a5a266917..be4da91d880f 100644
1571     --- a/fs/btrfs/inode.c
1572     +++ b/fs/btrfs/inode.c
1573     @@ -3819,10 +3819,7 @@ static int btrfs_read_locked_inode(struct inode *inode)
1574     break;
1575     case S_IFDIR:
1576     inode->i_fop = &btrfs_dir_file_operations;
1577     - if (root == root->fs_info->tree_root)
1578     - inode->i_op = &btrfs_dir_ro_inode_operations;
1579     - else
1580     - inode->i_op = &btrfs_dir_inode_operations;
1581     + inode->i_op = &btrfs_dir_inode_operations;
1582     break;
1583     case S_IFLNK:
1584     inode->i_op = &btrfs_symlink_inode_operations;
1585     @@ -5682,6 +5679,7 @@ static struct inode *new_simple_dir(struct super_block *s,
1586    
1587     inode->i_ino = BTRFS_EMPTY_SUBVOL_DIR_OBJECTID;
1588     inode->i_op = &btrfs_dir_ro_inode_operations;
1589     + inode->i_opflags &= ~IOP_XATTR;
1590     inode->i_fop = &simple_dir_operations;
1591     inode->i_mode = S_IFDIR | S_IRUGO | S_IWUSR | S_IXUGO;
1592     inode->i_mtime = current_time(inode);
1593     @@ -10587,8 +10585,6 @@ static const struct inode_operations btrfs_dir_inode_operations = {
1594     static const struct inode_operations btrfs_dir_ro_inode_operations = {
1595     .lookup = btrfs_lookup,
1596     .permission = btrfs_permission,
1597     - .get_acl = btrfs_get_acl,
1598     - .set_acl = btrfs_set_acl,
1599     .update_time = btrfs_update_time,
1600     };
1601    
1602     diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
1603     index 241da19b7da4..78ff8b63d5f7 100644
1604     --- a/fs/nfs/nfs4proc.c
1605     +++ b/fs/nfs/nfs4proc.c
1606     @@ -2678,7 +2678,8 @@ static inline void nfs4_exclusive_attrset(struct nfs4_opendata *opendata,
1607     sattr->ia_valid |= ATTR_MTIME;
1608    
1609     /* Except MODE, it seems harmless of setting twice. */
1610     - if ((attrset[1] & FATTR4_WORD1_MODE))
1611     + if (opendata->o_arg.createmode != NFS4_CREATE_EXCLUSIVE &&
1612     + attrset[1] & FATTR4_WORD1_MODE)
1613     sattr->ia_valid &= ~ATTR_MODE;
1614    
1615     if (attrset[2] & FATTR4_WORD2_SECURITY_LABEL)
1616     @@ -8371,6 +8372,7 @@ nfs4_layoutget_handle_exception(struct rpc_task *task,
1617     goto out;
1618     }
1619    
1620     + nfs4_sequence_free_slot(&lgp->res.seq_res);
1621     err = nfs4_handle_exception(server, nfs4err, exception);
1622     if (!status) {
1623     if (exception->retry)
1624     diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c
1625     index 45e50ea90769..b669b123287b 100644
1626     --- a/fs/xfs/xfs_qm.c
1627     +++ b/fs/xfs/xfs_qm.c
1628     @@ -1177,7 +1177,8 @@ xfs_qm_dqusage_adjust(
1629     * the case in all other instances. It's OK that we do this because
1630     * quotacheck is done only at mount time.
1631     */
1632     - error = xfs_iget(mp, NULL, ino, 0, XFS_ILOCK_EXCL, &ip);
1633     + error = xfs_iget(mp, NULL, ino, XFS_IGET_DONTCACHE, XFS_ILOCK_EXCL,
1634     + &ip);
1635     if (error) {
1636     *res = BULKSTAT_RV_NOTHING;
1637     return error;
1638     diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h
1639     index 01033fadea47..c1784c0b4f35 100644
1640     --- a/include/linux/memory_hotplug.h
1641     +++ b/include/linux/memory_hotplug.h
1642     @@ -284,7 +284,7 @@ extern void sparse_remove_one_section(struct zone *zone, struct mem_section *ms,
1643     unsigned long map_offset);
1644     extern struct page *sparse_decode_mem_map(unsigned long coded_mem_map,
1645     unsigned long pnum);
1646     -extern int zone_can_shift(unsigned long pfn, unsigned long nr_pages,
1647     - enum zone_type target);
1648     +extern bool zone_can_shift(unsigned long pfn, unsigned long nr_pages,
1649     + enum zone_type target, int *zone_shift);
1650    
1651     #endif /* __LINUX_MEMORY_HOTPLUG_H */
1652     diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
1653     index 0f088f3a2fed..f99c993dd500 100644
1654     --- a/include/linux/mmzone.h
1655     +++ b/include/linux/mmzone.h
1656     @@ -972,12 +972,16 @@ static __always_inline struct zoneref *next_zones_zonelist(struct zoneref *z,
1657     * @zonelist - The zonelist to search for a suitable zone
1658     * @highest_zoneidx - The zone index of the highest zone to return
1659     * @nodes - An optional nodemask to filter the zonelist with
1660     - * @zone - The first suitable zone found is returned via this parameter
1661     + * @return - Zoneref pointer for the first suitable zone found (see below)
1662     *
1663     * This function returns the first zone at or below a given zone index that is
1664     * within the allowed nodemask. The zoneref returned is a cursor that can be
1665     * used to iterate the zonelist with next_zones_zonelist by advancing it by
1666     * one before calling.
1667     + *
1668     + * When no eligible zone is found, zoneref->zone is NULL (zoneref itself is
1669     + * never NULL). This may happen either genuinely, or due to concurrent nodemask
1670     + * update due to cpuset modification.
1671     */
1672     static inline struct zoneref *first_zones_zonelist(struct zonelist *zonelist,
1673     enum zone_type highest_zoneidx,
1674     diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h
1675     index 9094faf0699d..039e76e91896 100644
1676     --- a/include/linux/nfs4.h
1677     +++ b/include/linux/nfs4.h
1678     @@ -282,7 +282,7 @@ enum nfsstat4 {
1679    
1680     static inline bool seqid_mutating_err(u32 err)
1681     {
1682     - /* rfc 3530 section 8.1.5: */
1683     + /* See RFC 7530, section 9.1.7 */
1684     switch (err) {
1685     case NFS4ERR_STALE_CLIENTID:
1686     case NFS4ERR_STALE_STATEID:
1687     @@ -291,6 +291,7 @@ static inline bool seqid_mutating_err(u32 err)
1688     case NFS4ERR_BADXDR:
1689     case NFS4ERR_RESOURCE:
1690     case NFS4ERR_NOFILEHANDLE:
1691     + case NFS4ERR_MOVED:
1692     return false;
1693     };
1694     return true;
1695     diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
1696     index 85cc819676e8..333ad11b3dd9 100644
1697     --- a/include/linux/sunrpc/clnt.h
1698     +++ b/include/linux/sunrpc/clnt.h
1699     @@ -216,5 +216,6 @@ void rpc_clnt_xprt_switch_put(struct rpc_clnt *);
1700     void rpc_clnt_xprt_switch_add_xprt(struct rpc_clnt *, struct rpc_xprt *);
1701     bool rpc_clnt_xprt_switch_has_addr(struct rpc_clnt *clnt,
1702     const struct sockaddr *sap);
1703     +void rpc_cleanup_clids(void);
1704     #endif /* __KERNEL__ */
1705     #endif /* _LINUX_SUNRPC_CLNT_H */
1706     diff --git a/include/uapi/rdma/cxgb3-abi.h b/include/uapi/rdma/cxgb3-abi.h
1707     index 48a19bda071b..d24eee12128f 100644
1708     --- a/include/uapi/rdma/cxgb3-abi.h
1709     +++ b/include/uapi/rdma/cxgb3-abi.h
1710     @@ -30,7 +30,7 @@
1711     * SOFTWARE.
1712     */
1713     #ifndef CXGB3_ABI_USER_H
1714     -#define CXBG3_ABI_USER_H
1715     +#define CXGB3_ABI_USER_H
1716    
1717     #include <linux/types.h>
1718    
1719     diff --git a/kernel/events/core.c b/kernel/events/core.c
1720     index 02c8421f8c01..e5a8839e7076 100644
1721     --- a/kernel/events/core.c
1722     +++ b/kernel/events/core.c
1723     @@ -9503,6 +9503,37 @@ static int perf_event_set_clock(struct perf_event *event, clockid_t clk_id)
1724     return 0;
1725     }
1726    
1727     +/*
1728     + * Variation on perf_event_ctx_lock_nested(), except we take two context
1729     + * mutexes.
1730     + */
1731     +static struct perf_event_context *
1732     +__perf_event_ctx_lock_double(struct perf_event *group_leader,
1733     + struct perf_event_context *ctx)
1734     +{
1735     + struct perf_event_context *gctx;
1736     +
1737     +again:
1738     + rcu_read_lock();
1739     + gctx = READ_ONCE(group_leader->ctx);
1740     + if (!atomic_inc_not_zero(&gctx->refcount)) {
1741     + rcu_read_unlock();
1742     + goto again;
1743     + }
1744     + rcu_read_unlock();
1745     +
1746     + mutex_lock_double(&gctx->mutex, &ctx->mutex);
1747     +
1748     + if (group_leader->ctx != gctx) {
1749     + mutex_unlock(&ctx->mutex);
1750     + mutex_unlock(&gctx->mutex);
1751     + put_ctx(gctx);
1752     + goto again;
1753     + }
1754     +
1755     + return gctx;
1756     +}
1757     +
1758     /**
1759     * sys_perf_event_open - open a performance event, associate it to a task/cpu
1760     *
1761     @@ -9746,12 +9777,31 @@ SYSCALL_DEFINE5(perf_event_open,
1762     }
1763    
1764     if (move_group) {
1765     - gctx = group_leader->ctx;
1766     - mutex_lock_double(&gctx->mutex, &ctx->mutex);
1767     + gctx = __perf_event_ctx_lock_double(group_leader, ctx);
1768     +
1769     if (gctx->task == TASK_TOMBSTONE) {
1770     err = -ESRCH;
1771     goto err_locked;
1772     }
1773     +
1774     + /*
1775     + * Check if we raced against another sys_perf_event_open() call
1776     + * moving the software group underneath us.
1777     + */
1778     + if (!(group_leader->group_caps & PERF_EV_CAP_SOFTWARE)) {
1779     + /*
1780     + * If someone moved the group out from under us, check
1781     + * if this new event wound up on the same ctx, if so
1782     + * its the regular !move_group case, otherwise fail.
1783     + */
1784     + if (gctx != ctx) {
1785     + err = -EINVAL;
1786     + goto err_locked;
1787     + } else {
1788     + perf_event_ctx_unlock(group_leader, gctx);
1789     + move_group = 0;
1790     + }
1791     + }
1792     } else {
1793     mutex_lock(&ctx->mutex);
1794     }
1795     @@ -9853,7 +9903,7 @@ SYSCALL_DEFINE5(perf_event_open,
1796     perf_unpin_context(ctx);
1797    
1798     if (move_group)
1799     - mutex_unlock(&gctx->mutex);
1800     + perf_event_ctx_unlock(group_leader, gctx);
1801     mutex_unlock(&ctx->mutex);
1802    
1803     if (task) {
1804     @@ -9879,7 +9929,7 @@ SYSCALL_DEFINE5(perf_event_open,
1805    
1806     err_locked:
1807     if (move_group)
1808     - mutex_unlock(&gctx->mutex);
1809     + perf_event_ctx_unlock(group_leader, gctx);
1810     mutex_unlock(&ctx->mutex);
1811     /* err_file: */
1812     fput(event_file);
1813     diff --git a/kernel/sysctl.c b/kernel/sysctl.c
1814     index 706309f9ed84..c1095cdc0fe2 100644
1815     --- a/kernel/sysctl.c
1816     +++ b/kernel/sysctl.c
1817     @@ -2487,6 +2487,7 @@ static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table, int
1818     break;
1819     if (neg)
1820     continue;
1821     + val = convmul * val / convdiv;
1822     if ((min && val < *min) || (max && val > *max))
1823     continue;
1824     *i = val;
1825     diff --git a/kernel/ucount.c b/kernel/ucount.c
1826     index 9d20d5dd298a..4bbd38ec3788 100644
1827     --- a/kernel/ucount.c
1828     +++ b/kernel/ucount.c
1829     @@ -128,10 +128,10 @@ static struct ucounts *get_ucounts(struct user_namespace *ns, kuid_t uid)
1830     struct hlist_head *hashent = ucounts_hashentry(ns, uid);
1831     struct ucounts *ucounts, *new;
1832    
1833     - spin_lock(&ucounts_lock);
1834     + spin_lock_irq(&ucounts_lock);
1835     ucounts = find_ucounts(ns, uid, hashent);
1836     if (!ucounts) {
1837     - spin_unlock(&ucounts_lock);
1838     + spin_unlock_irq(&ucounts_lock);
1839    
1840     new = kzalloc(sizeof(*new), GFP_KERNEL);
1841     if (!new)
1842     @@ -141,7 +141,7 @@ static struct ucounts *get_ucounts(struct user_namespace *ns, kuid_t uid)
1843     new->uid = uid;
1844     atomic_set(&new->count, 0);
1845    
1846     - spin_lock(&ucounts_lock);
1847     + spin_lock_irq(&ucounts_lock);
1848     ucounts = find_ucounts(ns, uid, hashent);
1849     if (ucounts) {
1850     kfree(new);
1851     @@ -152,16 +152,18 @@ static struct ucounts *get_ucounts(struct user_namespace *ns, kuid_t uid)
1852     }
1853     if (!atomic_add_unless(&ucounts->count, 1, INT_MAX))
1854     ucounts = NULL;
1855     - spin_unlock(&ucounts_lock);
1856     + spin_unlock_irq(&ucounts_lock);
1857     return ucounts;
1858     }
1859    
1860     static void put_ucounts(struct ucounts *ucounts)
1861     {
1862     + unsigned long flags;
1863     +
1864     if (atomic_dec_and_test(&ucounts->count)) {
1865     - spin_lock(&ucounts_lock);
1866     + spin_lock_irqsave(&ucounts_lock, flags);
1867     hlist_del_init(&ucounts->node);
1868     - spin_unlock(&ucounts_lock);
1869     + spin_unlock_irqrestore(&ucounts_lock, flags);
1870    
1871     kfree(ucounts);
1872     }
1873     diff --git a/mm/huge_memory.c b/mm/huge_memory.c
1874     index 8ca40b70beae..917555cf6be0 100644
1875     --- a/mm/huge_memory.c
1876     +++ b/mm/huge_memory.c
1877     @@ -772,6 +772,12 @@ struct page *follow_devmap_pmd(struct vm_area_struct *vma, unsigned long addr,
1878    
1879     assert_spin_locked(pmd_lockptr(mm, pmd));
1880    
1881     + /*
1882     + * When we COW a devmap PMD entry, we split it into PTEs, so we should
1883     + * not be in this function with `flags & FOLL_COW` set.
1884     + */
1885     + WARN_ONCE(flags & FOLL_COW, "mm: In follow_devmap_pmd with FOLL_COW set");
1886     +
1887     if (flags & FOLL_WRITE && !pmd_write(*pmd))
1888     return NULL;
1889    
1890     @@ -1118,6 +1124,16 @@ int do_huge_pmd_wp_page(struct fault_env *fe, pmd_t orig_pmd)
1891     return ret;
1892     }
1893    
1894     +/*
1895     + * FOLL_FORCE can write to even unwritable pmd's, but only
1896     + * after we've gone through a COW cycle and they are dirty.
1897     + */
1898     +static inline bool can_follow_write_pmd(pmd_t pmd, unsigned int flags)
1899     +{
1900     + return pmd_write(pmd) ||
1901     + ((flags & FOLL_FORCE) && (flags & FOLL_COW) && pmd_dirty(pmd));
1902     +}
1903     +
1904     struct page *follow_trans_huge_pmd(struct vm_area_struct *vma,
1905     unsigned long addr,
1906     pmd_t *pmd,
1907     @@ -1128,7 +1144,7 @@ struct page *follow_trans_huge_pmd(struct vm_area_struct *vma,
1908    
1909     assert_spin_locked(pmd_lockptr(mm, pmd));
1910    
1911     - if (flags & FOLL_WRITE && !pmd_write(*pmd))
1912     + if (flags & FOLL_WRITE && !can_follow_write_pmd(*pmd, flags))
1913     goto out;
1914    
1915     /* Avoid dumping huge zero page */
1916     diff --git a/mm/memcontrol.c b/mm/memcontrol.c
1917     index d536a9daa511..4c6ade54d833 100644
1918     --- a/mm/memcontrol.c
1919     +++ b/mm/memcontrol.c
1920     @@ -4360,9 +4360,9 @@ static int mem_cgroup_do_precharge(unsigned long count)
1921     return ret;
1922     }
1923    
1924     - /* Try charges one by one with reclaim */
1925     + /* Try charges one by one with reclaim, but do not retry */
1926     while (count--) {
1927     - ret = try_charge(mc.to, GFP_KERNEL & ~__GFP_NORETRY, 1);
1928     + ret = try_charge(mc.to, GFP_KERNEL | __GFP_NORETRY, 1);
1929     if (ret)
1930     return ret;
1931     mc.precharge++;
1932     diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
1933     index cad4b9125695..c3a8141ac788 100644
1934     --- a/mm/memory_hotplug.c
1935     +++ b/mm/memory_hotplug.c
1936     @@ -1033,36 +1033,39 @@ static void node_states_set_node(int node, struct memory_notify *arg)
1937     node_set_state(node, N_MEMORY);
1938     }
1939    
1940     -int zone_can_shift(unsigned long pfn, unsigned long nr_pages,
1941     - enum zone_type target)
1942     +bool zone_can_shift(unsigned long pfn, unsigned long nr_pages,
1943     + enum zone_type target, int *zone_shift)
1944     {
1945     struct zone *zone = page_zone(pfn_to_page(pfn));
1946     enum zone_type idx = zone_idx(zone);
1947     int i;
1948    
1949     + *zone_shift = 0;
1950     +
1951     if (idx < target) {
1952     /* pages must be at end of current zone */
1953     if (pfn + nr_pages != zone_end_pfn(zone))
1954     - return 0;
1955     + return false;
1956    
1957     /* no zones in use between current zone and target */
1958     for (i = idx + 1; i < target; i++)
1959     if (zone_is_initialized(zone - idx + i))
1960     - return 0;
1961     + return false;
1962     }
1963    
1964     if (target < idx) {
1965     /* pages must be at beginning of current zone */
1966     if (pfn != zone->zone_start_pfn)
1967     - return 0;
1968     + return false;
1969    
1970     /* no zones in use between current zone and target */
1971     for (i = target + 1; i < idx; i++)
1972     if (zone_is_initialized(zone - idx + i))
1973     - return 0;
1974     + return false;
1975     }
1976    
1977     - return target - idx;
1978     + *zone_shift = target - idx;
1979     + return true;
1980     }
1981    
1982     /* Must be protected by mem_hotplug_begin() */
1983     @@ -1089,10 +1092,13 @@ int __ref online_pages(unsigned long pfn, unsigned long nr_pages, int online_typ
1984     !can_online_high_movable(zone))
1985     return -EINVAL;
1986    
1987     - if (online_type == MMOP_ONLINE_KERNEL)
1988     - zone_shift = zone_can_shift(pfn, nr_pages, ZONE_NORMAL);
1989     - else if (online_type == MMOP_ONLINE_MOVABLE)
1990     - zone_shift = zone_can_shift(pfn, nr_pages, ZONE_MOVABLE);
1991     + if (online_type == MMOP_ONLINE_KERNEL) {
1992     + if (!zone_can_shift(pfn, nr_pages, ZONE_NORMAL, &zone_shift))
1993     + return -EINVAL;
1994     + } else if (online_type == MMOP_ONLINE_MOVABLE) {
1995     + if (!zone_can_shift(pfn, nr_pages, ZONE_MOVABLE, &zone_shift))
1996     + return -EINVAL;
1997     + }
1998    
1999     zone = move_pfn_range(zone_shift, pfn, pfn + nr_pages);
2000     if (!zone)
2001     diff --git a/mm/mempolicy.c b/mm/mempolicy.c
2002     index 0b859af06b87..f75704717e47 100644
2003     --- a/mm/mempolicy.c
2004     +++ b/mm/mempolicy.c
2005     @@ -2023,8 +2023,8 @@ alloc_pages_vma(gfp_t gfp, int order, struct vm_area_struct *vma,
2006    
2007     nmask = policy_nodemask(gfp, pol);
2008     zl = policy_zonelist(gfp, pol, node);
2009     - mpol_cond_put(pol);
2010     page = __alloc_pages_nodemask(gfp, order, zl, nmask);
2011     + mpol_cond_put(pol);
2012     out:
2013     if (unlikely(!page && read_mems_allowed_retry(cpuset_mems_cookie)))
2014     goto retry_cpuset;
2015     diff --git a/mm/page_alloc.c b/mm/page_alloc.c
2016     index 34ada718ef47..f4a02e240fb6 100644
2017     --- a/mm/page_alloc.c
2018     +++ b/mm/page_alloc.c
2019     @@ -3502,12 +3502,13 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
2020     struct page *page = NULL;
2021     unsigned int alloc_flags;
2022     unsigned long did_some_progress;
2023     - enum compact_priority compact_priority = DEF_COMPACT_PRIORITY;
2024     + enum compact_priority compact_priority;
2025     enum compact_result compact_result;
2026     - int compaction_retries = 0;
2027     - int no_progress_loops = 0;
2028     + int compaction_retries;
2029     + int no_progress_loops;
2030     unsigned long alloc_start = jiffies;
2031     unsigned int stall_timeout = 10 * HZ;
2032     + unsigned int cpuset_mems_cookie;
2033    
2034     /*
2035     * In the slowpath, we sanity check order to avoid ever trying to
2036     @@ -3528,6 +3529,23 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
2037     (__GFP_ATOMIC|__GFP_DIRECT_RECLAIM)))
2038     gfp_mask &= ~__GFP_ATOMIC;
2039    
2040     +retry_cpuset:
2041     + compaction_retries = 0;
2042     + no_progress_loops = 0;
2043     + compact_priority = DEF_COMPACT_PRIORITY;
2044     + cpuset_mems_cookie = read_mems_allowed_begin();
2045     + /*
2046     + * We need to recalculate the starting point for the zonelist iterator
2047     + * because we might have used different nodemask in the fast path, or
2048     + * there was a cpuset modification and we are retrying - otherwise we
2049     + * could end up iterating over non-eligible zones endlessly.
2050     + */
2051     + ac->preferred_zoneref = first_zones_zonelist(ac->zonelist,
2052     + ac->high_zoneidx, ac->nodemask);
2053     + if (!ac->preferred_zoneref->zone)
2054     + goto nopage;
2055     +
2056     +
2057     /*
2058     * The fast path uses conservative alloc_flags to succeed only until
2059     * kswapd needs to be woken up, and to avoid the cost of setting up
2060     @@ -3687,6 +3705,13 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
2061     &compaction_retries))
2062     goto retry;
2063    
2064     + /*
2065     + * It's possible we raced with cpuset update so the OOM would be
2066     + * premature (see below the nopage: label for full explanation).
2067     + */
2068     + if (read_mems_allowed_retry(cpuset_mems_cookie))
2069     + goto retry_cpuset;
2070     +
2071     /* Reclaim has failed us, start killing things */
2072     page = __alloc_pages_may_oom(gfp_mask, order, ac, &did_some_progress);
2073     if (page)
2074     @@ -3699,6 +3724,16 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
2075     }
2076    
2077     nopage:
2078     + /*
2079     + * When updating a task's mems_allowed or mempolicy nodemask, it is
2080     + * possible to race with parallel threads in such a way that our
2081     + * allocation can fail while the mask is being updated. If we are about
2082     + * to fail, check if the cpuset changed during allocation and if so,
2083     + * retry.
2084     + */
2085     + if (read_mems_allowed_retry(cpuset_mems_cookie))
2086     + goto retry_cpuset;
2087     +
2088     warn_alloc(gfp_mask,
2089     "page allocation failure: order:%u", order);
2090     got_pg:
2091     @@ -3713,7 +3748,6 @@ __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order,
2092     struct zonelist *zonelist, nodemask_t *nodemask)
2093     {
2094     struct page *page;
2095     - unsigned int cpuset_mems_cookie;
2096     unsigned int alloc_flags = ALLOC_WMARK_LOW;
2097     gfp_t alloc_mask = gfp_mask; /* The gfp_t that was actually used for allocation */
2098     struct alloc_context ac = {
2099     @@ -3750,9 +3784,6 @@ __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order,
2100     if (IS_ENABLED(CONFIG_CMA) && ac.migratetype == MIGRATE_MOVABLE)
2101     alloc_flags |= ALLOC_CMA;
2102    
2103     -retry_cpuset:
2104     - cpuset_mems_cookie = read_mems_allowed_begin();
2105     -
2106     /* Dirty zone balancing only done in the fast path */
2107     ac.spread_dirty_pages = (gfp_mask & __GFP_WRITE);
2108    
2109     @@ -3763,8 +3794,13 @@ __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order,
2110     */
2111     ac.preferred_zoneref = first_zones_zonelist(ac.zonelist,
2112     ac.high_zoneidx, ac.nodemask);
2113     - if (!ac.preferred_zoneref) {
2114     + if (!ac.preferred_zoneref->zone) {
2115     page = NULL;
2116     + /*
2117     + * This might be due to race with cpuset_current_mems_allowed
2118     + * update, so make sure we retry with original nodemask in the
2119     + * slow path.
2120     + */
2121     goto no_zone;
2122     }
2123    
2124     @@ -3773,6 +3809,7 @@ __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order,
2125     if (likely(page))
2126     goto out;
2127    
2128     +no_zone:
2129     /*
2130     * Runtime PM, block IO and its error handling path can deadlock
2131     * because I/O on the device might not complete.
2132     @@ -3784,21 +3821,10 @@ __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order,
2133     * Restore the original nodemask if it was potentially replaced with
2134     * &cpuset_current_mems_allowed to optimize the fast-path attempt.
2135     */
2136     - if (cpusets_enabled())
2137     + if (unlikely(ac.nodemask != nodemask))
2138     ac.nodemask = nodemask;
2139     - page = __alloc_pages_slowpath(alloc_mask, order, &ac);
2140    
2141     -no_zone:
2142     - /*
2143     - * When updating a task's mems_allowed, it is possible to race with
2144     - * parallel threads in such a way that an allocation can fail while
2145     - * the mask is being updated. If a page allocation is about to fail,
2146     - * check if the cpuset changed during allocation and if so, retry.
2147     - */
2148     - if (unlikely(!page && read_mems_allowed_retry(cpuset_mems_cookie))) {
2149     - alloc_mask = gfp_mask;
2150     - goto retry_cpuset;
2151     - }
2152     + page = __alloc_pages_slowpath(alloc_mask, order, &ac);
2153    
2154     out:
2155     if (memcg_kmem_enabled() && (gfp_mask & __GFP_ACCOUNT) && page &&
2156     diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
2157     index 62a482790937..b2ae4f150ec6 100644
2158     --- a/net/sunrpc/clnt.c
2159     +++ b/net/sunrpc/clnt.c
2160     @@ -336,6 +336,11 @@ static int rpc_client_register(struct rpc_clnt *clnt,
2161    
2162     static DEFINE_IDA(rpc_clids);
2163    
2164     +void rpc_cleanup_clids(void)
2165     +{
2166     + ida_destroy(&rpc_clids);
2167     +}
2168     +
2169     static int rpc_alloc_clid(struct rpc_clnt *clnt)
2170     {
2171     int clid;
2172     diff --git a/net/sunrpc/sunrpc_syms.c b/net/sunrpc/sunrpc_syms.c
2173     index ee5d3d253102..3142f38d1104 100644
2174     --- a/net/sunrpc/sunrpc_syms.c
2175     +++ b/net/sunrpc/sunrpc_syms.c
2176     @@ -119,6 +119,7 @@ init_sunrpc(void)
2177     static void __exit
2178     cleanup_sunrpc(void)
2179     {
2180     + rpc_cleanup_clids();
2181     rpcauth_remove_module();
2182     cleanup_socket_xprt();
2183     svc_cleanup_xprt_sock();