summaryrefslogtreecommitdiffstats
path: root/drm-nouveau-platform-Fix-deferred-probe.patch
diff options
context:
space:
mode:
Diffstat (limited to 'drm-nouveau-platform-Fix-deferred-probe.patch')
-rw-r--r--drm-nouveau-platform-Fix-deferred-probe.patch116
1 files changed, 0 insertions, 116 deletions
diff --git a/drm-nouveau-platform-Fix-deferred-probe.patch b/drm-nouveau-platform-Fix-deferred-probe.patch
deleted file mode 100644
index bae1dae7a..000000000
--- a/drm-nouveau-platform-Fix-deferred-probe.patch
+++ /dev/null
@@ -1,116 +0,0 @@
-From patchwork Wed Feb 24 17:34:43 2016
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: drm/nouveau: platform: Fix deferred probe
-From: Thierry Reding <thierry.reding@gmail.com>
-X-Patchwork-Id: 587554
-Message-Id: <1456335283-22097-1-git-send-email-thierry.reding@gmail.com>
-To: Ben Skeggs <bskeggs@redhat.com>
-Cc: Alexandre Courbot <gnurou@gmail.com>, Nicolas Chauvet <kwizart@gmail.com>,
- dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org
-Date: Wed, 24 Feb 2016 18:34:43 +0100
-
-From: Thierry Reding <treding@nvidia.com>
-
-The error cleanup paths aren't quite correct and will crash upon
-deferred probe.
-
-Cc: stable@vger.kernel.org # v4.3+
-Signed-off-by: Thierry Reding <treding@nvidia.com>
-Reviewed-by: Ben Skeggs <bskeggs@redhat.com>
-Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>
----
- drivers/gpu/drm/nouveau/nouveau_platform.c | 2 +-
- drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c | 40 ++++++++++++++++------
- 2 files changed, 30 insertions(+), 12 deletions(-)
-
-diff --git a/drivers/gpu/drm/nouveau/nouveau_platform.c b/drivers/gpu/drm/nouveau/nouveau_platform.c
-index 8a70cec59bcd..2dfe58af12e4 100644
---- a/drivers/gpu/drm/nouveau/nouveau_platform.c
-+++ b/drivers/gpu/drm/nouveau/nouveau_platform.c
-@@ -24,7 +24,7 @@
- static int nouveau_platform_probe(struct platform_device *pdev)
- {
- const struct nvkm_device_tegra_func *func;
-- struct nvkm_device *device;
-+ struct nvkm_device *device = NULL;
- struct drm_device *drm;
- int ret;
-
-diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
-index 7f8a42721eb2..e7e581d6a8ff 100644
---- a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
-+++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
-@@ -252,32 +252,40 @@ nvkm_device_tegra_new(const struct nvkm_device_tegra_func *func,
-
- if (!(tdev = kzalloc(sizeof(*tdev), GFP_KERNEL)))
- return -ENOMEM;
-- *pdevice = &tdev->device;
-+
- tdev->func = func;
- tdev->pdev = pdev;
- tdev->irq = -1;
-
- tdev->vdd = devm_regulator_get(&pdev->dev, "vdd");
-- if (IS_ERR(tdev->vdd))
-- return PTR_ERR(tdev->vdd);
-+ if (IS_ERR(tdev->vdd)) {
-+ ret = PTR_ERR(tdev->vdd);
-+ goto free;
-+ }
-
- tdev->rst = devm_reset_control_get(&pdev->dev, "gpu");
-- if (IS_ERR(tdev->rst))
-- return PTR_ERR(tdev->rst);
-+ if (IS_ERR(tdev->rst)) {
-+ ret = PTR_ERR(tdev->rst);
-+ goto free;
-+ }
-
- tdev->clk = devm_clk_get(&pdev->dev, "gpu");
-- if (IS_ERR(tdev->clk))
-- return PTR_ERR(tdev->clk);
-+ if (IS_ERR(tdev->clk)) {
-+ ret = PTR_ERR(tdev->clk);
-+ goto free;
-+ }
-
- tdev->clk_pwr = devm_clk_get(&pdev->dev, "pwr");
-- if (IS_ERR(tdev->clk_pwr))
-- return PTR_ERR(tdev->clk_pwr);
-+ if (IS_ERR(tdev->clk_pwr)) {
-+ ret = PTR_ERR(tdev->clk_pwr);
-+ goto free;
-+ }
-
- nvkm_device_tegra_probe_iommu(tdev);
-
- ret = nvkm_device_tegra_power_up(tdev);
- if (ret)
-- return ret;
-+ goto remove;
-
- tdev->gpu_speedo = tegra_sku_info.gpu_speedo_value;
- ret = nvkm_device_ctor(&nvkm_device_tegra_func, NULL, &pdev->dev,
-@@ -285,9 +293,19 @@ nvkm_device_tegra_new(const struct nvkm_device_tegra_func *func,
- cfg, dbg, detect, mmio, subdev_mask,
- &tdev->device);
- if (ret)
-- return ret;
-+ goto powerdown;
-+
-+ *pdevice = &tdev->device;
-
- return 0;
-+
-+powerdown:
-+ nvkm_device_tegra_power_down(tdev);
-+remove:
-+ nvkm_device_tegra_remove_iommu(tdev);
-+free:
-+ kfree(tdev);
-+ return ret;
- }
- #else
- int