* [PATCH 1/3] drm/msm: dpu: Clear frame_busy_mask bit after trace
@ 2018-09-19 18:33 Sean Paul
[not found] ` <20180919183426.200909-1-sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org>
2018-09-19 20:01 ` [PATCH 1/3] drm/msm: dpu: Clear frame_busy_mask bit after trace Abhinav Kumar
0 siblings, 2 replies; 7+ messages in thread
From: Sean Paul @ 2018-09-19 18:33 UTC (permalink / raw)
To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
linux-arm-msm-u79uwXL29TY76Z2rM5mHXA
Cc: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
jsanka-sgV2jX0FEOL9JmXXK+q4OQ, Sean Paul, Rob Clark,
abhinavk-sgV2jX0FEOL9JmXXK+q4OQ
From: Sean Paul <seanpaul@chromium.org>
We're printing the frame_busy_mask in a trace, but after it's been
cleared. This, as it turns out, is pretty pointless.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
---
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
index c2e8985b4c54..e56f29190121 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
@@ -1361,9 +1361,9 @@ static void dpu_encoder_frame_done_callback(
/* One of the physical encoders has become idle */
for (i = 0; i < dpu_enc->num_phys_encs; i++) {
if (dpu_enc->phys_encs[i] == ready_phys) {
- clear_bit(i, dpu_enc->frame_busy_mask);
trace_dpu_enc_frame_done_cb(DRMID(drm_enc), i,
dpu_enc->frame_busy_mask[0]);
+ clear_bit(i, dpu_enc->frame_busy_mask);
}
}
--
Sean Paul, Software Engineer, Google / Chromium OS
_______________________________________________
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno
^ permalink raw reply related [flat|nested] 7+ messages in thread[parent not found: <20180919183426.200909-1-sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org>]
* [PATCH 2/3] drm/msm: dpu: Add extra_flush_bits to trigger_flush trace [not found] ` <20180919183426.200909-1-sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org> @ 2018-09-19 18:33 ` Sean Paul 2018-09-19 20:01 ` Abhinav Kumar 2018-09-19 18:33 ` [PATCH 3/3] drm/msm: dpu: Don't store/deref pointers in trace ringbuffer Sean Paul 1 sibling, 1 reply; 7+ messages in thread From: Sean Paul @ 2018-09-19 18:33 UTC (permalink / raw) To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA Cc: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, jsanka-sgV2jX0FEOL9JmXXK+q4OQ, Sean Paul, Rob Clark, abhinavk-sgV2jX0FEOL9JmXXK+q4OQ From: Sean Paul <seanpaul@chromium.org> It's useful to know which bits of the flush come from "extra_flush_bits" Signed-off-by: Sean Paul <seanpaul@chromium.org> --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 3 ++- drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h | 14 +++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c index e56f29190121..8f6880db5c99 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -1444,7 +1444,8 @@ static inline void _dpu_encoder_trigger_flush(struct drm_encoder *drm_enc, ret = ctl->ops.get_pending_flush(ctl); trace_dpu_enc_trigger_flush(DRMID(drm_enc), phys->intf_idx, - pending_kickoff_cnt, ctl->idx, ret); + pending_kickoff_cnt, ctl->idx, + extra_flush_bits, ret); } /** diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h index 0be51db02f2e..ae6b0c51ba52 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h @@ -468,14 +468,16 @@ TRACE_EVENT(dpu_enc_frame_done_cb, TRACE_EVENT(dpu_enc_trigger_flush, TP_PROTO(uint32_t drm_id, enum dpu_intf intf_idx, - int pending_kickoff_cnt, int ctl_idx, u32 pending_flush_ret), + int pending_kickoff_cnt, int ctl_idx, u32 extra_flush_bits, + u32 pending_flush_ret), TP_ARGS(drm_id, intf_idx, pending_kickoff_cnt, ctl_idx, - pending_flush_ret), + extra_flush_bits, pending_flush_ret), TP_STRUCT__entry( __field( uint32_t, drm_id ) __field( enum dpu_intf, intf_idx ) __field( int, pending_kickoff_cnt ) __field( int, ctl_idx ) + __field( u32, extra_flush_bits ) __field( u32, pending_flush_ret ) ), TP_fast_assign( @@ -483,12 +485,14 @@ TRACE_EVENT(dpu_enc_trigger_flush, __entry->intf_idx = intf_idx; __entry->pending_kickoff_cnt = pending_kickoff_cnt; __entry->ctl_idx = ctl_idx; + __entry->extra_flush_bits = extra_flush_bits; __entry->pending_flush_ret = pending_flush_ret; ), TP_printk("id=%u, intf_idx=%d, pending_kickoff_cnt=%d ctl_idx=%d " - "pending_flush_ret=%u", __entry->drm_id, - __entry->intf_idx, __entry->pending_kickoff_cnt, - __entry->ctl_idx, __entry->pending_flush_ret) + "extra_flush_bits=0x%x pending_flush_ret=0x%x", + __entry->drm_id, __entry->intf_idx, + __entry->pending_kickoff_cnt, __entry->ctl_idx, + __entry->extra_flush_bits, __entry->pending_flush_ret) ); DECLARE_EVENT_CLASS(dpu_enc_ktime_template, -- Sean Paul, Software Engineer, Google / Chromium OS _______________________________________________ Freedreno mailing list Freedreno@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/freedreno ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 2/3] drm/msm: dpu: Add extra_flush_bits to trigger_flush trace 2018-09-19 18:33 ` [PATCH 2/3] drm/msm: dpu: Add extra_flush_bits to trigger_flush trace Sean Paul @ 2018-09-19 20:01 ` Abhinav Kumar 0 siblings, 0 replies; 7+ messages in thread From: Abhinav Kumar @ 2018-09-19 20:01 UTC (permalink / raw) To: Sean Paul; +Cc: linux-arm-msm, dri-devel, Sean Paul, freedreno On 2018-09-19 11:33, Sean Paul wrote: > From: Sean Paul <seanpaul@chromium.org> > > It's useful to know which bits of the flush come from > "extra_flush_bits" > > Signed-off-by: Sean Paul <seanpaul@chromium.org> Reviewed-by: Abhinav Kumar <abhinavk@codeaurora.org> > --- > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 3 ++- > drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h | 14 +++++++++----- > 2 files changed, 11 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > index e56f29190121..8f6880db5c99 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > @@ -1444,7 +1444,8 @@ static inline void > _dpu_encoder_trigger_flush(struct drm_encoder *drm_enc, > ret = ctl->ops.get_pending_flush(ctl); > > trace_dpu_enc_trigger_flush(DRMID(drm_enc), phys->intf_idx, > - pending_kickoff_cnt, ctl->idx, ret); > + pending_kickoff_cnt, ctl->idx, > + extra_flush_bits, ret); > } > > /** > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h > b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h > index 0be51db02f2e..ae6b0c51ba52 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h > @@ -468,14 +468,16 @@ TRACE_EVENT(dpu_enc_frame_done_cb, > > TRACE_EVENT(dpu_enc_trigger_flush, > TP_PROTO(uint32_t drm_id, enum dpu_intf intf_idx, > - int pending_kickoff_cnt, int ctl_idx, u32 pending_flush_ret), > + int pending_kickoff_cnt, int ctl_idx, u32 extra_flush_bits, > + u32 pending_flush_ret), > TP_ARGS(drm_id, intf_idx, pending_kickoff_cnt, ctl_idx, > - pending_flush_ret), > + extra_flush_bits, pending_flush_ret), > TP_STRUCT__entry( > __field( uint32_t, drm_id ) > __field( enum dpu_intf, intf_idx ) > __field( int, pending_kickoff_cnt ) > __field( int, ctl_idx ) > + __field( u32, extra_flush_bits ) > __field( u32, pending_flush_ret ) > ), > TP_fast_assign( > @@ -483,12 +485,14 @@ TRACE_EVENT(dpu_enc_trigger_flush, > __entry->intf_idx = intf_idx; > __entry->pending_kickoff_cnt = pending_kickoff_cnt; > __entry->ctl_idx = ctl_idx; > + __entry->extra_flush_bits = extra_flush_bits; > __entry->pending_flush_ret = pending_flush_ret; > ), > TP_printk("id=%u, intf_idx=%d, pending_kickoff_cnt=%d ctl_idx=%d " > - "pending_flush_ret=%u", __entry->drm_id, > - __entry->intf_idx, __entry->pending_kickoff_cnt, > - __entry->ctl_idx, __entry->pending_flush_ret) > + "extra_flush_bits=0x%x pending_flush_ret=0x%x", > + __entry->drm_id, __entry->intf_idx, > + __entry->pending_kickoff_cnt, __entry->ctl_idx, > + __entry->extra_flush_bits, __entry->pending_flush_ret) > ); > > DECLARE_EVENT_CLASS(dpu_enc_ktime_template, _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 3/3] drm/msm: dpu: Don't store/deref pointers in trace ringbuffer [not found] ` <20180919183426.200909-1-sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org> 2018-09-19 18:33 ` [PATCH 2/3] drm/msm: dpu: Add extra_flush_bits to trigger_flush trace Sean Paul @ 2018-09-19 18:33 ` Sean Paul [not found] ` <20180919183426.200909-3-sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org> 1 sibling, 1 reply; 7+ messages in thread From: Sean Paul @ 2018-09-19 18:33 UTC (permalink / raw) To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA Cc: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, jsanka-sgV2jX0FEOL9JmXXK+q4OQ, Sean Paul, Rob Clark, abhinavk-sgV2jX0FEOL9JmXXK+q4OQ From: Sean Paul <seanpaul@chromium.org> TP_printk is not synchronous, so storing pointers and then later derferencing them is a Bad Idea. This patch stores everything locally to avoid display stomped memory. Signed-off-by: Sean Paul <seanpaul@chromium.org> --- drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h | 98 +++++++++++++---------- 1 file changed, 55 insertions(+), 43 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h index ae6b0c51ba52..e12c4cefb742 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h @@ -686,37 +686,41 @@ TRACE_EVENT(dpu_crtc_setup_mixer, TP_STRUCT__entry( __field( uint32_t, crtc_id ) __field( uint32_t, plane_id ) - __field( struct drm_plane_state*,state ) - __field( struct dpu_plane_state*,pstate ) + __field( uint32_t, fb_id ) + __field_struct( struct drm_rect, src_rect ) + __field_struct( struct drm_rect, dst_rect ) __field( uint32_t, stage_idx ) + __field( enum dpu_stage, stage ) __field( enum dpu_sspp, sspp ) + __field( uint32_t, multirect_idx ) + __field( uint32_t, multirect_mode ) __field( uint32_t, pixel_format ) __field( uint64_t, modifier ) ), TP_fast_assign( __entry->crtc_id = crtc_id; __entry->plane_id = plane_id; - __entry->state = state; - __entry->pstate = pstate; + __entry->fb_id = state ? state->fb->base.id : 0; + __entry->src_rect = drm_plane_state_src(state); + __entry->dst_rect = drm_plane_state_dest(state); __entry->stage_idx = stage_idx; + __entry->stage = pstate->stage; __entry->sspp = sspp; + __entry->multirect_idx = pstate->multirect_index; + __entry->multirect_mode = pstate->multirect_mode; __entry->pixel_format = pixel_format; __entry->modifier = modifier; ), - TP_printk("crtc_id:%u plane_id:%u fb_id:%u src:{%ux%u+%ux%u} " - "dst:{%ux%u+%ux%u} stage_idx:%u stage:%d, sspp:%d " + TP_printk("crtc_id:%u plane_id:%u fb_id:%u src:" DRM_RECT_FP_FMT + " dst:" DRM_RECT_FMT " stage_idx:%u stage:%d, sspp:%d " "multirect_index:%d multirect_mode:%u pix_format:%u " "modifier:%llu", - __entry->crtc_id, __entry->plane_id, - __entry->state->fb ? __entry->state->fb->base.id : -1, - __entry->state->src_w >> 16, __entry->state->src_h >> 16, - __entry->state->src_x >> 16, __entry->state->src_y >> 16, - __entry->state->crtc_w, __entry->state->crtc_h, - __entry->state->crtc_x, __entry->state->crtc_y, - __entry->stage_idx, __entry->pstate->stage, __entry->sspp, - __entry->pstate->multirect_index, - __entry->pstate->multirect_mode, __entry->pixel_format, - __entry->modifier) + __entry->crtc_id, __entry->plane_id, __entry->fb_id, + DRM_RECT_FP_ARG(&__entry->src_rect), + DRM_RECT_ARG(&__entry->dst_rect), + __entry->stage_idx, __entry->stage, __entry->sspp, + __entry->multirect_idx, __entry->multirect_mode, + __entry->pixel_format, __entry->modifier) ); TRACE_EVENT(dpu_crtc_setup_lm_bounds, @@ -725,15 +729,15 @@ TRACE_EVENT(dpu_crtc_setup_lm_bounds, TP_STRUCT__entry( __field( uint32_t, drm_id ) __field( int, mixer ) - __field( struct drm_rect *, bounds ) + __field_struct( struct drm_rect, bounds ) ), TP_fast_assign( __entry->drm_id = drm_id; __entry->mixer = mixer; - __entry->bounds = bounds; + __entry->bounds = *bounds; ), TP_printk("id:%u mixer:%d bounds:" DRM_RECT_FMT, __entry->drm_id, - __entry->mixer, DRM_RECT_ARG(__entry->bounds)) + __entry->mixer, DRM_RECT_ARG(&__entry->bounds)) ); TRACE_EVENT(dpu_crtc_vblank_enable, @@ -744,21 +748,25 @@ TRACE_EVENT(dpu_crtc_vblank_enable, __field( uint32_t, drm_id ) __field( uint32_t, enc_id ) __field( bool, enable ) - __field( struct dpu_crtc *, crtc ) + __field( bool, enabled ) + __field( bool, suspend ) + __field( bool, vblank_requested ) ), TP_fast_assign( __entry->drm_id = drm_id; __entry->enc_id = enc_id; __entry->enable = enable; - __entry->crtc = crtc; + __entry->enabled = crtc->enabled; + __entry->suspend = crtc->suspend; + __entry->vblank_requested = crtc->vblank_requested; ), TP_printk("id:%u encoder:%u enable:%s state{enabled:%s suspend:%s " "vblank_req:%s}", __entry->drm_id, __entry->enc_id, __entry->enable ? "true" : "false", - __entry->crtc->enabled ? "true" : "false", - __entry->crtc->suspend ? "true" : "false", - __entry->crtc->vblank_requested ? "true" : "false") + __entry->enabled ? "true" : "false", + __entry->suspend ? "true" : "false", + __entry->vblank_requested ? "true" : "false") ); DECLARE_EVENT_CLASS(dpu_crtc_enable_template, @@ -767,18 +775,22 @@ DECLARE_EVENT_CLASS(dpu_crtc_enable_template, TP_STRUCT__entry( __field( uint32_t, drm_id ) __field( bool, enable ) - __field( struct dpu_crtc *, crtc ) + __field( bool, enabled ) + __field( bool, suspend ) + __field( bool, vblank_requested ) ), TP_fast_assign( __entry->drm_id = drm_id; __entry->enable = enable; - __entry->crtc = crtc; + __entry->enabled = crtc->enabled; + __entry->suspend = crtc->suspend; + __entry->vblank_requested = crtc->vblank_requested; ), TP_printk("id:%u enable:%s state{enabled:%s suspend:%s vblank_req:%s}", __entry->drm_id, __entry->enable ? "true" : "false", - __entry->crtc->enabled ? "true" : "false", - __entry->crtc->suspend ? "true" : "false", - __entry->crtc->vblank_requested ? "true" : "false") + __entry->enabled ? "true" : "false", + __entry->suspend ? "true" : "false", + __entry->vblank_requested ? "true" : "false") ); DEFINE_EVENT(dpu_crtc_enable_template, dpu_crtc_set_suspend, TP_PROTO(uint32_t drm_id, bool enable, struct dpu_crtc *crtc), @@ -818,24 +830,24 @@ TRACE_EVENT(dpu_plane_set_scanout, TP_ARGS(index, layout, multirect_index), TP_STRUCT__entry( __field( enum dpu_sspp, index ) - __field( struct dpu_hw_fmt_layout*, layout ) + __field_struct( struct dpu_hw_fmt_layout, layout ) __field( enum dpu_sspp_multirect_index, multirect_index) ), TP_fast_assign( __entry->index = index; - __entry->layout = layout; + __entry->layout = *layout; __entry->multirect_index = multirect_index; ), TP_printk("index:%d layout:{%ux%u @ [%u/%u, %u/%u, %u/%u, %u/%u]} " - "multirect_index:%d", __entry->index, __entry->layout->width, - __entry->layout->height, __entry->layout->plane_addr[0], - __entry->layout->plane_size[0], - __entry->layout->plane_addr[1], - __entry->layout->plane_size[1], - __entry->layout->plane_addr[2], - __entry->layout->plane_size[2], - __entry->layout->plane_addr[3], - __entry->layout->plane_size[3], __entry->multirect_index) + "multirect_index:%d", __entry->index, __entry->layout.width, + __entry->layout.height, __entry->layout.plane_addr[0], + __entry->layout.plane_size[0], + __entry->layout.plane_addr[1], + __entry->layout.plane_size[1], + __entry->layout.plane_addr[2], + __entry->layout.plane_size[2], + __entry->layout.plane_addr[3], + __entry->layout.plane_size[3], __entry->multirect_index) ); TRACE_EVENT(dpu_plane_disable, @@ -979,16 +991,16 @@ TRACE_EVENT(dpu_core_perf_update_clk, TP_PROTO(struct drm_device *dev, bool stop_req, u64 clk_rate), TP_ARGS(dev, stop_req, clk_rate), TP_STRUCT__entry( - __field( struct drm_device *, dev ) + __string( dev_name, dev->unique ) __field( bool, stop_req ) __field( u64, clk_rate ) ), TP_fast_assign( - __entry->dev = dev; + __assign_str(dev_name, dev->unique); __entry->stop_req = stop_req; __entry->clk_rate = clk_rate; ), - TP_printk("dev:%s stop_req:%s clk_rate:%llu", __entry->dev->unique, + TP_printk("dev:%s stop_req:%s clk_rate:%llu", __get_str(dev_name), __entry->stop_req ? "true" : "false", __entry->clk_rate) ); -- Sean Paul, Software Engineer, Google / Chromium OS _______________________________________________ Freedreno mailing list Freedreno@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/freedreno ^ permalink raw reply related [flat|nested] 7+ messages in thread
[parent not found: <20180919183426.200909-3-sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org>]
* Re: [PATCH 3/3] drm/msm: dpu: Don't store/deref pointers in trace ringbuffer [not found] ` <20180919183426.200909-3-sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org> @ 2018-09-19 20:04 ` Abhinav Kumar [not found] ` <84074f78534e74d92f1912846a4c570b-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> 0 siblings, 1 reply; 7+ messages in thread From: Abhinav Kumar @ 2018-09-19 20:04 UTC (permalink / raw) To: Sean Paul Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, Rob Clark, Sean Paul, jsanka-sgV2jX0FEOL9JmXXK+q4OQ, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, linux-arm-msm-owner-u79uwXL29TY76Z2rM5mHXA On 2018-09-19 11:33, Sean Paul wrote: > From: Sean Paul <seanpaul@chromium.org> > > TP_printk is not synchronous, so storing pointers and then later > derferencing them is a Bad Idea. This patch stores everything locally > to minor typo "dereferencing", > avoid display stomped memory. > > Signed-off-by: Sean Paul <seanpaul@chromium.org> After fixing the minor nit please add, Reviewed-by: Abhinav Kumar <abhinavk@codeaurora.org> > --- > drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h | 98 +++++++++++++---------- > 1 file changed, 55 insertions(+), 43 deletions(-) > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h > b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h > index ae6b0c51ba52..e12c4cefb742 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h > @@ -686,37 +686,41 @@ TRACE_EVENT(dpu_crtc_setup_mixer, > TP_STRUCT__entry( > __field( uint32_t, crtc_id ) > __field( uint32_t, plane_id ) > - __field( struct drm_plane_state*,state ) > - __field( struct dpu_plane_state*,pstate ) > + __field( uint32_t, fb_id ) > + __field_struct( struct drm_rect, src_rect ) > + __field_struct( struct drm_rect, dst_rect ) > __field( uint32_t, stage_idx ) > + __field( enum dpu_stage, stage ) > __field( enum dpu_sspp, sspp ) > + __field( uint32_t, multirect_idx ) > + __field( uint32_t, multirect_mode ) > __field( uint32_t, pixel_format ) > __field( uint64_t, modifier ) > ), > TP_fast_assign( > __entry->crtc_id = crtc_id; > __entry->plane_id = plane_id; > - __entry->state = state; > - __entry->pstate = pstate; > + __entry->fb_id = state ? state->fb->base.id : 0; > + __entry->src_rect = drm_plane_state_src(state); > + __entry->dst_rect = drm_plane_state_dest(state); > __entry->stage_idx = stage_idx; > + __entry->stage = pstate->stage; > __entry->sspp = sspp; > + __entry->multirect_idx = pstate->multirect_index; > + __entry->multirect_mode = pstate->multirect_mode; > __entry->pixel_format = pixel_format; > __entry->modifier = modifier; > ), > - TP_printk("crtc_id:%u plane_id:%u fb_id:%u src:{%ux%u+%ux%u} " > - "dst:{%ux%u+%ux%u} stage_idx:%u stage:%d, sspp:%d " > + TP_printk("crtc_id:%u plane_id:%u fb_id:%u src:" DRM_RECT_FP_FMT > + " dst:" DRM_RECT_FMT " stage_idx:%u stage:%d, sspp:%d " > "multirect_index:%d multirect_mode:%u pix_format:%u " > "modifier:%llu", > - __entry->crtc_id, __entry->plane_id, > - __entry->state->fb ? __entry->state->fb->base.id : -1, > - __entry->state->src_w >> 16, __entry->state->src_h >> 16, > - __entry->state->src_x >> 16, __entry->state->src_y >> 16, > - __entry->state->crtc_w, __entry->state->crtc_h, > - __entry->state->crtc_x, __entry->state->crtc_y, > - __entry->stage_idx, __entry->pstate->stage, __entry->sspp, > - __entry->pstate->multirect_index, > - __entry->pstate->multirect_mode, __entry->pixel_format, > - __entry->modifier) > + __entry->crtc_id, __entry->plane_id, __entry->fb_id, > + DRM_RECT_FP_ARG(&__entry->src_rect), > + DRM_RECT_ARG(&__entry->dst_rect), > + __entry->stage_idx, __entry->stage, __entry->sspp, > + __entry->multirect_idx, __entry->multirect_mode, > + __entry->pixel_format, __entry->modifier) > ); > > TRACE_EVENT(dpu_crtc_setup_lm_bounds, > @@ -725,15 +729,15 @@ TRACE_EVENT(dpu_crtc_setup_lm_bounds, > TP_STRUCT__entry( > __field( uint32_t, drm_id ) > __field( int, mixer ) > - __field( struct drm_rect *, bounds ) > + __field_struct( struct drm_rect, bounds ) > ), > TP_fast_assign( > __entry->drm_id = drm_id; > __entry->mixer = mixer; > - __entry->bounds = bounds; > + __entry->bounds = *bounds; > ), > TP_printk("id:%u mixer:%d bounds:" DRM_RECT_FMT, __entry->drm_id, > - __entry->mixer, DRM_RECT_ARG(__entry->bounds)) > + __entry->mixer, DRM_RECT_ARG(&__entry->bounds)) > ); > > TRACE_EVENT(dpu_crtc_vblank_enable, > @@ -744,21 +748,25 @@ TRACE_EVENT(dpu_crtc_vblank_enable, > __field( uint32_t, drm_id ) > __field( uint32_t, enc_id ) > __field( bool, enable ) > - __field( struct dpu_crtc *, crtc ) > + __field( bool, enabled ) > + __field( bool, suspend ) > + __field( bool, vblank_requested ) > ), > TP_fast_assign( > __entry->drm_id = drm_id; > __entry->enc_id = enc_id; > __entry->enable = enable; > - __entry->crtc = crtc; > + __entry->enabled = crtc->enabled; > + __entry->suspend = crtc->suspend; > + __entry->vblank_requested = crtc->vblank_requested; > ), > TP_printk("id:%u encoder:%u enable:%s state{enabled:%s suspend:%s " > "vblank_req:%s}", > __entry->drm_id, __entry->enc_id, > __entry->enable ? "true" : "false", > - __entry->crtc->enabled ? "true" : "false", > - __entry->crtc->suspend ? "true" : "false", > - __entry->crtc->vblank_requested ? "true" : "false") > + __entry->enabled ? "true" : "false", > + __entry->suspend ? "true" : "false", > + __entry->vblank_requested ? "true" : "false") > ); > > DECLARE_EVENT_CLASS(dpu_crtc_enable_template, > @@ -767,18 +775,22 @@ DECLARE_EVENT_CLASS(dpu_crtc_enable_template, > TP_STRUCT__entry( > __field( uint32_t, drm_id ) > __field( bool, enable ) > - __field( struct dpu_crtc *, crtc ) > + __field( bool, enabled ) > + __field( bool, suspend ) > + __field( bool, vblank_requested ) > ), > TP_fast_assign( > __entry->drm_id = drm_id; > __entry->enable = enable; > - __entry->crtc = crtc; > + __entry->enabled = crtc->enabled; > + __entry->suspend = crtc->suspend; > + __entry->vblank_requested = crtc->vblank_requested; > ), > TP_printk("id:%u enable:%s state{enabled:%s suspend:%s > vblank_req:%s}", > __entry->drm_id, __entry->enable ? "true" : "false", > - __entry->crtc->enabled ? "true" : "false", > - __entry->crtc->suspend ? "true" : "false", > - __entry->crtc->vblank_requested ? "true" : "false") > + __entry->enabled ? "true" : "false", > + __entry->suspend ? "true" : "false", > + __entry->vblank_requested ? "true" : "false") > ); > DEFINE_EVENT(dpu_crtc_enable_template, dpu_crtc_set_suspend, > TP_PROTO(uint32_t drm_id, bool enable, struct dpu_crtc *crtc), > @@ -818,24 +830,24 @@ TRACE_EVENT(dpu_plane_set_scanout, > TP_ARGS(index, layout, multirect_index), > TP_STRUCT__entry( > __field( enum dpu_sspp, index ) > - __field( struct dpu_hw_fmt_layout*, layout ) > + __field_struct( struct dpu_hw_fmt_layout, layout ) > __field( enum dpu_sspp_multirect_index, multirect_index) > ), > TP_fast_assign( > __entry->index = index; > - __entry->layout = layout; > + __entry->layout = *layout; > __entry->multirect_index = multirect_index; > ), > TP_printk("index:%d layout:{%ux%u @ [%u/%u, %u/%u, %u/%u, %u/%u]} " > - "multirect_index:%d", __entry->index, __entry->layout->width, > - __entry->layout->height, __entry->layout->plane_addr[0], > - __entry->layout->plane_size[0], > - __entry->layout->plane_addr[1], > - __entry->layout->plane_size[1], > - __entry->layout->plane_addr[2], > - __entry->layout->plane_size[2], > - __entry->layout->plane_addr[3], > - __entry->layout->plane_size[3], __entry->multirect_index) > + "multirect_index:%d", __entry->index, __entry->layout.width, > + __entry->layout.height, __entry->layout.plane_addr[0], > + __entry->layout.plane_size[0], > + __entry->layout.plane_addr[1], > + __entry->layout.plane_size[1], > + __entry->layout.plane_addr[2], > + __entry->layout.plane_size[2], > + __entry->layout.plane_addr[3], > + __entry->layout.plane_size[3], __entry->multirect_index) > ); > > TRACE_EVENT(dpu_plane_disable, > @@ -979,16 +991,16 @@ TRACE_EVENT(dpu_core_perf_update_clk, > TP_PROTO(struct drm_device *dev, bool stop_req, u64 clk_rate), > TP_ARGS(dev, stop_req, clk_rate), > TP_STRUCT__entry( > - __field( struct drm_device *, dev ) > + __string( dev_name, dev->unique ) > __field( bool, stop_req ) > __field( u64, clk_rate ) > ), > TP_fast_assign( > - __entry->dev = dev; > + __assign_str(dev_name, dev->unique); > __entry->stop_req = stop_req; > __entry->clk_rate = clk_rate; > ), > - TP_printk("dev:%s stop_req:%s clk_rate:%llu", __entry->dev->unique, > + TP_printk("dev:%s stop_req:%s clk_rate:%llu", __get_str(dev_name), > __entry->stop_req ? "true" : "false", __entry->clk_rate) > ); _______________________________________________ Freedreno mailing list Freedreno@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/freedreno ^ permalink raw reply [flat|nested] 7+ messages in thread
[parent not found: <84074f78534e74d92f1912846a4c570b-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>]
* Re: [PATCH 3/3] drm/msm: dpu: Don't store/deref pointers in trace ringbuffer [not found] ` <84074f78534e74d92f1912846a4c570b-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> @ 2018-09-19 20:53 ` Sean Paul 0 siblings, 0 replies; 7+ messages in thread From: Sean Paul @ 2018-09-19 20:53 UTC (permalink / raw) To: Abhinav Kumar Cc: Sean Paul, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, Rob Clark, Sean Paul, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA, jsanka-sgV2jX0FEOL9JmXXK+q4OQ, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, linux-arm-msm-owner-u79uwXL29TY76Z2rM5mHXA On Wed, Sep 19, 2018 at 01:04:42PM -0700, Abhinav Kumar wrote: > On 2018-09-19 11:33, Sean Paul wrote: > > From: Sean Paul <seanpaul@chromium.org> > > > > TP_printk is not synchronous, so storing pointers and then later > > derferencing them is a Bad Idea. This patch stores everything locally to > minor typo "dereferencing", > > avoid display stomped memory. > > > > Signed-off-by: Sean Paul <seanpaul@chromium.org> > After fixing the minor nit please add, > Reviewed-by: Abhinav Kumar <abhinavk@codeaurora.org> Thanks for the reviews, Abhinav, I've stuffed the set in dpu-staging/for-next. Sean > > --- > > drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h | 98 +++++++++++++---------- > > 1 file changed, 55 insertions(+), 43 deletions(-) > > > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h > > b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h > > index ae6b0c51ba52..e12c4cefb742 100644 > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h > > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h > > @@ -686,37 +686,41 @@ TRACE_EVENT(dpu_crtc_setup_mixer, > > TP_STRUCT__entry( > > __field( uint32_t, crtc_id ) > > __field( uint32_t, plane_id ) > > - __field( struct drm_plane_state*,state ) > > - __field( struct dpu_plane_state*,pstate ) > > + __field( uint32_t, fb_id ) > > + __field_struct( struct drm_rect, src_rect ) > > + __field_struct( struct drm_rect, dst_rect ) > > __field( uint32_t, stage_idx ) > > + __field( enum dpu_stage, stage ) > > __field( enum dpu_sspp, sspp ) > > + __field( uint32_t, multirect_idx ) > > + __field( uint32_t, multirect_mode ) > > __field( uint32_t, pixel_format ) > > __field( uint64_t, modifier ) > > ), > > TP_fast_assign( > > __entry->crtc_id = crtc_id; > > __entry->plane_id = plane_id; > > - __entry->state = state; > > - __entry->pstate = pstate; > > + __entry->fb_id = state ? state->fb->base.id : 0; > > + __entry->src_rect = drm_plane_state_src(state); > > + __entry->dst_rect = drm_plane_state_dest(state); > > __entry->stage_idx = stage_idx; > > + __entry->stage = pstate->stage; > > __entry->sspp = sspp; > > + __entry->multirect_idx = pstate->multirect_index; > > + __entry->multirect_mode = pstate->multirect_mode; > > __entry->pixel_format = pixel_format; > > __entry->modifier = modifier; > > ), > > - TP_printk("crtc_id:%u plane_id:%u fb_id:%u src:{%ux%u+%ux%u} " > > - "dst:{%ux%u+%ux%u} stage_idx:%u stage:%d, sspp:%d " > > + TP_printk("crtc_id:%u plane_id:%u fb_id:%u src:" DRM_RECT_FP_FMT > > + " dst:" DRM_RECT_FMT " stage_idx:%u stage:%d, sspp:%d " > > "multirect_index:%d multirect_mode:%u pix_format:%u " > > "modifier:%llu", > > - __entry->crtc_id, __entry->plane_id, > > - __entry->state->fb ? __entry->state->fb->base.id : -1, > > - __entry->state->src_w >> 16, __entry->state->src_h >> 16, > > - __entry->state->src_x >> 16, __entry->state->src_y >> 16, > > - __entry->state->crtc_w, __entry->state->crtc_h, > > - __entry->state->crtc_x, __entry->state->crtc_y, > > - __entry->stage_idx, __entry->pstate->stage, __entry->sspp, > > - __entry->pstate->multirect_index, > > - __entry->pstate->multirect_mode, __entry->pixel_format, > > - __entry->modifier) > > + __entry->crtc_id, __entry->plane_id, __entry->fb_id, > > + DRM_RECT_FP_ARG(&__entry->src_rect), > > + DRM_RECT_ARG(&__entry->dst_rect), > > + __entry->stage_idx, __entry->stage, __entry->sspp, > > + __entry->multirect_idx, __entry->multirect_mode, > > + __entry->pixel_format, __entry->modifier) > > ); > > > > TRACE_EVENT(dpu_crtc_setup_lm_bounds, > > @@ -725,15 +729,15 @@ TRACE_EVENT(dpu_crtc_setup_lm_bounds, > > TP_STRUCT__entry( > > __field( uint32_t, drm_id ) > > __field( int, mixer ) > > - __field( struct drm_rect *, bounds ) > > + __field_struct( struct drm_rect, bounds ) > > ), > > TP_fast_assign( > > __entry->drm_id = drm_id; > > __entry->mixer = mixer; > > - __entry->bounds = bounds; > > + __entry->bounds = *bounds; > > ), > > TP_printk("id:%u mixer:%d bounds:" DRM_RECT_FMT, __entry->drm_id, > > - __entry->mixer, DRM_RECT_ARG(__entry->bounds)) > > + __entry->mixer, DRM_RECT_ARG(&__entry->bounds)) > > ); > > > > TRACE_EVENT(dpu_crtc_vblank_enable, > > @@ -744,21 +748,25 @@ TRACE_EVENT(dpu_crtc_vblank_enable, > > __field( uint32_t, drm_id ) > > __field( uint32_t, enc_id ) > > __field( bool, enable ) > > - __field( struct dpu_crtc *, crtc ) > > + __field( bool, enabled ) > > + __field( bool, suspend ) > > + __field( bool, vblank_requested ) > > ), > > TP_fast_assign( > > __entry->drm_id = drm_id; > > __entry->enc_id = enc_id; > > __entry->enable = enable; > > - __entry->crtc = crtc; > > + __entry->enabled = crtc->enabled; > > + __entry->suspend = crtc->suspend; > > + __entry->vblank_requested = crtc->vblank_requested; > > ), > > TP_printk("id:%u encoder:%u enable:%s state{enabled:%s suspend:%s " > > "vblank_req:%s}", > > __entry->drm_id, __entry->enc_id, > > __entry->enable ? "true" : "false", > > - __entry->crtc->enabled ? "true" : "false", > > - __entry->crtc->suspend ? "true" : "false", > > - __entry->crtc->vblank_requested ? "true" : "false") > > + __entry->enabled ? "true" : "false", > > + __entry->suspend ? "true" : "false", > > + __entry->vblank_requested ? "true" : "false") > > ); > > > > DECLARE_EVENT_CLASS(dpu_crtc_enable_template, > > @@ -767,18 +775,22 @@ DECLARE_EVENT_CLASS(dpu_crtc_enable_template, > > TP_STRUCT__entry( > > __field( uint32_t, drm_id ) > > __field( bool, enable ) > > - __field( struct dpu_crtc *, crtc ) > > + __field( bool, enabled ) > > + __field( bool, suspend ) > > + __field( bool, vblank_requested ) > > ), > > TP_fast_assign( > > __entry->drm_id = drm_id; > > __entry->enable = enable; > > - __entry->crtc = crtc; > > + __entry->enabled = crtc->enabled; > > + __entry->suspend = crtc->suspend; > > + __entry->vblank_requested = crtc->vblank_requested; > > ), > > TP_printk("id:%u enable:%s state{enabled:%s suspend:%s > > vblank_req:%s}", > > __entry->drm_id, __entry->enable ? "true" : "false", > > - __entry->crtc->enabled ? "true" : "false", > > - __entry->crtc->suspend ? "true" : "false", > > - __entry->crtc->vblank_requested ? "true" : "false") > > + __entry->enabled ? "true" : "false", > > + __entry->suspend ? "true" : "false", > > + __entry->vblank_requested ? "true" : "false") > > ); > > DEFINE_EVENT(dpu_crtc_enable_template, dpu_crtc_set_suspend, > > TP_PROTO(uint32_t drm_id, bool enable, struct dpu_crtc *crtc), > > @@ -818,24 +830,24 @@ TRACE_EVENT(dpu_plane_set_scanout, > > TP_ARGS(index, layout, multirect_index), > > TP_STRUCT__entry( > > __field( enum dpu_sspp, index ) > > - __field( struct dpu_hw_fmt_layout*, layout ) > > + __field_struct( struct dpu_hw_fmt_layout, layout ) > > __field( enum dpu_sspp_multirect_index, multirect_index) > > ), > > TP_fast_assign( > > __entry->index = index; > > - __entry->layout = layout; > > + __entry->layout = *layout; > > __entry->multirect_index = multirect_index; > > ), > > TP_printk("index:%d layout:{%ux%u @ [%u/%u, %u/%u, %u/%u, %u/%u]} " > > - "multirect_index:%d", __entry->index, __entry->layout->width, > > - __entry->layout->height, __entry->layout->plane_addr[0], > > - __entry->layout->plane_size[0], > > - __entry->layout->plane_addr[1], > > - __entry->layout->plane_size[1], > > - __entry->layout->plane_addr[2], > > - __entry->layout->plane_size[2], > > - __entry->layout->plane_addr[3], > > - __entry->layout->plane_size[3], __entry->multirect_index) > > + "multirect_index:%d", __entry->index, __entry->layout.width, > > + __entry->layout.height, __entry->layout.plane_addr[0], > > + __entry->layout.plane_size[0], > > + __entry->layout.plane_addr[1], > > + __entry->layout.plane_size[1], > > + __entry->layout.plane_addr[2], > > + __entry->layout.plane_size[2], > > + __entry->layout.plane_addr[3], > > + __entry->layout.plane_size[3], __entry->multirect_index) > > ); > > > > TRACE_EVENT(dpu_plane_disable, > > @@ -979,16 +991,16 @@ TRACE_EVENT(dpu_core_perf_update_clk, > > TP_PROTO(struct drm_device *dev, bool stop_req, u64 clk_rate), > > TP_ARGS(dev, stop_req, clk_rate), > > TP_STRUCT__entry( > > - __field( struct drm_device *, dev ) > > + __string( dev_name, dev->unique ) > > __field( bool, stop_req ) > > __field( u64, clk_rate ) > > ), > > TP_fast_assign( > > - __entry->dev = dev; > > + __assign_str(dev_name, dev->unique); > > __entry->stop_req = stop_req; > > __entry->clk_rate = clk_rate; > > ), > > - TP_printk("dev:%s stop_req:%s clk_rate:%llu", __entry->dev->unique, > > + TP_printk("dev:%s stop_req:%s clk_rate:%llu", __get_str(dev_name), > > __entry->stop_req ? "true" : "false", __entry->clk_rate) > > ); -- Sean Paul, Software Engineer, Google / Chromium OS _______________________________________________ Freedreno mailing list Freedreno@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/freedreno ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/3] drm/msm: dpu: Clear frame_busy_mask bit after trace 2018-09-19 18:33 [PATCH 1/3] drm/msm: dpu: Clear frame_busy_mask bit after trace Sean Paul [not found] ` <20180919183426.200909-1-sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org> @ 2018-09-19 20:01 ` Abhinav Kumar 1 sibling, 0 replies; 7+ messages in thread From: Abhinav Kumar @ 2018-09-19 20:01 UTC (permalink / raw) To: Sean Paul Cc: linux-arm-msm, dri-devel, Sean Paul, freedreno, linux-arm-msm-owner On 2018-09-19 11:33, Sean Paul wrote: > From: Sean Paul <seanpaul@chromium.org> > > We're printing the frame_busy_mask in a trace, but after it's been > cleared. This, as it turns out, is pretty pointless. > > Signed-off-by: Sean Paul <seanpaul@chromium.org> Reviewed-by: Abhinav Kumar <abhinavk@codeaurora.org> > --- > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > index c2e8985b4c54..e56f29190121 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > @@ -1361,9 +1361,9 @@ static void dpu_encoder_frame_done_callback( > /* One of the physical encoders has become idle */ > for (i = 0; i < dpu_enc->num_phys_encs; i++) { > if (dpu_enc->phys_encs[i] == ready_phys) { > - clear_bit(i, dpu_enc->frame_busy_mask); > trace_dpu_enc_frame_done_cb(DRMID(drm_enc), i, > dpu_enc->frame_busy_mask[0]); > + clear_bit(i, dpu_enc->frame_busy_mask); > } > } _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2018-09-19 20:53 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-09-19 18:33 [PATCH 1/3] drm/msm: dpu: Clear frame_busy_mask bit after trace Sean Paul
[not found] ` <20180919183426.200909-1-sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org>
2018-09-19 18:33 ` [PATCH 2/3] drm/msm: dpu: Add extra_flush_bits to trigger_flush trace Sean Paul
2018-09-19 20:01 ` Abhinav Kumar
2018-09-19 18:33 ` [PATCH 3/3] drm/msm: dpu: Don't store/deref pointers in trace ringbuffer Sean Paul
[not found] ` <20180919183426.200909-3-sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org>
2018-09-19 20:04 ` Abhinav Kumar
[not found] ` <84074f78534e74d92f1912846a4c570b-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-09-19 20:53 ` Sean Paul
2018-09-19 20:01 ` [PATCH 1/3] drm/msm: dpu: Clear frame_busy_mask bit after trace Abhinav Kumar
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).