summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarry Wentland <harry.wentland@amd.com>2017-03-29 11:25:24 -0400
committerHarry Wentland <harry.wentland@amd.com>2017-04-19 20:57:52 -0400
commit258e6a91fc6139f1de864606bbbc3bdf1d4bb5d9 (patch)
tree6f5edcf641cd51c627bb1caffda26dda9b74633c
parent0f1b2e2aecbb1a3758cd313a588ba8d7c147132d (diff)
drm/amd/display: Add validate_context to atomic_state
Change-Id: I24c3ffabe2bcfc6679e9ceb644b3f1caa4817dab Signed-off-by: Harry Wentland <harry.wentland@amd.com>
-rw-r--r--drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_atomic.c5
-rw-r--r--drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_atomic.h2
-rw-r--r--drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c17
3 files changed, 9 insertions, 15 deletions
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_atomic.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_atomic.c
index c61510b7b5c1..478252dd52eb 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_atomic.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_atomic.c
@@ -69,6 +69,11 @@ void amdgpu_dm_atomic_destroy_state(void *obj_state)
for (i = 0; i < dm_state->set_count; i++)
dc_stream_release(dm_state->set[i].stream);
+ if (dm_state->context) {
+ dc_resource_validate_ctx_destruct(dm_state->context);
+ dm_free(dm_state->context);
+ }
+
kfree(obj_state);
}
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_atomic.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_atomic.h
index 748fe22177c7..c6b86ac7a702 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_atomic.h
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_atomic.h
@@ -29,6 +29,7 @@
#include "dc.h"
struct amdgpu_device;
+struct validate_context;
struct amdgpu_dm_atomic_state {
struct drm_atomic_state *state;
@@ -36,6 +37,7 @@ struct amdgpu_dm_atomic_state {
struct dc_validation_set set[MAX_STREAMS];
int set_count;
+ struct validate_context *context;
};
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
index afb6438d9166..aa4ee6b83438 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
@@ -3017,7 +3017,6 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
struct amdgpu_device *adev = dev->dev_private;
struct dc *dc = adev->dm.dc;
bool need_to_validate = false;
- struct validate_context *context;
ret = drm_atomic_helper_check(dev, state);
@@ -3250,23 +3249,11 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
}
}
- context = dc_get_validate_context(dc, dm_state->set, dm_state->set_count);
+ dm_state->context = dc_get_validate_context(dc, dm_state->set, dm_state->set_count);
- if (need_to_validate == false || dm_state->set_count == 0 || context)
+ if (need_to_validate == false || dm_state->set_count == 0 || dm_state->context)
ret = 0;
- if (context) {
- dc_resource_validate_ctx_destruct(context);
- dm_free(context);
- }
-
- for (i = 0; i < dm_state->set_count; i++)
- for (j = 0; j < dm_state->set[i].surface_count; j++)
- dc_surface_release(dm_state->set[i].surfaces[j]);
-
- for (i = 0; i < new_stream_count; i++)
- dc_stream_release(new_streams[i]);
-
if (ret != 0)
DRM_ERROR("Atomic check failed.\n");