Move the registration later to avoid a possible race between driver initialization and a vga_switcheroo request. Signed-off-by: Alex Deucher <alexander.deucher at amd.com> --- 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