All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/7] drm: add unpin function to prime helpers
@ 2013-04-09 11:37 Maarten Lankhorst
  2013-04-09 11:37 ` [PATCH 2/7] drm: move pinning/unpinning to buffer attach Maarten Lankhorst
                   ` (6 more replies)
  0 siblings, 7 replies; 11+ messages in thread
From: Maarten Lankhorst @ 2013-04-09 11:37 UTC (permalink / raw)
  To: dri-devel

Prevents buffers from being pinned forever.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
---
 drivers/gpu/drm/drm_prime.c | 13 +++++++++++--
 include/drm/drmP.h          |  1 +
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 366910d..85bbc52 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -91,10 +91,13 @@ static void drm_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
 static void drm_gem_dmabuf_release(struct dma_buf *dma_buf)
 {
 	struct drm_gem_object *obj = dma_buf->priv;
+	struct drm_device *dev = obj->dev;
 
 	if (obj->export_dma_buf == dma_buf) {
 		/* drop the reference on the export fd holds */
 		obj->export_dma_buf = NULL;
+		if (dev->driver->gem_prime_unpin)
+			dev->driver->gem_prime_unpin(obj);
 		drm_gem_object_unreference_unlocked(obj);
 	}
 }
@@ -184,13 +187,19 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
 struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
 				     struct drm_gem_object *obj, int flags)
 {
+	struct dma_buf *buf;
+
 	if (dev->driver->gem_prime_pin) {
 		int ret = dev->driver->gem_prime_pin(obj);
 		if (ret)
 			return ERR_PTR(ret);
 	}
-	return dma_buf_export(obj, &drm_gem_prime_dmabuf_ops, obj->size,
-			      0600);
+	buf = dma_buf_export(obj, &drm_gem_prime_dmabuf_ops, obj->size,
+			     0600);
+
+	if (IS_ERR(buf) && dev->driver->gem_prime_unpin)
+		dev->driver->gem_prime_unpin(obj);
+	return buf;
 }
 EXPORT_SYMBOL(drm_gem_prime_export);
 
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index 2d94d74..99dc622 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -932,6 +932,7 @@ struct drm_driver {
 				struct dma_buf *dma_buf);
 	/* low-level interface used by drm_gem_prime_{import,export} */
 	int (*gem_prime_pin)(struct drm_gem_object *obj);
+	void (*gem_prime_unpin)(struct drm_gem_object *obj);
 	struct sg_table *(*gem_prime_get_sg_table)(struct drm_gem_object *obj);
 	struct drm_gem_object *(*gem_prime_import_sg_table)(
 				struct drm_device *dev, size_t size,
-- 
1.8.2

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2013-04-09 14:53 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-09 11:37 [PATCH 1/7] drm: add unpin function to prime helpers Maarten Lankhorst
2013-04-09 11:37 ` [PATCH 2/7] drm: move pinning/unpinning to buffer attach Maarten Lankhorst
2013-04-09 11:37 ` [PATCH 3/7] drm/radeon: implement unpin function Maarten Lankhorst
2013-04-09 14:16   ` Jerome Glisse
2013-04-09 14:26     ` Maarten Lankhorst
2013-04-09 14:53       ` Daniel Vetter
2013-04-09 11:37 ` [PATCH 4/7] drm/nouveau: implement prime helper " Maarten Lankhorst
2013-04-09 11:37 ` [PATCH 5/7] drm/nouveau: unpin notify object in chan_fini Maarten Lankhorst
2013-04-09 11:37 ` [PATCH 6/7] drm/nouveau: fixup fbcon failure paths Maarten Lankhorst
2013-04-09 11:37 ` [PATCH 7/7] drm/nouveau: complain loudly if buffer is pinned during destruction Maarten Lankhorst
2013-04-09 13:01 ` [PATCH 1/7] drm: add unpin function to prime helpers Daniel Vetter

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.