summaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorBrett Weiland <brett_weiland@bpcspace.com>2021-09-24 14:20:20 -0500
committerBrett Weiland <brett_weiland@bpcspace.com>2021-09-24 14:20:20 -0500
commitb62706c9f2ceed65394457ae9b131996a2b29463 (patch)
treee00d7d68f4dcaac07ae8931e0a7871ef34d270d6 /src/include
parentcf7cd8be60c254b44b444c97dcb238d7cf3afd4c (diff)
palloc/pfree found smp safe
Diffstat (limited to 'src/include')
-rw-r--r--src/include/panic.h1
-rw-r--r--src/include/smp.h30
-rw-r--r--src/include/smp_racetest.h2
3 files changed, 25 insertions, 8 deletions
diff --git a/src/include/panic.h b/src/include/panic.h
index 43712a2..29e9f85 100644
--- a/src/include/panic.h
+++ b/src/include/panic.h
@@ -53,6 +53,7 @@ void panic(int reason, void *frame_p, struct registers *regs);
#define KERNEL_PANIC_INVALID_IOAPIC_VEC 36
#define KERNEL_PANIC_HPET_REQUIRED 37
#define KERNEL_PANIC_SMP_FAILED 38
+#define KERNEL_PANIC_PALLOC_TOO_LARGE 39
#define DEV_EMAIL "brett_weiland@bpcspace.com"
diff --git a/src/include/smp.h b/src/include/smp.h
index e331036..ba12c76 100644
--- a/src/include/smp.h
+++ b/src/include/smp.h
@@ -7,6 +7,7 @@
void smp_prepare();
extern uint8_t corecount;
+/**
static inline void lock(uint8_t *lock) {
asm("mov al, 1\n"
"spinlock:\n"
@@ -16,30 +17,45 @@ static inline void lock(uint8_t *lock) {
"jnz spinlock\n"
::"r"(lock):"al");
}
+**/
+static inline void lock(uint16_t *mutex) {
+ asm(".spinlock_%=:\n"
+ "lock bts %0, 0\n"
+ "jnc .done_%=\n"
+ "pause\n"
+ "jmp .spinlock_%=\n"
+ ".done_%=:\n"
+ ::"m"(*mutex));
+}
+
+static inline void unlock(uint16_t *mutex) {
+ asm("lock btr %0, 0\n"
+ ::"m"(*mutex));
+}
+
+/**
static inline void unlock(uint8_t *lock) {
asm("lock andb [%0], 0"::"r"(lock));
}
+**/
static inline bool get_set_mutex(uint16_t *mutex) {
bool ret;
asm("lock bts %1, 0\n"
- "jc .mutex_taken\n"
+ "jc .mutex_taken_%=\n"
"mov %0, 0\n"
- "jmp .done\n"
- ".mutex_taken:\n"
+ "jmp .done_%=\n"
+ ".mutex_taken_%=:\n"
"mov %0, 1\n"
- ".done:\n"
+ ".done_%=:\n"
:"=r"(ret)
:"m"(*mutex));
return ret;
}
-
-
//THIS IS ONLY UNTIL WE GET MULTITHREADING SET UP
uint8_t get_coreid();
-#define CREATE_LOTO(name)
#endif
diff --git a/src/include/smp_racetest.h b/src/include/smp_racetest.h
index 25ab7f3..f30c3be 100644
--- a/src/include/smp_racetest.h
+++ b/src/include/smp_racetest.h
@@ -1,6 +1,6 @@
#ifndef testmalloc_header
#define testmalloc_header
-void test_malloc(unsigned int cnt);
+void racetest();
#endif