summaryrefslogtreecommitdiffstats
path: root/sys/dev/pci/drm/drm_gem.c
diff options
context:
space:
mode:
authorkettenis <kettenis@openbsd.org>2018-06-25 22:29:16 +0000
committerkettenis <kettenis@openbsd.org>2018-06-25 22:29:16 +0000
commita9ee023b3d3fb138f3d4f17347289eebdc20cf07 (patch)
tree2d1fef7ee7763bb5dcdfe77e141a4f430cdbbe1e /sys/dev/pci/drm/drm_gem.c
parentfix NULL dereference in open_listen_match_tcpip() (diff)
downloadwireguard-openbsd-a9ee023b3d3fb138f3d4f17347289eebdc20cf07.tar.xz
wireguard-openbsd-a9ee023b3d3fb138f3d4f17347289eebdc20cf07.zip
Implement DRI3/prime support. This allows graphics buffers to be passed
between processes using file descriptors. This provides an alternative to eporting them with guesable 32-bit IDs. This implementation does not (yet) allow sharing of graphics buffers between GPUs. ok mpi@, visa@
Diffstat (limited to 'sys/dev/pci/drm/drm_gem.c')
-rw-r--r--sys/dev/pci/drm/drm_gem.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/sys/dev/pci/drm/drm_gem.c b/sys/dev/pci/drm/drm_gem.c
index ecf81f371e3..125b78f885a 100644
--- a/sys/dev/pci/drm/drm_gem.c
+++ b/sys/dev/pci/drm/drm_gem.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: drm_gem.c,v 1.5 2017/09/03 13:28:54 jsg Exp $ */
+/* $OpenBSD: drm_gem.c,v 1.6 2018/06/25 22:29:16 kettenis Exp $ */
/*
* Copyright © 2008 Intel Corporation
*
@@ -28,6 +28,7 @@
#include <dev/pci/drm/drmP.h>
#include <dev/pci/drm/drm_vma_manager.h>
+#include "drm_internal.h"
#include <uvm/uvm.h>
@@ -318,7 +319,6 @@ EXPORT_SYMBOL(drm_gem_private_object_init);
static void
drm_gem_remove_prime_handles(struct drm_gem_object *obj, struct drm_file *filp)
{
-#ifdef __linux__
/*
* Note: obj->dma_buf can't disappear as long as we still hold a
* handle reference in obj->handle_count.
@@ -329,7 +329,6 @@ drm_gem_remove_prime_handles(struct drm_gem_object *obj, struct drm_file *filp)
obj->dma_buf);
}
mutex_unlock(&filp->prime.lock);
-#endif
}
/**
@@ -352,13 +351,11 @@ static void drm_gem_object_handle_free(struct drm_gem_object *obj)
static void drm_gem_object_exported_dma_buf_free(struct drm_gem_object *obj)
{
-#ifdef __linux__
/* Unbreak the reference cycle if we have an exported dma_buf. */
if (obj->dma_buf) {
dma_buf_put(obj->dma_buf);
obj->dma_buf = NULL;
}
-#endif
}
static void
@@ -873,6 +870,8 @@ drm_gem_object_release(struct drm_gem_object *obj)
{
struct drm_device *dev = obj->dev;
+ WARN_ON(obj->dma_buf);
+
if (obj->uao)
uao_detach(obj->uao);