Commit 3e226e4a authored by Imre Deak's avatar Imre Deak
Browse files

drm/i915/opregion: Cleanup opregion after errors during driver loading



Clean up the opregion state if something fails after
intel_opregion_setup() is called.

Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230308162503.3219200-2-imre.deak@intel.com
parent c4a1e57b
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -1237,6 +1237,14 @@ void intel_opregion_unregister(struct drm_i915_private *i915)
		unregister_acpi_notifier(&opregion->acpi_notifier);
		opregion->acpi_notifier.notifier_call = NULL;
	}
}

void intel_opregion_cleanup(struct drm_i915_private *i915)
{
	struct intel_opregion *opregion = &i915->display.opregion;

	if (!opregion->header)
		return;

	/* just clear all opregion memory pointers now */
	memunmap(opregion->header);
+1 −0
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ struct intel_opregion {
#ifdef CONFIG_ACPI

int intel_opregion_setup(struct drm_i915_private *dev_priv);
void intel_opregion_cleanup(struct drm_i915_private *i915);

void intel_opregion_register(struct drm_i915_private *dev_priv);
void intel_opregion_unregister(struct drm_i915_private *dev_priv);
+5 −1
Original line number Diff line number Diff line
@@ -531,7 +531,7 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)

	ret = i915_pcode_init(dev_priv);
	if (ret)
		goto err_msi;
		goto err_opregion;

	/*
	 * Fill the dram structure to get the system dram info. This will be
@@ -552,6 +552,8 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)

	return 0;

err_opregion:
	intel_opregion_cleanup(dev_priv);
err_msi:
	if (pdev->msi_enabled)
		pci_disable_msi(pdev);
@@ -577,6 +579,8 @@ static void i915_driver_hw_remove(struct drm_i915_private *dev_priv)

	i915_perf_fini(dev_priv);

	intel_opregion_cleanup(dev_priv);

	if (pdev->msi_enabled)
		pci_disable_msi(pdev);