From 1794bc535a537b01f4b3918eef2671c2547c6ad9 Mon Sep 17 00:00:00 2001 From: Nathan Benavides-Luu Date: Sat, 3 Feb 2024 16:53:09 -0500 Subject: Replace kmutex.c with kmutex.S --- kernel/proc/kmutex.c | 88 ---------------------------------------------------- 1 file changed, 88 deletions(-) delete mode 100644 kernel/proc/kmutex.c (limited to 'kernel/proc/kmutex.c') diff --git a/kernel/proc/kmutex.c b/kernel/proc/kmutex.c deleted file mode 100644 index 7d98399..0000000 --- a/kernel/proc/kmutex.c +++ /dev/null @@ -1,88 +0,0 @@ -// SMP.1 + SMP.3 -// spinlock + mask interrupts -#include "proc/kmutex.h" -#include "globals.h" -#include "main/interrupt.h" -#include - -/* - * IMPORTANT: Mutexes can _NEVER_ be locked or unlocked from an - * interrupt context. Mutexes are _ONLY_ lock or unlocked from a - * thread context. - */ - -/* - * Checks for the specific deadlock case where: - * curthr wants mtx, but the owner of mtx is waiting on a mutex that curthr is - * holding - */ -#define DEBUG_DEADLOCKS 1 -void detect_deadlocks(kmutex_t *mtx) -{ -#if DEBUG_DEADLOCKS - list_iterate(&curthr->kt_mutexes, held, kmutex_t, km_link) - { - list_iterate(&held->km_waitq.tq_list, waiter, kthread_t, kt_qlink) - { - if (waiter == mtx->km_holder) - { - panic( - "detected deadlock between P%d and P%d (mutexes 0x%p, " - "0x%p)\n", - curproc->p_pid, waiter->kt_proc->p_pid, held, mtx); - } - } - } -#endif -} - -/* - * Initializes the members of mtx - */ -void kmutex_init(kmutex_t *mtx) -{ - NOT_YET_IMPLEMENTED("PROCS: kmutex_init"); -} - -/* - * Obtains a mutex, potentially blocking. - * - * Hints: - * You are strongly advised to maintain the kt_mutexes member of curthr and call - * detect_deadlocks() to help debugging. - */ -void kmutex_lock(kmutex_t *mtx) -{ - NOT_YET_IMPLEMENTED("PROCS: kmutex_lock"); -} - -/* - * Releases a mutex. - * - * Hints: - * Again, you are strongly advised to maintain kt_mutexes. - * Use sched_wakeup_on() to hand off the mutex - think carefully about how - * these two functions interact to ensure that the mutex's km_holder is - * properly set before the new owner is runnable. - */ -void kmutex_unlock(kmutex_t *mtx) -{ - NOT_YET_IMPLEMENTED("PROCS: kmutex_unlock"); -} - -/* - * Checks if mtx's wait queue is empty. - */ -long kmutex_has_waiters(kmutex_t *mtx) -{ - return !sched_queue_empty(&mtx->km_waitq); - ; -} - -/* - * Checks if the current thread owns mtx. - */ -inline long kmutex_owns_mutex(kmutex_t *mtx) -{ - return curthr && mtx->km_holder == curthr; -} -- cgit v1.2.3-70-g09d2