diff options
author | Dave Airlie <airlied@redhat.com> | 2015-10-24 15:01:57 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2015-10-24 15:01:57 -0400 |
commit | aef8cc903583c5a205b696fb0a51e1eca9117321 (patch) | |
tree | a7e2aeeeae494633a98c0603b8cbfc757e4b0abb | |
parent | 018155365dccecd9ea9f26e1b26fb0f960c1ee32 (diff) | |
parent | c86f5ebfbd147d1a228ab89ee1658e18939bd7ad (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.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_pm.c | 35 |
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; |