diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2010-08-13 10:53:35 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2010-08-20 08:46:13 +1000 |
commit | 4e186b2d6c878793587c35d7f06c94565d76e9b8 (patch) | |
tree | d3f5bca149d1603ec0c4aabdc3e42a566da76bfe /drivers/gpu/drm | |
parent | 4aab97e818c255a1bc25bb981f121a7992c6b290 (diff) |
drm/radeon/kms/pm: bail early if nothing's changing
If we aren't changing the power state, no need to take
locks and schedule fences, etc.
There seem to be lock ordering issues in the CP and
fence code in some cases; see bug 29140 below.
Fixes:
https://bugs.freedesktop.org/show_bug.cgi?id=29140
Possibly also:
https://bugzilla.kernel.org/show_bug.cgi?id=16581
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Cc: stable@kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_pm.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c index 58038f5cab3..477ba673e1b 100644 --- a/drivers/gpu/drm/radeon/radeon_pm.c +++ b/drivers/gpu/drm/radeon/radeon_pm.c @@ -226,6 +226,11 @@ static void radeon_pm_set_clocks(struct radeon_device *rdev) { int i; + /* no need to take locks, etc. if nothing's going to change */ + if ((rdev->pm.requested_clock_mode_index == rdev->pm.current_clock_mode_index) && + (rdev->pm.requested_power_state_index == rdev->pm.current_power_state_index)) + return; + mutex_lock(&rdev->ddev->struct_mutex); mutex_lock(&rdev->vram_mutex); mutex_lock(&rdev->cp.mutex); |