From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: intel-gfx@lists.freedesktop.org
Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
"Steven Rostedt (VMware)" <rostedt@goodmis.org>
Subject: Re: [PATCH v2] drm/i915: Copy name string into ring buffer for intel_update/disable_plane tracepoints
Date: Thu, 11 Jul 2019 22:55:05 +0300 [thread overview]
Message-ID: <20190711195505.GC5942@intel.com> (raw)
In-Reply-To: <20190710171230.7471-1-ville.syrjala@linux.intel.com>
On Wed, Jul 10, 2019 at 08:12:30PM +0300, Ville Syrjala wrote:
> From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
>
> Currently the intel_update_plane and intel_disable_plane tracepoints record
> the address of plane->name in the ring buffer, and then when reading the
> ring buffer uses %s to get the name. The issue with this, is that those two
> events can be minutes, hours or even days apart. It is very dangerous to
> dereference a string pointer without knowing if it still exists or not.
>
> The proper way to handle this is to use the __string() macro in the
> tracepoint which will save the string into the ring buffer at the time of
> recording. Then there's no worries if the original string still exists in
> memory when the ring buffer is read.
>
> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
> [vsyrjala: Rebase on top of drm-tip]
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
CI is happy (not that we test this stuff) and I'm happy (the tracepoints
still work) -> pushed to drm-intel-next-queued. Thanks for the patch.
> ---
> drivers/gpu/drm/i915/i915_trace.h | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_trace.h b/drivers/gpu/drm/i915/i915_trace.h
> index cce426b23a24..da18b8d6b80c 100644
> --- a/drivers/gpu/drm/i915/i915_trace.h
> +++ b/drivers/gpu/drm/i915/i915_trace.h
> @@ -293,16 +293,16 @@ TRACE_EVENT(intel_update_plane,
>
> TP_STRUCT__entry(
> __field(enum pipe, pipe)
> - __field(const char *, name)
> __field(u32, frame)
> __field(u32, scanline)
> __array(int, src, 4)
> __array(int, dst, 4)
> + __string(name, plane->name)
> ),
>
> TP_fast_assign(
> + __assign_str(name, plane->name);
> __entry->pipe = crtc->pipe;
> - __entry->name = plane->name;
> __entry->frame = intel_crtc_get_vblank_counter(crtc);
> __entry->scanline = intel_get_crtc_scanline(crtc);
> memcpy(__entry->src, &plane->state->src, sizeof(__entry->src));
> @@ -310,7 +310,7 @@ TRACE_EVENT(intel_update_plane,
> ),
>
> TP_printk("pipe %c, plane %s, frame=%u, scanline=%u, " DRM_RECT_FP_FMT " -> " DRM_RECT_FMT,
> - pipe_name(__entry->pipe), __entry->name,
> + pipe_name(__entry->pipe), __get_str(name),
> __entry->frame, __entry->scanline,
> DRM_RECT_FP_ARG((const struct drm_rect *)__entry->src),
> DRM_RECT_ARG((const struct drm_rect *)__entry->dst))
> @@ -322,20 +322,20 @@ TRACE_EVENT(intel_disable_plane,
>
> TP_STRUCT__entry(
> __field(enum pipe, pipe)
> - __field(const char *, name)
> __field(u32, frame)
> __field(u32, scanline)
> + __string(name, plane->name)
> ),
>
> TP_fast_assign(
> + __assign_str(name, plane->name);
> __entry->pipe = crtc->pipe;
> - __entry->name = plane->name;
> __entry->frame = intel_crtc_get_vblank_counter(crtc);
> __entry->scanline = intel_get_crtc_scanline(crtc);
> ),
>
> TP_printk("pipe %c, plane %s, frame=%u, scanline=%u",
> - pipe_name(__entry->pipe), __entry->name,
> + pipe_name(__entry->pipe), __get_str(name),
> __entry->frame, __entry->scanline)
> );
>
> --
> 2.21.0
--
Ville Syrjälä
Intel
next prev parent reply other threads:[~2019-07-11 19:55 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-10 16:01 [PATCH] drm/i915: Copy name string into ring buffer for intel_update/disable_plane tracepoints Steven Rostedt
2019-07-10 16:44 ` ✗ Fi.CI.BAT: failure for " Patchwork
2019-07-10 17:12 ` [PATCH v2] " Ville Syrjala
2019-07-11 19:55 ` Ville Syrjälä [this message]
2019-07-11 10:44 ` ✓ Fi.CI.BAT: success for drm/i915: Copy name string into ring buffer for intel_update/disable_plane tracepoints (rev2) Patchwork
2019-07-11 18:07 ` ✓ Fi.CI.IGT: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190711195505.GC5942@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.