Implement Mutexes and supporting syscalls, cleanup/optimize scheduler
All checks were successful
Build documentation / build-and-deploy (push) Successful in 39s
All checks were successful
Build documentation / build-and-deploy (push) Successful in 39s
This commit is contained in:
@@ -4,7 +4,9 @@
|
||||
#include <libk/string.h>
|
||||
#include <mm/liballoc.h>
|
||||
#include <mm/pmm.h>
|
||||
#include <proc/mutex.h>
|
||||
#include <proc/proc.h>
|
||||
#include <proc/resource.h>
|
||||
#include <sync/spin_lock.h>
|
||||
#include <sys/debug.h>
|
||||
|
||||
@@ -33,7 +35,7 @@ void proc_drop_resource (struct proc* proc, struct proc_resource* resource) {
|
||||
rbtree_delete (&proc->resource_tree, &resource->proc_resource_tree_link);
|
||||
spin_unlock (&proc->lock);
|
||||
|
||||
resource->ops.cleanup (resource);
|
||||
resource->ops.cleanup (proc, resource);
|
||||
free (resource);
|
||||
}
|
||||
}
|
||||
@@ -53,10 +55,23 @@ static bool proc_create_resource_mem (struct proc_resource_mem* mem,
|
||||
return true;
|
||||
}
|
||||
|
||||
static void proc_cleanup_resource_mem (struct proc_resource* resource) {
|
||||
static void proc_cleanup_resource_mem (struct proc* proc, struct proc_resource* resource) {
|
||||
(void)proc;
|
||||
pmm_free (resource->u.mem.paddr, resource->u.mem.pages);
|
||||
}
|
||||
|
||||
static bool proc_create_resource_mutex (struct proc_mutex* mutex) {
|
||||
memset (mutex, 0, sizeof (*mutex));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void proc_cleanup_resource_mutex (struct proc* proc, struct proc_resource* resource) {
|
||||
struct proc_mutex* mutex = &resource->u.mutex;
|
||||
|
||||
proc_mutex_unlock (proc, mutex);
|
||||
}
|
||||
|
||||
struct proc_resource* proc_create_resource (struct proc* proc, int rid, int type, int vis,
|
||||
void* data) {
|
||||
/* Check if resource RID already exists */
|
||||
@@ -83,9 +98,14 @@ struct proc_resource* proc_create_resource (struct proc* proc, int rid, int type
|
||||
struct proc_resource_mem_init* mem_init = data;
|
||||
proc_create_resource_mem (&resource->u.mem, mem_init);
|
||||
resource->ops.cleanup = &proc_cleanup_resource_mem;
|
||||
DEBUG ("resource=%p type=%d rid=%d paddr=%p, pages=%zu\n", resource, resource->type,
|
||||
DEBUG ("PR_MEM resource=%p type=%d rid=%d paddr=%p, pages=%zu\n", resource, resource->type,
|
||||
resource->rid, resource->u.mem.paddr, resource->u.mem.pages);
|
||||
} break;
|
||||
case PR_MUTEX: {
|
||||
proc_create_resource_mutex (&resource->u.mutex);
|
||||
resource->ops.cleanup = &proc_cleanup_resource_mutex;
|
||||
DEBUG ("PR_MUTEX resource=%p, type=%d rid=%d\n", resource, resource->type, resource->rid);
|
||||
} break;
|
||||
default: {
|
||||
free (resource);
|
||||
return NULL;
|
||||
|
||||
Reference in New Issue
Block a user