commit:     6066aba76c5f1240fdb5cd93b959030a4f26c147
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Sat Dec  8 13:17:09 2018 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Sat Dec  8 13:17:09 2018 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=6066aba7

proj/linux-patches: Linux patch 4.19.8

Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>

 0000_README             |    4 +
 1007_linux-4.19.8.patch | 1441 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 1445 insertions(+)

diff --git a/0000_README b/0000_README
index 6c79837..79aa888 100644
--- a/0000_README
+++ b/0000_README
@@ -75,6 +75,10 @@ Patch:  1007_linux-4.19.8.patch
 From:   http://www.kernel.org
 Desc:   Linux 4.19.8
 
+Patch:  1008_linux-4.19.9.patch
+From:   http://www.kernel.org
+Desc:   Linux 4.19.9
+
 Patch:  1500_XATTR_USER_PREFIX.patch
 From:   https://bugs.gentoo.org/show_bug.cgi?id=470644
 Desc:   Support for namespace user.pax.* on tmpfs.

diff --git a/1007_linux-4.19.8.patch b/1007_linux-4.19.8.patch
new file mode 100644
index 0000000..dbc8053
--- /dev/null
+++ b/1007_linux-4.19.8.patch
@@ -0,0 +1,1441 @@
+diff --git a/Makefile b/Makefile
+index d2b4efcfb388..34bc4c752c49 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 4
+ PATCHLEVEL = 19
+-SUBLEVEL = 7
++SUBLEVEL = 8
+ EXTRAVERSION =
+ NAME = "People's Front"
+ 
+diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
+index a045f3086047..a90c4f126050 100644
+--- a/arch/arc/Kconfig
++++ b/arch/arc/Kconfig
+@@ -111,7 +111,7 @@ endmenu
+ 
+ choice
+       prompt "ARC Instruction Set"
+-      default ISA_ARCOMPACT
++      default ISA_ARCV2
+ 
+ config ISA_ARCOMPACT
+       bool "ARCompact ISA"
+diff --git a/arch/arc/Makefile b/arch/arc/Makefile
+index 644815c0516e..16e6cc22e25c 100644
+--- a/arch/arc/Makefile
++++ b/arch/arc/Makefile
+@@ -6,7 +6,7 @@
+ # published by the Free Software Foundation.
+ #
+ 
+-KBUILD_DEFCONFIG := nsim_700_defconfig
++KBUILD_DEFCONFIG := nsim_hs_defconfig
+ 
+ cflags-y      += -fno-common -pipe -fno-builtin -mmedium-calls -D__linux__
+ cflags-$(CONFIG_ISA_ARCOMPACT)        += -mA7
+diff --git a/arch/arc/configs/axs101_defconfig 
b/arch/arc/configs/axs101_defconfig
+index 41bc08be6a3b..020d4493edfd 100644
+--- a/arch/arc/configs/axs101_defconfig
++++ b/arch/arc/configs/axs101_defconfig
+@@ -14,6 +14,7 @@ CONFIG_PERF_EVENTS=y
+ # CONFIG_VM_EVENT_COUNTERS is not set
+ # CONFIG_SLUB_DEBUG is not set
+ # CONFIG_COMPAT_BRK is not set
++CONFIG_ISA_ARCOMPACT=y
+ CONFIG_MODULES=y
+ CONFIG_MODULE_FORCE_LOAD=y
+ CONFIG_MODULE_UNLOAD=y
+@@ -95,6 +96,7 @@ CONFIG_VFAT_FS=y
+ CONFIG_NTFS_FS=y
+ CONFIG_TMPFS=y
+ CONFIG_NFS_FS=y
++CONFIG_NFS_V3_ACL=y
+ CONFIG_NLS_CODEPAGE_437=y
+ CONFIG_NLS_ISO8859_1=y
+ # CONFIG_ENABLE_WARN_DEPRECATED is not set
+diff --git a/arch/arc/configs/axs103_defconfig 
b/arch/arc/configs/axs103_defconfig
+index 1e1c4a8011b5..666314fffc60 100644
+--- a/arch/arc/configs/axs103_defconfig
++++ b/arch/arc/configs/axs103_defconfig
+@@ -94,6 +94,7 @@ CONFIG_VFAT_FS=y
+ CONFIG_NTFS_FS=y
+ CONFIG_TMPFS=y
+ CONFIG_NFS_FS=y
++CONFIG_NFS_V3_ACL=y
+ CONFIG_NLS_CODEPAGE_437=y
+ CONFIG_NLS_ISO8859_1=y
+ # CONFIG_ENABLE_WARN_DEPRECATED is not set
+diff --git a/arch/arc/configs/axs103_smp_defconfig 
b/arch/arc/configs/axs103_smp_defconfig
+index 6b0c0cfd5c30..429832b8560b 100644
+--- a/arch/arc/configs/axs103_smp_defconfig
++++ b/arch/arc/configs/axs103_smp_defconfig
+@@ -97,6 +97,7 @@ CONFIG_VFAT_FS=y
+ CONFIG_NTFS_FS=y
+ CONFIG_TMPFS=y
+ CONFIG_NFS_FS=y
++CONFIG_NFS_V3_ACL=y
+ CONFIG_NLS_CODEPAGE_437=y
+ CONFIG_NLS_ISO8859_1=y
+ # CONFIG_ENABLE_WARN_DEPRECATED is not set
+diff --git a/arch/arc/configs/hsdk_defconfig b/arch/arc/configs/hsdk_defconfig
+index 1dec2b4bc5e6..2a1d2cbfee1a 100644
+--- a/arch/arc/configs/hsdk_defconfig
++++ b/arch/arc/configs/hsdk_defconfig
+@@ -65,6 +65,7 @@ CONFIG_EXT3_FS=y
+ CONFIG_VFAT_FS=y
+ CONFIG_TMPFS=y
+ CONFIG_NFS_FS=y
++CONFIG_NFS_V3_ACL=y
+ CONFIG_NLS_CODEPAGE_437=y
+ CONFIG_NLS_ISO8859_1=y
+ # CONFIG_ENABLE_WARN_DEPRECATED is not set
+diff --git a/arch/arc/configs/nps_defconfig b/arch/arc/configs/nps_defconfig
+index 31ba224bbfb4..6e84060e7c90 100644
+--- a/arch/arc/configs/nps_defconfig
++++ b/arch/arc/configs/nps_defconfig
+@@ -15,6 +15,7 @@ CONFIG_SYSCTL_SYSCALL=y
+ CONFIG_EMBEDDED=y
+ CONFIG_PERF_EVENTS=y
+ # CONFIG_COMPAT_BRK is not set
++CONFIG_ISA_ARCOMPACT=y
+ CONFIG_KPROBES=y
+ CONFIG_MODULES=y
+ CONFIG_MODULE_FORCE_LOAD=y
+@@ -73,6 +74,7 @@ CONFIG_PROC_KCORE=y
+ CONFIG_TMPFS=y
+ # CONFIG_MISC_FILESYSTEMS is not set
+ CONFIG_NFS_FS=y
++CONFIG_NFS_V3_ACL=y
+ CONFIG_ROOT_NFS=y
+ CONFIG_DEBUG_INFO=y
+ # CONFIG_ENABLE_WARN_DEPRECATED is not set
+diff --git a/arch/arc/configs/nsim_700_defconfig 
b/arch/arc/configs/nsim_700_defconfig
+index 8e0b8b134cd9..219c2a65294b 100644
+--- a/arch/arc/configs/nsim_700_defconfig
++++ b/arch/arc/configs/nsim_700_defconfig
+@@ -15,6 +15,7 @@ CONFIG_EMBEDDED=y
+ CONFIG_PERF_EVENTS=y
+ # CONFIG_SLUB_DEBUG is not set
+ # CONFIG_COMPAT_BRK is not set
++CONFIG_ISA_ARCOMPACT=y
+ CONFIG_KPROBES=y
+ CONFIG_MODULES=y
+ # CONFIG_LBDAF is not set
+diff --git a/arch/arc/configs/nsimosci_defconfig 
b/arch/arc/configs/nsimosci_defconfig
+index f14eeff7d308..35dfc6491a09 100644
+--- a/arch/arc/configs/nsimosci_defconfig
++++ b/arch/arc/configs/nsimosci_defconfig
+@@ -15,6 +15,7 @@ CONFIG_EMBEDDED=y
+ CONFIG_PERF_EVENTS=y
+ # CONFIG_SLUB_DEBUG is not set
+ # CONFIG_COMPAT_BRK is not set
++CONFIG_ISA_ARCOMPACT=y
+ CONFIG_KPROBES=y
+ CONFIG_MODULES=y
+ # CONFIG_LBDAF is not set
+@@ -66,5 +67,6 @@ CONFIG_EXT2_FS_XATTR=y
+ CONFIG_TMPFS=y
+ # CONFIG_MISC_FILESYSTEMS is not set
+ CONFIG_NFS_FS=y
++CONFIG_NFS_V3_ACL=y
+ # CONFIG_ENABLE_WARN_DEPRECATED is not set
+ # CONFIG_ENABLE_MUST_CHECK is not set
+diff --git a/arch/arc/configs/nsimosci_hs_defconfig 
b/arch/arc/configs/nsimosci_hs_defconfig
+index 025298a48305..1638e5bc9672 100644
+--- a/arch/arc/configs/nsimosci_hs_defconfig
++++ b/arch/arc/configs/nsimosci_hs_defconfig
+@@ -65,5 +65,6 @@ CONFIG_EXT2_FS_XATTR=y
+ CONFIG_TMPFS=y
+ # CONFIG_MISC_FILESYSTEMS is not set
+ CONFIG_NFS_FS=y
++CONFIG_NFS_V3_ACL=y
+ # CONFIG_ENABLE_WARN_DEPRECATED is not set
+ # CONFIG_ENABLE_MUST_CHECK is not set
+diff --git a/arch/arc/configs/nsimosci_hs_smp_defconfig 
b/arch/arc/configs/nsimosci_hs_smp_defconfig
+index df7b77b13b82..11cfbdb0f441 100644
+--- a/arch/arc/configs/nsimosci_hs_smp_defconfig
++++ b/arch/arc/configs/nsimosci_hs_smp_defconfig
+@@ -76,6 +76,7 @@ CONFIG_EXT2_FS_XATTR=y
+ CONFIG_TMPFS=y
+ # CONFIG_MISC_FILESYSTEMS is not set
+ CONFIG_NFS_FS=y
++CONFIG_NFS_V3_ACL=y
+ # CONFIG_ENABLE_WARN_DEPRECATED is not set
+ # CONFIG_ENABLE_MUST_CHECK is not set
+ CONFIG_FTRACE=y
+diff --git a/arch/arc/configs/tb10x_defconfig 
b/arch/arc/configs/tb10x_defconfig
+index a7f65313f84a..e71ade3cf9c8 100644
+--- a/arch/arc/configs/tb10x_defconfig
++++ b/arch/arc/configs/tb10x_defconfig
+@@ -19,6 +19,7 @@ CONFIG_KALLSYMS_ALL=y
+ # CONFIG_AIO is not set
+ CONFIG_EMBEDDED=y
+ # CONFIG_COMPAT_BRK is not set
++CONFIG_ISA_ARCOMPACT=y
+ CONFIG_SLAB=y
+ CONFIG_MODULES=y
+ CONFIG_MODULE_FORCE_LOAD=y
+diff --git a/arch/arc/configs/vdk_hs38_defconfig 
b/arch/arc/configs/vdk_hs38_defconfig
+index db47c3541f15..1e59a2e9c602 100644
+--- a/arch/arc/configs/vdk_hs38_defconfig
++++ b/arch/arc/configs/vdk_hs38_defconfig
+@@ -85,6 +85,7 @@ CONFIG_NTFS_FS=y
+ CONFIG_TMPFS=y
+ CONFIG_JFFS2_FS=y
+ CONFIG_NFS_FS=y
++CONFIG_NFS_V3_ACL=y
+ CONFIG_NLS_CODEPAGE_437=y
+ CONFIG_NLS_ISO8859_1=y
+ # CONFIG_ENABLE_WARN_DEPRECATED is not set
+diff --git a/arch/arc/configs/vdk_hs38_smp_defconfig 
b/arch/arc/configs/vdk_hs38_smp_defconfig
+index a8ac5e917d9a..b5c3f6c54b03 100644
+--- a/arch/arc/configs/vdk_hs38_smp_defconfig
++++ b/arch/arc/configs/vdk_hs38_smp_defconfig
+@@ -90,6 +90,7 @@ CONFIG_NTFS_FS=y
+ CONFIG_TMPFS=y
+ CONFIG_JFFS2_FS=y
+ CONFIG_NFS_FS=y
++CONFIG_NFS_V3_ACL=y
+ CONFIG_NLS_CODEPAGE_437=y
+ CONFIG_NLS_ISO8859_1=y
+ # CONFIG_ENABLE_WARN_DEPRECATED is not set
+diff --git a/arch/arm64/include/asm/ftrace.h b/arch/arm64/include/asm/ftrace.h
+index caa955f10e19..fac54fb050d0 100644
+--- a/arch/arm64/include/asm/ftrace.h
++++ b/arch/arm64/include/asm/ftrace.h
+@@ -56,6 +56,19 @@ static inline bool arch_trace_is_compat_syscall(struct 
pt_regs *regs)
+ {
+       return is_compat_task();
+ }
++
++#define ARCH_HAS_SYSCALL_MATCH_SYM_NAME
++
++static inline bool arch_syscall_match_sym_name(const char *sym,
++                                             const char *name)
++{
++      /*
++       * Since all syscall functions have __arm64_ prefix, we must skip it.
++       * However, as we described above, we decided to ignore compat
++       * syscalls, so we don't care about __arm64_compat_ prefix here.
++       */
++      return !strcmp(sym + 8, name);
++}
+ #endif /* ifndef __ASSEMBLY__ */
+ 
+ #endif /* __ASM_FTRACE_H */
+diff --git a/arch/mips/include/asm/syscall.h b/arch/mips/include/asm/syscall.h
+index 0170602a1e4e..6cf8ffb5367e 100644
+--- a/arch/mips/include/asm/syscall.h
++++ b/arch/mips/include/asm/syscall.h
+@@ -73,7 +73,7 @@ static inline unsigned long mips_get_syscall_arg(unsigned 
long *arg,
+ #ifdef CONFIG_64BIT
+       case 4: case 5: case 6: case 7:
+ #ifdef CONFIG_MIPS32_O32
+-              if (test_thread_flag(TIF_32BIT_REGS))
++              if (test_tsk_thread_flag(task, TIF_32BIT_REGS))
+                       return get_user(*arg, (int *)usp + n);
+               else
+ #endif
+diff --git a/arch/mips/ralink/mt7620.c b/arch/mips/ralink/mt7620.c
+index 41b71c4352c2..c1ce6f43642b 100644
+--- a/arch/mips/ralink/mt7620.c
++++ b/arch/mips/ralink/mt7620.c
+@@ -84,7 +84,7 @@ static struct rt2880_pmx_func pcie_rst_grp[] = {
+ };
+ static struct rt2880_pmx_func nd_sd_grp[] = {
+       FUNC("nand", MT7620_GPIO_MODE_NAND, 45, 15),
+-      FUNC("sd", MT7620_GPIO_MODE_SD, 45, 15)
++      FUNC("sd", MT7620_GPIO_MODE_SD, 47, 13)
+ };
+ 
+ static struct rt2880_pmx_group mt7620a_pinmux_data[] = {
+diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
+index 4397fa0c448f..f1d3fe5a0c65 100644
+--- a/arch/x86/kvm/svm.c
++++ b/arch/x86/kvm/svm.c
+@@ -1663,20 +1663,23 @@ static u64 *avic_get_physical_id_entry(struct kvm_vcpu 
*vcpu,
+ static int avic_init_access_page(struct kvm_vcpu *vcpu)
+ {
+       struct kvm *kvm = vcpu->kvm;
+-      int ret;
++      int ret = 0;
+ 
++      mutex_lock(&kvm->slots_lock);
+       if (kvm->arch.apic_access_page_done)
+-              return 0;
++              goto out;
+ 
+-      ret = x86_set_memory_region(kvm,
+-                                  APIC_ACCESS_PAGE_PRIVATE_MEMSLOT,
+-                                  APIC_DEFAULT_PHYS_BASE,
+-                                  PAGE_SIZE);
++      ret = __x86_set_memory_region(kvm,
++                                    APIC_ACCESS_PAGE_PRIVATE_MEMSLOT,
++                                    APIC_DEFAULT_PHYS_BASE,
++                                    PAGE_SIZE);
+       if (ret)
+-              return ret;
++              goto out;
+ 
+       kvm->arch.apic_access_page_done = true;
+-      return 0;
++out:
++      mutex_unlock(&kvm->slots_lock);
++      return ret;
+ }
+ 
+ static int avic_init_backing_page(struct kvm_vcpu *vcpu)
+diff --git a/block/blk-mq.c b/block/blk-mq.c
+index e3c39ea8e17b..23a53b67cf0d 100644
+--- a/block/blk-mq.c
++++ b/block/blk-mq.c
+@@ -1747,7 +1747,7 @@ insert:
+       if (bypass_insert)
+               return BLK_STS_RESOURCE;
+ 
+-      blk_mq_sched_insert_request(rq, false, run_queue, false);
++      blk_mq_request_bypass_insert(rq, run_queue);
+       return BLK_STS_OK;
+ }
+ 
+@@ -1763,7 +1763,7 @@ static void blk_mq_try_issue_directly(struct 
blk_mq_hw_ctx *hctx,
+ 
+       ret = __blk_mq_try_issue_directly(hctx, rq, cookie, false);
+       if (ret == BLK_STS_RESOURCE || ret == BLK_STS_DEV_RESOURCE)
+-              blk_mq_sched_insert_request(rq, false, true, false);
++              blk_mq_request_bypass_insert(rq, true);
+       else if (ret != BLK_STS_OK)
+               blk_mq_end_request(rq, ret);
+ 
+@@ -1798,7 +1798,8 @@ void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx 
*hctx,
+               if (ret != BLK_STS_OK) {
+                       if (ret == BLK_STS_RESOURCE ||
+                                       ret == BLK_STS_DEV_RESOURCE) {
+-                              list_add(&rq->queuelist, list);
++                              blk_mq_request_bypass_insert(rq,
++                                                      list_empty(list));
+                               break;
+                       }
+                       blk_mq_end_request(rq, ret);
+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
+index 4cc45a1d21db..59445c83f023 100644
+--- 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
+@@ -374,6 +374,8 @@ dm_dp_add_mst_connector(struct drm_dp_mst_topology_mgr 
*mgr,
+               master->connector_id);
+ 
+       aconnector->mst_encoder = dm_dp_create_fake_mst_encoder(master);
++      drm_connector_attach_encoder(&aconnector->base,
++                                   &aconnector->mst_encoder->base);
+ 
+       /*
+        * TODO: understand why this one is needed
+diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
+index dac355812adc..373700c05a00 100644
+--- a/drivers/gpu/drm/ast/ast_main.c
++++ b/drivers/gpu/drm/ast/ast_main.c
+@@ -583,7 +583,8 @@ void ast_driver_unload(struct drm_device *dev)
+       drm_mode_config_cleanup(dev);
+ 
+       ast_mm_fini(ast);
+-      pci_iounmap(dev->pdev, ast->ioregs);
++      if (ast->ioregs != ast->regs + AST_IO_MM_OFFSET)
++              pci_iounmap(dev->pdev, ast->ioregs);
+       pci_iounmap(dev->pdev, ast->regs);
+       kfree(ast);
+ }
+diff --git a/drivers/gpu/drm/drm_auth.c b/drivers/gpu/drm/drm_auth.c
+index d9c0f7573905..1669c42c40ed 100644
+--- a/drivers/gpu/drm/drm_auth.c
++++ b/drivers/gpu/drm/drm_auth.c
+@@ -142,6 +142,7 @@ static int drm_new_set_master(struct drm_device *dev, 
struct drm_file *fpriv)
+ 
+       lockdep_assert_held_once(&dev->master_mutex);
+ 
++      WARN_ON(fpriv->is_master);
+       old_master = fpriv->master;
+       fpriv->master = drm_master_create(dev);
+       if (!fpriv->master) {
+@@ -170,6 +171,7 @@ out_err:
+       /* drop references and restore old master on failure */
+       drm_master_put(&fpriv->master);
+       fpriv->master = old_master;
++      fpriv->is_master = 0;
+ 
+       return ret;
+ }
+diff --git a/drivers/gpu/drm/meson/meson_crtc.c 
b/drivers/gpu/drm/meson/meson_crtc.c
+index 05520202c967..191b314f9e9e 100644
+--- a/drivers/gpu/drm/meson/meson_crtc.c
++++ b/drivers/gpu/drm/meson/meson_crtc.c
+@@ -45,6 +45,7 @@ struct meson_crtc {
+       struct drm_crtc base;
+       struct drm_pending_vblank_event *event;
+       struct meson_drm *priv;
++      bool enabled;
+ };
+ #define to_meson_crtc(x) container_of(x, struct meson_crtc, base)
+ 
+@@ -80,8 +81,7 @@ static const struct drm_crtc_funcs meson_crtc_funcs = {
+ 
+ };
+ 
+-static void meson_crtc_atomic_enable(struct drm_crtc *crtc,
+-                                   struct drm_crtc_state *old_state)
++static void meson_crtc_enable(struct drm_crtc *crtc)
+ {
+       struct meson_crtc *meson_crtc = to_meson_crtc(crtc);
+       struct drm_crtc_state *crtc_state = crtc->state;
+@@ -101,6 +101,22 @@ static void meson_crtc_atomic_enable(struct drm_crtc 
*crtc,
+       writel_bits_relaxed(VPP_POSTBLEND_ENABLE, VPP_POSTBLEND_ENABLE,
+                           priv->io_base + _REG(VPP_MISC));
+ 
++      drm_crtc_vblank_on(crtc);
++
++      meson_crtc->enabled = true;
++}
++
++static void meson_crtc_atomic_enable(struct drm_crtc *crtc,
++                                   struct drm_crtc_state *old_state)
++{
++      struct meson_crtc *meson_crtc = to_meson_crtc(crtc);
++      struct meson_drm *priv = meson_crtc->priv;
++
++      DRM_DEBUG_DRIVER("\n");
++
++      if (!meson_crtc->enabled)
++              meson_crtc_enable(crtc);
++
+       priv->viu.osd1_enabled = true;
+ }
+ 
+@@ -110,6 +126,8 @@ static void meson_crtc_atomic_disable(struct drm_crtc 
*crtc,
+       struct meson_crtc *meson_crtc = to_meson_crtc(crtc);
+       struct meson_drm *priv = meson_crtc->priv;
+ 
++      drm_crtc_vblank_off(crtc);
++
+       priv->viu.osd1_enabled = false;
+       priv->viu.osd1_commit = false;
+ 
+@@ -124,6 +142,8 @@ static void meson_crtc_atomic_disable(struct drm_crtc 
*crtc,
+ 
+               crtc->state->event = NULL;
+       }
++
++      meson_crtc->enabled = false;
+ }
+ 
+ static void meson_crtc_atomic_begin(struct drm_crtc *crtc,
+@@ -132,6 +152,9 @@ static void meson_crtc_atomic_begin(struct drm_crtc *crtc,
+       struct meson_crtc *meson_crtc = to_meson_crtc(crtc);
+       unsigned long flags;
+ 
++      if (crtc->state->enable && !meson_crtc->enabled)
++              meson_crtc_enable(crtc);
++
+       if (crtc->state->event) {
+               WARN_ON(drm_crtc_vblank_get(crtc) != 0);
+ 
+diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c 
b/drivers/gpu/drm/meson/meson_dw_hdmi.c
+index df7247cd93f9..2cb2ad26d716 100644
+--- a/drivers/gpu/drm/meson/meson_dw_hdmi.c
++++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c
+@@ -706,6 +706,7 @@ static const struct regmap_config 
meson_dw_hdmi_regmap_config = {
+       .reg_read = meson_dw_hdmi_reg_read,
+       .reg_write = meson_dw_hdmi_reg_write,
+       .max_register = 0x10000,
++      .fast_io = true,
+ };
+ 
+ static bool meson_hdmi_connector_is_available(struct device *dev)
+diff --git a/drivers/gpu/drm/meson/meson_venc.c 
b/drivers/gpu/drm/meson/meson_venc.c
+index 514245e69b38..14aac661f38b 100644
+--- a/drivers/gpu/drm/meson/meson_venc.c
++++ b/drivers/gpu/drm/meson/meson_venc.c
+@@ -71,6 +71,7 @@
+  */
+ 
+ /* HHI Registers */
++#define HHI_GCLK_MPEG2                0x148 /* 0x52 offset in data sheet */
+ #define HHI_VDAC_CNTL0                0x2F4 /* 0xbd offset in data sheet */
+ #define HHI_VDAC_CNTL1                0x2F8 /* 0xbe offset in data sheet */
+ #define HHI_HDMI_PHY_CNTL0    0x3a0 /* 0xe8 offset in data sheet */
+@@ -1529,10 +1530,12 @@ unsigned int meson_venci_get_field(struct meson_drm 
*priv)
+ void meson_venc_enable_vsync(struct meson_drm *priv)
+ {
+       writel_relaxed(2, priv->io_base + _REG(VENC_INTCTRL));
++      regmap_update_bits(priv->hhi, HHI_GCLK_MPEG2, BIT(25), BIT(25));
+ }
+ 
+ void meson_venc_disable_vsync(struct meson_drm *priv)
+ {
++      regmap_update_bits(priv->hhi, HHI_GCLK_MPEG2, BIT(25), 0);
+       writel_relaxed(0, priv->io_base + _REG(VENC_INTCTRL));
+ }
+ 
+diff --git a/drivers/gpu/drm/meson/meson_viu.c 
b/drivers/gpu/drm/meson/meson_viu.c
+index 6bcfa527c180..26a0857878bf 100644
+--- a/drivers/gpu/drm/meson/meson_viu.c
++++ b/drivers/gpu/drm/meson/meson_viu.c
+@@ -184,18 +184,18 @@ void meson_viu_set_osd_lut(struct meson_drm *priv, enum 
viu_lut_sel_e lut_sel,
+       if (lut_sel == VIU_LUT_OSD_OETF) {
+               writel(0, priv->io_base + _REG(addr_port));
+ 
+-              for (i = 0; i < 20; i++)
++              for (i = 0; i < (OSD_OETF_LUT_SIZE / 2); i++)
+                       writel(r_map[i * 2] | (r_map[i * 2 + 1] << 16),
+                               priv->io_base + _REG(data_port));
+ 
+               writel(r_map[OSD_OETF_LUT_SIZE - 1] | (g_map[0] << 16),
+                       priv->io_base + _REG(data_port));
+ 
+-              for (i = 0; i < 20; i++)
++              for (i = 0; i < (OSD_OETF_LUT_SIZE / 2); i++)
+                       writel(g_map[i * 2 + 1] | (g_map[i * 2 + 2] << 16),
+                               priv->io_base + _REG(data_port));
+ 
+-              for (i = 0; i < 20; i++)
++              for (i = 0; i < (OSD_OETF_LUT_SIZE / 2); i++)
+                       writel(b_map[i * 2] | (b_map[i * 2 + 1] << 16),
+                               priv->io_base + _REG(data_port));
+ 
+@@ -211,18 +211,18 @@ void meson_viu_set_osd_lut(struct meson_drm *priv, enum 
viu_lut_sel_e lut_sel,
+       } else if (lut_sel == VIU_LUT_OSD_EOTF) {
+               writel(0, priv->io_base + _REG(addr_port));
+ 
+-              for (i = 0; i < 20; i++)
++              for (i = 0; i < (OSD_EOTF_LUT_SIZE / 2); i++)
+                       writel(r_map[i * 2] | (r_map[i * 2 + 1] << 16),
+                               priv->io_base + _REG(data_port));
+ 
+               writel(r_map[OSD_EOTF_LUT_SIZE - 1] | (g_map[0] << 16),
+                       priv->io_base + _REG(data_port));
+ 
+-              for (i = 0; i < 20; i++)
++              for (i = 0; i < (OSD_EOTF_LUT_SIZE / 2); i++)
+                       writel(g_map[i * 2 + 1] | (g_map[i * 2 + 2] << 16),
+                               priv->io_base + _REG(data_port));
+ 
+-              for (i = 0; i < 20; i++)
++              for (i = 0; i < (OSD_EOTF_LUT_SIZE / 2); i++)
+                       writel(b_map[i * 2] | (b_map[i * 2 + 1] << 16),
+                               priv->io_base + _REG(data_port));
+ 
+diff --git a/drivers/infiniband/hw/mlx5/main.c 
b/drivers/infiniband/hw/mlx5/main.c
+index c414f3809e5c..50be240df331 100644
+--- a/drivers/infiniband/hw/mlx5/main.c
++++ b/drivers/infiniband/hw/mlx5/main.c
+@@ -1094,31 +1094,26 @@ enum mlx5_ib_width {
+       MLX5_IB_WIDTH_12X       = 1 << 4
+ };
+ 
+-static int translate_active_width(struct ib_device *ibdev, u8 active_width,
++static void translate_active_width(struct ib_device *ibdev, u8 active_width,
+                                 u8 *ib_width)
+ {
+       struct mlx5_ib_dev *dev = to_mdev(ibdev);
+-      int err = 0;
+ 
+-      if (active_width & MLX5_IB_WIDTH_1X) {
++      if (active_width & MLX5_IB_WIDTH_1X)
+               *ib_width = IB_WIDTH_1X;
+-      } else if (active_width & MLX5_IB_WIDTH_2X) {
+-              mlx5_ib_dbg(dev, "active_width %d is not supported by IB 
spec\n",
+-                          (int)active_width);
+-              err = -EINVAL;
+-      } else if (active_width & MLX5_IB_WIDTH_4X) {
++      else if (active_width & MLX5_IB_WIDTH_4X)
+               *ib_width = IB_WIDTH_4X;
+-      } else if (active_width & MLX5_IB_WIDTH_8X) {
++      else if (active_width & MLX5_IB_WIDTH_8X)
+               *ib_width = IB_WIDTH_8X;
+-      } else if (active_width & MLX5_IB_WIDTH_12X) {
++      else if (active_width & MLX5_IB_WIDTH_12X)
+               *ib_width = IB_WIDTH_12X;
+-      } else {
+-              mlx5_ib_dbg(dev, "Invalid active_width %d\n",
++      else {
++              mlx5_ib_dbg(dev, "Invalid active_width %d, setting width to 
default value: 4x\n",
+                           (int)active_width);
+-              err = -EINVAL;
++              *ib_width = IB_WIDTH_4X;
+       }
+ 
+-      return err;
++      return;
+ }
+ 
+ static int mlx5_mtu_to_ib_mtu(int mtu)
+@@ -1225,10 +1220,8 @@ static int mlx5_query_hca_port(struct ib_device *ibdev, 
u8 port,
+       if (err)
+               goto out;
+ 
+-      err = translate_active_width(ibdev, ib_link_width_oper,
+-                                   &props->active_width);
+-      if (err)
+-              goto out;
++      translate_active_width(ibdev, ib_link_width_oper, &props->active_width);
++
+       err = mlx5_query_port_ib_proto_oper(mdev, &props->active_speed, port);
+       if (err)
+               goto out;
+diff --git a/drivers/infiniband/ulp/iser/iser_verbs.c 
b/drivers/infiniband/ulp/iser/iser_verbs.c
+index b686a4aaffe8..bee8c0b1d6a5 100644
+--- a/drivers/infiniband/ulp/iser/iser_verbs.c
++++ b/drivers/infiniband/ulp/iser/iser_verbs.c
+@@ -1123,7 +1123,9 @@ u8 iser_check_task_pi_status(struct iscsi_iser_task 
*iser_task,
+                                        IB_MR_CHECK_SIG_STATUS, &mr_status);
+               if (ret) {
+                       pr_err("ib_check_mr_status failed, ret %d\n", ret);
+-                      goto err;
++                      /* Not a lot we can do, return ambiguous guard error */
++                      *sector = 0;
++                      return 0x1;
+               }
+ 
+               if (mr_status.fail_status & IB_MR_CHECK_SIG_STATUS) {
+@@ -1151,9 +1153,6 @@ u8 iser_check_task_pi_status(struct iscsi_iser_task 
*iser_task,
+       }
+ 
+       return 0;
+-err:
+-      /* Not alot we can do here, return ambiguous guard error */
+-      return 0x1;
+ }
+ 
+ void iser_err_comp(struct ib_wc *wc, const char *type)
+diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
+index d4b9db487b16..cfc8b94527b9 100644
+--- a/drivers/input/joystick/xpad.c
++++ b/drivers/input/joystick/xpad.c
+@@ -480,18 +480,18 @@ static const u8 xboxone_hori_init[] = {
+ };
+ 
+ /*
+- * This packet is required for some of the PDP pads to start
++ * This packet is required for most (all?) of the PDP pads to start
+  * sending input reports. These pads include: (0x0e6f:0x02ab),
+- * (0x0e6f:0x02a4).
++ * (0x0e6f:0x02a4), (0x0e6f:0x02a6).
+  */
+ static const u8 xboxone_pdp_init1[] = {
+       0x0a, 0x20, 0x00, 0x03, 0x00, 0x01, 0x14
+ };
+ 
+ /*
+- * This packet is required for some of the PDP pads to start
++ * This packet is required for most (all?) of the PDP pads to start
+  * sending input reports. These pads include: (0x0e6f:0x02ab),
+- * (0x0e6f:0x02a4).
++ * (0x0e6f:0x02a4), (0x0e6f:0x02a6).
+  */
+ static const u8 xboxone_pdp_init2[] = {
+       0x06, 0x20, 0x00, 0x02, 0x01, 0x00
+@@ -527,12 +527,8 @@ static const struct xboxone_init_packet 
xboxone_init_packets[] = {
+       XBOXONE_INIT_PKT(0x0e6f, 0x0165, xboxone_hori_init),
+       XBOXONE_INIT_PKT(0x0f0d, 0x0067, xboxone_hori_init),
+       XBOXONE_INIT_PKT(0x0000, 0x0000, xboxone_fw2015_init),
+-      XBOXONE_INIT_PKT(0x0e6f, 0x02ab, xboxone_pdp_init1),
+-      XBOXONE_INIT_PKT(0x0e6f, 0x02ab, xboxone_pdp_init2),
+-      XBOXONE_INIT_PKT(0x0e6f, 0x02a4, xboxone_pdp_init1),
+-      XBOXONE_INIT_PKT(0x0e6f, 0x02a4, xboxone_pdp_init2),
+-      XBOXONE_INIT_PKT(0x0e6f, 0x02a6, xboxone_pdp_init1),
+-      XBOXONE_INIT_PKT(0x0e6f, 0x02a6, xboxone_pdp_init2),
++      XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_init1),
++      XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_init2),
+       XBOXONE_INIT_PKT(0x24c6, 0x541a, xboxone_rumblebegin_init),
+       XBOXONE_INIT_PKT(0x24c6, 0x542a, xboxone_rumblebegin_init),
+       XBOXONE_INIT_PKT(0x24c6, 0x543a, xboxone_rumblebegin_init),
+diff --git a/drivers/input/keyboard/cros_ec_keyb.c 
b/drivers/input/keyboard/cros_ec_keyb.c
+index 81be6f781f0b..d56001181598 100644
+--- a/drivers/input/keyboard/cros_ec_keyb.c
++++ b/drivers/input/keyboard/cros_ec_keyb.c
+@@ -493,7 +493,8 @@ static int cros_ec_keyb_register_bs(struct cros_ec_keyb 
*ckdev)
+       for (i = 0; i < ARRAY_SIZE(cros_ec_keyb_bs); i++) {
+               const struct cros_ec_bs_map *map = &cros_ec_keyb_bs[i];
+ 
+-              if (buttons & BIT(map->bit))
++              if ((map->ev_type == EV_KEY && (buttons & BIT(map->bit))) ||
++                  (map->ev_type == EV_SW && (switches & BIT(map->bit))))
+                       input_set_capability(idev, map->ev_type, map->code);
+       }
+ 
+diff --git a/drivers/input/keyboard/matrix_keypad.c 
b/drivers/input/keyboard/matrix_keypad.c
+index f51ae09596ef..403452ef00e6 100644
+--- a/drivers/input/keyboard/matrix_keypad.c
++++ b/drivers/input/keyboard/matrix_keypad.c
+@@ -407,7 +407,7 @@ matrix_keypad_parse_dt(struct device *dev)
+       struct matrix_keypad_platform_data *pdata;
+       struct device_node *np = dev->of_node;
+       unsigned int *gpios;
+-      int i, nrow, ncol;
++      int ret, i, nrow, ncol;
+ 
+       if (!np) {
+               dev_err(dev, "device lacks DT data\n");
+@@ -452,12 +452,19 @@ matrix_keypad_parse_dt(struct device *dev)
+               return ERR_PTR(-ENOMEM);
+       }
+ 
+-      for (i = 0; i < pdata->num_row_gpios; i++)
+-              gpios[i] = of_get_named_gpio(np, "row-gpios", i);
++      for (i = 0; i < nrow; i++) {
++              ret = of_get_named_gpio(np, "row-gpios", i);
++              if (ret < 0)
++                      return ERR_PTR(ret);
++              gpios[i] = ret;
++      }
+ 
+-      for (i = 0; i < pdata->num_col_gpios; i++)
+-              gpios[pdata->num_row_gpios + i] =
+-                      of_get_named_gpio(np, "col-gpios", i);
++      for (i = 0; i < ncol; i++) {
++              ret = of_get_named_gpio(np, "col-gpios", i);
++              if (ret < 0)
++                      return ERR_PTR(ret);
++              gpios[nrow + i] = ret;
++      }
+ 
+       pdata->row_gpios = gpios;
+       pdata->col_gpios = &gpios[pdata->num_row_gpios];
+@@ -484,10 +491,8 @@ static int matrix_keypad_probe(struct platform_device 
*pdev)
+       pdata = dev_get_platdata(&pdev->dev);
+       if (!pdata) {
+               pdata = matrix_keypad_parse_dt(&pdev->dev);
+-              if (IS_ERR(pdata)) {
+-                      dev_err(&pdev->dev, "no platform data defined\n");
++              if (IS_ERR(pdata))
+                       return PTR_ERR(pdata);
+-              }
+       } else if (!pdata->keymap_data) {
+               dev_err(&pdev->dev, "no keymap data defined\n");
+               return -EINVAL;
+diff --git a/drivers/input/mouse/elan_i2c_core.c 
b/drivers/input/mouse/elan_i2c_core.c
+index b0f9d19b3410..a94b6494e71a 100644
+--- a/drivers/input/mouse/elan_i2c_core.c
++++ b/drivers/input/mouse/elan_i2c_core.c
+@@ -1348,6 +1348,9 @@ static const struct acpi_device_id elan_acpi_id[] = {
+       { "ELAN0618", 0 },
+       { "ELAN061C", 0 },
+       { "ELAN061D", 0 },
++      { "ELAN061E", 0 },
++      { "ELAN0620", 0 },
++      { "ELAN0621", 0 },
+       { "ELAN0622", 0 },
+       { "ELAN1000", 0 },
+       { }
+diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
+index 5e85f3cca867..c42813d50591 100644
+--- a/drivers/input/mouse/synaptics.c
++++ b/drivers/input/mouse/synaptics.c
+@@ -170,6 +170,7 @@ static const char * const smbus_pnp_ids[] = {
+       "LEN0048", /* X1 Carbon 3 */
+       "LEN0046", /* X250 */
+       "LEN004a", /* W541 */
++      "LEN005b", /* P50 */
+       "LEN0071", /* T480 */
+       "LEN0072", /* X1 Carbon Gen 5 (2017) - Elan/ALPS trackpoint */
+       "LEN0073", /* X1 Carbon G5 (Elantech) */
+diff --git a/drivers/mtd/nand/bbt.c b/drivers/mtd/nand/bbt.c
+index 56cde38b92c0..044adf913854 100644
+--- a/drivers/mtd/nand/bbt.c
++++ b/drivers/mtd/nand/bbt.c
+@@ -27,7 +27,8 @@ int nanddev_bbt_init(struct nand_device *nand)
+       unsigned int nwords = DIV_ROUND_UP(nblocks * bits_per_block,
+                                          BITS_PER_LONG);
+ 
+-      nand->bbt.cache = kzalloc(nwords, GFP_KERNEL);
++      nand->bbt.cache = kcalloc(nwords, sizeof(*nand->bbt.cache),
++                                GFP_KERNEL);
+       if (!nand->bbt.cache)
+               return -ENOMEM;
+ 
+diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c 
b/drivers/net/ethernet/intel/i40e/i40e_main.c
+index 6eccfa82ca94..3c342700bf5f 100644
+--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
++++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
+@@ -1409,7 +1409,7 @@ void __i40e_del_filter(struct i40e_vsi *vsi, struct 
i40e_mac_filter *f)
+       }
+ 
+       vsi->flags |= I40E_VSI_FLAG_FILTER_CHANGED;
+-      set_bit(__I40E_MACVLAN_SYNC_PENDING, vsi->state);
++      set_bit(__I40E_MACVLAN_SYNC_PENDING, vsi->back->state);
+ }
+ 
+ /**
+diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
+index f3cae733ae2d..9acb5b44ce4c 100644
+--- a/drivers/scsi/lpfc/lpfc_init.c
++++ b/drivers/scsi/lpfc/lpfc_init.c
+@@ -167,7 +167,11 @@ lpfc_config_port_prep(struct lpfc_hba *phba)
+                      sizeof(phba->wwpn));
+       }
+ 
+-      phba->sli3_options = 0x0;
++      /*
++       * Clear all option bits except LPFC_SLI3_BG_ENABLED,
++       * which was already set in lpfc_get_cfgparam()
++       */
++      phba->sli3_options &= (uint32_t)LPFC_SLI3_BG_ENABLED;
+ 
+       /* Setup and issue mailbox READ REV command */
+       lpfc_read_rev(phba, pmb);
+diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
+index a95c823cd1a4..be2bac9355cd 100644
+--- a/drivers/scsi/lpfc/lpfc_sli.c
++++ b/drivers/scsi/lpfc/lpfc_sli.c
+@@ -4969,7 +4969,6 @@ lpfc_sli_config_port(struct lpfc_hba *phba, int sli_mode)
+               phba->sli3_options &= ~(LPFC_SLI3_NPIV_ENABLED |
+                                       LPFC_SLI3_HBQ_ENABLED |
+                                       LPFC_SLI3_CRP_ENABLED |
+-                                      LPFC_SLI3_BG_ENABLED |
+                                       LPFC_SLI3_DSS_ENABLED);
+               if (rc != MBX_SUCCESS) {
+                       lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
+diff --git a/drivers/tty/serial/kgdboc.c b/drivers/tty/serial/kgdboc.c
+index f4d0ef695225..8a111ab33b50 100644
+--- a/drivers/tty/serial/kgdboc.c
++++ b/drivers/tty/serial/kgdboc.c
+@@ -128,24 +128,6 @@ static void kgdboc_unregister_kbd(void)
+ #define kgdboc_restore_input()
+ #endif /* ! CONFIG_KDB_KEYBOARD */
+ 
+-static int kgdboc_option_setup(char *opt)
+-{
+-      if (!opt) {
+-              pr_err("kgdboc: config string not provided\n");
+-              return -EINVAL;
+-      }
+-
+-      if (strlen(opt) >= MAX_CONFIG_LEN) {
+-              printk(KERN_ERR "kgdboc: config string too long\n");
+-              return -ENOSPC;
+-      }
+-      strcpy(config, opt);
+-
+-      return 0;
+-}
+-
+-__setup("kgdboc=", kgdboc_option_setup);
+-
+ static void cleanup_kgdboc(void)
+ {
+       if (kgdb_unregister_nmi_console())
+@@ -159,15 +141,13 @@ static int configure_kgdboc(void)
+ {
+       struct tty_driver *p;
+       int tty_line = 0;
+-      int err;
++      int err = -ENODEV;
+       char *cptr = config;
+       struct console *cons;
+ 
+-      err = kgdboc_option_setup(config);
+-      if (err || !strlen(config) || isspace(config[0]))
++      if (!strlen(config) || isspace(config[0]))
+               goto noconfig;
+ 
+-      err = -ENODEV;
+       kgdboc_io_ops.is_console = 0;
+       kgdb_tty_driver = NULL;
+ 
+@@ -316,6 +296,25 @@ static struct kgdb_io kgdboc_io_ops = {
+ };
+ 
+ #ifdef CONFIG_KGDB_SERIAL_CONSOLE
++static int kgdboc_option_setup(char *opt)
++{
++      if (!opt) {
++              pr_err("config string not provided\n");
++              return -EINVAL;
++      }
++
++      if (strlen(opt) >= MAX_CONFIG_LEN) {
++              pr_err("config string too long\n");
++              return -ENOSPC;
++      }
++      strcpy(config, opt);
++
++      return 0;
++}
++
++__setup("kgdboc=", kgdboc_option_setup);
++
++
+ /* This is only available if kgdboc is a built in for early debugging */
+ static int __init kgdboc_early_init(char *opt)
+ {
+diff --git a/fs/btrfs/tree-checker.c b/fs/btrfs/tree-checker.c
+index d385778b628c..3ec712cba58e 100644
+--- a/fs/btrfs/tree-checker.c
++++ b/fs/btrfs/tree-checker.c
+@@ -389,13 +389,11 @@ static int check_block_group_item(struct btrfs_fs_info 
*fs_info,
+ 
+       /*
+        * Here we don't really care about alignment since extent allocator can
+-       * handle it.  We care more about the size, as if one block group is
+-       * larger than maximum size, it's must be some obvious corruption.
++       * handle it.  We care more about the size.
+        */
+-      if (key->offset > BTRFS_MAX_DATA_CHUNK_SIZE || key->offset == 0) {
++      if (key->offset == 0) {
+               block_group_err(fs_info, leaf, slot,
+-                      "invalid block group size, have %llu expect (0, %llu]",
+-                              key->offset, BTRFS_MAX_DATA_CHUNK_SIZE);
++                              "invalid block group size 0");
+               return -EUCLEAN;
+       }
+ 
+diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h
+index 538ba1a58f5b..e9de8ad0bad7 100644
+--- a/include/linux/tracepoint.h
++++ b/include/linux/tracepoint.h
+@@ -166,7 +166,7 @@ static inline struct tracepoint 
*tracepoint_ptr_deref(tracepoint_ptr_t *p)
+               struct tracepoint_func *it_func_ptr;                    \
+               void *it_func;                                          \
+               void *__data;                                           \
+-              int __maybe_unused idx = 0;                             \
++              int __maybe_unused __idx = 0;                           \
+                                                                       \
+               if (!(cond))                                            \
+                       return;                                         \
+@@ -182,7 +182,7 @@ static inline struct tracepoint 
*tracepoint_ptr_deref(tracepoint_ptr_t *p)
+                * doesn't work from the idle path.                     \
+                */                                                     \
+               if (rcuidle) {                                          \
+-                      idx = srcu_read_lock_notrace(&tracepoint_srcu); \
++                      __idx = srcu_read_lock_notrace(&tracepoint_srcu);\
+                       rcu_irq_enter_irqson();                         \
+               }                                                       \
+                                                                       \
+@@ -198,7 +198,7 @@ static inline struct tracepoint 
*tracepoint_ptr_deref(tracepoint_ptr_t *p)
+                                                                       \
+               if (rcuidle) {                                          \
+                       rcu_irq_exit_irqson();                          \
+-                      srcu_read_unlock_notrace(&tracepoint_srcu, idx);\
++                      srcu_read_unlock_notrace(&tracepoint_srcu, __idx);\
+               }                                                       \
+                                                                       \
+               preempt_enable_notrace();                               \
+diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
+index 0be866c91f62..5e1a7578c9ed 100644
+--- a/include/trace/events/sched.h
++++ b/include/trace/events/sched.h
+@@ -107,6 +107,8 @@ DEFINE_EVENT(sched_wakeup_template, sched_wakeup_new,
+ #ifdef CREATE_TRACE_POINTS
+ static inline long __trace_sched_switch_state(bool preempt, struct 
task_struct *p)
+ {
++      unsigned int state;
++
+ #ifdef CONFIG_SCHED_DEBUG
+       BUG_ON(p != current);
+ #endif /* CONFIG_SCHED_DEBUG */
+@@ -118,7 +120,15 @@ static inline long __trace_sched_switch_state(bool 
preempt, struct task_struct *
+       if (preempt)
+               return TASK_REPORT_MAX;
+ 
+-      return 1 << task_state_index(p);
++      /*
++       * task_state_index() uses fls() and returns a value from 0-8 range.
++       * Decrement it by 1 (except TASK_RUNNING state i.e 0) before using
++       * it for left shift operation to get the correct task->state
++       * mapping.
++       */
++      state = task_state_index(p);
++
++      return state ? (1 << (state - 1)) : state;
+ }
+ #endif /* CREATE_TRACE_POINTS */
+ 
+diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c
+index 3207a4d26849..578d4ac54484 100644
+--- a/kernel/events/uprobes.c
++++ b/kernel/events/uprobes.c
+@@ -616,7 +616,7 @@ static int prepare_uprobe(struct uprobe *uprobe, struct 
file *file,
+       BUG_ON((uprobe->offset & ~PAGE_MASK) +
+                       UPROBE_SWBP_INSN_SIZE > PAGE_SIZE);
+ 
+-      smp_wmb(); /* pairs with rmb() in find_active_uprobe() */
++      smp_wmb(); /* pairs with the smp_rmb() in handle_swbp() */
+       set_bit(UPROBE_COPY_INSN, &uprobe->flags);
+ 
+  out:
+@@ -1914,10 +1914,18 @@ static void handle_swbp(struct pt_regs *regs)
+        * After we hit the bp, _unregister + _register can install the
+        * new and not-yet-analyzed uprobe at the same address, restart.
+        */
+-      smp_rmb(); /* pairs with wmb() in install_breakpoint() */
+       if (unlikely(!test_bit(UPROBE_COPY_INSN, &uprobe->flags)))
+               goto out;
+ 
++      /*
++       * Pairs with the smp_wmb() in prepare_uprobe().
++       *
++       * Guarantees that if we see the UPROBE_COPY_INSN bit set, then
++       * we must also see the stores to &uprobe->arch performed by the
++       * prepare_uprobe() call.
++       */
++      smp_rmb();
++
+       /* Tracing handlers use ->utask to communicate with fetch methods */
+       if (!get_utask())
+               goto out;
+diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
+index 3b8c0e24ab30..447bd96ee658 100644
+--- a/kernel/trace/trace.h
++++ b/kernel/trace/trace.h
+@@ -512,12 +512,44 @@ enum {
+  * can only be modified by current, we can reuse trace_recursion.
+  */
+       TRACE_IRQ_BIT,
++
++      /* Set if the function is in the set_graph_function file */
++      TRACE_GRAPH_BIT,
++
++      /*
++       * In the very unlikely case that an interrupt came in
++       * at a start of graph tracing, and we want to trace
++       * the function in that interrupt, the depth can be greater
++       * than zero, because of the preempted start of a previous
++       * trace. In an even more unlikely case, depth could be 2
++       * if a softirq interrupted the start of graph tracing,
++       * followed by an interrupt preempting a start of graph
++       * tracing in the softirq, and depth can even be 3
++       * if an NMI came in at the start of an interrupt function
++       * that preempted a softirq start of a function that
++       * preempted normal context!!!! Luckily, it can't be
++       * greater than 3, so the next two bits are a mask
++       * of what the depth is when we set TRACE_GRAPH_BIT
++       */
++
++      TRACE_GRAPH_DEPTH_START_BIT,
++      TRACE_GRAPH_DEPTH_END_BIT,
+ };
+ 
+ #define trace_recursion_set(bit)      do { (current)->trace_recursion |= 
(1<<(bit)); } while (0)
+ #define trace_recursion_clear(bit)    do { (current)->trace_recursion &= 
~(1<<(bit)); } while (0)
+ #define trace_recursion_test(bit)     ((current)->trace_recursion & 
(1<<(bit)))
+ 
++#define trace_recursion_depth() \
++      (((current)->trace_recursion >> TRACE_GRAPH_DEPTH_START_BIT) & 3)
++#define trace_recursion_set_depth(depth) \
++      do {                                                            \
++              current->trace_recursion &=                             \
++                      ~(3 << TRACE_GRAPH_DEPTH_START_BIT);            \
++              current->trace_recursion |=                             \
++                      ((depth) & 3) << TRACE_GRAPH_DEPTH_START_BIT;   \
++      } while (0)
++
+ #define TRACE_CONTEXT_BITS    4
+ 
+ #define TRACE_FTRACE_START    TRACE_FTRACE_BIT
+@@ -843,8 +875,9 @@ extern void __trace_graph_return(struct trace_array *tr,
+ extern struct ftrace_hash *ftrace_graph_hash;
+ extern struct ftrace_hash *ftrace_graph_notrace_hash;
+ 
+-static inline int ftrace_graph_addr(unsigned long addr)
++static inline int ftrace_graph_addr(struct ftrace_graph_ent *trace)
+ {
++      unsigned long addr = trace->func;
+       int ret = 0;
+ 
+       preempt_disable_notrace();
+@@ -855,6 +888,14 @@ static inline int ftrace_graph_addr(unsigned long addr)
+       }
+ 
+       if (ftrace_lookup_ip(ftrace_graph_hash, addr)) {
++
++              /*
++               * This needs to be cleared on the return functions
++               * when the depth is zero.
++               */
++              trace_recursion_set(TRACE_GRAPH_BIT);
++              trace_recursion_set_depth(trace->depth);
++
+               /*
+                * If no irqs are to be traced, but a set_graph_function
+                * is set, and called by an interrupt handler, we still
+@@ -872,6 +913,13 @@ out:
+       return ret;
+ }
+ 
++static inline void ftrace_graph_addr_finish(struct ftrace_graph_ret *trace)
++{
++      if (trace_recursion_test(TRACE_GRAPH_BIT) &&
++          trace->depth == trace_recursion_depth())
++              trace_recursion_clear(TRACE_GRAPH_BIT);
++}
++
+ static inline int ftrace_graph_notrace_addr(unsigned long addr)
+ {
+       int ret = 0;
+@@ -885,7 +933,7 @@ static inline int ftrace_graph_notrace_addr(unsigned long 
addr)
+       return ret;
+ }
+ #else
+-static inline int ftrace_graph_addr(unsigned long addr)
++static inline int ftrace_graph_addr(struct ftrace_graph_ent *trace)
+ {
+       return 1;
+ }
+@@ -894,6 +942,8 @@ static inline int ftrace_graph_notrace_addr(unsigned long 
addr)
+ {
+       return 0;
+ }
++static inline void ftrace_graph_addr_finish(struct ftrace_graph_ret *trace)
++{ }
+ #endif /* CONFIG_DYNAMIC_FTRACE */
+ 
+ extern unsigned int fgraph_max_depth;
+@@ -901,7 +951,8 @@ extern unsigned int fgraph_max_depth;
+ static inline bool ftrace_graph_ignore_func(struct ftrace_graph_ent *trace)
+ {
+       /* trace it when it is-nested-in or is a function enabled. */
+-      return !(trace->depth || ftrace_graph_addr(trace->func)) ||
++      return !(trace_recursion_test(TRACE_GRAPH_BIT) ||
++               ftrace_graph_addr(trace)) ||
+               (trace->depth < 0) ||
+               (fgraph_max_depth && trace->depth >= fgraph_max_depth);
+ }
+diff --git a/kernel/trace/trace_functions_graph.c 
b/kernel/trace/trace_functions_graph.c
+index 2561460d7baf..086af4f5c3e8 100644
+--- a/kernel/trace/trace_functions_graph.c
++++ b/kernel/trace/trace_functions_graph.c
+@@ -509,6 +509,8 @@ void trace_graph_return(struct ftrace_graph_ret *trace)
+       int cpu;
+       int pc;
+ 
++      ftrace_graph_addr_finish(trace);
++
+       local_irq_save(flags);
+       cpu = raw_smp_processor_id();
+       data = per_cpu_ptr(tr->trace_buffer.data, cpu);
+@@ -532,6 +534,8 @@ void set_graph_array(struct trace_array *tr)
+ 
+ static void trace_graph_thresh_return(struct ftrace_graph_ret *trace)
+ {
++      ftrace_graph_addr_finish(trace);
++
+       if (tracing_thresh &&
+           (trace->rettime - trace->calltime < tracing_thresh))
+               return;
+diff --git a/kernel/trace/trace_irqsoff.c b/kernel/trace/trace_irqsoff.c
+index b7357f9f82a3..98ea6d28df15 100644
+--- a/kernel/trace/trace_irqsoff.c
++++ b/kernel/trace/trace_irqsoff.c
+@@ -208,6 +208,8 @@ static void irqsoff_graph_return(struct ftrace_graph_ret 
*trace)
+       unsigned long flags;
+       int pc;
+ 
++      ftrace_graph_addr_finish(trace);
++
+       if (!func_prolog_dec(tr, &data, &flags))
+               return;
+ 
+diff --git a/kernel/trace/trace_sched_wakeup.c 
b/kernel/trace/trace_sched_wakeup.c
+index a86b303e6c67..7d04b9890755 100644
+--- a/kernel/trace/trace_sched_wakeup.c
++++ b/kernel/trace/trace_sched_wakeup.c
+@@ -270,6 +270,8 @@ static void wakeup_graph_return(struct ftrace_graph_ret 
*trace)
+       unsigned long flags;
+       int pc;
+ 
++      ftrace_graph_addr_finish(trace);
++
+       if (!func_prolog_preempt_disable(tr, &data, &pc))
+               return;
+ 
+diff --git a/lib/test_hexdump.c b/lib/test_hexdump.c
+index 626f580b4ff7..5144899d3c6b 100644
+--- a/lib/test_hexdump.c
++++ b/lib/test_hexdump.c
+@@ -99,7 +99,7 @@ static void __init test_hexdump_prepare_test(size_t len, int 
rowsize,
+               const char *q = *result++;
+               size_t amount = strlen(q);
+ 
+-              strncpy(p, q, amount);
++              memcpy(p, q, amount);
+               p += amount;
+ 
+               *p++ = ' ';
+diff --git a/mm/hugetlb.c b/mm/hugetlb.c
+index 1931a3d9b282..309fb8c969af 100644
+--- a/mm/hugetlb.c
++++ b/mm/hugetlb.c
+@@ -4080,7 +4080,7 @@ int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm,
+ 
+               /* fallback to copy_from_user outside mmap_sem */
+               if (unlikely(ret)) {
+-                      ret = -EFAULT;
++                      ret = -ENOENT;
+                       *pagep = page;
+                       /* don't free the page */
+                       goto out;
+diff --git a/mm/shmem.c b/mm/shmem.c
+index 0b02b539072e..b6cf0e8e685b 100644
+--- a/mm/shmem.c
++++ b/mm/shmem.c
+@@ -2264,6 +2264,7 @@ static int shmem_mfill_atomic_pte(struct mm_struct 
*dst_mm,
+       struct page *page;
+       pte_t _dst_pte, *dst_pte;
+       int ret;
++      pgoff_t offset, max_off;
+ 
+       ret = -ENOMEM;
+       if (!shmem_inode_acct_block(inode, 1))
+@@ -2286,7 +2287,7 @@ static int shmem_mfill_atomic_pte(struct mm_struct 
*dst_mm,
+                               *pagep = page;
+                               shmem_inode_unacct_blocks(inode, 1);
+                               /* don't free the page */
+-                              return -EFAULT;
++                              return -ENOENT;
+                       }
+               } else {                /* mfill_zeropage_atomic */
+                       clear_highpage(page);
+@@ -2301,6 +2302,12 @@ static int shmem_mfill_atomic_pte(struct mm_struct 
*dst_mm,
+       __SetPageSwapBacked(page);
+       __SetPageUptodate(page);
+ 
++      ret = -EFAULT;
++      offset = linear_page_index(dst_vma, dst_addr);
++      max_off = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
++      if (unlikely(offset >= max_off))
++              goto out_release;
++
+       ret = mem_cgroup_try_charge_delay(page, dst_mm, gfp, &memcg, false);
+       if (ret)
+               goto out_release;
+@@ -2318,9 +2325,25 @@ static int shmem_mfill_atomic_pte(struct mm_struct 
*dst_mm,
+       _dst_pte = mk_pte(page, dst_vma->vm_page_prot);
+       if (dst_vma->vm_flags & VM_WRITE)
+               _dst_pte = pte_mkwrite(pte_mkdirty(_dst_pte));
++      else {
++              /*
++               * We don't set the pte dirty if the vma has no
++               * VM_WRITE permission, so mark the page dirty or it
++               * could be freed from under us. We could do it
++               * unconditionally before unlock_page(), but doing it
++               * only if VM_WRITE is not set is faster.
++               */
++              set_page_dirty(page);
++      }
+ 
+-      ret = -EEXIST;
+       dst_pte = pte_offset_map_lock(dst_mm, dst_pmd, dst_addr, &ptl);
++
++      ret = -EFAULT;
++      max_off = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
++      if (unlikely(offset >= max_off))
++              goto out_release_uncharge_unlock;
++
++      ret = -EEXIST;
+       if (!pte_none(*dst_pte))
+               goto out_release_uncharge_unlock;
+ 
+@@ -2338,13 +2361,15 @@ static int shmem_mfill_atomic_pte(struct mm_struct 
*dst_mm,
+ 
+       /* No need to invalidate - it was non-present before */
+       update_mmu_cache(dst_vma, dst_addr, dst_pte);
+-      unlock_page(page);
+       pte_unmap_unlock(dst_pte, ptl);
++      unlock_page(page);
+       ret = 0;
+ out:
+       return ret;
+ out_release_uncharge_unlock:
+       pte_unmap_unlock(dst_pte, ptl);
++      ClearPageDirty(page);
++      delete_from_page_cache(page);
+ out_release_uncharge:
+       mem_cgroup_cancel_charge(page, memcg, false);
+ out_release:
+diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c
+index f0af11b1cdf3..458acda96f20 100644
+--- a/mm/userfaultfd.c
++++ b/mm/userfaultfd.c
+@@ -33,6 +33,8 @@ static int mcopy_atomic_pte(struct mm_struct *dst_mm,
+       void *page_kaddr;
+       int ret;
+       struct page *page;
++      pgoff_t offset, max_off;
++      struct inode *inode;
+ 
+       if (!*pagep) {
+               ret = -ENOMEM;
+@@ -48,7 +50,7 @@ static int mcopy_atomic_pte(struct mm_struct *dst_mm,
+ 
+               /* fallback to copy_from_user outside mmap_sem */
+               if (unlikely(ret)) {
+-                      ret = -EFAULT;
++                      ret = -ENOENT;
+                       *pagep = page;
+                       /* don't free the page */
+                       goto out;
+@@ -73,8 +75,17 @@ static int mcopy_atomic_pte(struct mm_struct *dst_mm,
+       if (dst_vma->vm_flags & VM_WRITE)
+               _dst_pte = pte_mkwrite(pte_mkdirty(_dst_pte));
+ 
+-      ret = -EEXIST;
+       dst_pte = pte_offset_map_lock(dst_mm, dst_pmd, dst_addr, &ptl);
++      if (dst_vma->vm_file) {
++              /* the shmem MAP_PRIVATE case requires checking the i_size */
++              inode = dst_vma->vm_file->f_inode;
++              offset = linear_page_index(dst_vma, dst_addr);
++              max_off = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
++              ret = -EFAULT;
++              if (unlikely(offset >= max_off))
++                      goto out_release_uncharge_unlock;
++      }
++      ret = -EEXIST;
+       if (!pte_none(*dst_pte))
+               goto out_release_uncharge_unlock;
+ 
+@@ -108,11 +119,22 @@ static int mfill_zeropage_pte(struct mm_struct *dst_mm,
+       pte_t _dst_pte, *dst_pte;
+       spinlock_t *ptl;
+       int ret;
++      pgoff_t offset, max_off;
++      struct inode *inode;
+ 
+       _dst_pte = pte_mkspecial(pfn_pte(my_zero_pfn(dst_addr),
+                                        dst_vma->vm_page_prot));
+-      ret = -EEXIST;
+       dst_pte = pte_offset_map_lock(dst_mm, dst_pmd, dst_addr, &ptl);
++      if (dst_vma->vm_file) {
++              /* the shmem MAP_PRIVATE case requires checking the i_size */
++              inode = dst_vma->vm_file->f_inode;
++              offset = linear_page_index(dst_vma, dst_addr);
++              max_off = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
++              ret = -EFAULT;
++              if (unlikely(offset >= max_off))
++                      goto out_unlock;
++      }
++      ret = -EEXIST;
+       if (!pte_none(*dst_pte))
+               goto out_unlock;
+       set_pte_at(dst_mm, dst_addr, dst_pte, _dst_pte);
+@@ -275,7 +297,7 @@ retry:
+ 
+               cond_resched();
+ 
+-              if (unlikely(err == -EFAULT)) {
++              if (unlikely(err == -ENOENT)) {
+                       up_read(&dst_mm->mmap_sem);
+                       BUG_ON(!page);
+ 
+@@ -381,7 +403,17 @@ static __always_inline ssize_t mfill_atomic_pte(struct 
mm_struct *dst_mm,
+ {
+       ssize_t err;
+ 
+-      if (vma_is_anonymous(dst_vma)) {
++      /*
++       * The normal page fault path for a shmem will invoke the
++       * fault, fill the hole in the file and COW it right away. The
++       * result generates plain anonymous memory. So when we are
++       * asked to fill an hole in a MAP_PRIVATE shmem mapping, we'll
++       * generate anonymous memory directly without actually filling
++       * the hole. For the MAP_PRIVATE case the robustness check
++       * only happens in the pagetable (to verify it's still none)
++       * and not in the radix tree.
++       */
++      if (!(dst_vma->vm_flags & VM_SHARED)) {
+               if (!zeropage)
+                       err = mcopy_atomic_pte(dst_mm, dst_pmd, dst_vma,
+                                              dst_addr, src_addr, page);
+@@ -486,7 +518,8 @@ retry:
+        * dst_vma.
+        */
+       err = -ENOMEM;
+-      if (vma_is_anonymous(dst_vma) && unlikely(anon_vma_prepare(dst_vma)))
++      if (!(dst_vma->vm_flags & VM_SHARED) &&
++          unlikely(anon_vma_prepare(dst_vma)))
+               goto out_unlock;
+ 
+       while (src_addr < src_start + len) {
+@@ -527,7 +560,7 @@ retry:
+                                      src_addr, &page, zeropage);
+               cond_resched();
+ 
+-              if (unlikely(err == -EFAULT)) {
++              if (unlikely(err == -ENOENT)) {
+                       void *page_kaddr;
+ 
+                       up_read(&dst_mm->mmap_sem);
+diff --git a/net/tipc/topsrv.c b/net/tipc/topsrv.c
+index 2627b5d812e9..b84c0059214f 100644
+--- a/net/tipc/topsrv.c
++++ b/net/tipc/topsrv.c
+@@ -657,7 +657,7 @@ int tipc_topsrv_start(struct net *net)
+       srv->max_rcvbuf_size = sizeof(struct tipc_subscr);
+       INIT_WORK(&srv->awork, tipc_topsrv_accept);
+ 
+-      strncpy(srv->name, name, strlen(name) + 1);
++      strscpy(srv->name, name, sizeof(srv->name));
+       tn->topsrv = srv;
+       atomic_set(&tn->subscription_count, 0);
+ 
+diff --git a/scripts/unifdef.c b/scripts/unifdef.c
+index 7493c0ee51cc..db00e3e30a59 100644
+--- a/scripts/unifdef.c
++++ b/scripts/unifdef.c
+@@ -395,7 +395,7 @@ usage(void)
+  * When we have processed a group that starts off with a known-false
+  * #if/#elif sequence (which has therefore been deleted) followed by a
+  * #elif that we don't understand and therefore must keep, we edit the
+- * latter into a #if to keep the nesting correct. We use strncpy() to
++ * latter into a #if to keep the nesting correct. We use memcpy() to
+  * overwrite the 4 byte token "elif" with "if  " without a '\0' byte.
+  *
+  * When we find a true #elif in a group, the following block will
+@@ -450,7 +450,7 @@ static void Idrop (void) { Fdrop();  ignoreon(); }
+ static void Itrue (void) { Ftrue();  ignoreon(); }
+ static void Ifalse(void) { Ffalse(); ignoreon(); }
+ /* modify this line */
+-static void Mpass (void) { strncpy(keyword, "if  ", 4); Pelif(); }
++static void Mpass (void) { memcpy(keyword, "if  ", 4); Pelif(); }
+ static void Mtrue (void) { keywordedit("else");  state(IS_TRUE_MIDDLE); }
+ static void Melif (void) { keywordedit("endif"); state(IS_FALSE_TRAILER); }
+ static void Melse (void) { keywordedit("endif"); state(IS_FALSE_ELSE); }
+diff --git a/security/selinux/nlmsgtab.c b/security/selinux/nlmsgtab.c
+index 74b951f55608..9cec81209617 100644
+--- a/security/selinux/nlmsgtab.c
++++ b/security/selinux/nlmsgtab.c
+@@ -80,6 +80,9 @@ static const struct nlmsg_perm nlmsg_route_perms[] =
+       { RTM_NEWSTATS,         NETLINK_ROUTE_SOCKET__NLMSG_READ },
+       { RTM_GETSTATS,         NETLINK_ROUTE_SOCKET__NLMSG_READ  },
+       { RTM_NEWCACHEREPORT,   NETLINK_ROUTE_SOCKET__NLMSG_READ },
++      { RTM_NEWCHAIN,         NETLINK_ROUTE_SOCKET__NLMSG_WRITE },
++      { RTM_DELCHAIN,         NETLINK_ROUTE_SOCKET__NLMSG_WRITE },
++      { RTM_GETCHAIN,         NETLINK_ROUTE_SOCKET__NLMSG_READ  },
+ };
+ 
+ static const struct nlmsg_perm nlmsg_tcpdiag_perms[] =
+@@ -158,7 +161,11 @@ int selinux_nlmsg_lookup(u16 sclass, u16 nlmsg_type, u32 
*perm)
+ 
+       switch (sclass) {
+       case SECCLASS_NETLINK_ROUTE_SOCKET:
+-              /* RTM_MAX always point to RTM_SETxxxx, ie RTM_NEWxxx + 3 */
++              /* RTM_MAX always points to RTM_SETxxxx, ie RTM_NEWxxx + 3.
++               * If the BUILD_BUG_ON() below fails you must update the
++               * structures at the top of this file with the new mappings
++               * before updating the BUILD_BUG_ON() macro!
++               */
+               BUILD_BUG_ON(RTM_MAX != (RTM_NEWCHAIN + 3));
+               err = nlmsg_perm(nlmsg_type, perm, nlmsg_route_perms,
+                                sizeof(nlmsg_route_perms));
+@@ -170,6 +177,10 @@ int selinux_nlmsg_lookup(u16 sclass, u16 nlmsg_type, u32 
*perm)
+               break;
+ 
+       case SECCLASS_NETLINK_XFRM_SOCKET:
++              /* If the BUILD_BUG_ON() below fails you must update the
++               * structures at the top of this file with the new mappings
++               * before updating the BUILD_BUG_ON() macro!
++               */
+               BUILD_BUG_ON(XFRM_MSG_MAX != XFRM_MSG_MAPPING);
+               err = nlmsg_perm(nlmsg_type, perm, nlmsg_xfrm_perms,
+                                sizeof(nlmsg_xfrm_perms));

Reply via email to