From fa5aa7b675a4a1d31902b3426cc5d087ee6e5a8d Mon Sep 17 00:00:00 2001
From: Jason Andryuk <jandryuk@gmail.com>
Date: Fri, 18 Mar 2022 11:05:21 -0400
Subject: [PATCH] i915: Fail probe when opregion setup fails

intel_opregion_setup can fail, but i915_driver_hw_probe doesn't check
the return value.  Probe will eventually crash when accessing unmapped
memory:

domU kernel:  drm_get_last_vbltimestamp+0xaa/0xc0 [drm]
domU kernel:  drm_reset_vblank_timestamp+0x5b/0xd0 [drm]
domU kernel:  drm_crtc_vblank_on+0x7b/0x130 [drm]
domU kernel:  intel_modeset_setup_hw_state+0xbd4/0x1900 [i915]
domU kernel:  ? _cond_resched+0x16/0x40
domU kernel:  ? ww_mutex_lock+0x15/0x80
domU kernel:  intel_modeset_init_nogem+0x867/0x1d30 [i915]
domU kernel:  ? gen6_write32+0x4b/0x1c0 [i915]
domU kernel:  ? intel_irq_postinstall+0xb9/0x670 [i915]
domU kernel:  i915_driver_probe+0x5c2/0xc90 [i915]

This can be seen in a Xen DomU when an IGD doesn't have the opregion
memory mapped during PCI passthrough.

Check the return value and fail probe when intel_opregion_setup fails.

Reported-by: Chuck Zmudzinski <brchuckz@netscape.net>
Signed-off-by: Jason Andryuk <jandryuk@gmail.com>
---
 drivers/gpu/drm/i915/i915_driver.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
index 95174938b160..3261dcebb48b 100644
--- a/drivers/gpu/drm/i915/i915_driver.c
+++ b/drivers/gpu/drm/i915/i915_driver.c
@@ -629,7 +629,9 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
 	if (ret)
 		goto err_msi;
 
-	intel_opregion_setup(dev_priv);
+	ret = intel_opregion_setup(dev_priv);
+	if (ret)
+		goto err_msi;
 
 	ret = intel_pcode_init(dev_priv);
 	if (ret)
-- 
2.35.1

