diff options
-rw-r--r-- | drivers/gpu/drm/drm_atomic_state_helper.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_writeback.c | 14 |
2 files changed, 15 insertions, 3 deletions
diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/drm_atomic_state_helper.c index 4985384e51f6..59ffb6b9c745 100644 --- a/drivers/gpu/drm/drm_atomic_state_helper.c +++ b/drivers/gpu/drm/drm_atomic_state_helper.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <drm/drm_connector.h> | 30 | #include <drm/drm_connector.h> |
31 | #include <drm/drm_atomic.h> | 31 | #include <drm/drm_atomic.h> |
32 | #include <drm/drm_device.h> | 32 | #include <drm/drm_device.h> |
33 | #include <drm/drm_writeback.h> | ||
33 | 34 | ||
34 | #include <linux/slab.h> | 35 | #include <linux/slab.h> |
35 | #include <linux/dma-fence.h> | 36 | #include <linux/dma-fence.h> |
@@ -412,6 +413,9 @@ __drm_atomic_helper_connector_destroy_state(struct drm_connector_state *state) | |||
412 | 413 | ||
413 | if (state->commit) | 414 | if (state->commit) |
414 | drm_crtc_commit_put(state->commit); | 415 | drm_crtc_commit_put(state->commit); |
416 | |||
417 | if (state->writeback_job) | ||
418 | drm_writeback_cleanup_job(state->writeback_job); | ||
415 | } | 419 | } |
416 | EXPORT_SYMBOL(__drm_atomic_helper_connector_destroy_state); | 420 | EXPORT_SYMBOL(__drm_atomic_helper_connector_destroy_state); |
417 | 421 | ||
diff --git a/drivers/gpu/drm/drm_writeback.c b/drivers/gpu/drm/drm_writeback.c index 338b993d7c9f..1b497d3530b5 100644 --- a/drivers/gpu/drm/drm_writeback.c +++ b/drivers/gpu/drm/drm_writeback.c | |||
@@ -273,6 +273,15 @@ void drm_writeback_queue_job(struct drm_writeback_connector *wb_connector, | |||
273 | } | 273 | } |
274 | EXPORT_SYMBOL(drm_writeback_queue_job); | 274 | EXPORT_SYMBOL(drm_writeback_queue_job); |
275 | 275 | ||
276 | void drm_writeback_cleanup_job(struct drm_writeback_job *job) | ||
277 | { | ||
278 | if (job->fb) | ||
279 | drm_framebuffer_put(job->fb); | ||
280 | |||
281 | kfree(job); | ||
282 | } | ||
283 | EXPORT_SYMBOL(drm_writeback_cleanup_job); | ||
284 | |||
276 | /* | 285 | /* |
277 | * @cleanup_work: deferred cleanup of a writeback job | 286 | * @cleanup_work: deferred cleanup of a writeback job |
278 | * | 287 | * |
@@ -285,10 +294,9 @@ static void cleanup_work(struct work_struct *work) | |||
285 | struct drm_writeback_job *job = container_of(work, | 294 | struct drm_writeback_job *job = container_of(work, |
286 | struct drm_writeback_job, | 295 | struct drm_writeback_job, |
287 | cleanup_work); | 296 | cleanup_work); |
288 | drm_framebuffer_put(job->fb); | ||
289 | kfree(job); | ||
290 | } | ||
291 | 297 | ||
298 | drm_writeback_cleanup_job(job); | ||
299 | } | ||
292 | 300 | ||
293 | /** | 301 | /** |
294 | * drm_writeback_signal_completion - Signal the completion of a writeback job | 302 | * drm_writeback_signal_completion - Signal the completion of a writeback job |