CS350 COS
COS
Loading...
Searching...
No Matches
critical.c
Go to the documentation of this file.
1
2#include <stdbool.h>
3#include <stdint.h>
4
5#include <sys/kassert.h>
6#include <sys/kdebug.h>
7#include <sys/kconfig.h>
8#include <sys/mp.h>
9#include <sys/spinlock.h>
10
11#include <machine/amd64.h>
12#include <machine/amd64op.h>
13
15
16void
18{
19 int c;
20
21 for (c = 0; c < MAX_CPUS; c++)
22 {
23 lockLevel[c] = 0;
24 }
25}
26
27void
29{
31 lockLevel[CPU()]++;
32}
33
34void
36{
37 lockLevel[CPU()]--;
38 if (lockLevel[CPU()] == 0)
39 {
41 }
42}
43
46{
47 return lockLevel[CPU()];
48}
49
50static void
51Debug_Critical(int argc, const char *argv[])
52{
53 int c;
54
55 for (c = 0; c < MAX_CPUS; c++) {
56 kprintf("CPU%d: %u\n", c, lockLevel[c]);
57 }
58}
59
60REGISTER_DBGCMD(critical, "Critical Enter/Exit Stats", Debug_Critical);
61
static INLINE void disable_interrupts()
Definition: amd64op.h:14
static INLINE void enable_interrupts()
Definition: amd64op.h:9
void Critical_Exit()
Definition: critical.c:35
uint32_t Critical_Level()
Definition: critical.c:45
uint32_t lockLevel[MAX_CPUS]
Definition: critical.c:14
void Critical_Enter()
Definition: critical.c:28
static void Debug_Critical(int argc, const char *argv[])
Definition: critical.c:51
void Critical_Init()
Definition: critical.c:17
#define CPU
Definition: mp.h:7
int kprintf(const char *fmt,...)
Definition: printf.c:210
#define MAX_CPUS
Definition: kconfig.h:8
#define REGISTER_DBGCMD(_NAME, _DESC, _FUNC)
Definition: kdebug.h:11
unsigned int uint32_t
Definition: types.h:12