I'm not 100% sure why but GMail has decided that every single e-mail you send to the mailing list is spam. You might want to check that out. :)
On Sun, Dec 31, 2017 at 8:55 AM, Greg V <greg@unrelenting.technology> wrote: > Use umtx for futex, and SHM_ANON for memfd. > > Also use temp files as memfd fallback for other OSes. > > Obtained from: FreeBSD ports > --- > src/intel/vulkan/anv_allocator.c | 56 ++++++++++++++++++++++++++++++ > ++++++++++ > 1 file changed, 56 insertions(+) > > diff --git a/src/intel/vulkan/anv_allocator.c b/src/intel/vulkan/anv_ > allocator.c > index 33bd3c68c5..c31d3d17d2 100644 > --- a/src/intel/vulkan/anv_allocator.c > +++ b/src/intel/vulkan/anv_allocator.c > @@ -25,7 +25,13 @@ > #include <unistd.h> > #include <limits.h> > #include <assert.h> > +#ifdef __linux__ > #include <linux/memfd.h> > +#elif __FreeBSD__ > +#include <errno.h> > +#include <fcntl.h> > +#include <sys/umtx.h> > +#endif > #include <sys/mman.h> > > #include "anv_private.h" > @@ -50,6 +56,34 @@ > #define VG_NOACCESS_WRITE(__ptr, __val) (*(__ptr) = (__val)) > #endif > > +#ifdef __FreeBSD__ > +static inline int > +sys_futex(void *addr, int op, int32_t val) > +{ > + return _umtx_op(addr, op, (uint32_t)val, NULL, NULL) == -1 ? errno : 0; > +} > + > +static inline int > +futex_wake(uint32_t *addr, int count) > +{ > + return sys_futex(addr, UMTX_OP_WAKE, count); > +} > + > +static inline int > +futex_wait(uint32_t *addr, int32_t value, int32_t _) > +{ > + return sys_futex(addr, UMTX_OP_WAIT_UINT, value); > +} > +#endif > + > +#ifndef MAP_POPULATE > +#define MAP_POPULATE 0 > +#endif > + > +#ifndef MFD_CLOEXEC > +#define MFD_CLOEXEC O_CLOEXEC > +#endif > + > /* Design goals: > * > * - Lock free (except when resizing underlying bos) > @@ -113,7 +147,29 @@ struct anv_mmap_cleanup { > static inline int > memfd_create(const char *name, unsigned int flags) > { > +#if defined(__linux__) > return syscall(SYS_memfd_create, name, flags); > +#elif defined(__FreeBSD__) > + return shm_open(SHM_ANON, flags | O_RDWR | O_CREAT, 0600); > +#else /* DragonFly, NetBSD, OpenBSD, Solaris */ > + char template[] = "/tmp/shmfd-XXXXXX"; > +#ifdef HAVE_MKOSTEMP > + int fd = mkostemp(template, flags); > +#else > + int fd = mkstemp(template); > + if (flags & O_CLOEXEC) { > + int flags = fcntl(fd, F_GETFD); > + if (flags != -1) { > + flags |= FD_CLOEXEC; > + (void) fcntl(fd, F_SETFD, &flags); > + } > + } > +#endif /* HAVE_MKOSTEMP */ > + if (fd >= 0) > + unlink(template); > + > + return fd; > +#endif /* __linux__ */ > } > #endif > > -- > 2.15.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev