From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 6256B138334 for ; Sat, 8 Dec 2018 13:17:49 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 38AA3E0B01; Sat, 8 Dec 2018 13:17:48 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id EB74FE0B01 for ; Sat, 8 Dec 2018 13:17:47 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 6C519335CCD for ; Sat, 8 Dec 2018 13:17:46 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 479324D7 for ; Sat, 8 Dec 2018 13:17:44 +0000 (UTC) From: "Mike Pagano" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Mike Pagano" Message-ID: <1544275029.6066aba76c5f1240fdb5cd93b959030a4f26c147.mpagano@gentoo> Subject: [gentoo-commits] proj/linux-patches:4.19 commit in: / X-VCS-Repository: proj/linux-patches X-VCS-Files: 0000_README 1007_linux-4.19.8.patch X-VCS-Directories: / X-VCS-Committer: mpagano X-VCS-Committer-Name: Mike Pagano X-VCS-Revision: 6066aba76c5f1240fdb5cd93b959030a4f26c147 X-VCS-Branch: 4.19 Date: Sat, 8 Dec 2018 13:17:44 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: a6735ab7-6d6d-4784-bded-7c1c5e7b331e X-Archives-Hash: 3ad31d95a5f3de1396c9386299ad07e3 commit: 6066aba76c5f1240fdb5cd93b959030a4f26c147 Author: Mike Pagano gentoo org> AuthorDate: Sat Dec 8 13:17:09 2018 +0000 Commit: Mike Pagano gentoo 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 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));