Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5f362a7 authored by David Henningsson's avatar David Henningsson Committed by Takashi Iwai
Browse files

drm/i915: Add locks around audio component bind/unbind



This will make sure that audio callbacks do not race with
component bind/unbind.

[Note: this is an update patch to commit [51e1d83c: drm/i915: Call
 audio pin/ELD notify function] where I mistakenly applied the older
 version.  Jani and Daniel's review tags were to the latest version,
 so I add them below, too -- tiwai]

Signed-off-by: default avatarDavid Henningsson <david.henningsson@canonical.com>
Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
Acked-by: default avatarDaniel Vetter <daniel@ffwll.ch>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent f0675d4a
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -543,9 +543,11 @@ static int i915_audio_component_bind(struct device *i915_dev,
	if (WARN_ON(acomp->ops || acomp->dev))
		return -EEXIST;

	drm_modeset_lock_all(dev_priv->dev);
	acomp->ops = &i915_audio_component_ops;
	acomp->dev = i915_dev;
	dev_priv->audio_component = acomp;
	drm_modeset_unlock_all(dev_priv->dev);

	return 0;
}
@@ -556,9 +558,11 @@ static void i915_audio_component_unbind(struct device *i915_dev,
	struct i915_audio_component *acomp = data;
	struct drm_i915_private *dev_priv = dev_to_i915(i915_dev);

	drm_modeset_lock_all(dev_priv->dev);
	acomp->ops = NULL;
	acomp->dev = NULL;
	dev_priv->audio_component = NULL;
	drm_modeset_unlock_all(dev_priv->dev);
}

static const struct component_ops i915_audio_component_bind_ops = {