diff options
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 32 | 
1 files changed, 18 insertions, 14 deletions
| diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index d55e61d8aa00..14ba5eeb974f 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -6024,21 +6024,23 @@ static inline int dm_set_vblank(struct drm_crtc *crtc, bool enable)  		return 0;  #if defined(CONFIG_DRM_AMD_DC_DCN) -	work = kzalloc(sizeof(*work), GFP_ATOMIC); -	if (!work) -		return -ENOMEM; +	if (dm->vblank_control_workqueue) { +		work = kzalloc(sizeof(*work), GFP_ATOMIC); +		if (!work) +			return -ENOMEM; -	INIT_WORK(&work->work, vblank_control_worker); -	work->dm = dm; -	work->acrtc = acrtc; -	work->enable = enable; +		INIT_WORK(&work->work, vblank_control_worker); +		work->dm = dm; +		work->acrtc = acrtc; +		work->enable = enable; -	if (acrtc_state->stream) { -		dc_stream_retain(acrtc_state->stream); -		work->stream = acrtc_state->stream; -	} +		if (acrtc_state->stream) { +			dc_stream_retain(acrtc_state->stream); +			work->stream = acrtc_state->stream; +		} -	queue_work(dm->vblank_control_workqueue, &work->work); +		queue_work(dm->vblank_control_workqueue, &work->work); +	}  #endif  	return 0; @@ -8648,7 +8650,8 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,  		 * If PSR or idle optimizations are enabled then flush out  		 * any pending work before hardware programming.  		 */ -		flush_workqueue(dm->vblank_control_workqueue); +		if (dm->vblank_control_workqueue) +			flush_workqueue(dm->vblank_control_workqueue);  #endif  		bundle->stream_update.stream = acrtc_state->stream; @@ -8983,7 +8986,8 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state)  		/* if there mode set or reset, disable eDP PSR */  		if (mode_set_reset_required) {  #if defined(CONFIG_DRM_AMD_DC_DCN) -			flush_workqueue(dm->vblank_control_workqueue); +			if (dm->vblank_control_workqueue) +				flush_workqueue(dm->vblank_control_workqueue);  #endif  			amdgpu_dm_psr_disable_all(dm);  		} | 
