Rewrite resource subsystem

This commit is contained in:
2026-01-18 20:50:45 +01:00
parent 4f7077d458
commit ddafc4eb19
20 changed files with 453 additions and 225 deletions

View File

@@ -9,11 +9,17 @@ bool proc_create_resource_mem (struct proc_resource_mem* mem, struct proc_resour
if (init->pages == 0)
return false;
uintptr_t paddr = pmm_alloc (init->pages);
if (paddr == PMM_ALLOC_ERR)
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->paddr = paddr;
mem->pages = mem->alive_pages = init->pages;
return true;
@@ -21,17 +27,7 @@ bool proc_create_resource_mem (struct proc_resource_mem* mem, struct proc_resour
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;
spin_lock (&mem->resource->lock, &ctxrs);
mem->alive_pages -= pages;
ptrdiff_t current_pages = mem->alive_pages;
spin_unlock (&mem->resource->lock, &ctxrs);
if (current_pages <= 0)
proc_drop_resource (proc, mem->resource);
if (!resource->u.mem.managed)
pmm_free (resource->u.mem.paddr, resource->u.mem.pages);
}