From cf7cd8be60c254b44b444c97dcb238d7cf3afd4c Mon Sep 17 00:00:00 2001 From: Brett Weiland Date: Tue, 21 Sep 2021 10:50:33 -0500 Subject: palloc smp safe (testing required, NOT pfree) --- src/include/libc.h | 6 ++++-- src/include/paging.h | 1 + src/include/random.h | 1 + src/include/smp.h | 23 +++++++++++++++++++++-- src/include/smp_racetest.h | 6 ++++++ src/include/smp_sync.h | 23 ----------------------- src/include/testmalloc.h | 6 ------ 7 files changed, 33 insertions(+), 33 deletions(-) create mode 100644 src/include/smp_racetest.h delete mode 100644 src/include/smp_sync.h delete mode 100644 src/include/testmalloc.h (limited to 'src/include') diff --git a/src/include/libc.h b/src/include/libc.h index d0789cf..030f05f 100644 --- a/src/include/libc.h +++ b/src/include/libc.h @@ -2,10 +2,12 @@ #define _STRING_H_ #include #include +#include void *strcpy(char *dest, char *src); -void *memcpy(void *dest, void *src, size_t n); //TODO -void *bzero(const void *dest, size_t size); +void *memcpy(void *dest, void *src, size_t n); +void *bzero(void *dest, size_t size); +bool *is_empty(void *dest, size_t size); void *memset(void *s, char c, size_t n); size_t strlen(const char *s); int strcmp(const char *str1, const char *str2); diff --git a/src/include/paging.h b/src/include/paging.h index 5d33ca5..b1f8e9a 100644 --- a/src/include/paging.h +++ b/src/include/paging.h @@ -10,6 +10,7 @@ void unmap_lowmem(); size_t map_complete_physical(); void debug_pzone(); +void init_pmap_smp(); struct phys_map *init_pmap(size_t pagetable_size); diff --git a/src/include/random.h b/src/include/random.h index 6f35278..95b7147 100644 --- a/src/include/random.h +++ b/src/include/random.h @@ -1,5 +1,6 @@ #ifndef random_header #define random_header void randinit(); +void sync_malloc(); unsigned int randint(); #endif diff --git a/src/include/smp.h b/src/include/smp.h index f4e3aa8..e331036 100644 --- a/src/include/smp.h +++ b/src/include/smp.h @@ -1,7 +1,10 @@ #ifndef SMP_INCLUDED #define SMP_INCLUDED #include -void smp_boot(); +#include +#include +#include +void smp_prepare(); extern uint8_t corecount; static inline void lock(uint8_t *lock) { @@ -18,9 +21,25 @@ static inline void unlock(uint8_t *lock) { asm("lock andb [%0], 0"::"r"(lock)); } -static inline void waitup(uint8_t *loto) { +static inline bool get_set_mutex(uint16_t *mutex) { + bool ret; + asm("lock bts %1, 0\n" + "jc .mutex_taken\n" + "mov %0, 0\n" + "jmp .done\n" + ".mutex_taken:\n" + "mov %0, 1\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 new file mode 100644 index 0000000..25ab7f3 --- /dev/null +++ b/src/include/smp_racetest.h @@ -0,0 +1,6 @@ +#ifndef testmalloc_header +#define testmalloc_header + +void test_malloc(unsigned int cnt); + +#endif diff --git a/src/include/smp_sync.h b/src/include/smp_sync.h deleted file mode 100644 index 93aac35..0000000 --- a/src/include/smp_sync.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef SMP_SYNC_INCLUDED -#define SMP_SYNC_INCLUDED - -static inline void lock(uint8_t *lock) { - asm("mov al, 1\n" - "spinlock:\n" - "lock xchgb [%0], al\n" - "test al, al\n" - "pause\n" - "jnz spinlock\n" - ::"r"(lock):"al"); -} - -static inline void unlock(uint8_t *lock) { - asm("lock andb [%0], 0"::"r"(lock)); -} - -static inline void waitup(uint8_t *loto) { -} - -#define CREATE_LOTO(name) - -#endif diff --git a/src/include/testmalloc.h b/src/include/testmalloc.h deleted file mode 100644 index 25ab7f3..0000000 --- a/src/include/testmalloc.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef testmalloc_header -#define testmalloc_header - -void test_malloc(unsigned int cnt); - -#endif -- cgit v1.2.3