qemu/include/qemu/futex.h
<<
>>
Prefs
   1/*
   2 * Wrappers around Linux futex syscall
   3 *
   4 * Copyright Red Hat, Inc. 2017
   5 *
   6 * Author:
   7 *  Paolo Bonzini <pbonzini@redhat.com>
   8 *
   9 * This work is licensed under the terms of the GNU GPL, version 2 or later.
  10 * See the COPYING file in the top-level directory.
  11 *
  12 */
  13
  14#ifndef QEMU_FUTEX_H
  15#define QEMU_FUTEX_H
  16
  17#include <sys/syscall.h>
  18#include <linux/futex.h>
  19
  20#define qemu_futex(...)              syscall(__NR_futex, __VA_ARGS__)
  21
  22static inline void qemu_futex_wake(void *f, int n)
  23{
  24    qemu_futex(f, FUTEX_WAKE, n, NULL, NULL, 0);
  25}
  26
  27static inline void qemu_futex_wait(void *f, unsigned val)
  28{
  29    while (qemu_futex(f, FUTEX_WAIT, (int) val, NULL, NULL, 0)) {
  30        switch (errno) {
  31        case EWOULDBLOCK:
  32            return;
  33        case EINTR:
  34            break; /* get out of switch and retry */
  35        default:
  36            abort();
  37        }
  38    }
  39}
  40
  41#endif /* QEMU_FUTEX_H */
  42