On Fri, Nov 30, 2018 at 05:00:02PM -0500, Sean Paul wrote: > From: Sean Paul <seanpaul@xxxxxxxxxxxx> > > This patch wraps dpu_core_perf_crtc_release_bw() with modeset locks > since it digs into the state objects. > > Changes in v2: > - None > Changes in v3: > - Use those nifty new DRM_MODESET_LOCK_ALL_* helpers (Daniel) > > Cc: Daniel Vetter <daniel@xxxxxxxx> > Cc: Jeykumar Sankaran <jsanka@xxxxxxxxxxxxxx> > Signed-off-by: Sean Paul <seanpaul@xxxxxxxxxxxx> > --- > drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 15 ++++++++++++++- > 1 file changed, 14 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c > index 74ef384d9cd6a..03ddd281a354f 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c > @@ -306,6 +306,19 @@ static void dpu_crtc_vblank_cb(void *data) > trace_dpu_crtc_vblank_cb(DRMID(crtc)); > } > > +static void dpu_crtc_release_bw_unlocked(struct drm_crtc *crtc) > +{ > + int ret = 0; > + struct drm_modeset_acquire_ctx ctx; > + > + DRM_MODESET_LOCK_ALL_BEGIN(crtc->dev, ctx, 0, ret); > + dpu_core_perf_crtc_release_bw(crtc); > + DRM_MODESET_LOCK_ALL_END(ctx, ret); Sooooo pretty, and correct even :-) Acked-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > + if (ret) > + DRM_ERROR("Failed to acquire modeset locks to release bw, %d\n", > + ret); > +} > + > static void dpu_crtc_frame_event_work(struct kthread_work *work) > { > struct dpu_crtc_frame_event *fevent = container_of(work, > @@ -335,7 +348,7 @@ static void dpu_crtc_frame_event_work(struct kthread_work *work) > /* release bandwidth and other resources */ > trace_dpu_crtc_frame_event_done(DRMID(crtc), > fevent->event); > - dpu_core_perf_crtc_release_bw(crtc); > + dpu_crtc_release_bw_unlocked(crtc); > } else { > trace_dpu_crtc_frame_event_more_pending(DRMID(crtc), > fevent->event); > -- > Sean Paul, Software Engineer, Google / Chromium OS > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch