From: Imre Deak <imre.deak@intel.com>
To: intel-gfx@lists.freedesktop.org
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Subject: [PATCH v3 19/19] drm/i915: Add fault injection support
Date: Wed, 16 Mar 2016 13:39:08 +0200 [thread overview]
Message-ID: <1458128348-15730-20-git-send-email-imre.deak@intel.com> (raw)
In-Reply-To: <1458128348-15730-1-git-send-email-imre.deak@intel.com>
Add support for forcing an error at selected places in the driver. As an
example add 4 options to fail during driver loading.
Requested by Chris.
v2:
- Add fault point for modeset initialization
- Print debug message when injecting an error
v3:
- Rename inject_fault to inject_load_failure, rename the related macros
and helper accordingly (Chris)
- Use a counter instead of a mask to identify the failure point (Daniel)
- Mark the module option as _unsafe and keep i915_params ordered (Joonas)
CC: Chris Wilson <chris@chris-wilson.co.uk>
CC: Daniel Vetter <daniel.vetter@ffwll.ch>
CC: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
drivers/gpu/drm/i915/i915_dma.c | 27 +++++++++++++++++++++++++++
drivers/gpu/drm/i915/i915_drv.h | 4 ++++
drivers/gpu/drm/i915/i915_params.c | 5 +++++
drivers/gpu/drm/i915/i915_params.h | 1 +
4 files changed, 37 insertions(+)
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index c6f97a7..caddd36 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -50,6 +50,21 @@
#include <linux/pm_runtime.h>
#include <linux/oom.h>
+static unsigned int i915_load_fail_count;
+
+bool __i915_inject_load_failure(const char *func, int line)
+{
+ if (i915_load_fail_count >= i915.inject_load_failure)
+ return false;
+
+ if (++i915_load_fail_count == i915.inject_load_failure) {
+ DRM_DEBUG_DRIVER("Injecting failure at checkpoint %u [%s:%d]\n",
+ i915.inject_load_failure, func, line);
+ return true;
+ }
+
+ return false;
+}
static int i915_getparam(struct drm_device *dev, void *data,
struct drm_file *file_priv)
@@ -370,6 +385,9 @@ static int i915_load_modeset_init(struct drm_device *dev)
struct drm_i915_private *dev_priv = dev->dev_private;
int ret;
+ if (i915_inject_load_failure())
+ return -ENODEV;
+
ret = intel_bios_init(dev_priv);
if (ret)
DRM_INFO("failed to find VBIOS tables\n");
@@ -951,6 +969,9 @@ static int i915_driver_init_early(struct drm_i915_private *dev_priv,
struct intel_device_info *device_info;
int ret = 0;
+ if (i915_inject_load_failure())
+ return -ENODEV;
+
dev_priv->dev = dev;
/* Setup the write-once "constant" device info */
@@ -1065,6 +1086,9 @@ static int i915_driver_init_mmio(struct drm_i915_private *dev_priv)
struct drm_device *dev = dev_priv->dev;
int ret;
+ if (i915_inject_load_failure())
+ return -ENODEV;
+
if (i915_get_bridge_dev(dev))
return -EIO;
@@ -1108,6 +1132,9 @@ static int i915_driver_init_hw(struct drm_i915_private *dev_priv)
uint32_t aperture_size;
int ret;
+ if (i915_inject_load_failure())
+ return -ENODEV;
+
intel_device_info_runtime_init(dev);
ret = i915_gem_gtt_init(dev);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 25274e1..9cb9f36 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -98,6 +98,10 @@
#define I915_STATE_WARN_ON(x) \
I915_STATE_WARN((x), "%s", "WARN_ON(" __stringify(x) ")")
+bool __i915_inject_load_failure(const char *func, int line);
+#define i915_inject_load_failure() \
+ __i915_inject_load_failure(__func__, __LINE__)
+
static inline const char *yesno(bool v)
{
return v ? "yes" : "no";
diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
index 278c9c4..a0eca7f 100644
--- a/drivers/gpu/drm/i915/i915_params.c
+++ b/drivers/gpu/drm/i915/i915_params.c
@@ -56,6 +56,7 @@ struct i915_params i915 __read_mostly = {
.edp_vswing = 0,
.enable_guc_submission = false,
.guc_log_level = -1,
+ .inject_load_failure = 0,
};
module_param_named(modeset, i915.modeset, int, 0400);
@@ -201,3 +202,7 @@ MODULE_PARM_DESC(enable_guc_submission, "Enable GuC submission (default:false)")
module_param_named(guc_log_level, i915.guc_log_level, int, 0400);
MODULE_PARM_DESC(guc_log_level,
"GuC firmware logging level (-1:disabled (default), 0-3:enabled)");
+
+module_param_named_unsafe(inject_load_failure, i915.inject_load_failure, uint, 0400);
+MODULE_PARM_DESC(inject_load_failure,
+ "Force an error after a number of failure check points (0:disabled (default), N:force failure at the Nth failure check point)");
diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
index bd5026b..21cf179 100644
--- a/drivers/gpu/drm/i915/i915_params.h
+++ b/drivers/gpu/drm/i915/i915_params.h
@@ -49,6 +49,7 @@ struct i915_params {
int use_mmio_flip;
int mmio_debug;
int edp_vswing;
+ unsigned int inject_load_failure;
/* leave bools at the end to not create holes */
bool enable_hangcheck;
bool fastboot;
--
2.5.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2016-03-16 11:39 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-16 11:38 [PATCH v3 00/19] Split driver init step to phases Imre Deak
2016-03-16 11:38 ` [PATCH v3 01/19] Fix MCHBAR cleanup on the driver init error path Imre Deak
2016-03-16 11:38 ` [PATCH v3 02/19] drm/i915: Move load time PCH detect, DPIO, power domain SW init earlier Imre Deak
2016-03-16 11:38 ` [PATCH v3 03/19] drm/i915: Move load time IRQ " Imre Deak
2016-03-16 11:38 ` [PATCH v3 04/19] drm/i915: Move load time init of display/audio hooks earlier Imre Deak
2016-03-16 11:38 ` [PATCH v3 05/19] drm/i915: Move load time init of clock gating " Imre Deak
2016-03-16 11:38 ` [PATCH v3 06/19] drm/i915: Move load time runtime device info init earlier Imre Deak
2016-03-16 11:38 ` [PATCH v3 07/19] drm/i915: Move load time gem_load_init earlier Imre Deak
2016-03-16 11:57 ` Chris Wilson
2016-03-16 12:18 ` Imre Deak
2016-03-16 12:54 ` [PATCH v4 " Imre Deak
2016-03-16 11:38 ` [PATCH v3 08/19] drm/i915: Move load time runtime PM get later Imre Deak
2016-03-16 11:38 ` [PATCH v3 09/19] drm/i915: Move load time shrinker registration later Imre Deak
2016-03-16 11:38 ` [PATCH v3 10/19] drm/i915: Move load time audio component registration earlier Imre Deak
2016-03-16 11:39 ` [PATCH v3 11/19] drm/i915: Move unload time display power domain uninit later Imre Deak
2016-03-16 11:39 ` [PATCH v3 12/19] drm/i915: Move unload time GTT, MSI IRQ cleanup later Imre Deak
2016-03-16 11:39 ` [PATCH v3 13/19] drm/i915: Move unload time opregion unregistration earlier Imre Deak
2016-03-16 11:39 ` [PATCH v3 14/19] drm/i915: Split out load time early initialization Imre Deak
2016-03-16 11:39 ` [PATCH v3 15/19] drm/i915: Split out load time MMIO initialization Imre Deak
2016-03-16 11:39 ` [PATCH v3 16/19] drm/i915: Split out load time HW initialization Imre Deak
2016-03-16 11:39 ` [PATCH v3 17/19] drm/i915: Split out load time interface registration Imre Deak
2016-03-16 11:39 ` [PATCH v3 18/19] drm/i915: Fix power domain HW state cleanup on error path Imre Deak
2016-03-16 11:39 ` Imre Deak [this message]
2016-03-16 12:00 ` [PATCH v3 19/19] drm/i915: Add fault injection support Chris Wilson
2016-03-16 12:12 ` Imre Deak
2016-03-16 12:44 ` Chris Wilson
2016-03-16 12:47 ` Imre Deak
2016-03-16 17:31 ` [PATCH v4 " Imre Deak
2016-03-16 12:01 ` [PATCH v3 00/19] Split driver init step to phases Chris Wilson
2016-03-16 16:44 ` ✗ Fi.CI.BAT: failure for Split driver init step to phases (rev2) Patchwork
2016-03-17 11:32 ` ✗ Fi.CI.BAT: warning for Split driver init step to phases (rev3) Patchwork
2016-03-17 12:23 ` Imre Deak
2016-03-17 13:27 ` Imre Deak
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=1458128348-15730-20-git-send-email-imre.deak@intel.com \
--to=imre.deak@intel.com \
--cc=daniel.vetter@ffwll.ch \
--cc=intel-gfx@lists.freedesktop.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox