summaryrefslogtreecommitdiffstats
path: root/sys/dev/drm/drm_vm.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/drm/drm_vm.c')
-rw-r--r--sys/dev/drm/drm_vm.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/sys/dev/drm/drm_vm.c b/sys/dev/drm/drm_vm.c
index e01257a3..c602eec 100644
--- a/sys/dev/drm/drm_vm.c
+++ b/sys/dev/drm/drm_vm.c
@@ -24,6 +24,10 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+/** @file drm_vm.c
+ * Support code for mmaping of DRM maps.
+ */
+
#include "dev/drm/drmP.h"
#include "dev/drm/drm.h"
@@ -36,7 +40,7 @@ int drm_mmap(dev_t kdev, vm_offset_t offset, int prot)
paddr_t drm_mmap(dev_t kdev, off_t offset, int prot)
#endif
{
- DRM_DEVICE;
+ struct drm_device *dev = drm_get_device_from_kdev(kdev);
drm_local_map_t *map;
drm_file_t *priv;
drm_map_type_t type;
@@ -55,7 +59,7 @@ paddr_t drm_mmap(dev_t kdev, off_t offset, int prot)
}
if (!priv->authenticated)
- return DRM_ERR(EACCES);
+ return EACCES;
if (dev->dma && offset >= 0 && offset < ptoa(dev->dma->page_count)) {
drm_device_dma_t *dma = dev->dma;
@@ -66,9 +70,9 @@ paddr_t drm_mmap(dev_t kdev, off_t offset, int prot)
unsigned long page = offset >> PAGE_SHIFT;
unsigned long phys = dma->pagelist[page];
+ DRM_SPINUNLOCK(&dev->dma_lock);
#if defined(__FreeBSD__) && __FreeBSD_version >= 500102
*paddr = phys;
- DRM_SPINUNLOCK(&dev->dma_lock);
return 0;
#else
return atop(phys);
@@ -77,7 +81,6 @@ paddr_t drm_mmap(dev_t kdev, off_t offset, int prot)
DRM_SPINUNLOCK(&dev->dma_lock);
return -1;
}
- DRM_SPINUNLOCK(&dev->dma_lock);
}
/* A sequential search of a linked list is
OpenPOWER on IntegriCloud