diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2022-05-21 21:02:17 +0300 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2022-05-21 21:02:17 +0300 |
| commit | 8da0171e5ca3492cdb34422184a1c96acd0b5165 (patch) | |
| tree | c125b7286f929c8ff7f8a2b938cec84328e99de4 /common/dmem.c | |
| parent | 836026dbba64793afc0d2591ffdb6fb39b696977 (diff) | |
| download | kmi-8da0171e5ca3492cdb34422184a1c96acd0b5165.tar.gz kmi-8da0171e5ca3492cdb34422184a1c96acd0b5165.zip | |
add status info to memory mappings
+ next up would probably be to start working on process/thread
relationships, largely as documented. Still not entirely sure about
how I want to handle fork, but I suppose I might figure it out at some
point.
Diffstat (limited to 'common/dmem.c')
| -rw-r--r-- | common/dmem.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/common/dmem.c b/common/dmem.c index 59ea666..6c207c1 100644 --- a/common/dmem.c +++ b/common/dmem.c @@ -27,15 +27,17 @@ stat_t init_devmem(pm_t ram_base, pm_t ram_top) } stat_t dev_alloc_wrapper(struct vm_branch *b, pm_t *offset, vm_t vaddr, - vmflags_t flags, enum mm_order order) + vmflags_t flags, enum mm_order order, void *data) { - map_vpage(b, *offset, vaddr, flags, order); + stat_t *status = (stat_t *)data; + /* TODO: remember to do something with this status info */ + *status = map_vpage(b, *offset, vaddr, flags, order); *offset += __o_size(order); return OK; } stat_t dev_free_wrapper(struct vm_branch *b, pm_t *offset, vm_t vaddr, - vmflags_t flags, enum mm_order order) + vmflags_t flags, enum mm_order order, void *data) { UNUSED(offset); UNUSED(flags); @@ -43,9 +45,10 @@ stat_t dev_free_wrapper(struct vm_branch *b, pm_t *offset, vm_t vaddr, enum mm_order v_order = 0; stat_vpage(b, vaddr, &paddr, &v_order, 0); if (order != v_order) - return REGION_TRY_AGAIN; + return INFO_TRGN; - unmap_vpage(b, vaddr); + stat_t *status = (stat_t *)data; + *status = unmap_vpage(b, vaddr); return OK; } @@ -62,7 +65,7 @@ vm_t alloc_devmem(struct tcb *t, pm_t dev_start, size_t bytes, vmflags_t flags) return 0; return map_fill_region(t->b_r, &dev_alloc_wrapper, dev_start, region, - bytes, flags); + bytes, flags, 0); } stat_t free_devmem(struct tcb *t, vm_t dev_start) @@ -85,7 +88,7 @@ stat_t free_devmem(struct tcb *t, vm_t dev_start) size_t region_size = __addr(m->end - m->start); map_fill_region(t->b_r, &dev_free_wrapper, dev_paddr, dev_start, - region_size, 0); + region_size, 0, 0); if (dev_paddr < __pre_top) free_region(&pre_ram, dev_paddr); |
