Move the registration later to avoid a possible race
between driver initialization and a vga_switcheroo
request.

Signed-off-by: Alex Deucher <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index a8bf2a4..3d24ce3 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -2118,14 +2118,6 @@ int amdgpu_device_init(struct amdgpu_device *adev,
         * ignore it */
        vga_client_register(adev->pdev, adev, NULL, amdgpu_vga_set_decode);
 
-       if (amdgpu_runtime_pm == 1)
-               runtime = true;
-       if (amdgpu_device_is_px(ddev))
-               runtime = true;
-       vga_switcheroo_register_client(adev->pdev, &amdgpu_switcheroo_ops, 
runtime);
-       if (runtime)
-               vga_switcheroo_init_domain_pm_ops(adev->dev, 
&adev->vga_pm_domain);
-
        /* Read BIOS */
        if (!amdgpu_get_bios(adev)) {
                r = -EINVAL;
@@ -2243,11 +2235,17 @@ int amdgpu_device_init(struct amdgpu_device *adev,
                goto failed;
        }
 
+       if (amdgpu_runtime_pm == 1)
+               runtime = true;
+       if (amdgpu_device_is_px(ddev))
+               runtime = true;
+       vga_switcheroo_register_client(adev->pdev, &amdgpu_switcheroo_ops, 
runtime);
+       if (runtime)
+               vga_switcheroo_init_domain_pm_ops(adev->dev, 
&adev->vga_pm_domain);
+
        return 0;
 
 failed:
-       if (runtime)
-               vga_switcheroo_fini_domain_pm_ops(adev->dev);
        return r;
 }
 
-- 
2.5.5

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to