diff options
author | Brett Weiland <brett_weiland@bpcspace.com> | 2021-09-21 10:50:33 -0500 |
---|---|---|
committer | Brett Weiland <brett_weiland@bpcspace.com> | 2021-09-21 10:50:33 -0500 |
commit | cf7cd8be60c254b44b444c97dcb238d7cf3afd4c (patch) | |
tree | e86fe62827f4dbc5f1b6b74cf7bd89c78e797711 /src/include | |
parent | 907fb823bf8329066b1bcff60ea6c4faa54a3642 (diff) |
palloc smp safe (testing required, NOT pfree)
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/libc.h | 6 | ||||
-rw-r--r-- | src/include/paging.h | 1 | ||||
-rw-r--r-- | src/include/random.h | 1 | ||||
-rw-r--r-- | src/include/smp.h | 23 | ||||
-rw-r--r-- | src/include/smp_racetest.h (renamed from src/include/testmalloc.h) | 0 | ||||
-rw-r--r-- | src/include/smp_sync.h | 23 |
6 files changed, 27 insertions, 27 deletions
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 <stddef.h> #include <stdint.h> +#include <stdbool.h> 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 <stdint.h> -void smp_boot(); +#include <stdbool.h> +#include <cpuid.h> +#include <printf.h> +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/testmalloc.h b/src/include/smp_racetest.h index 25ab7f3..25ab7f3 100644 --- a/src/include/testmalloc.h +++ b/src/include/smp_racetest.h 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 |