|
@@ -14395,6 +14395,24 @@ static void skl_update_crtcs(struct drm_atomic_state *state,
|
|
|
} while (progress);
|
|
|
}
|
|
|
|
|
|
+static void intel_atomic_helper_free_state(struct drm_i915_private *dev_priv)
|
|
|
+{
|
|
|
+ struct intel_atomic_state *state, *next;
|
|
|
+ struct llist_node *freed;
|
|
|
+
|
|
|
+ freed = llist_del_all(&dev_priv->atomic_helper.free_list);
|
|
|
+ llist_for_each_entry_safe(state, next, freed, freed)
|
|
|
+ drm_atomic_state_put(&state->base);
|
|
|
+}
|
|
|
+
|
|
|
+static void intel_atomic_helper_free_state_worker(struct work_struct *work)
|
|
|
+{
|
|
|
+ struct drm_i915_private *dev_priv =
|
|
|
+ container_of(work, typeof(*dev_priv), atomic_helper.free_work);
|
|
|
+
|
|
|
+ intel_atomic_helper_free_state(dev_priv);
|
|
|
+}
|
|
|
+
|
|
|
static void intel_atomic_commit_tail(struct drm_atomic_state *state)
|
|
|
{
|
|
|
struct drm_device *dev = state->dev;
|
|
@@ -14561,6 +14579,8 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state)
|
|
|
* can happen also when the device is completely off.
|
|
|
*/
|
|
|
intel_uncore_arm_unclaimed_mmio_detection(dev_priv);
|
|
|
+
|
|
|
+ intel_atomic_helper_free_state(dev_priv);
|
|
|
}
|
|
|
|
|
|
static void intel_atomic_commit_work(struct work_struct *work)
|
|
@@ -16615,18 +16635,6 @@ fail:
|
|
|
drm_modeset_acquire_fini(&ctx);
|
|
|
}
|
|
|
|
|
|
-static void intel_atomic_helper_free_state(struct work_struct *work)
|
|
|
-{
|
|
|
- struct drm_i915_private *dev_priv =
|
|
|
- container_of(work, typeof(*dev_priv), atomic_helper.free_work);
|
|
|
- struct intel_atomic_state *state, *next;
|
|
|
- struct llist_node *freed;
|
|
|
-
|
|
|
- freed = llist_del_all(&dev_priv->atomic_helper.free_list);
|
|
|
- llist_for_each_entry_safe(state, next, freed, freed)
|
|
|
- drm_atomic_state_put(&state->base);
|
|
|
-}
|
|
|
-
|
|
|
int intel_modeset_init(struct drm_device *dev)
|
|
|
{
|
|
|
struct drm_i915_private *dev_priv = to_i915(dev);
|
|
@@ -16647,7 +16655,7 @@ int intel_modeset_init(struct drm_device *dev)
|
|
|
dev->mode_config.funcs = &intel_mode_funcs;
|
|
|
|
|
|
INIT_WORK(&dev_priv->atomic_helper.free_work,
|
|
|
- intel_atomic_helper_free_state);
|
|
|
+ intel_atomic_helper_free_state_worker);
|
|
|
|
|
|
intel_init_quirks(dev);
|
|
|
|