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

semaphore.h (1384B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (c) 2008 Intel Corporation
      4 * Author: Matthew Wilcox <willy@linux.intel.com>
      5 *
      6 * Please see kernel/locking/semaphore.c for documentation of these functions
      7 */
      8#ifndef __LINUX_SEMAPHORE_H
      9#define __LINUX_SEMAPHORE_H
     10
     11#include <linux/list.h>
     12#include <linux/spinlock.h>
     13
     14/* Please don't access any members of this structure directly */
     15struct semaphore {
     16	raw_spinlock_t		lock;
     17	unsigned int		count;
     18	struct list_head	wait_list;
     19};
     20
     21#define __SEMAPHORE_INITIALIZER(name, n)				\
     22{									\
     23	.lock		= __RAW_SPIN_LOCK_UNLOCKED((name).lock),	\
     24	.count		= n,						\
     25	.wait_list	= LIST_HEAD_INIT((name).wait_list),		\
     26}
     27
     28#define DEFINE_SEMAPHORE(name)	\
     29	struct semaphore name = __SEMAPHORE_INITIALIZER(name, 1)
     30
     31static inline void sema_init(struct semaphore *sem, int val)
     32{
     33	static struct lock_class_key __key;
     34	*sem = (struct semaphore) __SEMAPHORE_INITIALIZER(*sem, val);
     35	lockdep_init_map(&sem->lock.dep_map, "semaphore->lock", &__key, 0);
     36}
     37
     38extern void down(struct semaphore *sem);
     39extern int __must_check down_interruptible(struct semaphore *sem);
     40extern int __must_check down_killable(struct semaphore *sem);
     41extern int __must_check down_trylock(struct semaphore *sem);
     42extern int __must_check down_timeout(struct semaphore *sem, long jiffies);
     43extern void up(struct semaphore *sem);
     44
     45#endif /* __LINUX_SEMAPHORE_H */