From: Emil Velikov <emil.l.velikov@gmail.com>
To: dri-devel@lists.freedesktop.org
Cc: emil.l.velikov@gmail.com
Subject: [PATCH 12/18] Add private mmap/munmap wrappers
Date: Sun, 7 Sep 2014 22:30:07 +0100 [thread overview]
Message-ID: <1410125413-19465-13-git-send-email-emil.l.velikov@gmail.com> (raw)
In-Reply-To: <1410125413-19465-1-git-send-email-emil.l.velikov@gmail.com>
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.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
---
libdrm.h | 45 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/libdrm.h b/libdrm.h
index 23926e6..33acfa9 100644
--- a/libdrm.h
+++ b/libdrm.h
@@ -31,4 +31,49 @@
# 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 (unlikely(offset & 4095)) {
+ errno = EINVAL;
+ return MAP_FAILED;
+ }
+
+ return __mmap2(addr, length, prot, flags, fd, (size_t) (offset >> 12));
+}
+
+#else
+/* assume large file support exists */
+# define drm_mmap(addr, length, prot, flags, fd, offset) mmap(addr, length, prot, flags, fd, offset)
+#endif
+
+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
--
2.0.2
next prev parent reply other threads:[~2014-09-07 21:31 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-07 21:29 [PATCH 00/18] Final batch of Android related fixes Emil Velikov
2014-09-07 21:29 ` [PATCH 01/18] automake: remove obsolete makefiles Emil Velikov
2014-09-07 21:29 ` [PATCH 02/18] Remove i810_drm.h and i830_drm.h from the distribution tarball Emil Velikov
2014-09-07 21:29 ` [PATCH 03/18] automake: fix 'make commit-headers' Emil Velikov
2014-09-07 21:29 ` [PATCH 04/18] configure: unconditionally check for atomic ops/primitives Emil Velikov
2014-09-07 21:30 ` [PATCH 05/18] libkms: build the intel backend only when needed Emil Velikov
2014-09-08 10:11 ` Jakob Bornecrantz
2014-09-07 21:30 ` [PATCH 06/18] libkms: move sources lists to makefile.sources Emil Velikov
2014-09-07 21:30 ` [PATCH 07/18] libkms: add Android build Emil Velikov
2014-09-08 10:10 ` Jakob Bornecrantz
2014-09-07 21:30 ` [PATCH 08/18] modetest: move sources lists to makefiles.sources Emil Velikov
2014-09-07 21:30 ` [PATCH 09/18] modetest: add Android build Emil Velikov
2014-09-16 13:30 ` [PATCHv2 " Emil Velikov
2014-09-07 21:30 ` [PATCH 10/18] modetest: Add support of STI driver Emil Velikov
2014-09-07 21:30 ` [PATCH 11/18] automake: pick up all files for distribution Emil Velikov
2014-09-07 21:30 ` Emil Velikov [this message]
2014-09-16 13:31 ` [PATCHv2 12/18] Add private mmap/munmap wrappers Emil Velikov
2014-09-07 21:30 ` [PATCH 13/18] drm: use drm_mmap/drm_munmap wrappers Emil Velikov
2014-09-07 21:30 ` [PATCH 14/18] libkms: " Emil Velikov
2014-09-07 21:30 ` [PATCH 15/18] nouveau: " Emil Velikov
2014-09-07 21:30 ` [PATCH 16/18] radeon: " Emil Velikov
2014-09-07 21:30 ` [PATCH 17/18] freedreno: " Emil Velikov
2014-09-07 21:30 ` [PATCH 18/18] intel: " Emil Velikov
2014-09-08 11:10 ` [PATCH 00/18] Final batch of Android related fixes Jakob Bornecrantz
2014-09-08 12:14 ` Daniel Vetter
2014-09-16 13:34 ` Emil Velikov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1410125413-19465-13-git-send-email-emil.l.velikov@gmail.com \
--to=emil.l.velikov@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox