hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/gpu/drm/drm_atomic.c
....@@ -98,6 +98,12 @@
9898 if (!state->planes)
9999 goto fail;
100100
101
+ /*
102
+ * Because drm_atomic_state can be committed asynchronously we need our
103
+ * own reference and cannot rely on the on implied by drm_file in the
104
+ * ioctl call.
105
+ */
106
+ drm_dev_get(dev);
101107 state->dev = dev;
102108
103109 DRM_DEBUG_ATOMIC("Allocated atomic state %p\n", state);
....@@ -257,7 +263,8 @@
257263 void __drm_atomic_state_free(struct kref *ref)
258264 {
259265 struct drm_atomic_state *state = container_of(ref, typeof(*state), ref);
260
- struct drm_mode_config *config = &state->dev->mode_config;
266
+ struct drm_device *dev = state->dev;
267
+ struct drm_mode_config *config = &dev->mode_config;
261268
262269 drm_atomic_state_clear(state);
263270
....@@ -269,6 +276,8 @@
269276 drm_atomic_state_default_release(state);
270277 kfree(state);
271278 }
279
+
280
+ drm_dev_put(dev);
272281 }
273282 EXPORT_SYMBOL(__drm_atomic_state_free);
274283
....@@ -1010,6 +1019,7 @@
10101019 drm_printf(p, "connector[%u]: %s\n", connector->base.id, connector->name);
10111020 drm_printf(p, "\tcrtc=%s\n", state->crtc ? state->crtc->name : "(null)");
10121021 drm_printf(p, "\tself_refresh_aware=%d\n", state->self_refresh_aware);
1022
+ drm_printf(p, "\tmax_requested_bpc=%d\n", state->max_requested_bpc);
10131023
10141024 if (connector->connector_type == DRM_MODE_CONNECTOR_WRITEBACK)
10151025 if (state->writeback_job && state->writeback_job->fb)