From: Sasha Levin Date: Sat, 5 Sep 2020 16:56:26 +0000 (-0400) Subject: Fixes for 4.19 X-Git-Tag: v4.14.197~44 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b6e0f18b03c33bf4e25d944dac8d96089daf6521;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 4.19 Signed-off-by: Sasha Levin --- diff --git a/queue-4.19/ceph-don-t-allow-setlease-on-cephfs.patch b/queue-4.19/ceph-don-t-allow-setlease-on-cephfs.patch new file mode 100644 index 00000000000..9c1ae2f4f02 --- /dev/null +++ b/queue-4.19/ceph-don-t-allow-setlease-on-cephfs.patch @@ -0,0 +1,39 @@ +From 5f5914405c28d9291dd33dfed6a967deb621a740 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 20 Aug 2020 11:00:26 -0400 +Subject: ceph: don't allow setlease on cephfs + +From: Jeff Layton + +[ Upstream commit 496ceaf12432b3d136dcdec48424312e71359ea7 ] + +Leases don't currently work correctly on kcephfs, as they are not broken +when caps are revoked. They could eventually be implemented similarly to +how we did them in libcephfs, but for now don't allow them. + +[ idryomov: no need for simple_nosetlease() in ceph_dir_fops and + ceph_snapdir_fops ] + +Signed-off-by: Jeff Layton +Reviewed-by: Ilya Dryomov +Signed-off-by: Ilya Dryomov +Signed-off-by: Sasha Levin +--- + fs/ceph/file.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/fs/ceph/file.c b/fs/ceph/file.c +index faca455bd3c69..4ce2752c8b71c 100644 +--- a/fs/ceph/file.c ++++ b/fs/ceph/file.c +@@ -1819,6 +1819,7 @@ const struct file_operations ceph_file_fops = { + .mmap = ceph_mmap, + .fsync = ceph_fsync, + .lock = ceph_lock, ++ .setlease = simple_nosetlease, + .flock = ceph_flock, + .splice_read = generic_file_splice_read, + .splice_write = iter_file_splice_write, +-- +2.25.1 + diff --git a/queue-4.19/cpuidle-fixup-irq-state.patch b/queue-4.19/cpuidle-fixup-irq-state.patch new file mode 100644 index 00000000000..2d8548559bc --- /dev/null +++ b/queue-4.19/cpuidle-fixup-irq-state.patch @@ -0,0 +1,39 @@ +From d4a631c60c83b2af52fd8724a979c35a77bb3858 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 20 Aug 2020 16:47:24 +0200 +Subject: cpuidle: Fixup IRQ state + +From: Peter Zijlstra + +[ Upstream commit 49d9c5936314e44d314c605c39cce0fd947f9c3a ] + +Match the pattern elsewhere in this file. + +Signed-off-by: Peter Zijlstra (Intel) +Reviewed-by: Steven Rostedt (VMware) +Reviewed-by: Thomas Gleixner +Acked-by: Rafael J. Wysocki +Tested-by: Marco Elver +Link: https://lkml.kernel.org/r/20200821085348.251340558@infradead.org +Signed-off-by: Sasha Levin +--- + drivers/cpuidle/cpuidle.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c +index 6df894d65d9e2..2d182dc1b49ed 100644 +--- a/drivers/cpuidle/cpuidle.c ++++ b/drivers/cpuidle/cpuidle.c +@@ -148,7 +148,8 @@ static void enter_s2idle_proper(struct cpuidle_driver *drv, + */ + stop_critical_timings(); + drv->states[index].enter_s2idle(dev, drv, index); +- WARN_ON(!irqs_disabled()); ++ if (WARN_ON_ONCE(!irqs_disabled())) ++ local_irq_disable(); + /* + * timekeeping_resume() that will be called by tick_unfreeze() for the + * first CPU executing it calls functions containing RCU read-side +-- +2.25.1 + diff --git a/queue-4.19/drm-msm-a6xx-fix-gmu-start-on-newer-firmware.patch b/queue-4.19/drm-msm-a6xx-fix-gmu-start-on-newer-firmware.patch new file mode 100644 index 00000000000..2e8c638ccc3 --- /dev/null +++ b/queue-4.19/drm-msm-a6xx-fix-gmu-start-on-newer-firmware.patch @@ -0,0 +1,50 @@ +From 581a3d4d3485ddf5b4a8b372c0c0c5b3978aa71c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 20 Aug 2020 12:36:22 +0300 +Subject: drm/msm/a6xx: fix gmu start on newer firmware + +From: Dmitry Baryshkov + +[ Upstream commit f5749d6181fa7df5ae741788e5d96f593d3a60b6 ] + +New Qualcomm firmware has changed a way it reports back the 'started' +event. Support new register values. + +Signed-off-by: Dmitry Baryshkov +Signed-off-by: Rob Clark +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c +index 9cde79a7335c8..739ca9c2081a6 100644 +--- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c ++++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c +@@ -117,12 +117,22 @@ static int a6xx_gmu_start(struct a6xx_gmu *gmu) + { + int ret; + u32 val; ++ u32 mask, reset_val; ++ ++ val = gmu_read(gmu, REG_A6XX_GMU_CM3_DTCM_START + 0xff8); ++ if (val <= 0x20010004) { ++ mask = 0xffffffff; ++ reset_val = 0xbabeface; ++ } else { ++ mask = 0x1ff; ++ reset_val = 0x100; ++ } + + gmu_write(gmu, REG_A6XX_GMU_CM3_SYSRESET, 1); + gmu_write(gmu, REG_A6XX_GMU_CM3_SYSRESET, 0); + + ret = gmu_poll_timeout(gmu, REG_A6XX_GMU_CM3_FW_INIT_RESULT, val, +- val == 0xbabeface, 100, 10000); ++ (val & mask) == reset_val, 100, 10000); + + if (ret) + dev_err(gmu->dev, "GMU firmware initialization timed out\n"); +-- +2.25.1 + diff --git a/queue-4.19/drm-msm-add-shutdown-support-for-display-platform_dr.patch b/queue-4.19/drm-msm-add-shutdown-support-for-display-platform_dr.patch new file mode 100644 index 00000000000..4f4174439df --- /dev/null +++ b/queue-4.19/drm-msm-add-shutdown-support-for-display-platform_dr.patch @@ -0,0 +1,60 @@ +From fdc0a47e0fd8e4b9d4c0e57d0bf68e69bbdbc011 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 1 Jun 2020 16:33:22 +0530 +Subject: drm/msm: add shutdown support for display platform_driver + +From: Krishna Manikandan + +[ Upstream commit 9d5cbf5fe46e350715389d89d0c350d83289a102 ] + +Define shutdown callback for display drm driver, +so as to disable all the CRTCS when shutdown +notification is received by the driver. + +This change will turn off the timing engine so +that no display transactions are requested +while mmu translations are getting disabled +during reboot sequence. + +Signed-off-by: Krishna Manikandan + +Changes in v2: + - Remove NULL check from msm_pdev_shutdown (Stephen Boyd) + - Change commit text to reflect when this issue + was uncovered (Sai Prakash Ranjan) + +Signed-off-by: Rob Clark +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/msm/msm_drv.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c +index 6f81de85fb860..7f45486b6650b 100644 +--- a/drivers/gpu/drm/msm/msm_drv.c ++++ b/drivers/gpu/drm/msm/msm_drv.c +@@ -1358,6 +1358,13 @@ static int msm_pdev_remove(struct platform_device *pdev) + return 0; + } + ++static void msm_pdev_shutdown(struct platform_device *pdev) ++{ ++ struct drm_device *drm = platform_get_drvdata(pdev); ++ ++ drm_atomic_helper_shutdown(drm); ++} ++ + static const struct of_device_id dt_match[] = { + { .compatible = "qcom,mdp4", .data = (void *)KMS_MDP4 }, + { .compatible = "qcom,mdss", .data = (void *)KMS_MDP5 }, +@@ -1369,6 +1376,7 @@ MODULE_DEVICE_TABLE(of, dt_match); + static struct platform_driver msm_platform_driver = { + .probe = msm_pdev_probe, + .remove = msm_pdev_remove, ++ .shutdown = msm_pdev_shutdown, + .driver = { + .name = "msm", + .of_match_table = dt_match, +-- +2.25.1 + diff --git a/queue-4.19/hwmon-applesmc-check-status-earlier.patch b/queue-4.19/hwmon-applesmc-check-status-earlier.patch new file mode 100644 index 00000000000..5cfffb9faa3 --- /dev/null +++ b/queue-4.19/hwmon-applesmc-check-status-earlier.patch @@ -0,0 +1,123 @@ +From 0e832215939b64039277c0c48cc78a677e865450 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 20 Aug 2020 06:19:32 -0700 +Subject: hwmon: (applesmc) check status earlier. + +From: Tom Rix + +[ Upstream commit cecf7560f00a8419396a2ed0f6e5d245ccb4feac ] + +clang static analysis reports this representative problem + +applesmc.c:758:10: warning: 1st function call argument is an + uninitialized value + left = be16_to_cpu(*(__be16 *)(buffer + 6)) >> 2; + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +buffer is filled by the earlier call + + ret = applesmc_read_key(LIGHT_SENSOR_LEFT_KEY, ... + +This problem is reported because a goto skips the status check. +Other similar problems use data from applesmc_read_key before checking +the status. So move the checks to before the use. + +Signed-off-by: Tom Rix +Reviewed-by: Henrik Rydberg +Link: https://lore.kernel.org/r/20200820131932.10590-1-trix@redhat.com +Signed-off-by: Guenter Roeck +Signed-off-by: Sasha Levin +--- + drivers/hwmon/applesmc.c | 31 ++++++++++++++++--------------- + 1 file changed, 16 insertions(+), 15 deletions(-) + +diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c +index 5c677ba440143..b201129a9beae 100644 +--- a/drivers/hwmon/applesmc.c ++++ b/drivers/hwmon/applesmc.c +@@ -760,15 +760,18 @@ static ssize_t applesmc_light_show(struct device *dev, + } + + ret = applesmc_read_key(LIGHT_SENSOR_LEFT_KEY, buffer, data_length); ++ if (ret) ++ goto out; + /* newer macbooks report a single 10-bit bigendian value */ + if (data_length == 10) { + left = be16_to_cpu(*(__be16 *)(buffer + 6)) >> 2; + goto out; + } + left = buffer[2]; ++ ++ ret = applesmc_read_key(LIGHT_SENSOR_RIGHT_KEY, buffer, data_length); + if (ret) + goto out; +- ret = applesmc_read_key(LIGHT_SENSOR_RIGHT_KEY, buffer, data_length); + right = buffer[2]; + + out: +@@ -817,12 +820,11 @@ static ssize_t applesmc_show_fan_speed(struct device *dev, + to_index(attr)); + + ret = applesmc_read_key(newkey, buffer, 2); +- speed = ((buffer[0] << 8 | buffer[1]) >> 2); +- + if (ret) + return ret; +- else +- return snprintf(sysfsbuf, PAGE_SIZE, "%u\n", speed); ++ ++ speed = ((buffer[0] << 8 | buffer[1]) >> 2); ++ return snprintf(sysfsbuf, PAGE_SIZE, "%u\n", speed); + } + + static ssize_t applesmc_store_fan_speed(struct device *dev, +@@ -858,12 +860,11 @@ static ssize_t applesmc_show_fan_manual(struct device *dev, + u8 buffer[2]; + + ret = applesmc_read_key(FANS_MANUAL, buffer, 2); +- manual = ((buffer[0] << 8 | buffer[1]) >> to_index(attr)) & 0x01; +- + if (ret) + return ret; +- else +- return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", manual); ++ ++ manual = ((buffer[0] << 8 | buffer[1]) >> to_index(attr)) & 0x01; ++ return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", manual); + } + + static ssize_t applesmc_store_fan_manual(struct device *dev, +@@ -879,10 +880,11 @@ static ssize_t applesmc_store_fan_manual(struct device *dev, + return -EINVAL; + + ret = applesmc_read_key(FANS_MANUAL, buffer, 2); +- val = (buffer[0] << 8 | buffer[1]); + if (ret) + goto out; + ++ val = (buffer[0] << 8 | buffer[1]); ++ + if (input) + val = val | (0x01 << to_index(attr)); + else +@@ -958,13 +960,12 @@ static ssize_t applesmc_key_count_show(struct device *dev, + u32 count; + + ret = applesmc_read_key(KEY_COUNT_KEY, buffer, 4); +- count = ((u32)buffer[0]<<24) + ((u32)buffer[1]<<16) + +- ((u32)buffer[2]<<8) + buffer[3]; +- + if (ret) + return ret; +- else +- return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", count); ++ ++ count = ((u32)buffer[0]<<24) + ((u32)buffer[1]<<16) + ++ ((u32)buffer[2]<<8) + buffer[3]; ++ return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", count); + } + + static ssize_t applesmc_key_at_index_read_show(struct device *dev, +-- +2.25.1 + diff --git a/queue-4.19/nvmet-disable-keep-alive-timer-when-kato-is-cleared-.patch b/queue-4.19/nvmet-disable-keep-alive-timer-when-kato-is-cleared-.patch new file mode 100644 index 00000000000..4aacc0eb8dd --- /dev/null +++ b/queue-4.19/nvmet-disable-keep-alive-timer-when-kato-is-cleared-.patch @@ -0,0 +1,47 @@ +From 0b9faac5a113bd35dc204c34f640326121b458e1 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 19 Aug 2020 11:31:11 +0300 +Subject: nvmet: Disable keep-alive timer when kato is cleared to 0h + +From: Amit Engel + +[ Upstream commit 0d3b6a8d213a30387b5104b2fb25376d18636f23 ] + +Based on nvme spec, when keep alive timeout is set to zero +the keep-alive timer should be disabled. + +Signed-off-by: Amit Engel +Signed-off-by: Sagi Grimberg +Signed-off-by: Jens Axboe +Signed-off-by: Sasha Levin +--- + drivers/nvme/target/core.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c +index 776b7e9e23b9e..f28df233dfcd0 100644 +--- a/drivers/nvme/target/core.c ++++ b/drivers/nvme/target/core.c +@@ -307,6 +307,9 @@ static void nvmet_keep_alive_timer(struct work_struct *work) + + static void nvmet_start_keep_alive_timer(struct nvmet_ctrl *ctrl) + { ++ if (unlikely(ctrl->kato == 0)) ++ return; ++ + pr_debug("ctrl %d start keep-alive timer for %d secs\n", + ctrl->cntlid, ctrl->kato); + +@@ -316,6 +319,9 @@ static void nvmet_start_keep_alive_timer(struct nvmet_ctrl *ctrl) + + static void nvmet_stop_keep_alive_timer(struct nvmet_ctrl *ctrl) + { ++ if (unlikely(ctrl->kato == 0)) ++ return; ++ + pr_debug("ctrl %d stop keep-alive\n", ctrl->cntlid); + + cancel_delayed_work_sync(&ctrl->ka_work); +-- +2.25.1 + diff --git a/queue-4.19/s390-don-t-trace-preemption-in-percpu-macros.patch b/queue-4.19/s390-don-t-trace-preemption-in-percpu-macros.patch new file mode 100644 index 00000000000..a787ecf39c5 --- /dev/null +++ b/queue-4.19/s390-don-t-trace-preemption-in-percpu-macros.patch @@ -0,0 +1,139 @@ +From 93092b9a7c1143eabadb8f959b6ff46fdc2f0f2e Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 20 Aug 2020 09:48:23 +0200 +Subject: s390: don't trace preemption in percpu macros + +From: Sven Schnelle + +[ Upstream commit 1196f12a2c960951d02262af25af0bb1775ebcc2 ] + +Since commit a21ee6055c30 ("lockdep: Change hardirq{s_enabled,_context} +to per-cpu variables") the lockdep code itself uses percpu variables. This +leads to recursions because the percpu macros are calling preempt_enable() +which might call trace_preempt_on(). + +Signed-off-by: Sven Schnelle +Reviewed-by: Vasily Gorbik +Signed-off-by: Vasily Gorbik +Signed-off-by: Sasha Levin +--- + arch/s390/include/asm/percpu.h | 28 ++++++++++++++-------------- + 1 file changed, 14 insertions(+), 14 deletions(-) + +diff --git a/arch/s390/include/asm/percpu.h b/arch/s390/include/asm/percpu.h +index 0095ddb58ff69..50f6661ba5664 100644 +--- a/arch/s390/include/asm/percpu.h ++++ b/arch/s390/include/asm/percpu.h +@@ -29,7 +29,7 @@ + typedef typeof(pcp) pcp_op_T__; \ + pcp_op_T__ old__, new__, prev__; \ + pcp_op_T__ *ptr__; \ +- preempt_disable(); \ ++ preempt_disable_notrace(); \ + ptr__ = raw_cpu_ptr(&(pcp)); \ + prev__ = *ptr__; \ + do { \ +@@ -37,7 +37,7 @@ + new__ = old__ op (val); \ + prev__ = cmpxchg(ptr__, old__, new__); \ + } while (prev__ != old__); \ +- preempt_enable(); \ ++ preempt_enable_notrace(); \ + new__; \ + }) + +@@ -68,7 +68,7 @@ + typedef typeof(pcp) pcp_op_T__; \ + pcp_op_T__ val__ = (val); \ + pcp_op_T__ old__, *ptr__; \ +- preempt_disable(); \ ++ preempt_disable_notrace(); \ + ptr__ = raw_cpu_ptr(&(pcp)); \ + if (__builtin_constant_p(val__) && \ + ((szcast)val__ > -129) && ((szcast)val__ < 128)) { \ +@@ -84,7 +84,7 @@ + : [val__] "d" (val__) \ + : "cc"); \ + } \ +- preempt_enable(); \ ++ preempt_enable_notrace(); \ + } + + #define this_cpu_add_4(pcp, val) arch_this_cpu_add(pcp, val, "laa", "asi", int) +@@ -95,14 +95,14 @@ + typedef typeof(pcp) pcp_op_T__; \ + pcp_op_T__ val__ = (val); \ + pcp_op_T__ old__, *ptr__; \ +- preempt_disable(); \ ++ preempt_disable_notrace(); \ + ptr__ = raw_cpu_ptr(&(pcp)); \ + asm volatile( \ + op " %[old__],%[val__],%[ptr__]\n" \ + : [old__] "=d" (old__), [ptr__] "+Q" (*ptr__) \ + : [val__] "d" (val__) \ + : "cc"); \ +- preempt_enable(); \ ++ preempt_enable_notrace(); \ + old__ + val__; \ + }) + +@@ -114,14 +114,14 @@ + typedef typeof(pcp) pcp_op_T__; \ + pcp_op_T__ val__ = (val); \ + pcp_op_T__ old__, *ptr__; \ +- preempt_disable(); \ ++ preempt_disable_notrace(); \ + ptr__ = raw_cpu_ptr(&(pcp)); \ + asm volatile( \ + op " %[old__],%[val__],%[ptr__]\n" \ + : [old__] "=d" (old__), [ptr__] "+Q" (*ptr__) \ + : [val__] "d" (val__) \ + : "cc"); \ +- preempt_enable(); \ ++ preempt_enable_notrace(); \ + } + + #define this_cpu_and_4(pcp, val) arch_this_cpu_to_op(pcp, val, "lan") +@@ -136,10 +136,10 @@ + typedef typeof(pcp) pcp_op_T__; \ + pcp_op_T__ ret__; \ + pcp_op_T__ *ptr__; \ +- preempt_disable(); \ ++ preempt_disable_notrace(); \ + ptr__ = raw_cpu_ptr(&(pcp)); \ + ret__ = cmpxchg(ptr__, oval, nval); \ +- preempt_enable(); \ ++ preempt_enable_notrace(); \ + ret__; \ + }) + +@@ -152,10 +152,10 @@ + ({ \ + typeof(pcp) *ptr__; \ + typeof(pcp) ret__; \ +- preempt_disable(); \ ++ preempt_disable_notrace(); \ + ptr__ = raw_cpu_ptr(&(pcp)); \ + ret__ = xchg(ptr__, nval); \ +- preempt_enable(); \ ++ preempt_enable_notrace(); \ + ret__; \ + }) + +@@ -171,11 +171,11 @@ + typeof(pcp1) *p1__; \ + typeof(pcp2) *p2__; \ + int ret__; \ +- preempt_disable(); \ ++ preempt_disable_notrace(); \ + p1__ = raw_cpu_ptr(&(pcp1)); \ + p2__ = raw_cpu_ptr(&(pcp2)); \ + ret__ = __cmpxchg_double(p1__, p2__, o1__, o2__, n1__, n2__); \ +- preempt_enable(); \ ++ preempt_enable_notrace(); \ + ret__; \ + }) + +-- +2.25.1 + diff --git a/queue-4.19/series b/queue-4.19/series index 515c06d3d52..d91686d7d6a 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -3,3 +3,12 @@ hid-core-sanitize-event-code-and-type-when-mapping-input.patch perf-record-stat-explicitly-call-out-event-modifiers-in-the-documentation.patch scsi-target-tcmu-fix-size-in-calls-to-tcmu_flush_dcache_range.patch scsi-target-tcmu-optimize-use-of-flush_dcache_page.patch +tty-serial-qcom_geni_serial-drop-__init-from-qcom_ge.patch +drm-msm-add-shutdown-support-for-display-platform_dr.patch +hwmon-applesmc-check-status-earlier.patch +nvmet-disable-keep-alive-timer-when-kato-is-cleared-.patch +drm-msm-a6xx-fix-gmu-start-on-newer-firmware.patch +ceph-don-t-allow-setlease-on-cephfs.patch +cpuidle-fixup-irq-state.patch +s390-don-t-trace-preemption-in-percpu-macros.patch +xen-xenbus-fix-granting-of-vmalloc-d-memory.patch diff --git a/queue-4.19/tty-serial-qcom_geni_serial-drop-__init-from-qcom_ge.patch b/queue-4.19/tty-serial-qcom_geni_serial-drop-__init-from-qcom_ge.patch new file mode 100644 index 00000000000..b6b34cf3243 --- /dev/null +++ b/queue-4.19/tty-serial-qcom_geni_serial-drop-__init-from-qcom_ge.patch @@ -0,0 +1,114 @@ +From 38fac009e4b750ea70d1736c8b343c672acde416 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 11 Aug 2020 02:50:44 +0000 +Subject: tty: serial: qcom_geni_serial: Drop __init from + qcom_geni_console_setup + +From: John Stultz + +[ Upstream commit 975efc66d4e654207c17f939eb737ac591ac38fe ] + +When booting with heavily modularized config, the serial console +may not be able to load until after init when modules that +satisfy needed dependencies have time to load. + +Unfortunately, as qcom_geni_console_setup is marked as __init, +the function may have been freed before we get to run it, +causing boot time crashes such as: + +[ 6.469057] Unable to handle kernel paging request at virtual address ffffffe645d4e6cc +[ 6.481623] Mem abort info: +[ 6.484466] ESR = 0x86000007 +[ 6.487557] EC = 0x21: IABT (current EL), IL = 32 bits +[ 6.492929] SET = 0, FnV = 0g +[ 6.496016] EA = 0, S1PTW = 0 +[ 6.499202] swapper pgtable: 4k pages, 39-bit VAs, pgdp=000000008151e000 +[ 6.501286] ufshcd-qcom 1d84000.ufshc: ufshcd_print_pwr_info:[RX, TX]: gear=[3, 3], lane[2, 2], pwr[FAST MODE, FAST MODE], rate = 2 +[ 6.505977] [ffffffe645d4e6cc] pgd=000000017df9f003, p4d=000000017df9f003, pud=000000017df9f003, pmd=000000017df9c003, pte=0000000000000000 +[ 6.505990] Internal error: Oops: 86000007 [#1] PREEMPT SMP +[ 6.505995] Modules linked in: zl10353 zl10039 zl10036 zd1301_demod xc5000 xc4000 ves1x93 ves1820 tuner_xc2028 tuner_simple tuner_types tua9001 tua6100 1 +[ 6.506152] isl6405 +[ 6.518104] ufshcd-qcom 1d84000.ufshc: ufshcd_find_max_sup_active_icc_level: Regulator capability was not set, actvIccLevel=0 +[ 6.530549] horus3a helene fc2580 fc0013 fc0012 fc0011 ec100 e4000 dvb_pll ds3000 drxk drxd drx39xyj dib9000 dib8000 dib7000p dib7000m dib3000mc dibx003 +[ 6.624271] CPU: 7 PID: 148 Comm: kworker/7:2 Tainted: G W 5.8.0-mainline-12021-g6defd37ba1cd #3455 +[ 6.624273] Hardware name: Thundercomm Dragonboard 845c (DT) +[ 6.624290] Workqueue: events deferred_probe_work_func +[ 6.624296] pstate: 40c00005 (nZcv daif +PAN +UAO BTYPE=--) +[ 6.624307] pc : qcom_geni_console_setup+0x0/0x110 +[ 6.624316] lr : try_enable_new_console+0xa0/0x140 +[ 6.624318] sp : ffffffc010843a30 +[ 6.624320] x29: ffffffc010843a30 x28: ffffffe645c3e7d0 +[ 6.624325] x27: ffffff80f8022180 x26: ffffffc010843b28 +[ 6.637937] x25: 0000000000000000 x24: ffffffe6462a2000 +[ 6.637941] x23: ffffffe646398000 x22: 0000000000000000 +[ 6.637945] x21: 0000000000000000 x20: ffffffe6462a5ce8 +[ 6.637952] x19: ffffffe646398e38 x18: ffffffffffffffff +[ 6.680296] x17: 0000000000000000 x16: ffffffe64492b900 +[ 6.680300] x15: ffffffe6461e9d08 x14: 69202930203d2064 +[ 6.680305] x13: 7561625f65736162 x12: 202c363331203d20 +[ 6.696434] x11: 0000000000000030 x10: 0101010101010101 +[ 6.696438] x9 : 4d4d20746120304d x8 : 7f7f7f7f7f7f7f7f +[ 6.707249] x7 : feff4c524c787373 x6 : 0000000000008080 +[ 6.707253] x5 : 0000000000000000 x4 : 8080000000000000 +[ 6.707257] x3 : 0000000000000000 x2 : ffffffe645d4e6cc +[ 6.744223] qcom_geni_serial 898000.serial: dev_pm_opp_set_rate: failed to find OPP for freq 102400000 (-34) +[ 6.744966] x1 : fffffffefe74e174 x0 : ffffffe6462a5ce8 +[ 6.753580] qcom_geni_serial 898000.serial: dev_pm_opp_set_rate: failed to find OPP for freq 102400000 (-34) +[ 6.761634] Call trace: +[ 6.761639] qcom_geni_console_setup+0x0/0x110 +[ 6.761645] register_console+0x29c/0x2f8 +[ 6.767981] Bluetooth: hci0: Frame reassembly failed (-84) +[ 6.775252] uart_add_one_port+0x438/0x500 +[ 6.775258] qcom_geni_serial_probe+0x2c4/0x4a8 +[ 6.775266] platform_drv_probe+0x58/0xa8 +[ 6.855359] really_probe+0xec/0x398 +[ 6.855362] driver_probe_device+0x5c/0xb8 +[ 6.855367] __device_attach_driver+0x98/0xb8 +[ 7.184945] bus_for_each_drv+0x74/0xd8 +[ 7.188825] __device_attach+0xec/0x148 +[ 7.192705] device_initial_probe+0x24/0x30 +[ 7.196937] bus_probe_device+0x9c/0xa8 +[ 7.200816] deferred_probe_work_func+0x7c/0xb8 +[ 7.205398] process_one_work+0x20c/0x4b0 +[ 7.209456] worker_thread+0x48/0x460 +[ 7.213157] kthread+0x14c/0x158 +[ 7.216432] ret_from_fork+0x10/0x18 +[ 7.220049] Code: bad PC value +[ 7.223139] ---[ end trace 73f3b21e251d5a70 ]--- + +Thus this patch removes the __init avoiding crash in such +configs. + +Cc: Andy Gross +Cc: Jiri Slaby +Cc: Saravana Kannan +Cc: Todd Kjos +Cc: Amit Pundir +Cc: linux-arm-msm@vger.kernel.org +Cc: linux-serial@vger.kernel.org +Suggested-by: Saravana Kannan +Signed-off-by: John Stultz +Reviewed-by: Bjorn Andersson +Link: https://lore.kernel.org/r/20200811025044.70626-1-john.stultz@linaro.org +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Sasha Levin +--- + drivers/tty/serial/qcom_geni_serial.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/tty/serial/qcom_geni_serial.c b/drivers/tty/serial/qcom_geni_serial.c +index 0d405cc58e722..cd0768c3e773e 100644 +--- a/drivers/tty/serial/qcom_geni_serial.c ++++ b/drivers/tty/serial/qcom_geni_serial.c +@@ -1050,7 +1050,7 @@ static unsigned int qcom_geni_serial_tx_empty(struct uart_port *uport) + } + + #ifdef CONFIG_SERIAL_QCOM_GENI_CONSOLE +-static int __init qcom_geni_console_setup(struct console *co, char *options) ++static int qcom_geni_console_setup(struct console *co, char *options) + { + struct uart_port *uport; + struct qcom_geni_serial_port *port; +-- +2.25.1 + diff --git a/queue-4.19/xen-xenbus-fix-granting-of-vmalloc-d-memory.patch b/queue-4.19/xen-xenbus-fix-granting-of-vmalloc-d-memory.patch new file mode 100644 index 00000000000..9b137b6438a --- /dev/null +++ b/queue-4.19/xen-xenbus-fix-granting-of-vmalloc-d-memory.patch @@ -0,0 +1,47 @@ +From 1078e6f1b58159dd526fa37df6924e749c03fde0 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 25 Aug 2020 11:31:52 +0200 +Subject: xen/xenbus: Fix granting of vmalloc'd memory + +From: Simon Leiner + +[ Upstream commit d742db70033c745e410523e00522ee0cfe2aa416 ] + +On some architectures (like ARM), virt_to_gfn cannot be used for +vmalloc'd memory because of its reliance on virt_to_phys. This patch +introduces a check for vmalloc'd addresses and obtains the PFN using +vmalloc_to_pfn in that case. + +Signed-off-by: Simon Leiner +Reviewed-by: Stefano Stabellini +Link: https://lore.kernel.org/r/20200825093153.35500-1-simon@leiner.me +Signed-off-by: Juergen Gross +Signed-off-by: Sasha Levin +--- + drivers/xen/xenbus/xenbus_client.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/drivers/xen/xenbus/xenbus_client.c b/drivers/xen/xenbus/xenbus_client.c +index e94a61eaeceb0..f7b553faadb10 100644 +--- a/drivers/xen/xenbus/xenbus_client.c ++++ b/drivers/xen/xenbus/xenbus_client.c +@@ -365,8 +365,14 @@ int xenbus_grant_ring(struct xenbus_device *dev, void *vaddr, + int i, j; + + for (i = 0; i < nr_pages; i++) { +- err = gnttab_grant_foreign_access(dev->otherend_id, +- virt_to_gfn(vaddr), 0); ++ unsigned long gfn; ++ ++ if (is_vmalloc_addr(vaddr)) ++ gfn = pfn_to_gfn(vmalloc_to_pfn(vaddr)); ++ else ++ gfn = virt_to_gfn(vaddr); ++ ++ err = gnttab_grant_foreign_access(dev->otherend_id, gfn, 0); + if (err < 0) { + xenbus_dev_fatal(dev, err, + "granting access to ring page"); +-- +2.25.1 +