[PATCH] hrtimer test

Tvrtko Ursulin tursulin at ursulin.net
Fri Jun 1 13:06:13 UTC 2018


From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
---
 drivers/gpu/drm/i915/i915_drv.c | 37 +++++++++++++++++++++++++++++++++
 drivers/gpu/drm/i915/i915_drv.h |  3 +++
 2 files changed, 40 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 0d9b8cc0436d..39f019d8ff4f 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -1330,6 +1330,29 @@ static void i915_welcome_messages(struct drm_i915_private *dev_priv)
 		DRM_INFO("DRM_I915_DEBUG_GEM enabled\n");
 }
 
+static enum hrtimer_restart test_timer(struct hrtimer *hrtimer)
+{
+	unsigned int orun =
+		hrtimer_forward_now(hrtimer, ns_to_ktime(NSEC_PER_SEC / 200));
+
+	if (orun > 1)
+		DRM_ERROR_RATELIMITED("%u test_timer overrun(s)\n", orun - 1);
+
+	return HRTIMER_RESTART;
+}
+
+static enum hrtimer_restart test_timer2(struct hrtimer *hrtimer)
+{
+	unsigned int orun =
+		hrtimer_forward_now(hrtimer, ns_to_ktime(NSEC_PER_SEC / 200));
+
+	if (orun > 1)
+		DRM_ERROR_RATELIMITED("%u pinned_test_timer overrun(s)\n",
+				      orun - 1);
+
+	return HRTIMER_RESTART;
+}
+
 /**
  * i915_driver_load - setup chip and create an initial config
  * @pdev: PCI device
@@ -1419,6 +1442,17 @@ int i915_driver_load(struct pci_dev *pdev, const struct pci_device_id *ent)
 
 	i915_welcome_messages(dev_priv);
 
+	hrtimer_init(&dev_priv->test_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
+	dev_priv->test_timer.function = test_timer;
+	hrtimer_start_range_ns(&dev_priv->test_timer,
+			       ns_to_ktime(NSEC_PER_SEC / 200), 0,
+			       HRTIMER_MODE_REL);
+
+	hrtimer_init(&dev_priv->test_timer2, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
+	dev_priv->test_timer2.function = test_timer2;
+	hrtimer_start_range_ns(&dev_priv->test_timer2,
+			       ns_to_ktime(NSEC_PER_SEC / 200), 0,
+			       HRTIMER_MODE_REL_PINNED);
 	return 0;
 
 out_cleanup_hw:
@@ -1443,6 +1477,9 @@ void i915_driver_unload(struct drm_device *dev)
 	struct drm_i915_private *dev_priv = to_i915(dev);
 	struct pci_dev *pdev = dev_priv->drm.pdev;
 
+	hrtimer_cancel(&dev_priv->test_timer);
+	hrtimer_cancel(&dev_priv->test_timer2);
+
 	i915_driver_unregister(dev_priv);
 
 	if (i915_gem_suspend(dev_priv))
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 38157df6ff5c..a41e6cec3d94 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1561,6 +1561,9 @@ struct drm_i915_private {
 	struct kmem_cache *dependencies;
 	struct kmem_cache *priorities;
 
+	struct hrtimer test_timer;
+	struct hrtimer test_timer2;
+
 	const struct intel_device_info info;
 	struct intel_driver_caps caps;
 
-- 
2.17.0



More information about the Intel-gfx-trybot mailing list