libdrm: Changes to 'upstream-unstable'
Android.mk | 63 +++++++
CleanSpec.mk | 3
Makefile.am | 29 +--
Makefile.sources | 32 +++
configure.ac | 194 ++++++++++++----------
exynos/Makefile.am | 1
exynos/exynos_drm.c | 37 ++--
exynos/exynos_fimg2d.c | 19 +-
freedreno/Android.mk | 30 +++
freedreno/Makefile.am | 27 ---
freedreno/Makefile.sources | 24 ++
freedreno/freedreno_bo.c | 77 +++++++-
freedreno/freedreno_device.c | 12 -
freedreno/freedreno_drmif.h | 2
freedreno/freedreno_pipe.c | 15 +
freedreno/freedreno_priv.h | 10 -
freedreno/freedreno_ringbuffer.c | 42 ++--
freedreno/kgsl/kgsl_bo.c | 10 -
freedreno/kgsl/kgsl_device.c | 4
freedreno/kgsl/kgsl_pipe.c | 4
freedreno/kgsl/kgsl_ringbuffer.c | 8
freedreno/msm/msm_bo.c | 4
freedreno/msm/msm_device.c | 4
freedreno/msm/msm_pipe.c | 4
freedreno/msm/msm_ringbuffer.c | 4
include/Makefile.am | 1
include/drm/Makefile.am | 44 -----
include/drm/i810_drm.h | 281 --------------------------------
include/drm/i830_drm.h | 342 ---------------------------------------
intel/Android.mk | 55 ++++++
intel/Makefile.am | 20 --
intel/Makefile.sources | 14 +
intel/intel_bufmgr.c | 107 +++++++-----
intel/intel_bufmgr.h | 5
intel/intel_bufmgr_fake.c | 31 +--
intel/intel_bufmgr_gem.c | 339 +++++++++++++++++++++++++++++++++-----
intel/intel_bufmgr_priv.h | 12 +
intel/intel_decode.c | 19 +-
intel/test_decode.c | 9 -
libdrm.h | 89 ++++++++++
libkms/Android.mk | 53 ++++++
libkms/Makefile.am | 25 +-
libkms/Makefile.sources | 23 ++
libkms/api.c | 2
libkms/dumb.c | 13 -
libkms/exynos.c | 5
libkms/intel.c | 11 -
libkms/linux.c | 18 +-
libkms/nouveau.c | 11 -
libkms/radeon.c | 13 -
libkms/vmwgfx.c | 11 -
nouveau/Android.mk | 30 +++
nouveau/Makefile.am | 14 -
nouveau/Makefile.sources | 9 +
nouveau/abi16.c | 4
nouveau/bufctx.c | 10 -
nouveau/nouveau.c | 46 ++---
nouveau/private.h | 1
nouveau/pushbuf.c | 20 +-
omap/Makefile.am | 1
omap/omap_drm.c | 46 ++---
radeon/Android.mk | 30 +++
radeon/Makefile.am | 25 --
radeon/Makefile.sources | 19 ++
radeon/r600_pci_ids.h | 7
radeon/radeon_bo.c | 46 ++---
radeon/radeon_bo_gem.c | 31 +--
radeon/radeon_cs.c | 50 ++---
radeon/radeon_cs_gem.c | 9 -
radeon/radeon_cs_space.c | 18 +-
radeon/radeon_surface.c | 25 +-
tests/dristat.c | 4
tests/drmstat.c | 2
tests/modetest/Android.mk | 14 +
tests/modetest/Makefile.am | 9 -
tests/modetest/Makefile.sources | 6
tests/modetest/buffers.c | 2
tests/modetest/cursor.c | 2
tests/modetest/modetest.c | 4
tests/vbltest/vbltest.c | 2
xf86atomic.h | 9 +
xf86drm.c | 8
xf86drmMode.c | 2
83 files changed, 1514 insertions(+), 1203 deletions(-)
New commits:
commit 7068d987f4dc1260a948f2b4782c66d3d80e9978
Author: Rob Clark <robclark@freedesktop.org>
Date: Sun Sep 28 14:53:34 2014 -0400
configure.ac: bump version to 2.4.58 for release
Signed-off-by: Rob Clark <robclark@freedesktop.org>
diff --git a/configure.ac b/configure.ac
index 39312ce..ee59b03 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,7 +20,7 @@
AC_PREREQ([2.63])
AC_INIT([libdrm],
- [2.4.57],
+ [2.4.58],
[https://bugs.freedesktop.org/enter_bug.cgi?product=DRI],
[libdrm])
commit 0599f2fd6aea0421a91d9297dcd454aa416dfbaa
Author: Rob Clark <robdclark@gmail.com>
Date: Sun Sep 28 14:48:16 2014 -0400
more compile fix
Signed-off-by: Rob Clark <robdclark@gmail.com>
diff --git a/tests/dristat.c b/tests/dristat.c
index 900a3e6..4f2ee80 100644
--- a/tests/dristat.c
+++ b/tests/dristat.c
@@ -27,6 +27,10 @@
*
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
commit c09dcbc736afb2e6a05d4cfc5c3d878ace43e2ba
Author: Rob Clark <robdclark@gmail.com>
Date: Sun Sep 28 14:19:14 2014 -0400
fix compile error on 32bit systems
4c2766b (drm_mmap/drm_unmap) brought this error for every .c file that
was not #including config.h:
In file included from private.h:4:0,
from abi16.c:29:
../libdrm.h: In function 'drm_munmap':
../libdrm.h:81:4: error: size of unnamed array is negative
Signed-off-by: Rob Clark <robdclark@gmail.com>
diff --git a/freedreno/freedreno_bo.c b/freedreno/freedreno_bo.c
index dacb34c..fe8f503 100644
--- a/freedreno/freedreno_bo.c
+++ b/freedreno/freedreno_bo.c
@@ -26,6 +26,10 @@
* Rob Clark <robclark@freedesktop.org>
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include "freedreno_drmif.h"
#include "freedreno_priv.h"
diff --git a/freedreno/freedreno_device.c b/freedreno/freedreno_device.c
index 2d3aa33..09bc5e9 100644
--- a/freedreno/freedreno_device.c
+++ b/freedreno/freedreno_device.c
@@ -26,6 +26,10 @@
* Rob Clark <robclark@freedesktop.org>
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
diff --git a/freedreno/freedreno_pipe.c b/freedreno/freedreno_pipe.c
index f55aaa4..54e957b 100644
--- a/freedreno/freedreno_pipe.c
+++ b/freedreno/freedreno_pipe.c
@@ -26,6 +26,10 @@
* Rob Clark <robclark@freedesktop.org>
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include "freedreno_drmif.h"
#include "freedreno_priv.h"
diff --git a/freedreno/freedreno_ringbuffer.c b/freedreno/freedreno_ringbuffer.c
index def869f..c13dfe9 100644
--- a/freedreno/freedreno_ringbuffer.c
+++ b/freedreno/freedreno_ringbuffer.c
@@ -26,6 +26,10 @@
* Rob Clark <robclark@freedesktop.org>
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include <assert.h>
#include "freedreno_drmif.h"
diff --git a/freedreno/kgsl/kgsl_bo.c b/freedreno/kgsl/kgsl_bo.c
index 4e492dd..fab3350 100644
--- a/freedreno/kgsl/kgsl_bo.c
+++ b/freedreno/kgsl/kgsl_bo.c
@@ -26,6 +26,10 @@
* Rob Clark <robclark@freedesktop.org>
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include "kgsl_priv.h"
#include <linux/fb.h>
diff --git a/freedreno/kgsl/kgsl_device.c b/freedreno/kgsl/kgsl_device.c
index fb6d6d2..5f2dfea 100644
--- a/freedreno/kgsl/kgsl_device.c
+++ b/freedreno/kgsl/kgsl_device.c
@@ -26,6 +26,10 @@
* Rob Clark <robclark@freedesktop.org>
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
diff --git a/freedreno/kgsl/kgsl_pipe.c b/freedreno/kgsl/kgsl_pipe.c
index 88d9505..1a795ba 100644
--- a/freedreno/kgsl/kgsl_pipe.c
+++ b/freedreno/kgsl/kgsl_pipe.c
@@ -26,6 +26,10 @@
* Rob Clark <robclark@freedesktop.org>
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include "kgsl_priv.h"
diff --git a/freedreno/kgsl/kgsl_ringbuffer.c b/freedreno/kgsl/kgsl_ringbuffer.c
index da99741..d1e8321 100644
--- a/freedreno/kgsl/kgsl_ringbuffer.c
+++ b/freedreno/kgsl/kgsl_ringbuffer.c
@@ -26,6 +26,10 @@
* Rob Clark <robclark@freedesktop.org>
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include <assert.h>
#include "freedreno_ringbuffer.h"
diff --git a/freedreno/msm/msm_bo.c b/freedreno/msm/msm_bo.c
index 57d8725..0cac1c6 100644
--- a/freedreno/msm/msm_bo.c
+++ b/freedreno/msm/msm_bo.c
@@ -26,6 +26,10 @@
* Rob Clark <robclark@freedesktop.org>
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include "msm_priv.h"
static int bo_allocate(struct msm_bo *msm_bo)
diff --git a/freedreno/msm/msm_device.c b/freedreno/msm/msm_device.c
index cadcc85..b9c5a3e 100644
--- a/freedreno/msm/msm_device.c
+++ b/freedreno/msm/msm_device.c
@@ -26,6 +26,10 @@
* Rob Clark <robclark@freedesktop.org>
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
diff --git a/freedreno/msm/msm_pipe.c b/freedreno/msm/msm_pipe.c
index 5650503..6955f2c 100644
--- a/freedreno/msm/msm_pipe.c
+++ b/freedreno/msm/msm_pipe.c
@@ -26,6 +26,10 @@
* Rob Clark <robclark@freedesktop.org>
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include "msm_priv.h"
diff --git a/freedreno/msm/msm_ringbuffer.c b/freedreno/msm/msm_ringbuffer.c
index e4d9561..6a4043f 100644
--- a/freedreno/msm/msm_ringbuffer.c
+++ b/freedreno/msm/msm_ringbuffer.c
@@ -26,6 +26,10 @@
* Rob Clark <robclark@freedesktop.org>
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include <assert.h>
#include "freedreno_ringbuffer.h"
diff --git a/nouveau/abi16.c b/nouveau/abi16.c
index f34175e..ae13821 100644
--- a/nouveau/abi16.c
+++ b/nouveau/abi16.c
@@ -22,6 +22,10 @@
* Authors: Ben Skeggs
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include <stdlib.h>
#include <stdint.h>
#include <stddef.h>
commit a6cddb34105d6d0e488e847028c57db0335e8e85
Author: Rob Clark <robclark@freedesktop.org>
Date: Sun Sep 28 12:25:21 2014 -0400
configure.ac: bump version to 2.4.57 for release
Signed-off-by: Rob Clark <robclark@freedesktop.org>
diff --git a/configure.ac b/configure.ac
index f1d3451..39312ce 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,7 +20,7 @@
AC_PREREQ([2.63])
AC_INIT([libdrm],
- [2.4.56],
+ [2.4.57],
[https://bugs.freedesktop.org/enter_bug.cgi?product=DRI],
[libdrm])
commit 537b1ca8d53f985a2c3f1c20d0671d5e8be94fd0
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date: Sun Sep 7 19:47:06 2014 +0100
intel: use drm_mmap/drm_munmap wrappers
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
diff --git a/intel/intel_bufmgr_gem.c b/intel/intel_bufmgr_gem.c
index ba65527..ee69cf8 100644
--- a/intel/intel_bufmgr_gem.c
+++ b/intel/intel_bufmgr_gem.c
@@ -48,7 +48,6 @@
#include <assert.h>
#include <pthread.h>
#include <sys/ioctl.h>
-#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdbool.h>
@@ -1051,11 +1050,11 @@ drm_intel_gem_bo_free(drm_intel_bo *bo)
DRMLISTDEL(&bo_gem->vma_list);
if (bo_gem->mem_virtual) {
VG(VALGRIND_FREELIKE_BLOCK(bo_gem->mem_virtual, 0));
- munmap(bo_gem->mem_virtual, bo_gem->bo.size);
+ drm_munmap(bo_gem->mem_virtual, bo_gem->bo.size);
bufmgr_gem->vma_count--;
}
if (bo_gem->gtt_virtual) {
- munmap(bo_gem->gtt_virtual, bo_gem->bo.size);
+ drm_munmap(bo_gem->gtt_virtual, bo_gem->bo.size);
bufmgr_gem->vma_count--;
}
@@ -1140,12 +1139,12 @@ static void drm_intel_gem_bo_purge_vma_cache(drm_intel_bufmgr_gem *bufmgr_gem)
DRMLISTDELINIT(&bo_gem->vma_list);
if (bo_gem->mem_virtual) {
- munmap(bo_gem->mem_virtual, bo_gem->bo.size);
+ drm_munmap(bo_gem->mem_virtual, bo_gem->bo.size);
bo_gem->mem_virtual = NULL;
bufmgr_gem->vma_count--;
}
if (bo_gem->gtt_virtual) {
- munmap(bo_gem->gtt_virtual, bo_gem->bo.size);
+ drm_munmap(bo_gem->gtt_virtual, bo_gem->bo.size);
bo_gem->gtt_virtual = NULL;
bufmgr_gem->vma_count--;
}
@@ -1381,9 +1380,9 @@ map_gtt(drm_intel_bo *bo)
}
/* and mmap it */
- bo_gem->gtt_virtual = mmap(0, bo->size, PROT_READ | PROT_WRITE,
- MAP_SHARED, bufmgr_gem->fd,
- mmap_arg.offset);
+ bo_gem->gtt_virtual = drm_mmap(0, bo->size, PROT_READ | PROT_WRITE,
+ MAP_SHARED, bufmgr_gem->fd,
+ mmap_arg.offset);
if (bo_gem->gtt_virtual == MAP_FAILED) {
bo_gem->gtt_virtual = NULL;
ret = -errno;
diff --git a/intel/test_decode.c b/intel/test_decode.c
index bef9d99..d7025f0 100644
--- a/intel/test_decode.c
+++ b/intel/test_decode.c
@@ -32,9 +32,9 @@
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
-#include <sys/mman.h>
#include <err.h>
+#include "libdrm.h"
#include "intel_bufmgr.h"
#include "intel_chipset.h"
@@ -64,7 +64,7 @@ read_file(const char *filename, void **ptr, size_t *size)
errx(1, "couldn't stat `%s'", filename);
*size = st.st_size;
- *ptr = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
+ *ptr = drm_mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
if (*ptr == MAP_FAILED)
errx(1, "couldn't map `%s'", filename);
commit 84badffe5e1995eae6739267bdc3fd9ef7a55f32
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date: Sun Sep 7 19:44:48 2014 +0100
freedreno: use drm_mmap/drm_munmap wrappers
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
diff --git a/freedreno/freedreno_bo.c b/freedreno/freedreno_bo.c
index b90fc56..dacb34c 100644
--- a/freedreno/freedreno_bo.c
+++ b/freedreno/freedreno_bo.c
@@ -312,7 +312,7 @@ out:
static void bo_del(struct fd_bo *bo)
{
if (bo->map)
- munmap(bo->map, bo->size);
+ drm_munmap(bo->map, bo->size);
/* TODO probably bo's in bucket list get removed from
* handle table??
@@ -394,7 +394,7 @@ drm_public void * fd_bo_map(struct fd_bo *bo)
return NULL;
}
- bo->map = mmap(0, bo->size, PROT_READ | PROT_WRITE, MAP_SHARED,
+ bo->map = drm_mmap(0, bo->size, PROT_READ | PROT_WRITE, MAP_SHARED,
bo->dev->fd, offset);
if (bo->map == MAP_FAILED) {
ERROR_MSG("mmap failed: %s", strerror(errno));
diff --git a/freedreno/freedreno_priv.h b/freedreno/freedreno_priv.h
index b204e53..8e072d9 100644
--- a/freedreno/freedreno_priv.h
+++ b/freedreno/freedreno_priv.h
@@ -40,7 +40,6 @@
#include <errno.h>
#include <fcntl.h>
#include <sys/ioctl.h>
-#include <sys/mman.h>
#include <pthread.h>
#include <stdio.h>
#include <assert.h>
diff --git a/freedreno/kgsl/kgsl_bo.c b/freedreno/kgsl/kgsl_bo.c
index c868097..4e492dd 100644
--- a/freedreno/kgsl/kgsl_bo.c
+++ b/freedreno/kgsl/kgsl_bo.c
@@ -186,7 +186,7 @@ fd_bo_from_fbdev(struct fd_pipe *pipe, int fbfd, uint32_t size)
* thinks the buffer hasn't be allocate and fails
*/
if (bo) {
- void *fbmem = mmap(NULL, size, PROT_READ | PROT_WRITE,
+ void *fbmem = drm_mmap(NULL, size, PROT_READ | PROT_WRITE,
MAP_SHARED, fbfd, 0);
struct kgsl_map_user_mem req = {
.memtype = KGSL_USER_MEM_TYPE_ADDR,
diff --git a/freedreno/kgsl/kgsl_ringbuffer.c b/freedreno/kgsl/kgsl_ringbuffer.c
index dc3c9c2..da99741 100644
--- a/freedreno/kgsl/kgsl_ringbuffer.c
+++ b/freedreno/kgsl/kgsl_ringbuffer.c
@@ -60,7 +60,7 @@ static void kgsl_rb_bo_del(struct kgsl_rb_bo *bo)
};
int ret;
- munmap(bo->hostptr, bo->size);
+ drm_munmap(bo->hostptr, bo->size);
ret = ioctl(bo->pipe->fd, IOCTL_KGSL_SHAREDMEM_FREE, &req);
if (ret) {
@@ -93,7 +93,7 @@ static struct kgsl_rb_bo * kgsl_rb_bo_new(struct kgsl_pipe *pipe, uint32_t size)
bo->pipe = pipe;
bo->gpuaddr = req.gpuaddr;
bo->size = size;
- bo->hostptr = mmap(NULL, size, PROT_WRITE|PROT_READ,
+ bo->hostptr = drm_mmap(NULL, size, PROT_WRITE|PROT_READ,
MAP_SHARED, pipe->fd, req.gpuaddr);
return bo;
commit 6281cf1b4310ff0b7670677cb4113a89ebf0b619
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date: Sun Sep 7 19:43:53 2014 +0100
radeon: use drm_mmap/drm_munmap wrappers
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
diff --git a/radeon/radeon_bo_gem.c b/radeon/radeon_bo_gem.c
index 251ec1b..e78303a 100644
--- a/radeon/radeon_bo_gem.c
+++ b/radeon/radeon_bo_gem.c
@@ -36,7 +36,6 @@
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
-#include <sys/mman.h>
#include <errno.h>
#include "libdrm.h"
#include "xf86drm.h"
@@ -135,7 +134,7 @@ static struct radeon_bo *bo_unref(struct radeon_bo_int *boi)
return (struct radeon_bo *)boi;
}
if (bo_gem->priv_ptr) {
- munmap(bo_gem->priv_ptr, boi->size);
+ drm_munmap(bo_gem->priv_ptr, boi->size);
}
/* Zero out args to make valgrind happy */
@@ -179,7 +178,7 @@ static int bo_map(struct radeon_bo_int *boi, int write)
boi, boi->handle, r);
return r;
}
- ptr = mmap(0, args.size, PROT_READ|PROT_WRITE, MAP_SHARED, boi->bom->fd, args.addr_ptr);
+ ptr = drm_mmap(0, args.size, PROT_READ|PROT_WRITE, MAP_SHARED, boi->bom->fd, args.addr_ptr);
if (ptr == MAP_FAILED)
return -errno;
bo_gem->priv_ptr = ptr;
@@ -198,7 +197,7 @@ static int bo_unmap(struct radeon_bo_int *boi)
if (--bo_gem->map_count > 0) {
return 0;
}
- //munmap(bo->ptr, bo->size);
+ //drm_munmap(bo->ptr, bo->size);
boi->ptr = NULL;
return 0;
}
diff --git a/radeon/radeon_cs_gem.c b/radeon/radeon_cs_gem.c
index 2020e1a..705ee05 100644
--- a/radeon/radeon_cs_gem.c
+++ b/radeon/radeon_cs_gem.c
@@ -37,7 +37,6 @@
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
-#include <sys/mman.h>
#include <sys/ioctl.h>
#include "radeon_cs.h"
#include "radeon_cs_int.h"
diff --git a/radeon/radeon_surface.c b/radeon/radeon_surface.c
index 40a544a..0723425 100644
--- a/radeon/radeon_surface.c
+++ b/radeon/radeon_surface.c
@@ -35,7 +35,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <sys/mman.h>
#include <sys/ioctl.h>
#include "drm.h"
#include "libdrm.h"
commit c98c54f8434e2d38353bbf65b538bfcbf709409b
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date: Sun Sep 7 19:42:08 2014 +0100
nouveau: use drm_mmap/drm_munmap wrappers
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
diff --git a/nouveau/nouveau.c b/nouveau/nouveau.c
index 43f0d3c..da49e17 100644
--- a/nouveau/nouveau.c
+++ b/nouveau/nouveau.c
@@ -33,11 +33,11 @@
#include <stdbool.h>
#include <assert.h>
#include <errno.h>
-#include <sys/mman.h>
#include <fcntl.h>
#include <xf86drm.h>
#include <xf86atomic.h>
+#include "libdrm.h"
#include "libdrm_lists.h"
#include "nouveau_drm.h"
@@ -381,7 +381,7 @@ nouveau_bo_del(struct nouveau_bo *bo)
drmIoctl(bo->device->fd, DRM_IOCTL_GEM_CLOSE, &req);
}
if (bo->map)
- munmap(bo->map, bo->size);
+ drm_munmap(bo->map, bo->size);
free(nvbo);
}
@@ -607,7 +607,7 @@ nouveau_bo_map(struct nouveau_bo *bo, uint32_t access,
{
struct nouveau_bo_priv *nvbo = nouveau_bo(bo);
if (bo->map == NULL) {
- bo->map = mmap(0, bo->size, PROT_READ | PROT_WRITE,
+ bo->map = drm_mmap(0, bo->size, PROT_READ | PROT_WRITE,
MAP_SHARED, bo->device->fd, nvbo->map_handle);
if (bo->map == MAP_FAILED) {
bo->map = NULL;
commit dadc9eff9fd606335a7b3d5d58065a2e8d629672
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date: Sun Sep 7 19:41:37 2014 +0100
libkms: use drm_mmap/drm_munmap wrappers
... for all by exynos.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
diff --git a/libkms/dumb.c b/libkms/dumb.c
index 5702543..f9c16e1 100644
--- a/libkms/dumb.c
+++ b/libkms/dumb.c
@@ -36,11 +36,9 @@
#include <string.h>
#include "internal.h"
-#include <sys/mman.h>
#include <sys/ioctl.h>
#include "xf86drm.h"
-
-#include "i915_drm.h"
+#include "libdrm.h"
struct dumb_bo
{
@@ -149,7 +147,7 @@ dumb_bo_map(struct kms_bo *_bo, void **out)
if (ret)
return ret;
- map = mmap(0, bo->base.size, PROT_READ | PROT_WRITE, MAP_SHARED, bo->base.kms->fd, arg.offset);
+ map = drm_mmap(0, bo->base.size, PROT_READ | PROT_WRITE, MAP_SHARED, bo->base.kms->fd, arg.offset);
if (map == MAP_FAILED)
return -errno;
@@ -177,7 +175,7 @@ dumb_bo_destroy(struct kms_bo *_bo)
if (bo->base.ptr) {
/* XXX Sanity check map_count */
- munmap(bo->base.ptr, bo->base.size);
+ drm_munmap(bo->base.ptr, bo->base.size);
bo->base.ptr = NULL;
}
diff --git a/libkms/intel.c b/libkms/intel.c
index b006ea4..51a7fd2 100644
--- a/libkms/intel.c
+++ b/libkms/intel.c
@@ -36,9 +36,9 @@
#include <string.h>
#include "internal.h"
-#include <sys/mman.h>
#include <sys/ioctl.h>
#include "xf86drm.h"
+#include "libdrm.h"
#include "i915_drm.h"
@@ -173,7 +173,7 @@ intel_bo_map(struct kms_bo *_bo, void **out)
if (ret)
return ret;
- map = mmap(0, bo->base.size, PROT_READ | PROT_WRITE, MAP_SHARED, bo->base.kms->fd, arg.offset);
+ map = drm_mmap(0, bo->base.size, PROT_READ | PROT_WRITE, MAP_SHARED, bo->base.kms->fd, arg.offset);
if (map == MAP_FAILED)
return -errno;
@@ -201,7 +201,7 @@ intel_bo_destroy(struct kms_bo *_bo)
if (bo->base.ptr) {
/* XXX Sanity check map_count */
- munmap(bo->base.ptr, bo->base.size);
+ drm_munmap(bo->base.ptr, bo->base.size);
bo->base.ptr = NULL;
}
diff --git a/libkms/nouveau.c b/libkms/nouveau.c
index 15c012e..228903f 100644
--- a/libkms/nouveau.c
+++ b/libkms/nouveau.c
@@ -36,9 +36,9 @@
#include <string.h>
#include "internal.h"
-#include <sys/mman.h>
#include <sys/ioctl.h>
#include "xf86drm.h"
+#include "libdrm.h"
#include "nouveau_drm.h"
@@ -155,7 +155,7 @@ nouveau_bo_map(struct kms_bo *_bo, void **out)
return 0;
}
- map = mmap(0, bo->base.size, PROT_READ | PROT_WRITE, MAP_SHARED, bo->base.kms->fd, bo->map_handle);
+ map = drm_mmap(0, bo->base.size, PROT_READ | PROT_WRITE, MAP_SHARED, bo->base.kms->fd, bo->map_handle);
if (map == MAP_FAILED)
return -errno;
@@ -183,7 +183,7 @@ nouveau_bo_destroy(struct kms_bo *_bo)
if (bo->base.ptr) {
/* XXX Sanity check map_count */
- munmap(bo->base.ptr, bo->base.size);
+ drm_munmap(bo->base.ptr, bo->base.size);
bo->base.ptr = NULL;
}
diff --git a/libkms/radeon.c b/libkms/radeon.c
index 938321b..9383a0a 100644
--- a/libkms/radeon.c
+++ b/libkms/radeon.c
@@ -36,9 +36,9 @@
#include <string.h>
#include "internal.h"
-#include <sys/mman.h>
#include <sys/ioctl.h>
#include "xf86drm.h"
+#include "libdrm.h"
#include "radeon_drm.h"
@@ -172,7 +172,7 @@ radeon_bo_map(struct kms_bo *_bo, void **out)
if (ret)
return -errno;
- map = mmap(0, arg.size, PROT_READ | PROT_WRITE, MAP_SHARED,
+ map = drm_mmap(0, arg.size, PROT_READ | PROT_WRITE, MAP_SHARED,
bo->base.kms->fd, arg.addr_ptr);
if (map == MAP_FAILED)
return -errno;
@@ -189,7 +189,7 @@ radeon_bo_unmap(struct kms_bo *_bo)
{
struct radeon_bo *bo = (struct radeon_bo *)_bo;
if (--bo->map_count == 0) {
- munmap(bo->base.ptr, bo->base.size);
+ drm_munmap(bo->base.ptr, bo->base.size);
bo->base.ptr = NULL;
}
return 0;
@@ -204,7 +204,7 @@ radeon_bo_destroy(struct kms_bo *_bo)
if (bo->base.ptr) {
/* XXX Sanity check map_count */
- munmap(bo->base.ptr, bo->base.size);
+ drm_munmap(bo->base.ptr, bo->base.size);
bo->base.ptr = NULL;
}
diff --git a/libkms/vmwgfx.c b/libkms/vmwgfx.c
index 08163a1..bc04133 100644
--- a/libkms/vmwgfx.c
+++ b/libkms/vmwgfx.c
@@ -35,8 +35,8 @@
#include <string.h>
#include "internal.h"
-#include <sys/mman.h>
#include "xf86drm.h"
+#include "libdrm.h"
#include "vmwgfx_drm.h"
struct vmwgfx_bo
@@ -146,7 +146,7 @@ vmwgfx_bo_map(struct kms_bo *_bo, void **out)
return 0;
}
- map = mmap(NULL, bo->base.size, PROT_READ | PROT_WRITE, MAP_SHARED, bo->base.kms->fd, bo->map_handle);
+ map = drm_mmap(NULL, bo->base.size, PROT_READ | PROT_WRITE, MAP_SHARED, bo->base.kms->fd, bo->map_handle);
if (map == MAP_FAILED)
return -errno;
@@ -173,7 +173,7 @@ vmwgfx_bo_destroy(struct kms_bo *_bo)
if (bo->base.ptr) {
/* XXX Sanity check map_count */
- munmap(bo->base.ptr, bo->base.size);
+ drm_munmap(bo->base.ptr, bo->base.size);
bo->base.ptr = NULL;
}
commit faf51d5694e3f0ec12c7fa1fd2f87fc96a300fe3
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date: Sun Sep 7 20:03:05 2014 +0100
drm: use drm_mmap/drm_munmap wrappers
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
diff --git a/xf86drm.c b/xf86drm.c
index 85beb8c..d900b4b 100644
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -48,7 +48,6 @@
#include <sys/stat.h>
#define stat_t struct stat
#include <sys/ioctl.h>
-#include <sys/mman.h>
#include <sys/time.h>
#include <stdarg.h>
@@ -58,6 +57,7 @@
#endif
#include "xf86drm.h"
+#include "libdrm.h"
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
#define DRM_MAJOR 145
@@ -1137,7 +1137,7 @@ int drmMap(int fd, drm_handle_t handle, drmSize size, drmAddressPtr address)
size = (size + pagesize_mask) & ~pagesize_mask;
- *address = mmap(0, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, handle);
+ *address = drm_mmap(0, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, handle);
if (*address == MAP_FAILED)
return -errno;
return 0;
@@ -1157,7 +1157,7 @@ int drmMap(int fd, drm_handle_t handle, drmSize size, drmAddressPtr address)
*/
int drmUnmap(drmAddress address, drmSize size)
{
- return munmap(address, size);
+ return drm_munmap(address, size);
}
drmBufInfoPtr drmGetBufInfo(int fd)
@@ -1264,7 +1264,7 @@ int drmUnmapBufs(drmBufMapPtr bufs)
int i;
for (i = 0; i < bufs->count; i++) {
- munmap(bufs->list[i].address, bufs->list[i].total);
+ drm_munmap(bufs->list[i].address, bufs->list[i].total);
}
drmFree(bufs->list);
commit 4c2766b69c261703c62131b5e4200d0e164b5eb4
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date: Sun Sep 7 19:29:00 2014 +0100
Add private mmap/munmap wrappers
Unlike Linux, Android (bionic) has separate functions - mmap & mmap64.
Add a local wrapper (inspired by gallium) that will be used throughout
libdrm to combat this bionic feature.
v2:
- Drop the undefined unlikely macro.
- Use macro for munmap under Android.
- Wrap long lines.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Reviewed-by: Jakob Bornecrantz <jakob@vmware.com> (v1)
diff --git a/libdrm.h b/libdrm.h
index 23926e6..acfada5 100644
--- a/libdrm.h
+++ b/libdrm.h
@@ -31,4 +31,59 @@
# define drm_public
#endif
+
+/**
+ * Static (compile-time) assertion.
+ * Basically, use COND to dimension an array. If COND is false/zero the
+ * array size will be -1 and we'll get a compilation error.
+ */
+#define STATIC_ASSERT(COND) \
+ do { \
+ (void) sizeof(char [1 - 2*!(COND)]); \
+ } while (0)
+
+
+#include <sys/mman.h>
+
+#if defined(ANDROID)
+#include <errno.h> /* for EINVAL */
+
+extern void *__mmap2(void *, size_t, int, int, int, size_t);
+
+static inline void *drm_mmap(void *addr, size_t length, int prot, int flags,
+ int fd, loff_t offset)
+{
+ /* offset must be aligned to 4096 (not necessarily the page size) */
+ if (offset & 4095) {
+ errno = EINVAL;
+ return MAP_FAILED;
+ }
+
+ return __mmap2(addr, length, prot, flags, fd, (size_t) (offset >> 12));
+}
+
+# define drm_munmap(addr, length) \
+ munmap(addr, length)
+
+
+#else
+
+/* assume large file support exists */
+# define drm_mmap(addr, length, prot, flags, fd, offset) \
+ mmap(addr, length, prot, flags, fd, offset)
+
+
+static inline int drm_munmap(void *addr, size_t length)
+{
+ /* Copied from configure code generated by AC_SYS_LARGEFILE */
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + \
+ (((off_t) 1 << 31) << 31))
+ STATIC_ASSERT(LARGE_OFF_T % 2147483629 == 721 &&
+ LARGE_OFF_T % 2147483647 == 1);
+#undef LARGE_OFF_T
+
+ return munmap(addr, length);
+}
+#endif
+
#endif
commit 268dce4192125ceb6a65f1c8d885e4b656310578
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date: Sun Sep 7 15:48:48 2014 +0100
automake: pick up all files for distribution.
Autotools is already smart enough to pick the *.pc.in files but it
needs some help with the Android.mk ones.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
diff --git a/Makefile.am b/Makefile.am
index 884841f..3952a88 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -69,7 +69,7 @@ libdrm_la_SOURCES = $(LIBDRM_FILES)
libdrmincludedir = ${includedir}
libdrminclude_HEADERS = $(LIBDRM_H_FILES)
-EXTRA_DIST = libdrm.pc.in
+EXTRA_DIST = Android.mk
Reply to: