Quoting Kuogee Hsieh (2022-04-15 16:47:25) > diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c > index 01453db..5b289b9 100644 > --- a/drivers/gpu/drm/msm/dp/dp_display.c > +++ b/drivers/gpu/drm/msm/dp/dp_display.c > @@ -266,9 +269,18 @@ static int dp_display_bind(struct device *dev, struct device *master, > } > > rc = dp_register_audio_driver(dev, dp->audio); > - if (rc) > + if (rc) { > DRM_ERROR("Audio registration Dp failed\n"); > + goto end; > + } > > + rc = dp_hpd_event_thread_start(dp); > + if (rc) { > + DRM_ERROR("Event thread create failed\n"); One thread DRM_ERROR() > + goto end; > + } > + > + return 0; > end: > return rc; > } > @@ -1132,12 +1149,19 @@ static int hpd_event_thread(void *data) > return 0; > } > > -static void dp_hpd_event_setup(struct dp_display_private *dp_priv) > +static int dp_hpd_event_thread_start(struct dp_display_private *dp_priv) > { > - init_waitqueue_head(&dp_priv->event_q); > - spin_lock_init(&dp_priv->event_lock); > + /* set event q to empty */ > + dp_priv->event_gndx = 0; > + dp_priv->event_pndx = 0; > + > + dp_priv->ev_tsk = kthread_run(hpd_event_thread, dp_priv, "dp_hpd_handler"); > + if (IS_ERR(dp_priv->ev_tsk)) { > + DRM_ERROR("failed to create DP event thread\n"); And another thread creation DRM_ERROR(). Can we just have one please instead of two lines for something that probably never happens? > + return PTR_ERR(dp_priv->ev_tsk); > + } > > - kthread_run(hpd_event_thread, dp_priv, "dp_hpd_handler"); > + return 0; > } > > static irqreturn_t dp_display_irq_handler(int irq, void *dev_id)