From: Sasha Levin Date: Thu, 4 Jun 2020 19:29:40 +0000 (-0400) Subject: Fixes for 4.19 X-Git-Tag: v5.7.1~24 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=612be29affb1f9fa00feaceeb46bfa90dcffa021;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 4.19 Signed-off-by: Sasha Levin --- diff --git a/queue-4.19/drm-i915-fix-port-checks-for-mst-support-on-gen-11.patch b/queue-4.19/drm-i915-fix-port-checks-for-mst-support-on-gen-11.patch new file mode 100644 index 00000000000..501cc057af7 --- /dev/null +++ b/queue-4.19/drm-i915-fix-port-checks-for-mst-support-on-gen-11.patch @@ -0,0 +1,93 @@ +From b824a67f3c2c2b6ee4604cdee46a869e3e5f5c69 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 10 Oct 2019 18:09:03 -0700 +Subject: drm/i915: fix port checks for MST support on gen >= 11 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Lucas De Marchi + +[ Upstream commit 10d987fd1b7baceaafa78d805e71427ab735b4e4 ] + +Both Ice Lake and Elkhart Lake (gen 11) support MST on all external +connections except DDI A. Tiger Lake (gen 12) supports on all external +connections. + +Move the check to happen inside intel_dp_mst_encoder_init() and add +specific platform checks. + +v2: Replace != with == checks for ports on gen < 11 (Ville) + +Signed-off-by: Lucas De Marchi +Reviewed-by: Ville Syrjälä +Link: https://patchwork.freedesktop.org/patch/msgid/20191015164029.18431-3-lucas.demarchi@intel.com +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/i915/intel_dp.c | 7 ++----- + drivers/gpu/drm/i915/intel_dp_mst.c | 22 ++++++++++++++++------ + 2 files changed, 18 insertions(+), 11 deletions(-) + +diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c +index 20cd4c8acecc..77a2f7fc2b37 100644 +--- a/drivers/gpu/drm/i915/intel_dp.c ++++ b/drivers/gpu/drm/i915/intel_dp.c +@@ -6288,11 +6288,8 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port, + intel_connector->get_hw_state = intel_connector_get_hw_state; + + /* init MST on ports that can support it */ +- if (HAS_DP_MST(dev_priv) && !intel_dp_is_edp(intel_dp) && +- (port == PORT_B || port == PORT_C || +- port == PORT_D || port == PORT_F)) +- intel_dp_mst_encoder_init(intel_dig_port, +- intel_connector->base.base.id); ++ intel_dp_mst_encoder_init(intel_dig_port, ++ intel_connector->base.base.id); + + if (!intel_edp_init_connector(intel_dp, intel_connector)) { + intel_dp_aux_fini(intel_dp); +diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c +index 58ba14966d4f..c7d52c66ff29 100644 +--- a/drivers/gpu/drm/i915/intel_dp_mst.c ++++ b/drivers/gpu/drm/i915/intel_dp_mst.c +@@ -588,21 +588,31 @@ intel_dp_create_fake_mst_encoders(struct intel_digital_port *intel_dig_port) + int + intel_dp_mst_encoder_init(struct intel_digital_port *intel_dig_port, int conn_base_id) + { ++ struct drm_i915_private *i915 = to_i915(intel_dig_port->base.base.dev); + struct intel_dp *intel_dp = &intel_dig_port->dp; +- struct drm_device *dev = intel_dig_port->base.base.dev; ++ enum port port = intel_dig_port->base.port; + int ret; + +- intel_dp->can_mst = true; ++ if (!HAS_DP_MST(i915) || intel_dp_is_edp(intel_dp)) ++ return 0; ++ ++ if (INTEL_GEN(i915) < 12 && port == PORT_A) ++ return 0; ++ ++ if (INTEL_GEN(i915) < 11 && port == PORT_E) ++ return 0; ++ + intel_dp->mst_mgr.cbs = &mst_cbs; + + /* create encoders */ + intel_dp_create_fake_mst_encoders(intel_dig_port); +- ret = drm_dp_mst_topology_mgr_init(&intel_dp->mst_mgr, dev, ++ ret = drm_dp_mst_topology_mgr_init(&intel_dp->mst_mgr, &i915->drm, + &intel_dp->aux, 16, 3, conn_base_id); +- if (ret) { +- intel_dp->can_mst = false; ++ if (ret) + return ret; +- } ++ ++ intel_dp->can_mst = true; ++ + return 0; + } + +-- +2.25.1 + diff --git a/queue-4.19/powerpc-powernv-avoid-re-registration-of-imc-debugfs.patch b/queue-4.19/powerpc-powernv-avoid-re-registration-of-imc-debugfs.patch new file mode 100644 index 00000000000..276b7dfc212 --- /dev/null +++ b/queue-4.19/powerpc-powernv-avoid-re-registration-of-imc-debugfs.patch @@ -0,0 +1,163 @@ +From 820a6450e44f321f114f30ef70c38c188fc0649e Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 27 Nov 2019 12:50:35 +0530 +Subject: powerpc/powernv: Avoid re-registration of imc debugfs directory + +From: Anju T Sudhakar + +[ Upstream commit 48e626ac85b43cc589dd1b3b8004f7f85f03544d ] + +export_imc_mode_and_cmd() function which creates the debugfs interface +for imc-mode and imc-command, is invoked when each nest pmu units is +registered. + +When the first nest pmu unit is registered, export_imc_mode_and_cmd() +creates 'imc' directory under `/debug/powerpc/`. In the subsequent +invocations debugfs_create_dir() function returns, since the directory +already exists. + +The recent commit (debugfs: make error message a bit +more verbose), throws a warning if we try to invoke +`debugfs_create_dir()` with an already existing directory name. + +Address this warning by making the debugfs directory registration in +the opal_imc_counters_probe() function, i.e invoke +export_imc_mode_and_cmd() function from the probe function. + +Signed-off-by: Anju T Sudhakar +Tested-by: Nageswara R Sastry +Signed-off-by: Michael Ellerman +Link: https://lore.kernel.org/r/20191127072035.4283-1-anju@linux.vnet.ibm.com +Signed-off-by: Sasha Levin +--- + arch/powerpc/platforms/powernv/opal-imc.c | 39 ++++++++++------------- + 1 file changed, 16 insertions(+), 23 deletions(-) + +diff --git a/arch/powerpc/platforms/powernv/opal-imc.c b/arch/powerpc/platforms/powernv/opal-imc.c +index 649fb268f446..5399682797d0 100644 +--- a/arch/powerpc/platforms/powernv/opal-imc.c ++++ b/arch/powerpc/platforms/powernv/opal-imc.c +@@ -63,10 +63,6 @@ static void export_imc_mode_and_cmd(struct device_node *node, + + imc_debugfs_parent = debugfs_create_dir("imc", powerpc_debugfs_root); + +- /* +- * Return here, either because 'imc' directory already exists, +- * Or failed to create a new one. +- */ + if (!imc_debugfs_parent) + return; + +@@ -139,7 +135,6 @@ static int imc_get_mem_addr_nest(struct device_node *node, + } + + pmu_ptr->imc_counter_mmaped = true; +- export_imc_mode_and_cmd(node, pmu_ptr); + kfree(base_addr_arr); + kfree(chipid_arr); + return 0; +@@ -155,7 +150,7 @@ static int imc_get_mem_addr_nest(struct device_node *node, + * and domain as the inputs. + * Allocates memory for the struct imc_pmu, sets up its domain, size and offsets + */ +-static int imc_pmu_create(struct device_node *parent, int pmu_index, int domain) ++static struct imc_pmu *imc_pmu_create(struct device_node *parent, int pmu_index, int domain) + { + int ret = 0; + struct imc_pmu *pmu_ptr; +@@ -163,27 +158,23 @@ static int imc_pmu_create(struct device_node *parent, int pmu_index, int domain) + + /* Return for unknown domain */ + if (domain < 0) +- return -EINVAL; ++ return NULL; + + /* memory for pmu */ + pmu_ptr = kzalloc(sizeof(*pmu_ptr), GFP_KERNEL); + if (!pmu_ptr) +- return -ENOMEM; ++ return NULL; + + /* Set the domain */ + pmu_ptr->domain = domain; + + ret = of_property_read_u32(parent, "size", &pmu_ptr->counter_mem_size); +- if (ret) { +- ret = -EINVAL; ++ if (ret) + goto free_pmu; +- } + + if (!of_property_read_u32(parent, "offset", &offset)) { +- if (imc_get_mem_addr_nest(parent, pmu_ptr, offset)) { +- ret = -EINVAL; ++ if (imc_get_mem_addr_nest(parent, pmu_ptr, offset)) + goto free_pmu; +- } + } + + /* Function to register IMC pmu */ +@@ -194,14 +185,14 @@ static int imc_pmu_create(struct device_node *parent, int pmu_index, int domain) + if (pmu_ptr->domain == IMC_DOMAIN_NEST) + kfree(pmu_ptr->mem_info); + kfree(pmu_ptr); +- return ret; ++ return NULL; + } + +- return 0; ++ return pmu_ptr; + + free_pmu: + kfree(pmu_ptr); +- return ret; ++ return NULL; + } + + static void disable_nest_pmu_counters(void) +@@ -258,6 +249,7 @@ int get_max_nest_dev(void) + static int opal_imc_counters_probe(struct platform_device *pdev) + { + struct device_node *imc_dev = pdev->dev.of_node; ++ struct imc_pmu *pmu; + int pmu_count = 0, domain; + bool core_imc_reg = false, thread_imc_reg = false; + u32 type; +@@ -273,6 +265,7 @@ static int opal_imc_counters_probe(struct platform_device *pdev) + } + + for_each_compatible_node(imc_dev, NULL, IMC_DTB_UNIT_COMPAT) { ++ pmu = NULL; + if (of_property_read_u32(imc_dev, "type", &type)) { + pr_warn("IMC Device without type property\n"); + continue; +@@ -294,9 +287,13 @@ static int opal_imc_counters_probe(struct platform_device *pdev) + break; + } + +- if (!imc_pmu_create(imc_dev, pmu_count, domain)) { +- if (domain == IMC_DOMAIN_NEST) ++ pmu = imc_pmu_create(imc_dev, pmu_count, domain); ++ if (pmu != NULL) { ++ if (domain == IMC_DOMAIN_NEST) { ++ if (!imc_debugfs_parent) ++ export_imc_mode_and_cmd(imc_dev, pmu); + pmu_count++; ++ } + if (domain == IMC_DOMAIN_CORE) + core_imc_reg = true; + if (domain == IMC_DOMAIN_THREAD) +@@ -304,10 +301,6 @@ static int opal_imc_counters_probe(struct platform_device *pdev) + } + } + +- /* If none of the nest units are registered, remove debugfs interface */ +- if (pmu_count == 0) +- debugfs_remove_recursive(imc_debugfs_parent); +- + /* If core imc is not registered, unregister thread-imc */ + if (!core_imc_reg && thread_imc_reg) + unregister_thread_imc(); +-- +2.25.1 + diff --git a/queue-4.19/s390-ftrace-save-traced-function-caller.patch b/queue-4.19/s390-ftrace-save-traced-function-caller.patch new file mode 100644 index 00000000000..88b59e8972f --- /dev/null +++ b/queue-4.19/s390-ftrace-save-traced-function-caller.patch @@ -0,0 +1,55 @@ +From 2b23f0c6a506942856a363a0e4f98a8285bc3267 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 10 Dec 2019 13:50:23 +0100 +Subject: s390/ftrace: save traced function caller + +From: Vasily Gorbik + +[ Upstream commit b4adfe55915d8363e244e42386d69567db1719b9 ] + +A typical backtrace acquired from ftraced function currently looks like +the following (e.g. for "path_openat"): + +arch_stack_walk+0x15c/0x2d8 +stack_trace_save+0x50/0x68 +stack_trace_call+0x15a/0x3b8 +ftrace_graph_caller+0x0/0x1c +0x3e0007e3c98 <- ftraced function caller (should be do_filp_open+0x7c/0xe8) +do_open_execat+0x70/0x1b8 +__do_execve_file.isra.0+0x7d8/0x860 +__s390x_sys_execve+0x56/0x68 +system_call+0xdc/0x2d8 + +Note random "0x3e0007e3c98" stack value as ftraced function caller. This +value causes either imprecise unwinder result or unwinding failure. +That "0x3e0007e3c98" comes from r14 of ftraced function stack frame, which +it haven't had a chance to initialize since the very first instruction +calls ftrace code ("ftrace_caller"). (ftraced function might never +save r14 as well). Nevertheless according to s390 ABI any function +is called with stack frame allocated for it and r14 contains return +address. "ftrace_caller" itself is called with "brasl %r0,ftrace_caller". +So, to fix this issue simply always save traced function caller onto +ftraced function stack frame. + +Reported-by: Sven Schnelle +Signed-off-by: Vasily Gorbik +Signed-off-by: Sasha Levin +--- + arch/s390/kernel/mcount.S | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/arch/s390/kernel/mcount.S b/arch/s390/kernel/mcount.S +index 83afd5b78e16..020f9aac7dc0 100644 +--- a/arch/s390/kernel/mcount.S ++++ b/arch/s390/kernel/mcount.S +@@ -40,6 +40,7 @@ EXPORT_SYMBOL(_mcount) + ENTRY(ftrace_caller) + .globl ftrace_regs_caller + .set ftrace_regs_caller,ftrace_caller ++ stg %r14,(__SF_GPRS+8*8)(%r15) # save traced function caller + lgr %r1,%r15 + #if !(defined(CC_USING_HOTPATCH) || defined(CC_USING_NOP_MCOUNT)) + aghi %r0,MCOUNT_RETURN_FIXUP +-- +2.25.1 + diff --git a/queue-4.19/scsi-hisi_sas-check-sas_port-before-using-it.patch b/queue-4.19/scsi-hisi_sas-check-sas_port-before-using-it.patch new file mode 100644 index 00000000000..e7d28fc5610 --- /dev/null +++ b/queue-4.19/scsi-hisi_sas-check-sas_port-before-using-it.patch @@ -0,0 +1,42 @@ +From 11738c6dc38de683ecbcd5adf07fa480ba557f27 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 12 Nov 2019 17:30:56 +0800 +Subject: scsi: hisi_sas: Check sas_port before using it + +From: Xiang Chen + +[ Upstream commit 8c39673d5474b95374df2104dc1f65205c5278b8 ] + +Need to check the structure sas_port before using it. + +Link: https://lore.kernel.org/r/1573551059-107873-2-git-send-email-john.garry@huawei.com +Signed-off-by: Xiang Chen +Signed-off-by: John Garry +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/scsi/hisi_sas/hisi_sas_main.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c +index 33191673249c..de4f41bce8e9 100644 +--- a/drivers/scsi/hisi_sas/hisi_sas_main.c ++++ b/drivers/scsi/hisi_sas/hisi_sas_main.c +@@ -789,12 +789,13 @@ static void hisi_sas_port_notify_formed(struct asd_sas_phy *sas_phy) + struct hisi_hba *hisi_hba = sas_ha->lldd_ha; + struct hisi_sas_phy *phy = sas_phy->lldd_phy; + struct asd_sas_port *sas_port = sas_phy->port; +- struct hisi_sas_port *port = to_hisi_sas_port(sas_port); ++ struct hisi_sas_port *port; + unsigned long flags; + + if (!sas_port) + return; + ++ port = to_hisi_sas_port(sas_port); + spin_lock_irqsave(&hisi_hba->lock, flags); + port->port_attached = 1; + port->id = phy->port_id; +-- +2.25.1 + diff --git a/queue-4.19/series b/queue-4.19/series index 28bf8ac4933..a9c69154389 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -1,2 +1,7 @@ revert-cgroup-add-memory-barriers-to-plug-cgroup_rst.patch libnvdimm-fix-endian-conversion-issues.patch +drm-i915-fix-port-checks-for-mst-support-on-gen-11.patch +scsi-hisi_sas-check-sas_port-before-using-it.patch +powerpc-powernv-avoid-re-registration-of-imc-debugfs.patch +spi-dw-use-smp_mb-to-avoid-sending-spi-data-error.patch +s390-ftrace-save-traced-function-caller.patch diff --git a/queue-4.19/spi-dw-use-smp_mb-to-avoid-sending-spi-data-error.patch b/queue-4.19/spi-dw-use-smp_mb-to-avoid-sending-spi-data-error.patch new file mode 100644 index 00000000000..68a1d4d27e8 --- /dev/null +++ b/queue-4.19/spi-dw-use-smp_mb-to-avoid-sending-spi-data-error.patch @@ -0,0 +1,48 @@ +From de927951db4badabad0360deab59c0e11aaf3366 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 3 Jan 2020 10:52:10 +0800 +Subject: spi: dw: use "smp_mb()" to avoid sending spi data error + +From: Xinwei Kong + +[ Upstream commit bfda044533b213985bc62bd7ca96f2b984d21b80 ] + +Because of out-of-order execution about some CPU architecture, +In this debug stage we find Completing spi interrupt enable -> +prodrucing TXEI interrupt -> running "interrupt_transfer" function +will prior to set "dw->rx and dws->rx_end" data, so this patch add +memory barrier to enable dw->rx and dw->rx_end to be visible and +solve to send SPI data error. +eg: +it will fix to this following low possibility error in testing environment +which using SPI control to connect TPM Modules + +kernel: tpm tpm0: Operation Timed out +kernel: tpm tpm0: tpm_relinquish_locality: : error -1 + +Signed-off-by: fengsheng +Signed-off-by: Xinwei Kong +Link: https://lore.kernel.org/r/1578019930-55858-1-git-send-email-kong.kongxinwei@hisilicon.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + drivers/spi/spi-dw.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c +index 5a47e28e38c1..6f0f6b99953d 100644 +--- a/drivers/spi/spi-dw.c ++++ b/drivers/spi/spi-dw.c +@@ -304,6 +304,9 @@ static int dw_spi_transfer_one(struct spi_controller *master, + dws->len = transfer->len; + spin_unlock_irqrestore(&dws->buf_lock, flags); + ++ /* Ensure dw->rx and dw->rx_end are visible */ ++ smp_mb(); ++ + spi_enable_chip(dws, 0); + + /* Handle per transfer options for bpw and speed */ +-- +2.25.1 +