1 #include <lunaix/mm/region.h>
2 #include <lunaix/mm/valloc.h>
5 region_add(struct llist_header* lead,
10 struct mm_region* region = valloc(sizeof(struct mm_region));
12 *region = (struct mm_region){ .attr = attr, .end = end, .start = start };
14 if (llist_empty(lead)) {
15 llist_append(lead, ®ion->head);
19 struct mm_region *pos, *n;
20 llist_for_each(pos, n, lead, head)
22 if (start >= pos->end && end <= n->start) {
27 llist_insert_after(&pos->head, ®ion->head);
32 region_release_all(struct llist_header* lead)
34 struct mm_region *pos, *n;
36 llist_for_each(pos, n, lead, head)
43 region_copy(struct llist_header* src, struct llist_header* dest)
49 struct mm_region *pos, *n;
51 llist_for_each(pos, n, src, head)
53 region_add(dest, pos->start, pos->end, pos->attr);
58 region_get(struct llist_header* lead, unsigned long vaddr)
60 if (llist_empty(lead)) {
64 struct mm_region *pos, *n;
66 llist_for_each(pos, n, lead, head)
68 if (pos->start <= vaddr && vaddr < pos->end) {