34 lines
791 B
C
34 lines
791 B
C
#include <libk/std.h>
|
|
#include <mm/pmm.h>
|
|
#include <proc/mem.h>
|
|
#include <proc/proc.h>
|
|
#include <proc/resource.h>
|
|
#include <sync/spin_lock.h>
|
|
|
|
bool proc_create_resource_mem (struct proc_resource_mem* mem, struct proc_resource_mem_init* init) {
|
|
if (init->pages == 0)
|
|
return false;
|
|
|
|
if (init->managed) {
|
|
mem->paddr = init->paddr;
|
|
mem->managed = true;
|
|
} else {
|
|
uintptr_t paddr = pmm_alloc (init->pages);
|
|
if (paddr == PMM_ALLOC_ERR)
|
|
return false;
|
|
mem->paddr = paddr;
|
|
mem->managed = false;
|
|
}
|
|
|
|
mem->pages = mem->alive_pages = init->pages;
|
|
|
|
return true;
|
|
}
|
|
|
|
void proc_cleanup_resource_mem (struct proc* proc, struct proc_resource* resource) {
|
|
(void)proc;
|
|
|
|
if (!resource->u.mem.managed)
|
|
pmm_free (resource->u.mem.paddr, resource->u.mem.pages);
|
|
}
|