cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

eventfd.h (2146B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 *  include/linux/eventfd.h
      4 *
      5 *  Copyright (C) 2007  Davide Libenzi <davidel@xmailserver.org>
      6 *
      7 */
      8
      9#ifndef _LINUX_EVENTFD_H
     10#define _LINUX_EVENTFD_H
     11
     12#include <linux/fcntl.h>
     13#include <linux/wait.h>
     14#include <linux/err.h>
     15#include <linux/percpu-defs.h>
     16#include <linux/percpu.h>
     17#include <linux/sched.h>
     18
     19/*
     20 * CAREFUL: Check include/uapi/asm-generic/fcntl.h when defining
     21 * new flags, since they might collide with O_* ones. We want
     22 * to re-use O_* flags that couldn't possibly have a meaning
     23 * from eventfd, in order to leave a free define-space for
     24 * shared O_* flags.
     25 */
     26#define EFD_SEMAPHORE (1 << 0)
     27#define EFD_CLOEXEC O_CLOEXEC
     28#define EFD_NONBLOCK O_NONBLOCK
     29
     30#define EFD_SHARED_FCNTL_FLAGS (O_CLOEXEC | O_NONBLOCK)
     31#define EFD_FLAGS_SET (EFD_SHARED_FCNTL_FLAGS | EFD_SEMAPHORE)
     32
     33struct eventfd_ctx;
     34struct file;
     35
     36#ifdef CONFIG_EVENTFD
     37
     38void eventfd_ctx_put(struct eventfd_ctx *ctx);
     39struct file *eventfd_fget(int fd);
     40struct eventfd_ctx *eventfd_ctx_fdget(int fd);
     41struct eventfd_ctx *eventfd_ctx_fileget(struct file *file);
     42__u64 eventfd_signal(struct eventfd_ctx *ctx, __u64 n);
     43int eventfd_ctx_remove_wait_queue(struct eventfd_ctx *ctx, wait_queue_entry_t *wait,
     44				  __u64 *cnt);
     45void eventfd_ctx_do_read(struct eventfd_ctx *ctx, __u64 *cnt);
     46
     47static inline bool eventfd_signal_allowed(void)
     48{
     49	return !current->in_eventfd_signal;
     50}
     51
     52#else /* CONFIG_EVENTFD */
     53
     54/*
     55 * Ugly ugly ugly error layer to support modules that uses eventfd but
     56 * pretend to work in !CONFIG_EVENTFD configurations. Namely, AIO.
     57 */
     58
     59static inline struct eventfd_ctx *eventfd_ctx_fdget(int fd)
     60{
     61	return ERR_PTR(-ENOSYS);
     62}
     63
     64static inline int eventfd_signal(struct eventfd_ctx *ctx, int n)
     65{
     66	return -ENOSYS;
     67}
     68
     69static inline void eventfd_ctx_put(struct eventfd_ctx *ctx)
     70{
     71
     72}
     73
     74static inline int eventfd_ctx_remove_wait_queue(struct eventfd_ctx *ctx,
     75						wait_queue_entry_t *wait, __u64 *cnt)
     76{
     77	return -ENOSYS;
     78}
     79
     80static inline bool eventfd_signal_allowed(void)
     81{
     82	return true;
     83}
     84
     85static inline void eventfd_ctx_do_read(struct eventfd_ctx *ctx, __u64 *cnt)
     86{
     87
     88}
     89
     90#endif
     91
     92#endif /* _LINUX_EVENTFD_H */
     93