diff options
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0630-drm-amd-display-Do-not-release-state-objects-on-atom.patch')
-rw-r--r-- | meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0630-drm-amd-display-Do-not-release-state-objects-on-atom.patch | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0630-drm-amd-display-Do-not-release-state-objects-on-atom.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0630-drm-amd-display-Do-not-release-state-objects-on-atom.patch new file mode 100644 index 00000000..8ba57f2e --- /dev/null +++ b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0630-drm-amd-display-Do-not-release-state-objects-on-atom.patch @@ -0,0 +1,85 @@ +From 15296a2a2ee0e49587e420cbb60f6ef0b32e1887 Mon Sep 17 00:00:00 2001 +From: "Leo (Sunpeng) Li" <sunpeng.li@amd.com> +Date: Tue, 18 Jul 2017 18:33:23 -0400 +Subject: [PATCH 0630/4131] drm/amd/display: Do not release state objects on + atomic check fail + +In any drm ioctl call, drm_atomic_state_clear() is called at the end to +destroy the states; even if atomic check fails. Therefore, releasing +states on atomic check failure is incorrect. + +Signed-off-by: Leo (Sunpeng) Li <sunpeng.li@amd.com> +Reviewed-by: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com> +Acked-by: Harry Wentland <Harry.Wentland@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c | 21 ++++++--------------- + 1 file changed, 6 insertions(+), 15 deletions(-) + +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 be24225..9519757 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 +@@ -3139,7 +3139,7 @@ int amdgpu_dm_atomic_check(struct drm_device *dev, + conn_state = drm_atomic_get_connector_state(state, &aconnector->base); + if (IS_ERR(conn_state)) { + ret = PTR_ERR_OR_ZERO(conn_state); +- goto fail_crtcs; ++ goto fail; + } + + dm_conn_state = to_dm_connector_state(conn_state); +@@ -3198,7 +3198,7 @@ int amdgpu_dm_atomic_check(struct drm_device *dev, + + ret = drm_atomic_add_affected_planes(state, crtc); + if (ret) +- goto fail_crtcs; ++ goto fail; + } + } + +@@ -3260,7 +3260,7 @@ int amdgpu_dm_atomic_check(struct drm_device *dev, + crtc_state, + false); + if (ret) +- goto fail_planes; ++ goto fail; + + + if (dm_plane_state->surface) +@@ -3292,13 +3292,12 @@ int amdgpu_dm_atomic_check(struct drm_device *dev, + + ret = do_aquire_global_lock(dev, state); + if (ret) +- goto fail_planes; +- ++ goto fail; + WARN_ON(dm_state->context); + dm_state->context = dc_get_validate_context(dc, set, set_count); + if (!dm_state->context) { + ret = -EINVAL; +- goto fail_planes; ++ goto fail; + } + } + +@@ -3306,15 +3305,7 @@ int amdgpu_dm_atomic_check(struct drm_device *dev, + WARN_ON(ret); + return ret; + +-fail_planes: +- for (i = 0; i < set_count; i++) +- for (j = 0; j < set[i].surface_count; j++) +- dc_surface_release(set[i].surfaces[j]); +- +-fail_crtcs: +- for (i = 0; i < set_count; i++) +- dc_stream_release(set[i].stream); +- ++fail: + if (ret == -EDEADLK) + DRM_DEBUG_KMS("Atomic check stopped due to to deadlock.\n"); + else if (ret == -EINTR || ret == -EAGAIN || ret == -ERESTARTSYS) +-- +2.7.4 + |