Implement userspace TLS, remove RW Locks

This commit is contained in:
2026-01-28 23:52:48 +01:00
parent a3b62ebd3d
commit 3d23187acf
17 changed files with 135 additions and 157 deletions

View File

@@ -2,7 +2,7 @@
#include <libk/list.h>
#include <libk/std.h>
#include <mm/liballoc.h>
#include <sync/rw_spin_lock.h>
#include <sync/spin_lock.h>
#include <sys/debug.h>
#if defined(__x86_64__)
@@ -12,7 +12,7 @@
struct irq* irq_table[0x100];
static rw_spin_lock_t irqs_lock;
static spin_lock_t irqs_lock = SPIN_LOCK_INIT;
bool irq_attach (void (*func) (void*, void*), void* arg, uint32_t irq_num) {
spin_lock_ctx_t ctxiqa;
@@ -26,9 +26,9 @@ bool irq_attach (void (*func) (void*, void*), void* arg, uint32_t irq_num) {
irq->arg = arg;
irq->irq_num = irq_num;
rw_spin_write_lock (&irqs_lock, &ctxiqa);
spin_lock (&irqs_lock, &ctxiqa);
irq_table[irq_num] = irq;
rw_spin_write_unlock (&irqs_lock, &ctxiqa);
spin_unlock (&irqs_lock, &ctxiqa);
return true;
}
@@ -36,11 +36,11 @@ bool irq_attach (void (*func) (void*, void*), void* arg, uint32_t irq_num) {
struct irq* irq_find (uint32_t irq_num) {
spin_lock_ctx_t ctxiqa;
rw_spin_read_lock (&irqs_lock, &ctxiqa);
spin_lock (&irqs_lock, &ctxiqa);
struct irq* irq = irq_table[irq_num];
rw_spin_read_unlock (&irqs_lock, &ctxiqa);
spin_unlock (&irqs_lock, &ctxiqa);
return irq;
}