Magellan Linux

Contents of /trunk/kernel-magellan/patches-4.19/0107-4.19.8-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3269 - (show annotations) (download)
Wed Dec 12 10:31:09 2018 UTC (5 years, 4 months ago) by niro
File size: 48929 byte(s)
-linux-4.19.8
1 diff --git a/Makefile b/Makefile
2 index d2b4efcfb388..34bc4c752c49 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 4
8 PATCHLEVEL = 19
9 -SUBLEVEL = 7
10 +SUBLEVEL = 8
11 EXTRAVERSION =
12 NAME = "People's Front"
13
14 diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
15 index a045f3086047..a90c4f126050 100644
16 --- a/arch/arc/Kconfig
17 +++ b/arch/arc/Kconfig
18 @@ -111,7 +111,7 @@ endmenu
19
20 choice
21 prompt "ARC Instruction Set"
22 - default ISA_ARCOMPACT
23 + default ISA_ARCV2
24
25 config ISA_ARCOMPACT
26 bool "ARCompact ISA"
27 diff --git a/arch/arc/Makefile b/arch/arc/Makefile
28 index 644815c0516e..16e6cc22e25c 100644
29 --- a/arch/arc/Makefile
30 +++ b/arch/arc/Makefile
31 @@ -6,7 +6,7 @@
32 # published by the Free Software Foundation.
33 #
34
35 -KBUILD_DEFCONFIG := nsim_700_defconfig
36 +KBUILD_DEFCONFIG := nsim_hs_defconfig
37
38 cflags-y += -fno-common -pipe -fno-builtin -mmedium-calls -D__linux__
39 cflags-$(CONFIG_ISA_ARCOMPACT) += -mA7
40 diff --git a/arch/arc/configs/axs101_defconfig b/arch/arc/configs/axs101_defconfig
41 index 41bc08be6a3b..020d4493edfd 100644
42 --- a/arch/arc/configs/axs101_defconfig
43 +++ b/arch/arc/configs/axs101_defconfig
44 @@ -14,6 +14,7 @@ CONFIG_PERF_EVENTS=y
45 # CONFIG_VM_EVENT_COUNTERS is not set
46 # CONFIG_SLUB_DEBUG is not set
47 # CONFIG_COMPAT_BRK is not set
48 +CONFIG_ISA_ARCOMPACT=y
49 CONFIG_MODULES=y
50 CONFIG_MODULE_FORCE_LOAD=y
51 CONFIG_MODULE_UNLOAD=y
52 @@ -95,6 +96,7 @@ CONFIG_VFAT_FS=y
53 CONFIG_NTFS_FS=y
54 CONFIG_TMPFS=y
55 CONFIG_NFS_FS=y
56 +CONFIG_NFS_V3_ACL=y
57 CONFIG_NLS_CODEPAGE_437=y
58 CONFIG_NLS_ISO8859_1=y
59 # CONFIG_ENABLE_WARN_DEPRECATED is not set
60 diff --git a/arch/arc/configs/axs103_defconfig b/arch/arc/configs/axs103_defconfig
61 index 1e1c4a8011b5..666314fffc60 100644
62 --- a/arch/arc/configs/axs103_defconfig
63 +++ b/arch/arc/configs/axs103_defconfig
64 @@ -94,6 +94,7 @@ CONFIG_VFAT_FS=y
65 CONFIG_NTFS_FS=y
66 CONFIG_TMPFS=y
67 CONFIG_NFS_FS=y
68 +CONFIG_NFS_V3_ACL=y
69 CONFIG_NLS_CODEPAGE_437=y
70 CONFIG_NLS_ISO8859_1=y
71 # CONFIG_ENABLE_WARN_DEPRECATED is not set
72 diff --git a/arch/arc/configs/axs103_smp_defconfig b/arch/arc/configs/axs103_smp_defconfig
73 index 6b0c0cfd5c30..429832b8560b 100644
74 --- a/arch/arc/configs/axs103_smp_defconfig
75 +++ b/arch/arc/configs/axs103_smp_defconfig
76 @@ -97,6 +97,7 @@ CONFIG_VFAT_FS=y
77 CONFIG_NTFS_FS=y
78 CONFIG_TMPFS=y
79 CONFIG_NFS_FS=y
80 +CONFIG_NFS_V3_ACL=y
81 CONFIG_NLS_CODEPAGE_437=y
82 CONFIG_NLS_ISO8859_1=y
83 # CONFIG_ENABLE_WARN_DEPRECATED is not set
84 diff --git a/arch/arc/configs/hsdk_defconfig b/arch/arc/configs/hsdk_defconfig
85 index 1dec2b4bc5e6..2a1d2cbfee1a 100644
86 --- a/arch/arc/configs/hsdk_defconfig
87 +++ b/arch/arc/configs/hsdk_defconfig
88 @@ -65,6 +65,7 @@ CONFIG_EXT3_FS=y
89 CONFIG_VFAT_FS=y
90 CONFIG_TMPFS=y
91 CONFIG_NFS_FS=y
92 +CONFIG_NFS_V3_ACL=y
93 CONFIG_NLS_CODEPAGE_437=y
94 CONFIG_NLS_ISO8859_1=y
95 # CONFIG_ENABLE_WARN_DEPRECATED is not set
96 diff --git a/arch/arc/configs/nps_defconfig b/arch/arc/configs/nps_defconfig
97 index 31ba224bbfb4..6e84060e7c90 100644
98 --- a/arch/arc/configs/nps_defconfig
99 +++ b/arch/arc/configs/nps_defconfig
100 @@ -15,6 +15,7 @@ CONFIG_SYSCTL_SYSCALL=y
101 CONFIG_EMBEDDED=y
102 CONFIG_PERF_EVENTS=y
103 # CONFIG_COMPAT_BRK is not set
104 +CONFIG_ISA_ARCOMPACT=y
105 CONFIG_KPROBES=y
106 CONFIG_MODULES=y
107 CONFIG_MODULE_FORCE_LOAD=y
108 @@ -73,6 +74,7 @@ CONFIG_PROC_KCORE=y
109 CONFIG_TMPFS=y
110 # CONFIG_MISC_FILESYSTEMS is not set
111 CONFIG_NFS_FS=y
112 +CONFIG_NFS_V3_ACL=y
113 CONFIG_ROOT_NFS=y
114 CONFIG_DEBUG_INFO=y
115 # CONFIG_ENABLE_WARN_DEPRECATED is not set
116 diff --git a/arch/arc/configs/nsim_700_defconfig b/arch/arc/configs/nsim_700_defconfig
117 index 8e0b8b134cd9..219c2a65294b 100644
118 --- a/arch/arc/configs/nsim_700_defconfig
119 +++ b/arch/arc/configs/nsim_700_defconfig
120 @@ -15,6 +15,7 @@ CONFIG_EMBEDDED=y
121 CONFIG_PERF_EVENTS=y
122 # CONFIG_SLUB_DEBUG is not set
123 # CONFIG_COMPAT_BRK is not set
124 +CONFIG_ISA_ARCOMPACT=y
125 CONFIG_KPROBES=y
126 CONFIG_MODULES=y
127 # CONFIG_LBDAF is not set
128 diff --git a/arch/arc/configs/nsimosci_defconfig b/arch/arc/configs/nsimosci_defconfig
129 index f14eeff7d308..35dfc6491a09 100644
130 --- a/arch/arc/configs/nsimosci_defconfig
131 +++ b/arch/arc/configs/nsimosci_defconfig
132 @@ -15,6 +15,7 @@ CONFIG_EMBEDDED=y
133 CONFIG_PERF_EVENTS=y
134 # CONFIG_SLUB_DEBUG is not set
135 # CONFIG_COMPAT_BRK is not set
136 +CONFIG_ISA_ARCOMPACT=y
137 CONFIG_KPROBES=y
138 CONFIG_MODULES=y
139 # CONFIG_LBDAF is not set
140 @@ -66,5 +67,6 @@ CONFIG_EXT2_FS_XATTR=y
141 CONFIG_TMPFS=y
142 # CONFIG_MISC_FILESYSTEMS is not set
143 CONFIG_NFS_FS=y
144 +CONFIG_NFS_V3_ACL=y
145 # CONFIG_ENABLE_WARN_DEPRECATED is not set
146 # CONFIG_ENABLE_MUST_CHECK is not set
147 diff --git a/arch/arc/configs/nsimosci_hs_defconfig b/arch/arc/configs/nsimosci_hs_defconfig
148 index 025298a48305..1638e5bc9672 100644
149 --- a/arch/arc/configs/nsimosci_hs_defconfig
150 +++ b/arch/arc/configs/nsimosci_hs_defconfig
151 @@ -65,5 +65,6 @@ CONFIG_EXT2_FS_XATTR=y
152 CONFIG_TMPFS=y
153 # CONFIG_MISC_FILESYSTEMS is not set
154 CONFIG_NFS_FS=y
155 +CONFIG_NFS_V3_ACL=y
156 # CONFIG_ENABLE_WARN_DEPRECATED is not set
157 # CONFIG_ENABLE_MUST_CHECK is not set
158 diff --git a/arch/arc/configs/nsimosci_hs_smp_defconfig b/arch/arc/configs/nsimosci_hs_smp_defconfig
159 index df7b77b13b82..11cfbdb0f441 100644
160 --- a/arch/arc/configs/nsimosci_hs_smp_defconfig
161 +++ b/arch/arc/configs/nsimosci_hs_smp_defconfig
162 @@ -76,6 +76,7 @@ CONFIG_EXT2_FS_XATTR=y
163 CONFIG_TMPFS=y
164 # CONFIG_MISC_FILESYSTEMS is not set
165 CONFIG_NFS_FS=y
166 +CONFIG_NFS_V3_ACL=y
167 # CONFIG_ENABLE_WARN_DEPRECATED is not set
168 # CONFIG_ENABLE_MUST_CHECK is not set
169 CONFIG_FTRACE=y
170 diff --git a/arch/arc/configs/tb10x_defconfig b/arch/arc/configs/tb10x_defconfig
171 index a7f65313f84a..e71ade3cf9c8 100644
172 --- a/arch/arc/configs/tb10x_defconfig
173 +++ b/arch/arc/configs/tb10x_defconfig
174 @@ -19,6 +19,7 @@ CONFIG_KALLSYMS_ALL=y
175 # CONFIG_AIO is not set
176 CONFIG_EMBEDDED=y
177 # CONFIG_COMPAT_BRK is not set
178 +CONFIG_ISA_ARCOMPACT=y
179 CONFIG_SLAB=y
180 CONFIG_MODULES=y
181 CONFIG_MODULE_FORCE_LOAD=y
182 diff --git a/arch/arc/configs/vdk_hs38_defconfig b/arch/arc/configs/vdk_hs38_defconfig
183 index db47c3541f15..1e59a2e9c602 100644
184 --- a/arch/arc/configs/vdk_hs38_defconfig
185 +++ b/arch/arc/configs/vdk_hs38_defconfig
186 @@ -85,6 +85,7 @@ CONFIG_NTFS_FS=y
187 CONFIG_TMPFS=y
188 CONFIG_JFFS2_FS=y
189 CONFIG_NFS_FS=y
190 +CONFIG_NFS_V3_ACL=y
191 CONFIG_NLS_CODEPAGE_437=y
192 CONFIG_NLS_ISO8859_1=y
193 # CONFIG_ENABLE_WARN_DEPRECATED is not set
194 diff --git a/arch/arc/configs/vdk_hs38_smp_defconfig b/arch/arc/configs/vdk_hs38_smp_defconfig
195 index a8ac5e917d9a..b5c3f6c54b03 100644
196 --- a/arch/arc/configs/vdk_hs38_smp_defconfig
197 +++ b/arch/arc/configs/vdk_hs38_smp_defconfig
198 @@ -90,6 +90,7 @@ CONFIG_NTFS_FS=y
199 CONFIG_TMPFS=y
200 CONFIG_JFFS2_FS=y
201 CONFIG_NFS_FS=y
202 +CONFIG_NFS_V3_ACL=y
203 CONFIG_NLS_CODEPAGE_437=y
204 CONFIG_NLS_ISO8859_1=y
205 # CONFIG_ENABLE_WARN_DEPRECATED is not set
206 diff --git a/arch/arm64/include/asm/ftrace.h b/arch/arm64/include/asm/ftrace.h
207 index caa955f10e19..fac54fb050d0 100644
208 --- a/arch/arm64/include/asm/ftrace.h
209 +++ b/arch/arm64/include/asm/ftrace.h
210 @@ -56,6 +56,19 @@ static inline bool arch_trace_is_compat_syscall(struct pt_regs *regs)
211 {
212 return is_compat_task();
213 }
214 +
215 +#define ARCH_HAS_SYSCALL_MATCH_SYM_NAME
216 +
217 +static inline bool arch_syscall_match_sym_name(const char *sym,
218 + const char *name)
219 +{
220 + /*
221 + * Since all syscall functions have __arm64_ prefix, we must skip it.
222 + * However, as we described above, we decided to ignore compat
223 + * syscalls, so we don't care about __arm64_compat_ prefix here.
224 + */
225 + return !strcmp(sym + 8, name);
226 +}
227 #endif /* ifndef __ASSEMBLY__ */
228
229 #endif /* __ASM_FTRACE_H */
230 diff --git a/arch/mips/include/asm/syscall.h b/arch/mips/include/asm/syscall.h
231 index 0170602a1e4e..6cf8ffb5367e 100644
232 --- a/arch/mips/include/asm/syscall.h
233 +++ b/arch/mips/include/asm/syscall.h
234 @@ -73,7 +73,7 @@ static inline unsigned long mips_get_syscall_arg(unsigned long *arg,
235 #ifdef CONFIG_64BIT
236 case 4: case 5: case 6: case 7:
237 #ifdef CONFIG_MIPS32_O32
238 - if (test_thread_flag(TIF_32BIT_REGS))
239 + if (test_tsk_thread_flag(task, TIF_32BIT_REGS))
240 return get_user(*arg, (int *)usp + n);
241 else
242 #endif
243 diff --git a/arch/mips/ralink/mt7620.c b/arch/mips/ralink/mt7620.c
244 index 41b71c4352c2..c1ce6f43642b 100644
245 --- a/arch/mips/ralink/mt7620.c
246 +++ b/arch/mips/ralink/mt7620.c
247 @@ -84,7 +84,7 @@ static struct rt2880_pmx_func pcie_rst_grp[] = {
248 };
249 static struct rt2880_pmx_func nd_sd_grp[] = {
250 FUNC("nand", MT7620_GPIO_MODE_NAND, 45, 15),
251 - FUNC("sd", MT7620_GPIO_MODE_SD, 45, 15)
252 + FUNC("sd", MT7620_GPIO_MODE_SD, 47, 13)
253 };
254
255 static struct rt2880_pmx_group mt7620a_pinmux_data[] = {
256 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
257 index 4397fa0c448f..f1d3fe5a0c65 100644
258 --- a/arch/x86/kvm/svm.c
259 +++ b/arch/x86/kvm/svm.c
260 @@ -1663,20 +1663,23 @@ static u64 *avic_get_physical_id_entry(struct kvm_vcpu *vcpu,
261 static int avic_init_access_page(struct kvm_vcpu *vcpu)
262 {
263 struct kvm *kvm = vcpu->kvm;
264 - int ret;
265 + int ret = 0;
266
267 + mutex_lock(&kvm->slots_lock);
268 if (kvm->arch.apic_access_page_done)
269 - return 0;
270 + goto out;
271
272 - ret = x86_set_memory_region(kvm,
273 - APIC_ACCESS_PAGE_PRIVATE_MEMSLOT,
274 - APIC_DEFAULT_PHYS_BASE,
275 - PAGE_SIZE);
276 + ret = __x86_set_memory_region(kvm,
277 + APIC_ACCESS_PAGE_PRIVATE_MEMSLOT,
278 + APIC_DEFAULT_PHYS_BASE,
279 + PAGE_SIZE);
280 if (ret)
281 - return ret;
282 + goto out;
283
284 kvm->arch.apic_access_page_done = true;
285 - return 0;
286 +out:
287 + mutex_unlock(&kvm->slots_lock);
288 + return ret;
289 }
290
291 static int avic_init_backing_page(struct kvm_vcpu *vcpu)
292 diff --git a/block/blk-mq.c b/block/blk-mq.c
293 index e3c39ea8e17b..23a53b67cf0d 100644
294 --- a/block/blk-mq.c
295 +++ b/block/blk-mq.c
296 @@ -1747,7 +1747,7 @@ insert:
297 if (bypass_insert)
298 return BLK_STS_RESOURCE;
299
300 - blk_mq_sched_insert_request(rq, false, run_queue, false);
301 + blk_mq_request_bypass_insert(rq, run_queue);
302 return BLK_STS_OK;
303 }
304
305 @@ -1763,7 +1763,7 @@ static void blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,
306
307 ret = __blk_mq_try_issue_directly(hctx, rq, cookie, false);
308 if (ret == BLK_STS_RESOURCE || ret == BLK_STS_DEV_RESOURCE)
309 - blk_mq_sched_insert_request(rq, false, true, false);
310 + blk_mq_request_bypass_insert(rq, true);
311 else if (ret != BLK_STS_OK)
312 blk_mq_end_request(rq, ret);
313
314 @@ -1798,7 +1798,8 @@ void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx *hctx,
315 if (ret != BLK_STS_OK) {
316 if (ret == BLK_STS_RESOURCE ||
317 ret == BLK_STS_DEV_RESOURCE) {
318 - list_add(&rq->queuelist, list);
319 + blk_mq_request_bypass_insert(rq,
320 + list_empty(list));
321 break;
322 }
323 blk_mq_end_request(rq, ret);
324 diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
325 index 4cc45a1d21db..59445c83f023 100644
326 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
327 +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
328 @@ -374,6 +374,8 @@ dm_dp_add_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
329 master->connector_id);
330
331 aconnector->mst_encoder = dm_dp_create_fake_mst_encoder(master);
332 + drm_connector_attach_encoder(&aconnector->base,
333 + &aconnector->mst_encoder->base);
334
335 /*
336 * TODO: understand why this one is needed
337 diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
338 index dac355812adc..373700c05a00 100644
339 --- a/drivers/gpu/drm/ast/ast_main.c
340 +++ b/drivers/gpu/drm/ast/ast_main.c
341 @@ -583,7 +583,8 @@ void ast_driver_unload(struct drm_device *dev)
342 drm_mode_config_cleanup(dev);
343
344 ast_mm_fini(ast);
345 - pci_iounmap(dev->pdev, ast->ioregs);
346 + if (ast->ioregs != ast->regs + AST_IO_MM_OFFSET)
347 + pci_iounmap(dev->pdev, ast->ioregs);
348 pci_iounmap(dev->pdev, ast->regs);
349 kfree(ast);
350 }
351 diff --git a/drivers/gpu/drm/drm_auth.c b/drivers/gpu/drm/drm_auth.c
352 index d9c0f7573905..1669c42c40ed 100644
353 --- a/drivers/gpu/drm/drm_auth.c
354 +++ b/drivers/gpu/drm/drm_auth.c
355 @@ -142,6 +142,7 @@ static int drm_new_set_master(struct drm_device *dev, struct drm_file *fpriv)
356
357 lockdep_assert_held_once(&dev->master_mutex);
358
359 + WARN_ON(fpriv->is_master);
360 old_master = fpriv->master;
361 fpriv->master = drm_master_create(dev);
362 if (!fpriv->master) {
363 @@ -170,6 +171,7 @@ out_err:
364 /* drop references and restore old master on failure */
365 drm_master_put(&fpriv->master);
366 fpriv->master = old_master;
367 + fpriv->is_master = 0;
368
369 return ret;
370 }
371 diff --git a/drivers/gpu/drm/meson/meson_crtc.c b/drivers/gpu/drm/meson/meson_crtc.c
372 index 05520202c967..191b314f9e9e 100644
373 --- a/drivers/gpu/drm/meson/meson_crtc.c
374 +++ b/drivers/gpu/drm/meson/meson_crtc.c
375 @@ -45,6 +45,7 @@ struct meson_crtc {
376 struct drm_crtc base;
377 struct drm_pending_vblank_event *event;
378 struct meson_drm *priv;
379 + bool enabled;
380 };
381 #define to_meson_crtc(x) container_of(x, struct meson_crtc, base)
382
383 @@ -80,8 +81,7 @@ static const struct drm_crtc_funcs meson_crtc_funcs = {
384
385 };
386
387 -static void meson_crtc_atomic_enable(struct drm_crtc *crtc,
388 - struct drm_crtc_state *old_state)
389 +static void meson_crtc_enable(struct drm_crtc *crtc)
390 {
391 struct meson_crtc *meson_crtc = to_meson_crtc(crtc);
392 struct drm_crtc_state *crtc_state = crtc->state;
393 @@ -101,6 +101,22 @@ static void meson_crtc_atomic_enable(struct drm_crtc *crtc,
394 writel_bits_relaxed(VPP_POSTBLEND_ENABLE, VPP_POSTBLEND_ENABLE,
395 priv->io_base + _REG(VPP_MISC));
396
397 + drm_crtc_vblank_on(crtc);
398 +
399 + meson_crtc->enabled = true;
400 +}
401 +
402 +static void meson_crtc_atomic_enable(struct drm_crtc *crtc,
403 + struct drm_crtc_state *old_state)
404 +{
405 + struct meson_crtc *meson_crtc = to_meson_crtc(crtc);
406 + struct meson_drm *priv = meson_crtc->priv;
407 +
408 + DRM_DEBUG_DRIVER("\n");
409 +
410 + if (!meson_crtc->enabled)
411 + meson_crtc_enable(crtc);
412 +
413 priv->viu.osd1_enabled = true;
414 }
415
416 @@ -110,6 +126,8 @@ static void meson_crtc_atomic_disable(struct drm_crtc *crtc,
417 struct meson_crtc *meson_crtc = to_meson_crtc(crtc);
418 struct meson_drm *priv = meson_crtc->priv;
419
420 + drm_crtc_vblank_off(crtc);
421 +
422 priv->viu.osd1_enabled = false;
423 priv->viu.osd1_commit = false;
424
425 @@ -124,6 +142,8 @@ static void meson_crtc_atomic_disable(struct drm_crtc *crtc,
426
427 crtc->state->event = NULL;
428 }
429 +
430 + meson_crtc->enabled = false;
431 }
432
433 static void meson_crtc_atomic_begin(struct drm_crtc *crtc,
434 @@ -132,6 +152,9 @@ static void meson_crtc_atomic_begin(struct drm_crtc *crtc,
435 struct meson_crtc *meson_crtc = to_meson_crtc(crtc);
436 unsigned long flags;
437
438 + if (crtc->state->enable && !meson_crtc->enabled)
439 + meson_crtc_enable(crtc);
440 +
441 if (crtc->state->event) {
442 WARN_ON(drm_crtc_vblank_get(crtc) != 0);
443
444 diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/meson_dw_hdmi.c
445 index df7247cd93f9..2cb2ad26d716 100644
446 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c
447 +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c
448 @@ -706,6 +706,7 @@ static const struct regmap_config meson_dw_hdmi_regmap_config = {
449 .reg_read = meson_dw_hdmi_reg_read,
450 .reg_write = meson_dw_hdmi_reg_write,
451 .max_register = 0x10000,
452 + .fast_io = true,
453 };
454
455 static bool meson_hdmi_connector_is_available(struct device *dev)
456 diff --git a/drivers/gpu/drm/meson/meson_venc.c b/drivers/gpu/drm/meson/meson_venc.c
457 index 514245e69b38..14aac661f38b 100644
458 --- a/drivers/gpu/drm/meson/meson_venc.c
459 +++ b/drivers/gpu/drm/meson/meson_venc.c
460 @@ -71,6 +71,7 @@
461 */
462
463 /* HHI Registers */
464 +#define HHI_GCLK_MPEG2 0x148 /* 0x52 offset in data sheet */
465 #define HHI_VDAC_CNTL0 0x2F4 /* 0xbd offset in data sheet */
466 #define HHI_VDAC_CNTL1 0x2F8 /* 0xbe offset in data sheet */
467 #define HHI_HDMI_PHY_CNTL0 0x3a0 /* 0xe8 offset in data sheet */
468 @@ -1529,10 +1530,12 @@ unsigned int meson_venci_get_field(struct meson_drm *priv)
469 void meson_venc_enable_vsync(struct meson_drm *priv)
470 {
471 writel_relaxed(2, priv->io_base + _REG(VENC_INTCTRL));
472 + regmap_update_bits(priv->hhi, HHI_GCLK_MPEG2, BIT(25), BIT(25));
473 }
474
475 void meson_venc_disable_vsync(struct meson_drm *priv)
476 {
477 + regmap_update_bits(priv->hhi, HHI_GCLK_MPEG2, BIT(25), 0);
478 writel_relaxed(0, priv->io_base + _REG(VENC_INTCTRL));
479 }
480
481 diff --git a/drivers/gpu/drm/meson/meson_viu.c b/drivers/gpu/drm/meson/meson_viu.c
482 index 6bcfa527c180..26a0857878bf 100644
483 --- a/drivers/gpu/drm/meson/meson_viu.c
484 +++ b/drivers/gpu/drm/meson/meson_viu.c
485 @@ -184,18 +184,18 @@ void meson_viu_set_osd_lut(struct meson_drm *priv, enum viu_lut_sel_e lut_sel,
486 if (lut_sel == VIU_LUT_OSD_OETF) {
487 writel(0, priv->io_base + _REG(addr_port));
488
489 - for (i = 0; i < 20; i++)
490 + for (i = 0; i < (OSD_OETF_LUT_SIZE / 2); i++)
491 writel(r_map[i * 2] | (r_map[i * 2 + 1] << 16),
492 priv->io_base + _REG(data_port));
493
494 writel(r_map[OSD_OETF_LUT_SIZE - 1] | (g_map[0] << 16),
495 priv->io_base + _REG(data_port));
496
497 - for (i = 0; i < 20; i++)
498 + for (i = 0; i < (OSD_OETF_LUT_SIZE / 2); i++)
499 writel(g_map[i * 2 + 1] | (g_map[i * 2 + 2] << 16),
500 priv->io_base + _REG(data_port));
501
502 - for (i = 0; i < 20; i++)
503 + for (i = 0; i < (OSD_OETF_LUT_SIZE / 2); i++)
504 writel(b_map[i * 2] | (b_map[i * 2 + 1] << 16),
505 priv->io_base + _REG(data_port));
506
507 @@ -211,18 +211,18 @@ void meson_viu_set_osd_lut(struct meson_drm *priv, enum viu_lut_sel_e lut_sel,
508 } else if (lut_sel == VIU_LUT_OSD_EOTF) {
509 writel(0, priv->io_base + _REG(addr_port));
510
511 - for (i = 0; i < 20; i++)
512 + for (i = 0; i < (OSD_EOTF_LUT_SIZE / 2); i++)
513 writel(r_map[i * 2] | (r_map[i * 2 + 1] << 16),
514 priv->io_base + _REG(data_port));
515
516 writel(r_map[OSD_EOTF_LUT_SIZE - 1] | (g_map[0] << 16),
517 priv->io_base + _REG(data_port));
518
519 - for (i = 0; i < 20; i++)
520 + for (i = 0; i < (OSD_EOTF_LUT_SIZE / 2); i++)
521 writel(g_map[i * 2 + 1] | (g_map[i * 2 + 2] << 16),
522 priv->io_base + _REG(data_port));
523
524 - for (i = 0; i < 20; i++)
525 + for (i = 0; i < (OSD_EOTF_LUT_SIZE / 2); i++)
526 writel(b_map[i * 2] | (b_map[i * 2 + 1] << 16),
527 priv->io_base + _REG(data_port));
528
529 diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
530 index c414f3809e5c..50be240df331 100644
531 --- a/drivers/infiniband/hw/mlx5/main.c
532 +++ b/drivers/infiniband/hw/mlx5/main.c
533 @@ -1094,31 +1094,26 @@ enum mlx5_ib_width {
534 MLX5_IB_WIDTH_12X = 1 << 4
535 };
536
537 -static int translate_active_width(struct ib_device *ibdev, u8 active_width,
538 +static void translate_active_width(struct ib_device *ibdev, u8 active_width,
539 u8 *ib_width)
540 {
541 struct mlx5_ib_dev *dev = to_mdev(ibdev);
542 - int err = 0;
543
544 - if (active_width & MLX5_IB_WIDTH_1X) {
545 + if (active_width & MLX5_IB_WIDTH_1X)
546 *ib_width = IB_WIDTH_1X;
547 - } else if (active_width & MLX5_IB_WIDTH_2X) {
548 - mlx5_ib_dbg(dev, "active_width %d is not supported by IB spec\n",
549 - (int)active_width);
550 - err = -EINVAL;
551 - } else if (active_width & MLX5_IB_WIDTH_4X) {
552 + else if (active_width & MLX5_IB_WIDTH_4X)
553 *ib_width = IB_WIDTH_4X;
554 - } else if (active_width & MLX5_IB_WIDTH_8X) {
555 + else if (active_width & MLX5_IB_WIDTH_8X)
556 *ib_width = IB_WIDTH_8X;
557 - } else if (active_width & MLX5_IB_WIDTH_12X) {
558 + else if (active_width & MLX5_IB_WIDTH_12X)
559 *ib_width = IB_WIDTH_12X;
560 - } else {
561 - mlx5_ib_dbg(dev, "Invalid active_width %d\n",
562 + else {
563 + mlx5_ib_dbg(dev, "Invalid active_width %d, setting width to default value: 4x\n",
564 (int)active_width);
565 - err = -EINVAL;
566 + *ib_width = IB_WIDTH_4X;
567 }
568
569 - return err;
570 + return;
571 }
572
573 static int mlx5_mtu_to_ib_mtu(int mtu)
574 @@ -1225,10 +1220,8 @@ static int mlx5_query_hca_port(struct ib_device *ibdev, u8 port,
575 if (err)
576 goto out;
577
578 - err = translate_active_width(ibdev, ib_link_width_oper,
579 - &props->active_width);
580 - if (err)
581 - goto out;
582 + translate_active_width(ibdev, ib_link_width_oper, &props->active_width);
583 +
584 err = mlx5_query_port_ib_proto_oper(mdev, &props->active_speed, port);
585 if (err)
586 goto out;
587 diff --git a/drivers/infiniband/ulp/iser/iser_verbs.c b/drivers/infiniband/ulp/iser/iser_verbs.c
588 index b686a4aaffe8..bee8c0b1d6a5 100644
589 --- a/drivers/infiniband/ulp/iser/iser_verbs.c
590 +++ b/drivers/infiniband/ulp/iser/iser_verbs.c
591 @@ -1123,7 +1123,9 @@ u8 iser_check_task_pi_status(struct iscsi_iser_task *iser_task,
592 IB_MR_CHECK_SIG_STATUS, &mr_status);
593 if (ret) {
594 pr_err("ib_check_mr_status failed, ret %d\n", ret);
595 - goto err;
596 + /* Not a lot we can do, return ambiguous guard error */
597 + *sector = 0;
598 + return 0x1;
599 }
600
601 if (mr_status.fail_status & IB_MR_CHECK_SIG_STATUS) {
602 @@ -1151,9 +1153,6 @@ u8 iser_check_task_pi_status(struct iscsi_iser_task *iser_task,
603 }
604
605 return 0;
606 -err:
607 - /* Not alot we can do here, return ambiguous guard error */
608 - return 0x1;
609 }
610
611 void iser_err_comp(struct ib_wc *wc, const char *type)
612 diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
613 index d4b9db487b16..cfc8b94527b9 100644
614 --- a/drivers/input/joystick/xpad.c
615 +++ b/drivers/input/joystick/xpad.c
616 @@ -480,18 +480,18 @@ static const u8 xboxone_hori_init[] = {
617 };
618
619 /*
620 - * This packet is required for some of the PDP pads to start
621 + * This packet is required for most (all?) of the PDP pads to start
622 * sending input reports. These pads include: (0x0e6f:0x02ab),
623 - * (0x0e6f:0x02a4).
624 + * (0x0e6f:0x02a4), (0x0e6f:0x02a6).
625 */
626 static const u8 xboxone_pdp_init1[] = {
627 0x0a, 0x20, 0x00, 0x03, 0x00, 0x01, 0x14
628 };
629
630 /*
631 - * This packet is required for some of the PDP pads to start
632 + * This packet is required for most (all?) of the PDP pads to start
633 * sending input reports. These pads include: (0x0e6f:0x02ab),
634 - * (0x0e6f:0x02a4).
635 + * (0x0e6f:0x02a4), (0x0e6f:0x02a6).
636 */
637 static const u8 xboxone_pdp_init2[] = {
638 0x06, 0x20, 0x00, 0x02, 0x01, 0x00
639 @@ -527,12 +527,8 @@ static const struct xboxone_init_packet xboxone_init_packets[] = {
640 XBOXONE_INIT_PKT(0x0e6f, 0x0165, xboxone_hori_init),
641 XBOXONE_INIT_PKT(0x0f0d, 0x0067, xboxone_hori_init),
642 XBOXONE_INIT_PKT(0x0000, 0x0000, xboxone_fw2015_init),
643 - XBOXONE_INIT_PKT(0x0e6f, 0x02ab, xboxone_pdp_init1),
644 - XBOXONE_INIT_PKT(0x0e6f, 0x02ab, xboxone_pdp_init2),
645 - XBOXONE_INIT_PKT(0x0e6f, 0x02a4, xboxone_pdp_init1),
646 - XBOXONE_INIT_PKT(0x0e6f, 0x02a4, xboxone_pdp_init2),
647 - XBOXONE_INIT_PKT(0x0e6f, 0x02a6, xboxone_pdp_init1),
648 - XBOXONE_INIT_PKT(0x0e6f, 0x02a6, xboxone_pdp_init2),
649 + XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_init1),
650 + XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_init2),
651 XBOXONE_INIT_PKT(0x24c6, 0x541a, xboxone_rumblebegin_init),
652 XBOXONE_INIT_PKT(0x24c6, 0x542a, xboxone_rumblebegin_init),
653 XBOXONE_INIT_PKT(0x24c6, 0x543a, xboxone_rumblebegin_init),
654 diff --git a/drivers/input/keyboard/cros_ec_keyb.c b/drivers/input/keyboard/cros_ec_keyb.c
655 index 81be6f781f0b..d56001181598 100644
656 --- a/drivers/input/keyboard/cros_ec_keyb.c
657 +++ b/drivers/input/keyboard/cros_ec_keyb.c
658 @@ -493,7 +493,8 @@ static int cros_ec_keyb_register_bs(struct cros_ec_keyb *ckdev)
659 for (i = 0; i < ARRAY_SIZE(cros_ec_keyb_bs); i++) {
660 const struct cros_ec_bs_map *map = &cros_ec_keyb_bs[i];
661
662 - if (buttons & BIT(map->bit))
663 + if ((map->ev_type == EV_KEY && (buttons & BIT(map->bit))) ||
664 + (map->ev_type == EV_SW && (switches & BIT(map->bit))))
665 input_set_capability(idev, map->ev_type, map->code);
666 }
667
668 diff --git a/drivers/input/keyboard/matrix_keypad.c b/drivers/input/keyboard/matrix_keypad.c
669 index f51ae09596ef..403452ef00e6 100644
670 --- a/drivers/input/keyboard/matrix_keypad.c
671 +++ b/drivers/input/keyboard/matrix_keypad.c
672 @@ -407,7 +407,7 @@ matrix_keypad_parse_dt(struct device *dev)
673 struct matrix_keypad_platform_data *pdata;
674 struct device_node *np = dev->of_node;
675 unsigned int *gpios;
676 - int i, nrow, ncol;
677 + int ret, i, nrow, ncol;
678
679 if (!np) {
680 dev_err(dev, "device lacks DT data\n");
681 @@ -452,12 +452,19 @@ matrix_keypad_parse_dt(struct device *dev)
682 return ERR_PTR(-ENOMEM);
683 }
684
685 - for (i = 0; i < pdata->num_row_gpios; i++)
686 - gpios[i] = of_get_named_gpio(np, "row-gpios", i);
687 + for (i = 0; i < nrow; i++) {
688 + ret = of_get_named_gpio(np, "row-gpios", i);
689 + if (ret < 0)
690 + return ERR_PTR(ret);
691 + gpios[i] = ret;
692 + }
693
694 - for (i = 0; i < pdata->num_col_gpios; i++)
695 - gpios[pdata->num_row_gpios + i] =
696 - of_get_named_gpio(np, "col-gpios", i);
697 + for (i = 0; i < ncol; i++) {
698 + ret = of_get_named_gpio(np, "col-gpios", i);
699 + if (ret < 0)
700 + return ERR_PTR(ret);
701 + gpios[nrow + i] = ret;
702 + }
703
704 pdata->row_gpios = gpios;
705 pdata->col_gpios = &gpios[pdata->num_row_gpios];
706 @@ -484,10 +491,8 @@ static int matrix_keypad_probe(struct platform_device *pdev)
707 pdata = dev_get_platdata(&pdev->dev);
708 if (!pdata) {
709 pdata = matrix_keypad_parse_dt(&pdev->dev);
710 - if (IS_ERR(pdata)) {
711 - dev_err(&pdev->dev, "no platform data defined\n");
712 + if (IS_ERR(pdata))
713 return PTR_ERR(pdata);
714 - }
715 } else if (!pdata->keymap_data) {
716 dev_err(&pdev->dev, "no keymap data defined\n");
717 return -EINVAL;
718 diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c
719 index b0f9d19b3410..a94b6494e71a 100644
720 --- a/drivers/input/mouse/elan_i2c_core.c
721 +++ b/drivers/input/mouse/elan_i2c_core.c
722 @@ -1348,6 +1348,9 @@ static const struct acpi_device_id elan_acpi_id[] = {
723 { "ELAN0618", 0 },
724 { "ELAN061C", 0 },
725 { "ELAN061D", 0 },
726 + { "ELAN061E", 0 },
727 + { "ELAN0620", 0 },
728 + { "ELAN0621", 0 },
729 { "ELAN0622", 0 },
730 { "ELAN1000", 0 },
731 { }
732 diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
733 index 5e85f3cca867..c42813d50591 100644
734 --- a/drivers/input/mouse/synaptics.c
735 +++ b/drivers/input/mouse/synaptics.c
736 @@ -170,6 +170,7 @@ static const char * const smbus_pnp_ids[] = {
737 "LEN0048", /* X1 Carbon 3 */
738 "LEN0046", /* X250 */
739 "LEN004a", /* W541 */
740 + "LEN005b", /* P50 */
741 "LEN0071", /* T480 */
742 "LEN0072", /* X1 Carbon Gen 5 (2017) - Elan/ALPS trackpoint */
743 "LEN0073", /* X1 Carbon G5 (Elantech) */
744 diff --git a/drivers/mtd/nand/bbt.c b/drivers/mtd/nand/bbt.c
745 index 56cde38b92c0..044adf913854 100644
746 --- a/drivers/mtd/nand/bbt.c
747 +++ b/drivers/mtd/nand/bbt.c
748 @@ -27,7 +27,8 @@ int nanddev_bbt_init(struct nand_device *nand)
749 unsigned int nwords = DIV_ROUND_UP(nblocks * bits_per_block,
750 BITS_PER_LONG);
751
752 - nand->bbt.cache = kzalloc(nwords, GFP_KERNEL);
753 + nand->bbt.cache = kcalloc(nwords, sizeof(*nand->bbt.cache),
754 + GFP_KERNEL);
755 if (!nand->bbt.cache)
756 return -ENOMEM;
757
758 diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
759 index 6eccfa82ca94..3c342700bf5f 100644
760 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
761 +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
762 @@ -1409,7 +1409,7 @@ void __i40e_del_filter(struct i40e_vsi *vsi, struct i40e_mac_filter *f)
763 }
764
765 vsi->flags |= I40E_VSI_FLAG_FILTER_CHANGED;
766 - set_bit(__I40E_MACVLAN_SYNC_PENDING, vsi->state);
767 + set_bit(__I40E_MACVLAN_SYNC_PENDING, vsi->back->state);
768 }
769
770 /**
771 diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
772 index f3cae733ae2d..9acb5b44ce4c 100644
773 --- a/drivers/scsi/lpfc/lpfc_init.c
774 +++ b/drivers/scsi/lpfc/lpfc_init.c
775 @@ -167,7 +167,11 @@ lpfc_config_port_prep(struct lpfc_hba *phba)
776 sizeof(phba->wwpn));
777 }
778
779 - phba->sli3_options = 0x0;
780 + /*
781 + * Clear all option bits except LPFC_SLI3_BG_ENABLED,
782 + * which was already set in lpfc_get_cfgparam()
783 + */
784 + phba->sli3_options &= (uint32_t)LPFC_SLI3_BG_ENABLED;
785
786 /* Setup and issue mailbox READ REV command */
787 lpfc_read_rev(phba, pmb);
788 diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
789 index a95c823cd1a4..be2bac9355cd 100644
790 --- a/drivers/scsi/lpfc/lpfc_sli.c
791 +++ b/drivers/scsi/lpfc/lpfc_sli.c
792 @@ -4969,7 +4969,6 @@ lpfc_sli_config_port(struct lpfc_hba *phba, int sli_mode)
793 phba->sli3_options &= ~(LPFC_SLI3_NPIV_ENABLED |
794 LPFC_SLI3_HBQ_ENABLED |
795 LPFC_SLI3_CRP_ENABLED |
796 - LPFC_SLI3_BG_ENABLED |
797 LPFC_SLI3_DSS_ENABLED);
798 if (rc != MBX_SUCCESS) {
799 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
800 diff --git a/drivers/tty/serial/kgdboc.c b/drivers/tty/serial/kgdboc.c
801 index f4d0ef695225..8a111ab33b50 100644
802 --- a/drivers/tty/serial/kgdboc.c
803 +++ b/drivers/tty/serial/kgdboc.c
804 @@ -128,24 +128,6 @@ static void kgdboc_unregister_kbd(void)
805 #define kgdboc_restore_input()
806 #endif /* ! CONFIG_KDB_KEYBOARD */
807
808 -static int kgdboc_option_setup(char *opt)
809 -{
810 - if (!opt) {
811 - pr_err("kgdboc: config string not provided\n");
812 - return -EINVAL;
813 - }
814 -
815 - if (strlen(opt) >= MAX_CONFIG_LEN) {
816 - printk(KERN_ERR "kgdboc: config string too long\n");
817 - return -ENOSPC;
818 - }
819 - strcpy(config, opt);
820 -
821 - return 0;
822 -}
823 -
824 -__setup("kgdboc=", kgdboc_option_setup);
825 -
826 static void cleanup_kgdboc(void)
827 {
828 if (kgdb_unregister_nmi_console())
829 @@ -159,15 +141,13 @@ static int configure_kgdboc(void)
830 {
831 struct tty_driver *p;
832 int tty_line = 0;
833 - int err;
834 + int err = -ENODEV;
835 char *cptr = config;
836 struct console *cons;
837
838 - err = kgdboc_option_setup(config);
839 - if (err || !strlen(config) || isspace(config[0]))
840 + if (!strlen(config) || isspace(config[0]))
841 goto noconfig;
842
843 - err = -ENODEV;
844 kgdboc_io_ops.is_console = 0;
845 kgdb_tty_driver = NULL;
846
847 @@ -316,6 +296,25 @@ static struct kgdb_io kgdboc_io_ops = {
848 };
849
850 #ifdef CONFIG_KGDB_SERIAL_CONSOLE
851 +static int kgdboc_option_setup(char *opt)
852 +{
853 + if (!opt) {
854 + pr_err("config string not provided\n");
855 + return -EINVAL;
856 + }
857 +
858 + if (strlen(opt) >= MAX_CONFIG_LEN) {
859 + pr_err("config string too long\n");
860 + return -ENOSPC;
861 + }
862 + strcpy(config, opt);
863 +
864 + return 0;
865 +}
866 +
867 +__setup("kgdboc=", kgdboc_option_setup);
868 +
869 +
870 /* This is only available if kgdboc is a built in for early debugging */
871 static int __init kgdboc_early_init(char *opt)
872 {
873 diff --git a/fs/btrfs/tree-checker.c b/fs/btrfs/tree-checker.c
874 index d385778b628c..3ec712cba58e 100644
875 --- a/fs/btrfs/tree-checker.c
876 +++ b/fs/btrfs/tree-checker.c
877 @@ -389,13 +389,11 @@ static int check_block_group_item(struct btrfs_fs_info *fs_info,
878
879 /*
880 * Here we don't really care about alignment since extent allocator can
881 - * handle it. We care more about the size, as if one block group is
882 - * larger than maximum size, it's must be some obvious corruption.
883 + * handle it. We care more about the size.
884 */
885 - if (key->offset > BTRFS_MAX_DATA_CHUNK_SIZE || key->offset == 0) {
886 + if (key->offset == 0) {
887 block_group_err(fs_info, leaf, slot,
888 - "invalid block group size, have %llu expect (0, %llu]",
889 - key->offset, BTRFS_MAX_DATA_CHUNK_SIZE);
890 + "invalid block group size 0");
891 return -EUCLEAN;
892 }
893
894 diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h
895 index 538ba1a58f5b..e9de8ad0bad7 100644
896 --- a/include/linux/tracepoint.h
897 +++ b/include/linux/tracepoint.h
898 @@ -166,7 +166,7 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
899 struct tracepoint_func *it_func_ptr; \
900 void *it_func; \
901 void *__data; \
902 - int __maybe_unused idx = 0; \
903 + int __maybe_unused __idx = 0; \
904 \
905 if (!(cond)) \
906 return; \
907 @@ -182,7 +182,7 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
908 * doesn't work from the idle path. \
909 */ \
910 if (rcuidle) { \
911 - idx = srcu_read_lock_notrace(&tracepoint_srcu); \
912 + __idx = srcu_read_lock_notrace(&tracepoint_srcu);\
913 rcu_irq_enter_irqson(); \
914 } \
915 \
916 @@ -198,7 +198,7 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
917 \
918 if (rcuidle) { \
919 rcu_irq_exit_irqson(); \
920 - srcu_read_unlock_notrace(&tracepoint_srcu, idx);\
921 + srcu_read_unlock_notrace(&tracepoint_srcu, __idx);\
922 } \
923 \
924 preempt_enable_notrace(); \
925 diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
926 index 0be866c91f62..5e1a7578c9ed 100644
927 --- a/include/trace/events/sched.h
928 +++ b/include/trace/events/sched.h
929 @@ -107,6 +107,8 @@ DEFINE_EVENT(sched_wakeup_template, sched_wakeup_new,
930 #ifdef CREATE_TRACE_POINTS
931 static inline long __trace_sched_switch_state(bool preempt, struct task_struct *p)
932 {
933 + unsigned int state;
934 +
935 #ifdef CONFIG_SCHED_DEBUG
936 BUG_ON(p != current);
937 #endif /* CONFIG_SCHED_DEBUG */
938 @@ -118,7 +120,15 @@ static inline long __trace_sched_switch_state(bool preempt, struct task_struct *
939 if (preempt)
940 return TASK_REPORT_MAX;
941
942 - return 1 << task_state_index(p);
943 + /*
944 + * task_state_index() uses fls() and returns a value from 0-8 range.
945 + * Decrement it by 1 (except TASK_RUNNING state i.e 0) before using
946 + * it for left shift operation to get the correct task->state
947 + * mapping.
948 + */
949 + state = task_state_index(p);
950 +
951 + return state ? (1 << (state - 1)) : state;
952 }
953 #endif /* CREATE_TRACE_POINTS */
954
955 diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c
956 index 3207a4d26849..578d4ac54484 100644
957 --- a/kernel/events/uprobes.c
958 +++ b/kernel/events/uprobes.c
959 @@ -616,7 +616,7 @@ static int prepare_uprobe(struct uprobe *uprobe, struct file *file,
960 BUG_ON((uprobe->offset & ~PAGE_MASK) +
961 UPROBE_SWBP_INSN_SIZE > PAGE_SIZE);
962
963 - smp_wmb(); /* pairs with rmb() in find_active_uprobe() */
964 + smp_wmb(); /* pairs with the smp_rmb() in handle_swbp() */
965 set_bit(UPROBE_COPY_INSN, &uprobe->flags);
966
967 out:
968 @@ -1914,10 +1914,18 @@ static void handle_swbp(struct pt_regs *regs)
969 * After we hit the bp, _unregister + _register can install the
970 * new and not-yet-analyzed uprobe at the same address, restart.
971 */
972 - smp_rmb(); /* pairs with wmb() in install_breakpoint() */
973 if (unlikely(!test_bit(UPROBE_COPY_INSN, &uprobe->flags)))
974 goto out;
975
976 + /*
977 + * Pairs with the smp_wmb() in prepare_uprobe().
978 + *
979 + * Guarantees that if we see the UPROBE_COPY_INSN bit set, then
980 + * we must also see the stores to &uprobe->arch performed by the
981 + * prepare_uprobe() call.
982 + */
983 + smp_rmb();
984 +
985 /* Tracing handlers use ->utask to communicate with fetch methods */
986 if (!get_utask())
987 goto out;
988 diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
989 index 3b8c0e24ab30..447bd96ee658 100644
990 --- a/kernel/trace/trace.h
991 +++ b/kernel/trace/trace.h
992 @@ -512,12 +512,44 @@ enum {
993 * can only be modified by current, we can reuse trace_recursion.
994 */
995 TRACE_IRQ_BIT,
996 +
997 + /* Set if the function is in the set_graph_function file */
998 + TRACE_GRAPH_BIT,
999 +
1000 + /*
1001 + * In the very unlikely case that an interrupt came in
1002 + * at a start of graph tracing, and we want to trace
1003 + * the function in that interrupt, the depth can be greater
1004 + * than zero, because of the preempted start of a previous
1005 + * trace. In an even more unlikely case, depth could be 2
1006 + * if a softirq interrupted the start of graph tracing,
1007 + * followed by an interrupt preempting a start of graph
1008 + * tracing in the softirq, and depth can even be 3
1009 + * if an NMI came in at the start of an interrupt function
1010 + * that preempted a softirq start of a function that
1011 + * preempted normal context!!!! Luckily, it can't be
1012 + * greater than 3, so the next two bits are a mask
1013 + * of what the depth is when we set TRACE_GRAPH_BIT
1014 + */
1015 +
1016 + TRACE_GRAPH_DEPTH_START_BIT,
1017 + TRACE_GRAPH_DEPTH_END_BIT,
1018 };
1019
1020 #define trace_recursion_set(bit) do { (current)->trace_recursion |= (1<<(bit)); } while (0)
1021 #define trace_recursion_clear(bit) do { (current)->trace_recursion &= ~(1<<(bit)); } while (0)
1022 #define trace_recursion_test(bit) ((current)->trace_recursion & (1<<(bit)))
1023
1024 +#define trace_recursion_depth() \
1025 + (((current)->trace_recursion >> TRACE_GRAPH_DEPTH_START_BIT) & 3)
1026 +#define trace_recursion_set_depth(depth) \
1027 + do { \
1028 + current->trace_recursion &= \
1029 + ~(3 << TRACE_GRAPH_DEPTH_START_BIT); \
1030 + current->trace_recursion |= \
1031 + ((depth) & 3) << TRACE_GRAPH_DEPTH_START_BIT; \
1032 + } while (0)
1033 +
1034 #define TRACE_CONTEXT_BITS 4
1035
1036 #define TRACE_FTRACE_START TRACE_FTRACE_BIT
1037 @@ -843,8 +875,9 @@ extern void __trace_graph_return(struct trace_array *tr,
1038 extern struct ftrace_hash *ftrace_graph_hash;
1039 extern struct ftrace_hash *ftrace_graph_notrace_hash;
1040
1041 -static inline int ftrace_graph_addr(unsigned long addr)
1042 +static inline int ftrace_graph_addr(struct ftrace_graph_ent *trace)
1043 {
1044 + unsigned long addr = trace->func;
1045 int ret = 0;
1046
1047 preempt_disable_notrace();
1048 @@ -855,6 +888,14 @@ static inline int ftrace_graph_addr(unsigned long addr)
1049 }
1050
1051 if (ftrace_lookup_ip(ftrace_graph_hash, addr)) {
1052 +
1053 + /*
1054 + * This needs to be cleared on the return functions
1055 + * when the depth is zero.
1056 + */
1057 + trace_recursion_set(TRACE_GRAPH_BIT);
1058 + trace_recursion_set_depth(trace->depth);
1059 +
1060 /*
1061 * If no irqs are to be traced, but a set_graph_function
1062 * is set, and called by an interrupt handler, we still
1063 @@ -872,6 +913,13 @@ out:
1064 return ret;
1065 }
1066
1067 +static inline void ftrace_graph_addr_finish(struct ftrace_graph_ret *trace)
1068 +{
1069 + if (trace_recursion_test(TRACE_GRAPH_BIT) &&
1070 + trace->depth == trace_recursion_depth())
1071 + trace_recursion_clear(TRACE_GRAPH_BIT);
1072 +}
1073 +
1074 static inline int ftrace_graph_notrace_addr(unsigned long addr)
1075 {
1076 int ret = 0;
1077 @@ -885,7 +933,7 @@ static inline int ftrace_graph_notrace_addr(unsigned long addr)
1078 return ret;
1079 }
1080 #else
1081 -static inline int ftrace_graph_addr(unsigned long addr)
1082 +static inline int ftrace_graph_addr(struct ftrace_graph_ent *trace)
1083 {
1084 return 1;
1085 }
1086 @@ -894,6 +942,8 @@ static inline int ftrace_graph_notrace_addr(unsigned long addr)
1087 {
1088 return 0;
1089 }
1090 +static inline void ftrace_graph_addr_finish(struct ftrace_graph_ret *trace)
1091 +{ }
1092 #endif /* CONFIG_DYNAMIC_FTRACE */
1093
1094 extern unsigned int fgraph_max_depth;
1095 @@ -901,7 +951,8 @@ extern unsigned int fgraph_max_depth;
1096 static inline bool ftrace_graph_ignore_func(struct ftrace_graph_ent *trace)
1097 {
1098 /* trace it when it is-nested-in or is a function enabled. */
1099 - return !(trace->depth || ftrace_graph_addr(trace->func)) ||
1100 + return !(trace_recursion_test(TRACE_GRAPH_BIT) ||
1101 + ftrace_graph_addr(trace)) ||
1102 (trace->depth < 0) ||
1103 (fgraph_max_depth && trace->depth >= fgraph_max_depth);
1104 }
1105 diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
1106 index 2561460d7baf..086af4f5c3e8 100644
1107 --- a/kernel/trace/trace_functions_graph.c
1108 +++ b/kernel/trace/trace_functions_graph.c
1109 @@ -509,6 +509,8 @@ void trace_graph_return(struct ftrace_graph_ret *trace)
1110 int cpu;
1111 int pc;
1112
1113 + ftrace_graph_addr_finish(trace);
1114 +
1115 local_irq_save(flags);
1116 cpu = raw_smp_processor_id();
1117 data = per_cpu_ptr(tr->trace_buffer.data, cpu);
1118 @@ -532,6 +534,8 @@ void set_graph_array(struct trace_array *tr)
1119
1120 static void trace_graph_thresh_return(struct ftrace_graph_ret *trace)
1121 {
1122 + ftrace_graph_addr_finish(trace);
1123 +
1124 if (tracing_thresh &&
1125 (trace->rettime - trace->calltime < tracing_thresh))
1126 return;
1127 diff --git a/kernel/trace/trace_irqsoff.c b/kernel/trace/trace_irqsoff.c
1128 index b7357f9f82a3..98ea6d28df15 100644
1129 --- a/kernel/trace/trace_irqsoff.c
1130 +++ b/kernel/trace/trace_irqsoff.c
1131 @@ -208,6 +208,8 @@ static void irqsoff_graph_return(struct ftrace_graph_ret *trace)
1132 unsigned long flags;
1133 int pc;
1134
1135 + ftrace_graph_addr_finish(trace);
1136 +
1137 if (!func_prolog_dec(tr, &data, &flags))
1138 return;
1139
1140 diff --git a/kernel/trace/trace_sched_wakeup.c b/kernel/trace/trace_sched_wakeup.c
1141 index a86b303e6c67..7d04b9890755 100644
1142 --- a/kernel/trace/trace_sched_wakeup.c
1143 +++ b/kernel/trace/trace_sched_wakeup.c
1144 @@ -270,6 +270,8 @@ static void wakeup_graph_return(struct ftrace_graph_ret *trace)
1145 unsigned long flags;
1146 int pc;
1147
1148 + ftrace_graph_addr_finish(trace);
1149 +
1150 if (!func_prolog_preempt_disable(tr, &data, &pc))
1151 return;
1152
1153 diff --git a/lib/test_hexdump.c b/lib/test_hexdump.c
1154 index 626f580b4ff7..5144899d3c6b 100644
1155 --- a/lib/test_hexdump.c
1156 +++ b/lib/test_hexdump.c
1157 @@ -99,7 +99,7 @@ static void __init test_hexdump_prepare_test(size_t len, int rowsize,
1158 const char *q = *result++;
1159 size_t amount = strlen(q);
1160
1161 - strncpy(p, q, amount);
1162 + memcpy(p, q, amount);
1163 p += amount;
1164
1165 *p++ = ' ';
1166 diff --git a/mm/hugetlb.c b/mm/hugetlb.c
1167 index 1931a3d9b282..309fb8c969af 100644
1168 --- a/mm/hugetlb.c
1169 +++ b/mm/hugetlb.c
1170 @@ -4080,7 +4080,7 @@ int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm,
1171
1172 /* fallback to copy_from_user outside mmap_sem */
1173 if (unlikely(ret)) {
1174 - ret = -EFAULT;
1175 + ret = -ENOENT;
1176 *pagep = page;
1177 /* don't free the page */
1178 goto out;
1179 diff --git a/mm/shmem.c b/mm/shmem.c
1180 index 0b02b539072e..b6cf0e8e685b 100644
1181 --- a/mm/shmem.c
1182 +++ b/mm/shmem.c
1183 @@ -2264,6 +2264,7 @@ static int shmem_mfill_atomic_pte(struct mm_struct *dst_mm,
1184 struct page *page;
1185 pte_t _dst_pte, *dst_pte;
1186 int ret;
1187 + pgoff_t offset, max_off;
1188
1189 ret = -ENOMEM;
1190 if (!shmem_inode_acct_block(inode, 1))
1191 @@ -2286,7 +2287,7 @@ static int shmem_mfill_atomic_pte(struct mm_struct *dst_mm,
1192 *pagep = page;
1193 shmem_inode_unacct_blocks(inode, 1);
1194 /* don't free the page */
1195 - return -EFAULT;
1196 + return -ENOENT;
1197 }
1198 } else { /* mfill_zeropage_atomic */
1199 clear_highpage(page);
1200 @@ -2301,6 +2302,12 @@ static int shmem_mfill_atomic_pte(struct mm_struct *dst_mm,
1201 __SetPageSwapBacked(page);
1202 __SetPageUptodate(page);
1203
1204 + ret = -EFAULT;
1205 + offset = linear_page_index(dst_vma, dst_addr);
1206 + max_off = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
1207 + if (unlikely(offset >= max_off))
1208 + goto out_release;
1209 +
1210 ret = mem_cgroup_try_charge_delay(page, dst_mm, gfp, &memcg, false);
1211 if (ret)
1212 goto out_release;
1213 @@ -2318,9 +2325,25 @@ static int shmem_mfill_atomic_pte(struct mm_struct *dst_mm,
1214 _dst_pte = mk_pte(page, dst_vma->vm_page_prot);
1215 if (dst_vma->vm_flags & VM_WRITE)
1216 _dst_pte = pte_mkwrite(pte_mkdirty(_dst_pte));
1217 + else {
1218 + /*
1219 + * We don't set the pte dirty if the vma has no
1220 + * VM_WRITE permission, so mark the page dirty or it
1221 + * could be freed from under us. We could do it
1222 + * unconditionally before unlock_page(), but doing it
1223 + * only if VM_WRITE is not set is faster.
1224 + */
1225 + set_page_dirty(page);
1226 + }
1227
1228 - ret = -EEXIST;
1229 dst_pte = pte_offset_map_lock(dst_mm, dst_pmd, dst_addr, &ptl);
1230 +
1231 + ret = -EFAULT;
1232 + max_off = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
1233 + if (unlikely(offset >= max_off))
1234 + goto out_release_uncharge_unlock;
1235 +
1236 + ret = -EEXIST;
1237 if (!pte_none(*dst_pte))
1238 goto out_release_uncharge_unlock;
1239
1240 @@ -2338,13 +2361,15 @@ static int shmem_mfill_atomic_pte(struct mm_struct *dst_mm,
1241
1242 /* No need to invalidate - it was non-present before */
1243 update_mmu_cache(dst_vma, dst_addr, dst_pte);
1244 - unlock_page(page);
1245 pte_unmap_unlock(dst_pte, ptl);
1246 + unlock_page(page);
1247 ret = 0;
1248 out:
1249 return ret;
1250 out_release_uncharge_unlock:
1251 pte_unmap_unlock(dst_pte, ptl);
1252 + ClearPageDirty(page);
1253 + delete_from_page_cache(page);
1254 out_release_uncharge:
1255 mem_cgroup_cancel_charge(page, memcg, false);
1256 out_release:
1257 diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c
1258 index f0af11b1cdf3..458acda96f20 100644
1259 --- a/mm/userfaultfd.c
1260 +++ b/mm/userfaultfd.c
1261 @@ -33,6 +33,8 @@ static int mcopy_atomic_pte(struct mm_struct *dst_mm,
1262 void *page_kaddr;
1263 int ret;
1264 struct page *page;
1265 + pgoff_t offset, max_off;
1266 + struct inode *inode;
1267
1268 if (!*pagep) {
1269 ret = -ENOMEM;
1270 @@ -48,7 +50,7 @@ static int mcopy_atomic_pte(struct mm_struct *dst_mm,
1271
1272 /* fallback to copy_from_user outside mmap_sem */
1273 if (unlikely(ret)) {
1274 - ret = -EFAULT;
1275 + ret = -ENOENT;
1276 *pagep = page;
1277 /* don't free the page */
1278 goto out;
1279 @@ -73,8 +75,17 @@ static int mcopy_atomic_pte(struct mm_struct *dst_mm,
1280 if (dst_vma->vm_flags & VM_WRITE)
1281 _dst_pte = pte_mkwrite(pte_mkdirty(_dst_pte));
1282
1283 - ret = -EEXIST;
1284 dst_pte = pte_offset_map_lock(dst_mm, dst_pmd, dst_addr, &ptl);
1285 + if (dst_vma->vm_file) {
1286 + /* the shmem MAP_PRIVATE case requires checking the i_size */
1287 + inode = dst_vma->vm_file->f_inode;
1288 + offset = linear_page_index(dst_vma, dst_addr);
1289 + max_off = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
1290 + ret = -EFAULT;
1291 + if (unlikely(offset >= max_off))
1292 + goto out_release_uncharge_unlock;
1293 + }
1294 + ret = -EEXIST;
1295 if (!pte_none(*dst_pte))
1296 goto out_release_uncharge_unlock;
1297
1298 @@ -108,11 +119,22 @@ static int mfill_zeropage_pte(struct mm_struct *dst_mm,
1299 pte_t _dst_pte, *dst_pte;
1300 spinlock_t *ptl;
1301 int ret;
1302 + pgoff_t offset, max_off;
1303 + struct inode *inode;
1304
1305 _dst_pte = pte_mkspecial(pfn_pte(my_zero_pfn(dst_addr),
1306 dst_vma->vm_page_prot));
1307 - ret = -EEXIST;
1308 dst_pte = pte_offset_map_lock(dst_mm, dst_pmd, dst_addr, &ptl);
1309 + if (dst_vma->vm_file) {
1310 + /* the shmem MAP_PRIVATE case requires checking the i_size */
1311 + inode = dst_vma->vm_file->f_inode;
1312 + offset = linear_page_index(dst_vma, dst_addr);
1313 + max_off = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
1314 + ret = -EFAULT;
1315 + if (unlikely(offset >= max_off))
1316 + goto out_unlock;
1317 + }
1318 + ret = -EEXIST;
1319 if (!pte_none(*dst_pte))
1320 goto out_unlock;
1321 set_pte_at(dst_mm, dst_addr, dst_pte, _dst_pte);
1322 @@ -275,7 +297,7 @@ retry:
1323
1324 cond_resched();
1325
1326 - if (unlikely(err == -EFAULT)) {
1327 + if (unlikely(err == -ENOENT)) {
1328 up_read(&dst_mm->mmap_sem);
1329 BUG_ON(!page);
1330
1331 @@ -381,7 +403,17 @@ static __always_inline ssize_t mfill_atomic_pte(struct mm_struct *dst_mm,
1332 {
1333 ssize_t err;
1334
1335 - if (vma_is_anonymous(dst_vma)) {
1336 + /*
1337 + * The normal page fault path for a shmem will invoke the
1338 + * fault, fill the hole in the file and COW it right away. The
1339 + * result generates plain anonymous memory. So when we are
1340 + * asked to fill an hole in a MAP_PRIVATE shmem mapping, we'll
1341 + * generate anonymous memory directly without actually filling
1342 + * the hole. For the MAP_PRIVATE case the robustness check
1343 + * only happens in the pagetable (to verify it's still none)
1344 + * and not in the radix tree.
1345 + */
1346 + if (!(dst_vma->vm_flags & VM_SHARED)) {
1347 if (!zeropage)
1348 err = mcopy_atomic_pte(dst_mm, dst_pmd, dst_vma,
1349 dst_addr, src_addr, page);
1350 @@ -486,7 +518,8 @@ retry:
1351 * dst_vma.
1352 */
1353 err = -ENOMEM;
1354 - if (vma_is_anonymous(dst_vma) && unlikely(anon_vma_prepare(dst_vma)))
1355 + if (!(dst_vma->vm_flags & VM_SHARED) &&
1356 + unlikely(anon_vma_prepare(dst_vma)))
1357 goto out_unlock;
1358
1359 while (src_addr < src_start + len) {
1360 @@ -527,7 +560,7 @@ retry:
1361 src_addr, &page, zeropage);
1362 cond_resched();
1363
1364 - if (unlikely(err == -EFAULT)) {
1365 + if (unlikely(err == -ENOENT)) {
1366 void *page_kaddr;
1367
1368 up_read(&dst_mm->mmap_sem);
1369 diff --git a/net/tipc/topsrv.c b/net/tipc/topsrv.c
1370 index 2627b5d812e9..b84c0059214f 100644
1371 --- a/net/tipc/topsrv.c
1372 +++ b/net/tipc/topsrv.c
1373 @@ -657,7 +657,7 @@ int tipc_topsrv_start(struct net *net)
1374 srv->max_rcvbuf_size = sizeof(struct tipc_subscr);
1375 INIT_WORK(&srv->awork, tipc_topsrv_accept);
1376
1377 - strncpy(srv->name, name, strlen(name) + 1);
1378 + strscpy(srv->name, name, sizeof(srv->name));
1379 tn->topsrv = srv;
1380 atomic_set(&tn->subscription_count, 0);
1381
1382 diff --git a/scripts/unifdef.c b/scripts/unifdef.c
1383 index 7493c0ee51cc..db00e3e30a59 100644
1384 --- a/scripts/unifdef.c
1385 +++ b/scripts/unifdef.c
1386 @@ -395,7 +395,7 @@ usage(void)
1387 * When we have processed a group that starts off with a known-false
1388 * #if/#elif sequence (which has therefore been deleted) followed by a
1389 * #elif that we don't understand and therefore must keep, we edit the
1390 - * latter into a #if to keep the nesting correct. We use strncpy() to
1391 + * latter into a #if to keep the nesting correct. We use memcpy() to
1392 * overwrite the 4 byte token "elif" with "if " without a '\0' byte.
1393 *
1394 * When we find a true #elif in a group, the following block will
1395 @@ -450,7 +450,7 @@ static void Idrop (void) { Fdrop(); ignoreon(); }
1396 static void Itrue (void) { Ftrue(); ignoreon(); }
1397 static void Ifalse(void) { Ffalse(); ignoreon(); }
1398 /* modify this line */
1399 -static void Mpass (void) { strncpy(keyword, "if ", 4); Pelif(); }
1400 +static void Mpass (void) { memcpy(keyword, "if ", 4); Pelif(); }
1401 static void Mtrue (void) { keywordedit("else"); state(IS_TRUE_MIDDLE); }
1402 static void Melif (void) { keywordedit("endif"); state(IS_FALSE_TRAILER); }
1403 static void Melse (void) { keywordedit("endif"); state(IS_FALSE_ELSE); }
1404 diff --git a/security/selinux/nlmsgtab.c b/security/selinux/nlmsgtab.c
1405 index 74b951f55608..9cec81209617 100644
1406 --- a/security/selinux/nlmsgtab.c
1407 +++ b/security/selinux/nlmsgtab.c
1408 @@ -80,6 +80,9 @@ static const struct nlmsg_perm nlmsg_route_perms[] =
1409 { RTM_NEWSTATS, NETLINK_ROUTE_SOCKET__NLMSG_READ },
1410 { RTM_GETSTATS, NETLINK_ROUTE_SOCKET__NLMSG_READ },
1411 { RTM_NEWCACHEREPORT, NETLINK_ROUTE_SOCKET__NLMSG_READ },
1412 + { RTM_NEWCHAIN, NETLINK_ROUTE_SOCKET__NLMSG_WRITE },
1413 + { RTM_DELCHAIN, NETLINK_ROUTE_SOCKET__NLMSG_WRITE },
1414 + { RTM_GETCHAIN, NETLINK_ROUTE_SOCKET__NLMSG_READ },
1415 };
1416
1417 static const struct nlmsg_perm nlmsg_tcpdiag_perms[] =
1418 @@ -158,7 +161,11 @@ int selinux_nlmsg_lookup(u16 sclass, u16 nlmsg_type, u32 *perm)
1419
1420 switch (sclass) {
1421 case SECCLASS_NETLINK_ROUTE_SOCKET:
1422 - /* RTM_MAX always point to RTM_SETxxxx, ie RTM_NEWxxx + 3 */
1423 + /* RTM_MAX always points to RTM_SETxxxx, ie RTM_NEWxxx + 3.
1424 + * If the BUILD_BUG_ON() below fails you must update the
1425 + * structures at the top of this file with the new mappings
1426 + * before updating the BUILD_BUG_ON() macro!
1427 + */
1428 BUILD_BUG_ON(RTM_MAX != (RTM_NEWCHAIN + 3));
1429 err = nlmsg_perm(nlmsg_type, perm, nlmsg_route_perms,
1430 sizeof(nlmsg_route_perms));
1431 @@ -170,6 +177,10 @@ int selinux_nlmsg_lookup(u16 sclass, u16 nlmsg_type, u32 *perm)
1432 break;
1433
1434 case SECCLASS_NETLINK_XFRM_SOCKET:
1435 + /* If the BUILD_BUG_ON() below fails you must update the
1436 + * structures at the top of this file with the new mappings
1437 + * before updating the BUILD_BUG_ON() macro!
1438 + */
1439 BUILD_BUG_ON(XFRM_MSG_MAX != XFRM_MSG_MAPPING);
1440 err = nlmsg_perm(nlmsg_type, perm, nlmsg_xfrm_perms,
1441 sizeof(nlmsg_xfrm_perms));