From 122374c362ba8bb9082385da3c82e264ab594f15 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Sun, 7 Jul 2024 07:00:43 +0300 Subject: smp now seems to work + Had some minor issues with a wraparound of size_t that effectively meant that some regions were allocated twice. Also, booting should be a bit more reliable now, turned out that the previous iteration of the booting was just accidentally working due to the kernel being placed 'close enough' in RAM to where it was linked to. Fixed by allocating a vmem of O1 that maps the kernel to a 2MiB boundary at boot, pretty nifty. --- src/tcb.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/tcb.c') diff --git a/src/tcb.c b/src/tcb.c index 27256e9..6915676 100644 --- a/src/tcb.c +++ b/src/tcb.c @@ -120,14 +120,14 @@ void free_stack(struct tcb *t) struct tcb *create_thread(struct tcb *p) { - hard_assert(tcbs, 0); + assert(tcbs); vm_t bottom = alloc_page(KERNEL_STACK_PAGE_ORDER); /* move tcb to top of kernel stack, keeping alignment in check * (hopefully) */ /** \todo check alignment */ - struct tcb *t = (struct tcb *)align_down( - bottom + order_size(MM_O0) - sizeof(struct tcb), sizeof(long)); + bottom = bottom + order_size(MM_O0) - sizeof(struct tcb); + struct tcb *t = (struct tcb *)align_down(bottom, sizeof(long)); memset(t, 0, sizeof(struct tcb)); id_t tid = __alloc_tid(t); -- cgit v1.3