From fbc2cc52c8a38c3c63a34f5547ba7c4209a667ac Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Thu, 2 Mar 2023 20:30:55 +0100 Subject: scheduling usermode processes & code refactoring --- kernel/include/apic.h | 5 +++++ kernel/include/containter_of.h | 20 -------------------- kernel/include/madt.h | 5 +++++ kernel/include/process.h | 1 - kernel/include/regs.h | 4 ++-- kernel/include/userspace.h | 2 +- 6 files changed, 13 insertions(+), 24 deletions(-) (limited to 'kernel/include') diff --git a/kernel/include/apic.h b/kernel/include/apic.h index 0025e53..991fc10 100644 --- a/kernel/include/apic.h +++ b/kernel/include/apic.h @@ -5,6 +5,11 @@ #include uint8_t curr_cpu_apic_id(void); +void clear_apic_errors(void); +void wait_for_delivery(void); +void select_ap(uint32_t apic_id); +void send_init_ipi(uint32_t apic_id); +void send_sipi(uint32_t apic_id); void init_ap_cpus(void); extern mutex_t cnt_lock; diff --git a/kernel/include/containter_of.h b/kernel/include/containter_of.h index 9cadd91..9672988 100644 --- a/kernel/include/containter_of.h +++ b/kernel/include/containter_of.h @@ -5,7 +5,6 @@ #define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr) #define __static_assert(expr, msg, ...) _Static_assert(expr, msg) #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) -#define typeof_member(T, m) typeof(((T *)0)->m) /** * container_of - cast a member of a structure out to the containing structure @@ -23,23 +22,4 @@ ((type *)(__mptr - offsetof(type, member))); \ }) -/** - * container_of_safe - cast a member of a structure out to the containing structure - * @ptr: the pointer to the member. - * @type: the type of the container struct this is embedded in. - * @member: the name of the member within the struct. - * - * If IS_ERR_OR_NULL(ptr), ptr is returned unchanged. - */ -#define container_of_safe(ptr, type, member) \ - ({ \ - void *__mptr = (void *)(ptr); \ - static_assert(__same_type(*(ptr), ((type *)0)->member) || \ - __same_type(*(ptr), void), \ - "pointer type mismatch in container_of_safe()"); \ - IS_ERR_OR_NULL(__mptr) ? \ - ERR_CAST(__mptr) : \ - ((type *)(__mptr - offsetof(type, member))); \ - }) - #endif diff --git a/kernel/include/madt.h b/kernel/include/madt.h index 571f92a..b824b38 100644 --- a/kernel/include/madt.h +++ b/kernel/include/madt.h @@ -50,6 +50,11 @@ struct MADT_lapic_addr { uint64_t phys_addr; } __attribute__((packed)); +void madt_parse_cpu(uint64_t *addr); +void madt_parse_ioapic(uint64_t *addr); +void madt_parse_int(uint64_t *addr); +void madt_parse_lapic_nmi(uint64_t *addr); +void madt_parse_lapic_addr_ovr(uint64_t *addr); void parse_madt(void); #endif diff --git a/kernel/include/process.h b/kernel/include/process.h index 14107c2..abbcd08 100644 --- a/kernel/include/process.h +++ b/kernel/include/process.h @@ -20,7 +20,6 @@ process_t *init_process(uint64_t priv_lvl, uint64_t rip, uint64_t argc, uint64_t *argv); void process_init_wrapper(uint64_t rip, uint64_t argc, uint64_t *argv); __attribute__((noreturn)) void idle_thread(void); -__attribute__((noreturn)) void idle_thread2(void); __attribute__((noreturn)) void remove_current_process(void); __attribute__((noreturn)) void context_switch(uint64_t irq_rsp); diff --git a/kernel/include/regs.h b/kernel/include/regs.h index 67795ae..81ddbe3 100644 --- a/kernel/include/regs.h +++ b/kernel/include/regs.h @@ -23,8 +23,8 @@ #define RIP_OFF 0x88 #define CS_OFF 0x90 #define RFLAGS_OFF 0x98 -#define RSP_OFF 0x100 -#define SS_OFF 0x108 +#define RSP_OFF 0xA0 +#define SS_OFF 0xA8 struct regs_t { uint64_t r15; diff --git a/kernel/include/userspace.h b/kernel/include/userspace.h index e03695d..ebd483e 100644 --- a/kernel/include/userspace.h +++ b/kernel/include/userspace.h @@ -1,7 +1,7 @@ #ifndef USERSPACE_H #define USERSPACE_H +void init_userspace(void); void begin_userspace(void); -void jump_userspace(void); #endif -- cgit v1.2.3