aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2022-05-21 21:02:17 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2022-05-21 21:02:17 +0300
commit8da0171e5ca3492cdb34422184a1c96acd0b5165 (patch)
treec125b7286f929c8ff7f8a2b938cec84328e99de4 /include
parent836026dbba64793afc0d2591ffdb6fb39b696977 (diff)
downloadkmi-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 'include')
-rw-r--r--include/apos/assert.h42
-rw-r--r--include/apos/dmem.h4
-rw-r--r--include/apos/mem.h2
-rw-r--r--include/apos/mem_regions.h7
-rw-r--r--include/apos/tcb.h5
-rw-r--r--include/apos/types.h3
-rw-r--r--include/apos/vmem.h18
-rw-r--r--include/arch/vmem.h2
8 files changed, 69 insertions, 14 deletions
diff --git a/include/apos/assert.h b/include/apos/assert.h
new file mode 100644
index 0000000..7200fd2
--- /dev/null
+++ b/include/apos/assert.h
@@ -0,0 +1,42 @@
+#ifndef APOS_ASSERT_H
+#define APOS_ASSERT_H
+
+#include <apos/debug.h>
+#include <apos/utils.h>
+
+/* TODO: should this exit or do something explosive like that? */
+#if !defined(DNDEBUG)
+#define catastrophic_assert(x) \
+ do { \
+ if (x) { \
+ err("catastrophic assertion failed: %s\n", QUOTE(x)); \
+ while (1) \
+ ; \
+ } \
+ } while (0);
+
+#define hard_assert(x, r) \
+ do { \
+ if (x) { \
+ warn("hard assertion failed: %s\n", QUOTE(x)); \
+ return r; \
+ } \
+ } while (0);
+
+#define soft_assert(x) \
+ do { \
+ if (x) { \
+ info("soft assertion failed: %s\n", QUOTE(x)); \
+ } \
+ } while (0);
+#else
+#define catastrophic_assert(x)
+#define hard_assert(x, r)
+#define soft_assert(x)
+#endif
+
+/* use when return value doesn't exist, like hard_assert(x,
+ * RETURN_VOID); */
+#define RETURN_VOID
+
+#endif /* APOS_ASSERT_H */
diff --git a/include/apos/dmem.h b/include/apos/dmem.h
index d337e61..3ee93b6 100644
--- a/include/apos/dmem.h
+++ b/include/apos/dmem.h
@@ -14,8 +14,8 @@ vm_t alloc_devmem(struct tcb *t, pm_t dev_start, size_t bytes, vmflags_t flags);
stat_t free_devmem(struct tcb *t, vm_t dev_start);
stat_t dev_free_wrapper(struct vm_branch *b, pm_t *offset, vm_t vaddr,
- vmflags_t flags, enum mm_order t);
+ vmflags_t flags, enum mm_order t, void *);
stat_t dev_alloc_wrapper(struct vm_branch *b, pm_t *offset, vm_t vaddr,
- vmflags_t flags, enum mm_order t);
+ vmflags_t flags, enum mm_order t, void *);
#endif /* APOS_DEV_H */
diff --git a/include/apos/mem.h b/include/apos/mem.h
index bc60f21..f3eded7 100644
--- a/include/apos/mem.h
+++ b/include/apos/mem.h
@@ -45,6 +45,8 @@
#define MR_SHARED (1 << 9)
/* owner of shared region */
#define MR_OWNED (1 << 10)
+/* copy on write */
+#define MR_COW (1 << 11)
extern size_t __mm_shifts[10];
extern size_t __mm_widths[10];
diff --git a/include/apos/mem_regions.h b/include/apos/mem_regions.h
index 7841dde..efe0592 100644
--- a/include/apos/mem_regions.h
+++ b/include/apos/mem_regions.h
@@ -41,11 +41,12 @@ struct mem_region *find_closest_used_region(struct mem_region_root *r,
struct mem_region *find_free_region(struct mem_region_root *r, size_t size,
size_t *align);
-#define REGION_TRY_AGAIN 1
typedef stat_t region_callback_t(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);
vm_t map_fill_region(struct vm_branch *b, region_callback_t *mem_handler,
- pm_t offset, vm_t start, size_t bytes, vmflags_t flags);
+ pm_t offset, vm_t start, size_t bytes, vmflags_t flags,
+ void *data);
#endif /* APOS_MEM_REGIONS_H */
diff --git a/include/apos/tcb.h b/include/apos/tcb.h
index 821d822..11e1b5a 100644
--- a/include/apos/tcb.h
+++ b/include/apos/tcb.h
@@ -28,6 +28,9 @@ struct tcb {
/* vm root branch */
struct vm_branch *b_r;
+
+ struct tcb *parent;
+ struct tcb *next;
};
void init_tcbs();
@@ -41,4 +44,6 @@ void use_tcb(struct tcb *);
struct tcb *get_tcb(id_t tid);
+stat_t clone_tcb_maps(struct tcb *);
+
#endif /* APOS_TCB_H */
diff --git a/include/apos/types.h b/include/apos/types.h
index d413957..2f45857 100644
--- a/include/apos/types.h
+++ b/include/apos/types.h
@@ -197,6 +197,9 @@ enum {
ERR_ALIGN = -2, /* wrong alignment */
ERR_NF = -1, /* not found */
OK = 0, /* OK */
+ INFO_TRGN = 1, /* try again */
+ INFO_SEFF = 2, /* side effects */
+ INFO_CONT = 3, /* continue */
};
#include <types.h> /* arch-specific type definitions (pm_t/vm_t etc) */
diff --git a/include/apos/vmem.h b/include/apos/vmem.h
index 17f998d..f1b0d19 100644
--- a/include/apos/vmem.h
+++ b/include/apos/vmem.h
@@ -15,20 +15,20 @@ stat_t free_uvmem(struct tcb *r, vm_t a);
stat_t init_uvmem(struct tcb *r, vm_t base, vm_t top);
stat_t alloc_uvmem_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);
stat_t alloc_shared_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);
stat_t free_uvmem_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);
-#define map_allocd_region(b, start, bytes, flags) \
- map_fill_region(b, &alloc_uvmem_wrapper, 0, start, bytes, flags)
+#define map_allocd_region(b, start, bytes, flags, data) \
+ map_fill_region(b, &alloc_uvmem_wrapper, 0, start, bytes, flags, data)
-#define map_shared_region(b, start, bytes, flags) \
- map_fill_region(b, &alloc_shared_wrapper, 0, start, bytes, flags)
+#define map_shared_region(b, start, bytes, flags, data) \
+ map_fill_region(b, &alloc_shared_wrapper, 0, start, bytes, flags, data)
-#define unmap_freed_region(b, start, bytes, flags) \
- map_fill_region(b, &free_uvmem_wrapper, 0, start, bytes, flags)
+#define unmap_freed_region(b, start, bytes, flags, data) \
+ map_fill_region(b, &free_uvmem_wrapper, 0, start, bytes, flags, data)
#define vm_flags(x) ((x) & ~0xff)
#define vp_flags(x) ((x)&0xff)
diff --git a/include/arch/vmem.h b/include/arch/vmem.h
index 182af11..74b0aa5 100644
--- a/include/arch/vmem.h
+++ b/include/arch/vmem.h
@@ -23,4 +23,6 @@ struct vm_branch *init_vmem(void *fdt);
vm_t setup_kernel_io(struct vm_branch *b, vm_t paddr);
#endif
+stat_t clone_vmbranch(struct vm_branch *, struct vm_branch *);
+
#endif /* APOS_ARCH_PAGES_H */