aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2015-10-24 15:01:57 -0400
committerDave Airlie <airlied@redhat.com>2015-10-24 15:01:57 -0400
commitaef8cc903583c5a205b696fb0a51e1eca9117321 (patch)
treea7e2aeeeae494633a98c0603b8cbfc757e4b0abb
parent018155365dccecd9ea9f26e1b26fb0f960c1ee32 (diff)
parentc86f5ebfbd147d1a228ab89ee1658e18939bd7ad (diff)
Merge branch 'drm-fixes-4.3' of git://people.freedesktop.org/~agd5f/linux
Two regression fixes and a memory leak fix for amdgpu and radeon. * 'drm-fixes-4.3' of git://people.freedesktop.org/~agd5f/linux: drm/amdgpu: don't try to recreate sysfs entries on resume drm/radeon: don't try to recreate sysfs entries on resume drm/amdgpu: stop leaking page flip fence
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu.h1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_display.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c5
-rw-r--r--drivers/gpu/drm/radeon/radeon.h1
-rw-r--r--drivers/gpu/drm/radeon/radeon_pm.c35
5 files changed, 28 insertions, 18 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 6647fb26ef25..0d13e6368b96 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -1654,6 +1654,7 @@ struct amdgpu_pm {
1654 u8 fan_max_rpm; 1654 u8 fan_max_rpm;
1655 /* dpm */ 1655 /* dpm */
1656 bool dpm_enabled; 1656 bool dpm_enabled;
1657 bool sysfs_initialized;
1657 struct amdgpu_dpm dpm; 1658 struct amdgpu_dpm dpm;
1658 const struct firmware *fw; /* SMC firmware */ 1659 const struct firmware *fw; /* SMC firmware */
1659 uint32_t fw_version; 1660 uint32_t fw_version;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
index dc29ed8145c2..6c9e0902a414 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
@@ -184,10 +184,6 @@ int amdgpu_crtc_page_flip(struct drm_crtc *crtc,
184 goto cleanup; 184 goto cleanup;
185 } 185 }
186 186
187 fence_get(work->excl);
188 for (i = 0; i < work->shared_count; ++i)
189 fence_get(work->shared[i]);
190
191 amdgpu_bo_get_tiling_flags(new_rbo, &tiling_flags); 187 amdgpu_bo_get_tiling_flags(new_rbo, &tiling_flags);
192 amdgpu_bo_unreserve(new_rbo); 188 amdgpu_bo_unreserve(new_rbo);
193 189
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
index ed2bbe5b10af..22a8c7d3a3ab 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
@@ -695,6 +695,9 @@ int amdgpu_pm_sysfs_init(struct amdgpu_device *adev)
695{ 695{
696 int ret; 696 int ret;
697 697
698 if (adev->pm.sysfs_initialized)
699 return 0;
700
698 if (adev->pm.funcs->get_temperature == NULL) 701 if (adev->pm.funcs->get_temperature == NULL)
699 return 0; 702 return 0;
700 adev->pm.int_hwmon_dev = hwmon_device_register_with_groups(adev->dev, 703 adev->pm.int_hwmon_dev = hwmon_device_register_with_groups(adev->dev,
@@ -723,6 +726,8 @@ int amdgpu_pm_sysfs_init(struct amdgpu_device *adev)
723 return ret; 726 return ret;
724 } 727 }
725 728
729 adev->pm.sysfs_initialized = true;
730
726 return 0; 731 return 0;
727} 732}
728 733
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index f03b7eb15233..b6cbd816537e 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -1658,6 +1658,7 @@ struct radeon_pm {
1658 u8 fan_max_rpm; 1658 u8 fan_max_rpm;
1659 /* dpm */ 1659 /* dpm */
1660 bool dpm_enabled; 1660 bool dpm_enabled;
1661 bool sysfs_initialized;
1661 struct radeon_dpm dpm; 1662 struct radeon_dpm dpm;
1662}; 1663};
1663 1664
diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c
index 6a0a176e26ec..5feee3b4c557 100644
--- a/drivers/gpu/drm/radeon/radeon_pm.c
+++ b/drivers/gpu/drm/radeon/radeon_pm.c
@@ -1528,19 +1528,23 @@ int radeon_pm_late_init(struct radeon_device *rdev)
1528 1528
1529 if (rdev->pm.pm_method == PM_METHOD_DPM) { 1529 if (rdev->pm.pm_method == PM_METHOD_DPM) {
1530 if (rdev->pm.dpm_enabled) { 1530 if (rdev->pm.dpm_enabled) {
1531 ret = device_create_file(rdev->dev, &dev_attr_power_dpm_state); 1531 if (!rdev->pm.sysfs_initialized) {
1532 if (ret) 1532 ret = device_create_file(rdev->dev, &dev_attr_power_dpm_state);
1533 DRM_ERROR("failed to create device file for dpm state\n"); 1533 if (ret)
1534 ret = device_create_file(rdev->dev, &dev_attr_power_dpm_force_performance_level); 1534 DRM_ERROR("failed to create device file for dpm state\n");
1535 if (ret) 1535 ret = device_create_file(rdev->dev, &dev_attr_power_dpm_force_performance_level);
1536 DRM_ERROR("failed to create device file for dpm state\n"); 1536 if (ret)
1537 /* XXX: these are noops for dpm but are here for backwards compat */ 1537 DRM_ERROR("failed to create device file for dpm state\n");
1538 ret = device_create_file(rdev->dev, &dev_attr_power_profile); 1538 /* XXX: these are noops for dpm but are here for backwards compat */
1539 if (ret) 1539 ret = device_create_file(rdev->dev, &dev_attr_power_profile);
1540 DRM_ERROR("failed to create device file for power profile\n"); 1540 if (ret)
1541 ret = device_create_file(rdev->dev, &dev_attr_power_method); 1541 DRM_ERROR("failed to create device file for power profile\n");
1542 if (ret) 1542 ret = device_create_file(rdev->dev, &dev_attr_power_method);
1543 DRM_ERROR("failed to create device file for power method\n"); 1543 if (ret)
1544 DRM_ERROR("failed to create device file for power method\n");
1545 if (!ret)
1546 rdev->pm.sysfs_initialized = true;
1547 }
1544 1548
1545 mutex_lock(&rdev->pm.mutex); 1549 mutex_lock(&rdev->pm.mutex);
1546 ret = radeon_dpm_late_enable(rdev); 1550 ret = radeon_dpm_late_enable(rdev);
@@ -1556,7 +1560,8 @@ int radeon_pm_late_init(struct radeon_device *rdev)
1556 } 1560 }
1557 } 1561 }
1558 } else { 1562 } else {
1559 if (rdev->pm.num_power_states > 1) { 1563 if ((rdev->pm.num_power_states > 1) &&
1564 (!rdev->pm.sysfs_initialized)) {
1560 /* where's the best place to put these? */ 1565 /* where's the best place to put these? */
1561 ret = device_create_file(rdev->dev, &dev_attr_power_profile); 1566 ret = device_create_file(rdev->dev, &dev_attr_power_profile);
1562 if (ret) 1567 if (ret)
@@ -1564,6 +1569,8 @@ int radeon_pm_late_init(struct radeon_device *rdev)
1564 ret = device_create_file(rdev->dev, &dev_attr_power_method); 1569 ret = device_create_file(rdev->dev, &dev_attr_power_method);
1565 if (ret) 1570 if (ret)
1566 DRM_ERROR("failed to create device file for power method\n"); 1571 DRM_ERROR("failed to create device file for power method\n");
1572 if (!ret)
1573 rdev->pm.sysfs_initialized = true;
1567 } 1574 }
1568 } 1575 }
1569 return ret; 1576 return ret;