The Pedigree Project
0.1
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
src
system
include
pedigree
kernel
Spinlock.h
1
/*
2
* Copyright (c) 2008-2014, Pedigree Developers
3
*
4
* Please see the CONTRIB file in the root of the source tree for a full
5
* list of contributors.
6
*
7
* Permission to use, copy, modify, and distribute this software for any
8
* purpose with or without fee is hereby granted, provided that the above
9
* copyright notice and this permission notice appear in all copies.
10
*
11
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18
*/
19
20
#ifndef KERNEL_SPINLOCK_H
21
#define KERNEL_SPINLOCK_H
22
23
#include "pedigree/kernel/Atomic.h"
24
#include "pedigree/kernel/compiler.h"
25
#include "pedigree/kernel/processor/types.h"
26
27
class
EXPORTED_PUBLIC
Spinlock
28
{
29
friend
class
PerProcessorScheduler
;
30
friend
class
LocksCommand
;
31
32
public
:
33
Spinlock
();
34
Spinlock
(
bool
bLocked,
bool
bAvoidTracking =
false
);
35
43
bool
acquire(
bool
recurse =
false
,
bool
safe =
true
);
44
46
void
exit();
47
49
void
release();
50
51
bool
acquired();
52
53
bool
interrupts()
const
;
54
55
static
const
bool
allow_recursion =
true
;
56
57
private
:
59
void
unwind();
60
62
void
trackRelease()
const
;
63
64
volatile
bool
m_bInterrupts =
false
;
65
Atomic<bool>
m_Atom =
true
;
// unlocked by default
67
Atomic<uint64_t>
m_CpuState = 0;
68
69
uint64_t m_Sentinel = 0;
70
71
uint32_t m_Magic = 0xdeadbaba;
72
uint32_t m_MagicAlign = 0;
73
74
void
*m_pOwner =
nullptr
;
75
size_t
m_Level = 0;
76
size_t
m_OwnedProcessor = ~0;
77
78
uintptr_t m_Ra = 0;
79
80
bool
m_bAvoidTracking =
false
;
81
bool
m_bOwned =
false
;
82
};
83
84
#endif
EXPORTED_PUBLIC
#define EXPORTED_PUBLIC
Definition:
system/include/pedigree/kernel/compiler.h:78
Atomic< bool >
PerProcessorScheduler
Definition:
PerProcessorScheduler.h:37
Spinlock
Definition:
Spinlock.h:27
LocksCommand
Definition:
LocksCommand.h:54
Generated on Fri Jan 24 2020 06:46:16 for The Pedigree Project by
1.8.11