Commit 50d84418 authored by Michal Wajdeczko's avatar Michal Wajdeczko Committed by Chris Wilson
Browse files

drm/i915: Add i915 to i915_inject_probe_failure



With i915 added to i915_inject_probe_failure we can use dedicated
printk when injecting artificial load failure.

Also make this function look like other i915 functions that return
error code and make it more flexible to return any provided error
code instead of previously assumed -ENODEV.

Signed-off-by: default avatarMichal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20190802184055.31988-2-michal.wajdeczko@intel.com
parent cd2a4eaf
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -118,7 +118,7 @@ int intel_connector_register(struct drm_connector *connector)
	if (ret)
		goto err;

	if (i915_inject_probe_failure()) {
	if (i915_inject_probe_failure(to_i915(connector->dev))) {
		ret = -EFAULT;
		goto err_backlight;
	}
+1 −1
Original line number Diff line number Diff line
@@ -426,7 +426,7 @@ int intel_engines_init_mmio(struct drm_i915_private *i915)
	WARN_ON(engine_mask &
		GENMASK(BITS_PER_TYPE(mask) - 1, I915_NUM_ENGINES));

	if (i915_inject_probe_failure())
	if (i915_inject_probe_failure(i915))
		return -ENODEV;

	for (i = 0; i < ARRAY_SIZE(intel_engines); i++) {
+14 −13
Original line number Diff line number Diff line
@@ -83,19 +83,20 @@ static struct drm_driver driver;
#if IS_ENABLED(CONFIG_DRM_I915_DEBUG)
static unsigned int i915_probe_fail_count;

bool __i915_inject_probe_failure(const char *func, int line)
int __i915_inject_load_error(struct drm_i915_private *i915, int err,
			     const char *func, int line)
{
	if (i915_probe_fail_count >= i915_modparams.inject_load_failure)
		return false;
		return 0;

	if (++i915_probe_fail_count == i915_modparams.inject_load_failure) {
		DRM_INFO("Injecting failure at checkpoint %u [%s:%d]\n",
			 i915_modparams.inject_load_failure, func, line);
		i915_modparams.inject_load_failure = 0;
		return true;
	}
	if (++i915_probe_fail_count < i915_modparams.inject_load_failure)
		return 0;

	return false;
	__i915_printk(i915, KERN_INFO,
		      "Injecting failure %d at checkpoint %u [%s:%d]\n",
		      err, i915_modparams.inject_load_failure, func, line);
	i915_modparams.inject_load_failure = 0;
	return err;
}

bool i915_error_injected(void)
@@ -687,7 +688,7 @@ static int i915_driver_modeset_probe(struct drm_device *dev)
	struct pci_dev *pdev = dev_priv->drm.pdev;
	int ret;

	if (i915_inject_probe_failure())
	if (i915_inject_probe_failure(dev_priv))
		return -ENODEV;

	if (HAS_DISPLAY(dev_priv)) {
@@ -894,7 +895,7 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
{
	int ret = 0;

	if (i915_inject_probe_failure())
	if (i915_inject_probe_failure(dev_priv))
		return -ENODEV;

	intel_device_info_subplatform_init(dev_priv);
@@ -985,7 +986,7 @@ static int i915_driver_mmio_probe(struct drm_i915_private *dev_priv)
{
	int ret;

	if (i915_inject_probe_failure())
	if (i915_inject_probe_failure(dev_priv))
		return -ENODEV;

	if (i915_get_bridge_dev(dev_priv))
@@ -1530,7 +1531,7 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
	struct pci_dev *pdev = dev_priv->drm.pdev;
	int ret;

	if (i915_inject_probe_failure())
	if (i915_inject_probe_failure(dev_priv))
		return -ENODEV;

	intel_device_info_runtime_init(dev_priv);
+7 −5
Original line number Diff line number Diff line
@@ -122,19 +122,21 @@

#if IS_ENABLED(CONFIG_DRM_I915_DEBUG)

bool __i915_inject_probe_failure(const char *func, int line);
#define i915_inject_probe_failure() \
	__i915_inject_probe_failure(__func__, __LINE__)

int __i915_inject_load_error(struct drm_i915_private *i915, int err,
			     const char *func, int line);
#define i915_inject_load_error(_i915, _err) \
	__i915_inject_load_error((_i915), (_err), __func__, __LINE__)
bool i915_error_injected(void);

#else

#define i915_inject_probe_failure() false
#define i915_inject_load_error(_i915, _err) 0
#define i915_error_injected() false

#endif

#define i915_inject_probe_failure(i915) i915_inject_load_error((i915), -ENODEV)

#define i915_probe_error(i915, fmt, ...)				   \
	__i915_printk(i915, i915_error_injected() ? KERN_DEBUG : KERN_ERR, \
		      fmt, ##__VA_ARGS__)
+4 −6
Original line number Diff line number Diff line
@@ -1520,15 +1520,13 @@ int i915_gem_init(struct drm_i915_private *dev_priv)
	if (ret)
		goto err_gt;

	if (i915_inject_probe_failure()) {
		ret = -ENODEV;
	ret = i915_inject_load_error(dev_priv, -ENODEV);
	if (ret)
		goto err_gt;
	}

	if (i915_inject_probe_failure()) {
		ret = -EIO;
	ret = i915_inject_load_error(dev_priv, -EIO);
	if (ret)
		goto err_gt;
	}

	intel_uncore_forcewake_put(&dev_priv->uncore, FORCEWAKE_ALL);
	mutex_unlock(&dev_priv->drm.struct_mutex);
Loading