diff --git a/kernel/proc/mem.c b/kernel/proc/mem.c index 7f4b9ff..b1d0b39 100644 --- a/kernel/proc/mem.c +++ b/kernel/proc/mem.c @@ -1,9 +1,29 @@ #include +#include #include #include #include #include +bool proc_create_resource_mem (struct proc_resource_mem* mem, struct proc_resource_mem_init* init) { + if (init->pages == 0) + return false; + + uintptr_t paddr = pmm_alloc (init->pages); + if (paddr == PMM_ALLOC_ERR) + return false; + + mem->paddr = paddr; + mem->pages = mem->alive_pages = init->pages; + + return true; +} + +void proc_cleanup_resource_mem (struct proc* proc, struct proc_resource* resource) { + (void)proc; + pmm_free (resource->u.mem.paddr, resource->u.mem.pages); +} + void proc_mem_unref (struct proc* proc, struct proc_resource_mem* mem, size_t pages) { spin_lock_ctx_t ctxrs; diff --git a/kernel/proc/mem.h b/kernel/proc/mem.h index 121fd16..078b796 100644 --- a/kernel/proc/mem.h +++ b/kernel/proc/mem.h @@ -18,6 +18,8 @@ struct proc_resource_mem_init { size_t pages; }; +bool proc_create_resource_mem (struct proc_resource_mem* mem, struct proc_resource_mem_init* init); +void proc_cleanup_resource_mem (struct proc* proc, struct proc_resource* resource); void proc_mem_unref (struct proc* proc, struct proc_resource_mem* mem, size_t pages); #endif // _KERNEL_PROC_MEM_H diff --git a/kernel/proc/mutex.c b/kernel/proc/mutex.c index d185140..313d878 100644 --- a/kernel/proc/mutex.c +++ b/kernel/proc/mutex.c @@ -1,11 +1,24 @@ #include #include #include +#include #include #include #include #include +bool proc_create_resource_mutex (struct proc_mutex* mutex) { + memset (mutex, 0, sizeof (*mutex)); + + return true; +} + +void proc_cleanup_resource_mutex (struct proc* proc, struct proc_resource* resource) { + struct proc_mutex* mutex = &resource->u.mutex; + + proc_mutex_unlock (proc, mutex); +} + void proc_mutex_lock (struct proc* proc, struct proc_mutex* mutex) { spin_lock_ctx_t ctxmt; diff --git a/kernel/proc/mutex.h b/kernel/proc/mutex.h index d142b37..7a244c6 100644 --- a/kernel/proc/mutex.h +++ b/kernel/proc/mutex.h @@ -15,6 +15,8 @@ struct proc_mutex { struct proc* owner; }; +bool proc_create_resource_mutex (struct proc_mutex* mutex); +void proc_cleanup_resource_mutex (struct proc* proc, struct proc_resource* resource); void proc_mutex_lock (struct proc* proc, struct proc_mutex* mutex); bool proc_mutex_unlock (struct proc* proc, struct proc_mutex* mutex); diff --git a/kernel/proc/resource.c b/kernel/proc/resource.c index 482db4d..4a0abca 100644 --- a/kernel/proc/resource.c +++ b/kernel/proc/resource.c @@ -42,38 +42,6 @@ void proc_drop_resource (struct proc* proc, struct proc_resource* resource) { } } -static bool proc_create_resource_mem (struct proc_resource_mem* mem, - struct proc_resource_mem_init* init) { - if (init->pages == 0) - return false; - - uintptr_t paddr = pmm_alloc (init->pages); - if (paddr == PMM_ALLOC_ERR) - return false; - - mem->paddr = paddr; - mem->pages = mem->alive_pages = init->pages; - - return true; -} - -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) { spin_lock_ctx_t ctxpr;