⬢ DragonFlyBSD Kernel Audit
DF-4143 / fix.diff
← back to finding ↓ download raw
--- a/dev/drm/radeon/trinity_dpm.c
+++ b/dev/drm/radeon/trinity_dpm.c
@@ -1104,6 +1104,10 @@
 
 int trinity_dpm_enable(struct radeon_device *rdev)
 {
+	if (!rdev->pm.dpm.boot_ps) {
+		DRM_ERROR("no boot state; dpm init did not succeed\n");
+		return -EINVAL;
+	}
 	struct trinity_power_info *pi = trinity_get_pi(rdev);
 
 	trinity_acquire_mutex(rdev);
@@ -1155,6 +1159,8 @@
 
 void trinity_dpm_disable(struct radeon_device *rdev)
 {
+	if (!rdev->pm.dpm.boot_ps)
+		return;
 	trinity_acquire_mutex(rdev);
 	if (!trinity_dpm_enabled(rdev)) {
 		trinity_release_mutex(rdev);
@@ -1236,6 +1242,8 @@
 
 int trinity_dpm_pre_set_power_state(struct radeon_device *rdev)
 {
+	if (!rdev->pm.dpm.requested_ps)
+		return -EINVAL;
 	struct trinity_power_info *pi = trinity_get_pi(rdev);
 	struct radeon_ps requested_ps = *rdev->pm.dpm.requested_ps;
 	struct radeon_ps *new_ps = &requested_ps;