mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	drm/msm: use kthread_create_worker instead of kthread_run
Use kthread_create_worker to simplify the code and optimise the manager struct: msm_drm_thread. With this change, we could remove struct element (struct task_struct *thread & struct kthread_worker worker), instead, use one point (struct kthread_worker *worker). Signed-off-by: Bernard Zhao <bernard@vivo.com> Signed-off-by: Rob Clark <robdclark@chromium.org>
This commit is contained in:
		
							parent
							
								
									974b7115a7
								
							
						
					
					
						commit
						1041dee217
					
				
					 3 changed files with 8 additions and 15 deletions
				
			
		| 
						 | 
				
			
			@ -396,7 +396,7 @@ static void dpu_crtc_frame_event_cb(void *data, u32 event)
 | 
			
		|||
	fevent->event = event;
 | 
			
		||||
	fevent->crtc = crtc;
 | 
			
		||||
	fevent->ts = ktime_get();
 | 
			
		||||
	kthread_queue_work(&priv->event_thread[crtc_id].worker, &fevent->work);
 | 
			
		||||
	kthread_queue_work(priv->event_thread[crtc_id].worker, &fevent->work);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void dpu_crtc_complete_commit(struct drm_crtc *crtc)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -252,10 +252,8 @@ static int msm_drm_uninit(struct device *dev)
 | 
			
		|||
 | 
			
		||||
	/* clean up event worker threads */
 | 
			
		||||
	for (i = 0; i < priv->num_crtcs; i++) {
 | 
			
		||||
		if (priv->event_thread[i].thread) {
 | 
			
		||||
			kthread_destroy_worker(&priv->event_thread[i].worker);
 | 
			
		||||
			priv->event_thread[i].thread = NULL;
 | 
			
		||||
		}
 | 
			
		||||
		if (priv->event_thread[i].worker)
 | 
			
		||||
			kthread_destroy_worker(priv->event_thread[i].worker);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	msm_gem_shrinker_cleanup(ddev);
 | 
			
		||||
| 
						 | 
				
			
			@ -518,19 +516,15 @@ static int msm_drm_init(struct device *dev, struct drm_driver *drv)
 | 
			
		|||
	for (i = 0; i < priv->num_crtcs; i++) {
 | 
			
		||||
		/* initialize event thread */
 | 
			
		||||
		priv->event_thread[i].crtc_id = priv->crtcs[i]->base.id;
 | 
			
		||||
		kthread_init_worker(&priv->event_thread[i].worker);
 | 
			
		||||
		priv->event_thread[i].dev = ddev;
 | 
			
		||||
		priv->event_thread[i].thread =
 | 
			
		||||
			kthread_run(kthread_worker_fn,
 | 
			
		||||
				&priv->event_thread[i].worker,
 | 
			
		||||
				"crtc_event:%d", priv->event_thread[i].crtc_id);
 | 
			
		||||
		if (IS_ERR(priv->event_thread[i].thread)) {
 | 
			
		||||
		priv->event_thread[i].worker = kthread_create_worker(0,
 | 
			
		||||
			"crtc_event:%d", priv->event_thread[i].crtc_id);
 | 
			
		||||
		if (IS_ERR(priv->event_thread[i].worker)) {
 | 
			
		||||
			DRM_DEV_ERROR(dev, "failed to create crtc_event kthread\n");
 | 
			
		||||
			priv->event_thread[i].thread = NULL;
 | 
			
		||||
			goto err_msm_uninit;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		ret = sched_setscheduler(priv->event_thread[i].thread,
 | 
			
		||||
		ret = sched_setscheduler(priv->event_thread[i].worker->task,
 | 
			
		||||
					 SCHED_FIFO, ¶m);
 | 
			
		||||
		if (ret)
 | 
			
		||||
			dev_warn(dev, "event_thread set priority failed:%d\n",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -129,9 +129,8 @@ struct msm_display_info {
 | 
			
		|||
/* Commit/Event thread specific structure */
 | 
			
		||||
struct msm_drm_thread {
 | 
			
		||||
	struct drm_device *dev;
 | 
			
		||||
	struct task_struct *thread;
 | 
			
		||||
	unsigned int crtc_id;
 | 
			
		||||
	struct kthread_worker worker;
 | 
			
		||||
	struct kthread_worker *worker;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct msm_drm_private {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue