CS350 COS
COS
Loading...
Searching...
No Matches
spinlock.h
Go to the documentation of this file.
1
2#ifndef __SPINLOCK_H__
3#define __SPINLOCK_H__
4
5#include <stdint.h>
6
7#include <sys/cdefs.h>
8#include <sys/queue.h>
9
10#define SPINLOCK_NAMELEN 32
11
12#define SPINLOCK_TYPE_NORMAL 1
13#define SPINLOCK_TYPE_RECURSIVE 2
14
15typedef struct Spinlock
16{
17 volatile uint64_t lock;
29
30void Critical_Init();
31void Critical_Enter();
32void Critical_Exit();
34
36void Spinlock_Init(Spinlock *lock, const char *name, uint64_t type);
37void Spinlock_Destroy(Spinlock *lock);
38void Spinlock_Lock(Spinlock *lock) __LOCK_EX(*lock);
39void Spinlock_Unlock(Spinlock *lock) __UNLOCK_EX(*lock);
41
42#endif /* __SPINLOCK_H__ */
43
#define __LOCK_EX(_x)
Definition: cdefs.h:33
#define __LOCK_EX_ASSERT(_x)
Definition: cdefs.h:36
#define __UNLOCK_EX(_x)
Definition: cdefs.h:35
#define __LOCKABLE
Definition: cdefs.h:32
uint32_t type
Definition: multiboot.h:8
void Spinlock_Unlock(Spinlock *lock) __UNLOCK_EX(*lock)
Definition: spinlock.c:109
void Spinlock_EarlyInit()
void Spinlock_Destroy(Spinlock *lock)
Definition: spinlock.c:61
void Critical_Exit()
Definition: critical.c:35
bool Spinlock_IsHeld(Spinlock *lock) __LOCK_EX_ASSERT(*lock)
Definition: spinlock.c:126
uint32_t Critical_Level()
Definition: critical.c:45
void Critical_Enter()
Definition: critical.c:28
#define SPINLOCK_NAMELEN
Definition: spinlock.h:10
void Critical_Init()
Definition: critical.c:17
void Spinlock_Lock(Spinlock *lock) __LOCK_EX(*lock)
Definition: spinlock.c:75
void Spinlock_Init(Spinlock *lock, const char *name, uint64_t type)
Definition: spinlock.c:43
uint64_t type
Definition: spinlock.h:24
uint64_t cpu
Definition: spinlock.h:18
uint64_t count
Definition: spinlock.h:19
uint64_t rCount
Definition: spinlock.h:20
volatile uint64_t lock
Definition: spinlock.h:17
uint64_t lockTime
Definition: spinlock.h:21
TAILQ_ENTRY(Spinlock) lockStack
LIST_ENTRY(Spinlock) lockList
uint64_t waitTime
Definition: spinlock.h:22
uint64_t lockedTSC
Definition: spinlock.h:23
char name[SPINLOCK_NAMELEN]
Definition: spinlock.h:25
unsigned int uint32_t
Definition: types.h:12
unsigned long uint64_t
Definition: types.h:13