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 <robcl...@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 <robcl...@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 <robdcl...@gmail.com> Date: Sun Sep 28 14:48:16 2014 -0400 more compile fix Signed-off-by: Rob Clark <robdcl...@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 <robdcl...@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 <robdcl...@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 <robcl...@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 <robcl...@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 <robcl...@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 <robcl...@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 <robcl...@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 <robcl...@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 <robcl...@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 <robcl...@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 <robcl...@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 <robcl...@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 <robcl...@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 <robcl...@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 <robcl...@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 <robcl...@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.veli...@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.veli...@gmail.com> Reviewed-by: Jakob Bornecrantz <ja...@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.veli...@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.veli...@gmail.com> Reviewed-by: Jakob Bornecrantz <ja...@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.veli...@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.veli...@gmail.com> Reviewed-by: Jakob Bornecrantz <ja...@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.veli...@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.veli...@gmail.com> Reviewed-by: Jakob Bornecrantz <ja...@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.veli...@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.veli...@gmail.com> Reviewed-by: Jakob Bornecrantz <ja...@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.veli...@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.veli...@gmail.com> Reviewed-by: Jakob Bornecrantz <ja...@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.veli...@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.veli...@gmail.com> Reviewed-by: Jakob Bornecrantz <ja...@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.veli...@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.veli...@gmail.com> Reviewed-by: Jakob Bornecrantz <ja...@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 -- To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: https://lists.debian.org/e1xzhv2-0003qp...@moszumanska.debian.org