From patchwork Tue Dec 9 16:04:34 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mika Kuoppala X-Patchwork-Id: 5463831 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 28E089F1CD for ; Tue, 9 Dec 2014 16:11:48 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 0852E2010F for ; Tue, 9 Dec 2014 16:11:47 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 67DE82015A for ; Tue, 9 Dec 2014 16:11:45 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5BBCF6EEB5; Tue, 9 Dec 2014 08:11:44 -0800 (PST) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id BCB0E6EEB2 for ; Tue, 9 Dec 2014 08:11:42 -0800 (PST) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga101.fm.intel.com with ESMTP; 09 Dec 2014 08:00:35 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.97,862,1389772800"; d="scan'208";a="426950377" Received: from rosetta.fi.intel.com (HELO rosetta) ([10.237.72.102]) by FMSMGA003.fm.intel.com with ESMTP; 09 Dec 2014 07:49:56 -0800 Received: by rosetta (Postfix, from userid 1000) id 8792980056; Tue, 9 Dec 2014 18:04:38 +0200 (EET) From: Mika Kuoppala To: intel-gfx@lists.freedesktop.org Date: Tue, 9 Dec 2014 18:04:34 +0200 Message-Id: <1418141074-10214-4-git-send-email-mika.kuoppala@intel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1418141074-10214-1-git-send-email-mika.kuoppala@intel.com> References: <1418141074-10214-1-git-send-email-mika.kuoppala@intel.com> Cc: miku@iki.fi Subject: [Intel-gfx] [PATCH 4/4] drm/i915: Rename drm_i915_error_state_buf to intel_strbuf X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Emphasize the more general applicability of the seekable string buffer by decoupling it from error handling. Signed-off-by: Mika Kuoppala Tested-By: PRC QA PRTS (Patch Regression Test System Contact: shuang.he@intel.com) --- drivers/gpu/drm/i915/i915_debugfs.c | 2 +- drivers/gpu/drm/i915/i915_drv.h | 14 +++---- drivers/gpu/drm/i915/i915_gpu_error.c | 74 ++++++++++++++++++++--------------- drivers/gpu/drm/i915/i915_sysfs.c | 2 +- drivers/gpu/drm/i915/intel_display.c | 4 +- drivers/gpu/drm/i915/intel_overlay.c | 8 ++-- 6 files changed, 58 insertions(+), 46 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 5480cf5..f9e3449 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c @@ -925,7 +925,7 @@ static ssize_t i915_gpu_state_read(struct file *file, char __user *userbuf, size_t count, loff_t *pos) { struct i915_error_state_file_priv *error_priv = file->private_data; - struct drm_i915_error_state_buf error_str; + struct intel_strbuf error_str; loff_t tmp_pos = 0; ssize_t ret_count = 0; int ret; diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 452f93f..7ac3c71 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -1201,7 +1201,7 @@ struct i915_gem_mm { u32 object_count; }; -struct drm_i915_error_state_buf { +struct intel_strbuf { struct drm_i915_private *i915; unsigned bytes; unsigned size; @@ -2859,14 +2859,14 @@ static inline void intel_display_crc_init(struct drm_device *dev) {} /* i915_gpu_error.c */ __printf(2, 3) -void i915_error_printf(struct drm_i915_error_state_buf *e, const char *f, ...); -int i915_error_state_to_str(struct drm_i915_error_state_buf *estr, +void intel_strbuf_printf(struct intel_strbuf *e, const char *f, ...); +int i915_error_state_to_str(struct intel_strbuf *estr, const struct i915_error_state_file_priv *error); -int i915_error_state_buf_init(struct drm_i915_error_state_buf *eb, +int i915_error_state_buf_init(struct intel_strbuf *eb, struct drm_i915_private *i915, size_t count, loff_t pos); static inline void i915_error_state_buf_release( - struct drm_i915_error_state_buf *eb) + struct intel_strbuf *eb) { kfree(eb->buf); } @@ -2995,11 +2995,11 @@ void intel_notify_mmio_flip(struct intel_engine_cs *ring); /* overlay */ extern struct intel_overlay_error_state *intel_overlay_capture_error_state(struct drm_device *dev); -extern void intel_overlay_print_error_state(struct drm_i915_error_state_buf *e, +extern void intel_overlay_print_error_state(struct intel_strbuf *e, struct intel_overlay_error_state *error); extern struct intel_display_error_state *intel_display_capture_error_state(struct drm_device *dev); -extern void intel_display_print_error_state(struct drm_i915_error_state_buf *e, +extern void intel_display_print_error_state(struct intel_strbuf *e, struct drm_device *dev, struct intel_display_error_state *error); diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c index 0cefeebc..78c6d87 100644 --- a/drivers/gpu/drm/i915/i915_gpu_error.c +++ b/drivers/gpu/drm/i915/i915_gpu_error.c @@ -77,7 +77,7 @@ static const char *purgeable_flag(int purgeable) return purgeable ? " purgeable" : ""; } -static bool __i915_error_ok(struct drm_i915_error_state_buf *e) +static bool __intel_strbuf_ok(struct intel_strbuf *e) { if (!e->err && WARN(e->bytes > (e->size - 1), "overflow")) { @@ -91,8 +91,8 @@ static bool __i915_error_ok(struct drm_i915_error_state_buf *e) return true; } -static bool __i915_error_seek(struct drm_i915_error_state_buf *e, - unsigned len) +static bool __intel_strbuf_seek(struct intel_strbuf *e, + unsigned len) { if (e->pos + len <= e->start) { e->pos += len; @@ -108,8 +108,8 @@ static bool __i915_error_seek(struct drm_i915_error_state_buf *e, return true; } -static void __i915_error_advance(struct drm_i915_error_state_buf *e, - unsigned len) +static void __intel_strbuf_advance(struct intel_strbuf *e, + unsigned len) { /* If this is first printf in this window, adjust it so that * start position matches start of the buffer @@ -134,12 +134,12 @@ static void __i915_error_advance(struct drm_i915_error_state_buf *e, e->pos += len; } -static void i915_error_vprintf(struct drm_i915_error_state_buf *e, - const char *f, va_list args) +static void intel_strbuf_vprintf(struct intel_strbuf *e, + const char *f, va_list args) { unsigned len; - if (!__i915_error_ok(e)) + if (!__intel_strbuf_ok(e)) return; /* Seek the first printf which is hits start position */ @@ -150,7 +150,7 @@ static void i915_error_vprintf(struct drm_i915_error_state_buf *e, len = vsnprintf(NULL, 0, f, tmp); va_end(tmp); - if (!__i915_error_seek(e, len)) + if (!__intel_strbuf_seek(e, len)) return; } @@ -158,22 +158,22 @@ static void i915_error_vprintf(struct drm_i915_error_state_buf *e, if (len >= e->size - e->bytes) len = e->size - e->bytes - 1; - __i915_error_advance(e, len); + __intel_strbuf_advance(e, len); } -static void i915_error_puts(struct drm_i915_error_state_buf *e, - const char *str) +static void intel_strbuf_puts(struct intel_strbuf *e, + const char *str) { unsigned len; - if (!__i915_error_ok(e)) + if (!__intel_strbuf_ok(e)) return; len = strlen(str); /* Seek the first printf which is hits start position */ if (e->pos < e->start) { - if (!__i915_error_seek(e, len)) + if (!__intel_strbuf_seek(e, len)) return; } @@ -181,13 +181,34 @@ static void i915_error_puts(struct drm_i915_error_state_buf *e, len = e->size - e->bytes - 1; memcpy(e->buf + e->bytes, str, len); - __i915_error_advance(e, len); + __intel_strbuf_advance(e, len); } -#define err_printf(e, ...) i915_error_printf(e, __VA_ARGS__) -#define err_puts(e, s) i915_error_puts(e, s) +/** + * intel_strbuf_printf - print formatted string into intel_strbuf + * @strbuf: destination string buffer + * @format: format string + * @...: variable arguments for each format specifier in @format. + * + * Print formatted string into intel_strbuf. struct intel_strbuf is + * a seekable string buffer. It is used to seek into a potentially + * very big string without the need to allocate the whole string + * beforehand. Only the seekable 'window' is allocated at a time. + * __intel_strbuf_ok() can be used to check for errors after this call. + */ +void intel_strbuf_printf(struct intel_strbuf *strbuf, const char *format, ...) +{ + va_list args; + + va_start(args, format); + intel_strbuf_vprintf(strbuf, format, args); + va_end(args); +} -static void print_error_buffers(struct drm_i915_error_state_buf *m, +#define err_printf(e, ...) intel_strbuf_printf(e, __VA_ARGS__) +#define err_puts(e, s) intel_strbuf_puts(e, s) + +static void print_error_buffers(struct intel_strbuf *m, const char *name, struct drm_i915_error_buffer *err, int count) @@ -240,7 +261,7 @@ static const char *hangcheck_action_to_str(enum intel_ring_hangcheck_action a) return "unknown"; } -static void i915_ring_error_state(struct drm_i915_error_state_buf *m, +static void i915_ring_error_state(struct intel_strbuf *m, struct drm_device *dev, struct drm_i915_error_state *error, int ring_idx) @@ -304,16 +325,7 @@ static void i915_ring_error_state(struct drm_i915_error_state_buf *m, ring->hangcheck_score); } -void i915_error_printf(struct drm_i915_error_state_buf *e, const char *f, ...) -{ - va_list args; - - va_start(args, f); - i915_error_vprintf(e, f, args); - va_end(args); -} - -static void print_error_obj(struct drm_i915_error_state_buf *m, +static void print_error_obj(struct intel_strbuf *m, struct drm_i915_error_object *obj) { int page, offset, elt; @@ -327,7 +339,7 @@ static void print_error_obj(struct drm_i915_error_state_buf *m, } } -int i915_error_state_to_str(struct drm_i915_error_state_buf *m, +int i915_error_state_to_str(struct intel_strbuf *m, const struct i915_error_state_file_priv *error_priv) { struct drm_device *dev = error_priv->dev; @@ -495,7 +507,7 @@ out: return 0; } -int i915_error_state_buf_init(struct drm_i915_error_state_buf *ebuf, +int i915_error_state_buf_init(struct intel_strbuf *ebuf, struct drm_i915_private *i915, size_t count, loff_t pos) { diff --git a/drivers/gpu/drm/i915/i915_sysfs.c b/drivers/gpu/drm/i915/i915_sysfs.c index 4a5af69..68d40ab 100644 --- a/drivers/gpu/drm/i915/i915_sysfs.c +++ b/drivers/gpu/drm/i915/i915_sysfs.c @@ -543,7 +543,7 @@ static ssize_t error_state_read(struct file *filp, struct kobject *kobj, struct drm_minor *minor = dev_to_drm_minor(kdev); struct drm_device *dev = minor->dev; struct i915_error_state_file_priv error_priv; - struct drm_i915_error_state_buf error_str; + struct intel_strbuf error_str; ssize_t ret_count = 0; int ret; diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index a9bdc12..2414277 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -13762,10 +13762,10 @@ intel_display_capture_error_state(struct drm_device *dev) return error; } -#define err_printf(e, ...) i915_error_printf(e, __VA_ARGS__) +#define err_printf(e, ...) intel_strbuf_printf(e, __VA_ARGS__) void -intel_display_print_error_state(struct drm_i915_error_state_buf *m, +intel_display_print_error_state(struct intel_strbuf *m, struct drm_device *dev, struct intel_display_error_state *error) { diff --git a/drivers/gpu/drm/i915/intel_overlay.c b/drivers/gpu/drm/i915/intel_overlay.c index 973c9de..b4fdcc7 100644 --- a/drivers/gpu/drm/i915/intel_overlay.c +++ b/drivers/gpu/drm/i915/intel_overlay.c @@ -1509,15 +1509,15 @@ err: } void -intel_overlay_print_error_state(struct drm_i915_error_state_buf *m, +intel_overlay_print_error_state(struct intel_strbuf *m, struct intel_overlay_error_state *error) { - i915_error_printf(m, "Overlay, status: 0x%08x, interrupt: 0x%08x\n", + intel_strbuf_printf(m, "Overlay, status: 0x%08x, interrupt: 0x%08x\n", error->dovsta, error->isr); - i915_error_printf(m, " Register file at 0x%08lx:\n", + intel_strbuf_printf(m, " Register file at 0x%08lx:\n", error->base); -#define P(x) i915_error_printf(m, " " #x ": 0x%08x\n", error->regs.x) +#define P(x) intel_strbuf_printf(m, " " #x ": 0x%08x\n", error->regs.x) P(OBUF_0Y); P(OBUF_1Y); P(OBUF_0U);