[linux] 01/01: dwc3-exynos: Fix deferred probing storm

debian-kernel at lists.debian.org debian-kernel at lists.debian.org
Sun May 29 21:13:24 UTC 2016


This is an automated email from the git hooks/post-receive script.

benh pushed a commit to branch sid
in repository linux.

commit 46e3b9492ae04c5144bd155cd7981b0ab189318b
Author: Ben Hutchings <ben at decadent.org.uk>
Date:   Sun May 29 22:05:54 2016 +0100

    dwc3-exynos: Fix deferred probing storm
    
    Closes: #823552; thanks to Steinar H. Gunderson
---
 debian/changelog                                   |  2 +
 .../dwc3-exynos-fix-deferred-probing-storm.patch   | 81 ++++++++++++++++++++++
 debian/patches/series                              |  1 +
 3 files changed, 84 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index e0c0a3e..60b2fea 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -99,6 +99,8 @@ linux (4.5.5-1) UNRELEASED; urgency=medium
   * ALSA: timer: Fix leak in SNDRV_TIMER_IOCTL_PARAMS (CVE-2016-4569)
   * ALSA: timer: Fix leak in events via snd_timer_user_ccallback or
     snd_timer_user_tinterrupt (CVE-2016-4578)
+  * dwc3-exynos: Fix deferred probing storm (Closes: #823552; thanks to
+    Steinar H. Gunderson)
 
   [ Roger Shimizu ]
   * [armhf] Enable SENSORS_PWM_FAN / PWM_SAMSUNG as module, as recommended by
diff --git a/debian/patches/bugfix/arm/dwc3-exynos-fix-deferred-probing-storm.patch b/debian/patches/bugfix/arm/dwc3-exynos-fix-deferred-probing-storm.patch
new file mode 100644
index 0000000..08d894f
--- /dev/null
+++ b/debian/patches/bugfix/arm/dwc3-exynos-fix-deferred-probing-storm.patch
@@ -0,0 +1,81 @@
+From: "Steinar H. Gunderson" <sesse at google.com>
+Date: Tue, 24 May 2016 20:13:15 +0200
+Forwarded: http://mid.gmane.org/E1b6Hj3-0001MI-AS@pannekake.samfundet.no
+Subject: dwc3-exynos: Fix deferred probing storm.
+Bug-Debian: https://bugs.debian.org/823552
+
+dwc3-exynos has two problems during init if the regulators are slow
+to come up (for instance if the I2C bus driver is not on the initramfs)
+and return probe deferral. First, every time this happens, the driver
+leaks the USB phys created; they need to be deallocated on error.
+
+Second, since the phy devices are created before the regulators fail,
+this means that there's a new device to re-trigger deferred probing,
+which causes it to essentially go into a busy loop of re-probing the
+device until the regulators come up.
+
+Move the phy creation to after the regulators have succeeded, and also
+fix cleanup on failure. On my ODROID XU4 system (with Debian's initramfs
+which doesn't contain the I2C driver), this reduces the number of probe
+attempts (for each of the two controllers) from more than 2000 to eight.
+
+Signed-off-by: Steinar H. Gunderson <sesse at google.com>
+Reviewed-by: Krzysztof Kozlowski <k.kozlowski at samsung.com>
+Reviewed-by: Vivek Gautam <gautam.vivek at samsung.com>
+Fixes: d720f057fda4 ("usb: dwc3: exynos: add nop transceiver support")
+Cc: <stable at vger.kernel.org>
+---
+ drivers/usb/dwc3/dwc3-exynos.c | 19 +++++++++++--------
+ 1 file changed, 11 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-exynos.c
+index dd5cb55..2f1fb7e 100644
+--- a/drivers/usb/dwc3/dwc3-exynos.c
++++ b/drivers/usb/dwc3/dwc3-exynos.c
+@@ -128,12 +128,6 @@ static int dwc3_exynos_probe(struct platform_device *pdev)
+ 
+ 	platform_set_drvdata(pdev, exynos);
+ 
+-	ret = dwc3_exynos_register_phys(exynos);
+-	if (ret) {
+-		dev_err(dev, "couldn't register PHYs\n");
+-		return ret;
+-	}
+-
+ 	exynos->dev	= dev;
+ 
+ 	exynos->clk = devm_clk_get(dev, "usbdrd30");
+@@ -183,20 +177,29 @@ static int dwc3_exynos_probe(struct platform_device *pdev)
+ 		goto err3;
+ 	}
+ 
++	ret = dwc3_exynos_register_phys(exynos);
++	if (ret) {
++		dev_err(dev, "couldn't register PHYs\n");
++		goto err4;
++	}
++
+ 	if (node) {
+ 		ret = of_platform_populate(node, NULL, NULL, dev);
+ 		if (ret) {
+ 			dev_err(dev, "failed to add dwc3 core\n");
+-			goto err4;
++			goto err5;
+ 		}
+ 	} else {
+ 		dev_err(dev, "no device node, failed to add dwc3 core\n");
+ 		ret = -ENODEV;
+-		goto err4;
++		goto err5;
+ 	}
+ 
+ 	return 0;
+ 
++err5:
++	platform_device_unregister(exynos->usb2_phy);
++	platform_device_unregister(exynos->usb3_phy);
+ err4:
+ 	regulator_disable(exynos->vdd10);
+ err3:
+
+
diff --git a/debian/patches/series b/debian/patches/series
index cfe15c2..e58ee64 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -54,6 +54,7 @@ bugfix/sparc/sparc-implement-and-wire-up-modalias_show-for-vio.patch
 bugfix/sparc/sparc-implement-and-wire-up-vio_hotplug-for-vio.patch
 bugfix/x86/revert-sp5100_tco-fix-the-device-check-for-SB800-and.patch
 bugfix/powerpc/powerpc-fix-sstep-compile-on-powerpcspe.patch
+bugfix/arm/dwc3-exynos-fix-deferred-probing-storm.patch
 
 # Arch features
 features/mips/MIPS-increase-MAX-PHYSMEM-BITS-on-Loongson-3-only.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/kernel/linux.git



More information about the Kernel-svn-changes mailing list