* [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
* [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
* [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
* 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
* 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
* 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
* 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
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).