]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 Dec 2019 14:12:54 +0000 (15:12 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 Dec 2019 14:12:54 +0000 (15:12 +0100)
added patches:
revert-regulator-defer-init-completion-for-a-while-after-late_initcall.patch

queue-4.14/revert-regulator-defer-init-completion-for-a-while-after-late_initcall.patch [new file with mode: 0644]
queue-4.14/series

diff --git a/queue-4.14/revert-regulator-defer-init-completion-for-a-while-after-late_initcall.patch b/queue-4.14/revert-regulator-defer-init-completion-for-a-while-after-late_initcall.patch
new file mode 100644 (file)
index 0000000..4531123
--- /dev/null
@@ -0,0 +1,89 @@
+From 21f45484a7d1cbfde5f0af2fb9491dda3ba43489 Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Wed, 18 Dec 2019 15:10:24 +0100
+Subject: Revert "regulator: Defer init completion for a while after late_initcall"
+
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+This reverts commit d7ce17fba6c8e316ca9a554a87edddce6f862435 which is
+commit 55576cf1853798e86f620766e23b604c9224c19c upstream.
+
+It's causing "odd" interactions with older kernels, so it probably isn't
+a good idea to cause timing changes there.  This has been reported to
+cause oopses on Pixel devices.
+
+Reported-by: Siddharth Kapoor <ksiddharth@google.com>
+Cc: Mark Brown <broonie@kernel.org>
+Cc: Lee Jones <lee.jones@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/regulator/core.c |   42 +++++++++++-------------------------------
+ 1 file changed, 11 insertions(+), 31 deletions(-)
+
+--- a/drivers/regulator/core.c
++++ b/drivers/regulator/core.c
+@@ -4503,7 +4503,7 @@ static int __init regulator_init(void)
+ /* init early to allow our consumers to complete system booting */
+ core_initcall(regulator_init);
+-static int regulator_late_cleanup(struct device *dev, void *data)
++static int __init regulator_late_cleanup(struct device *dev, void *data)
+ {
+       struct regulator_dev *rdev = dev_to_rdev(dev);
+       const struct regulator_ops *ops = rdev->desc->ops;
+@@ -4552,9 +4552,18 @@ unlock:
+       return 0;
+ }
+-static void regulator_init_complete_work_function(struct work_struct *work)
++static int __init regulator_init_complete(void)
+ {
+       /*
++       * Since DT doesn't provide an idiomatic mechanism for
++       * enabling full constraints and since it's much more natural
++       * with DT to provide them just assume that a DT enabled
++       * system has full constraints.
++       */
++      if (of_have_populated_dt())
++              has_full_constraints = true;
++
++      /*
+        * Regulators may had failed to resolve their input supplies
+        * when were registered, either because the input supply was
+        * not registered yet or because its parent device was not
+@@ -4571,35 +4580,6 @@ static void regulator_init_complete_work
+        */
+       class_for_each_device(&regulator_class, NULL, NULL,
+                             regulator_late_cleanup);
+-}
+-
+-static DECLARE_DELAYED_WORK(regulator_init_complete_work,
+-                          regulator_init_complete_work_function);
+-
+-static int __init regulator_init_complete(void)
+-{
+-      /*
+-       * Since DT doesn't provide an idiomatic mechanism for
+-       * enabling full constraints and since it's much more natural
+-       * with DT to provide them just assume that a DT enabled
+-       * system has full constraints.
+-       */
+-      if (of_have_populated_dt())
+-              has_full_constraints = true;
+-
+-      /*
+-       * We punt completion for an arbitrary amount of time since
+-       * systems like distros will load many drivers from userspace
+-       * so consumers might not always be ready yet, this is
+-       * particularly an issue with laptops where this might bounce
+-       * the display off then on.  Ideally we'd get a notification
+-       * from userspace when this happens but we don't so just wait
+-       * a bit and hope we waited long enough.  It'd be better if
+-       * we'd only do this on systems that need it, and a kernel
+-       * command line option might be useful.
+-       */
+-      schedule_delayed_work(&regulator_init_complete_work,
+-                            msecs_to_jiffies(30000));
+       return 0;
+ }
index cfd4152d2d56e26794a91ab10ce6db1bbcbaf9c4..14e68117e6fd1c623ab14967ede0abf38f23776e 100644 (file)
@@ -10,3 +10,4 @@ tcp-tighten-acceptance-of-acks-not-matching-a-child-socket.patch
 tcp-protect-accesses-to-.ts_recent_stamp-with-read-write-_once.patch
 inet-protect-against-too-small-mtu-values.patch
 nvme-host-core-fix-precedence-of-ternary-operator.patch
+revert-regulator-defer-init-completion-for-a-while-after-late_initcall.patch