aboutsummaryrefslogtreecommitdiff
path: root/arch/riscv64
diff options
context:
space:
mode:
Diffstat (limited to 'arch/riscv64')
-rw-r--r--arch/riscv64/kernel/proc.c8
-rw-r--r--arch/riscv64/kernel/vmem.c9
2 files changed, 12 insertions, 5 deletions
diff --git a/arch/riscv64/kernel/proc.c b/arch/riscv64/kernel/proc.c
index 3c2ea59..b8f6c5d 100644
--- a/arch/riscv64/kernel/proc.c
+++ b/arch/riscv64/kernel/proc.c
@@ -65,20 +65,22 @@ vm_t get_stack(struct tcb *t)
void save_regs(struct tcb *t, void *p)
{
struct riscv_regs *r = (struct riscv_regs *)(t) - 1;
- memcpy(p, r, sizeof(*r));
+ struct riscv_regs *rp = (struct riscv_regs *)(p);
+ *rp = *r;
}
void load_regs(void *p, struct tcb *t)
{
struct riscv_regs *r = (struct riscv_regs *)(t) - 1;
- memcpy(r, p, sizeof(*r));
+ struct riscv_regs *rp = (struct riscv_regs *)(p);
+ *r = *rp;
}
void clone_regs(struct tcb *d, struct tcb *s)
{
struct riscv_regs *rd = (struct riscv_regs *)(d) - 1;
struct riscv_regs *rs = (struct riscv_regs *)(s) - 1;
- memcpy(rd, rs, sizeof(*rs));
+ *rd = *rs;
}
void adjust_ipi(struct tcb *t)
diff --git a/arch/riscv64/kernel/vmem.c b/arch/riscv64/kernel/vmem.c
index 68ccbd3..a3903f1 100644
--- a/arch/riscv64/kernel/vmem.c
+++ b/arch/riscv64/kernel/vmem.c
@@ -345,11 +345,16 @@ vm_t setup_kernel_io(struct vmem *b, vm_t paddr)
}
#endif
+struct uvmem_map {
+ struct vmem *leaf[CSTACK_PAGE - 1];
+};
+
stat_t clone_uvmem(struct vmem *r, struct vmem *b)
{
/** \todo error checking? */
- for (size_t i = 0; i < CSTACK_PAGE; ++i)
- b->leaf[i] = r->leaf[i];
+ struct uvmem_map *rm = (struct uvmem_map *)(r);
+ struct uvmem_map *bm = (struct uvmem_map *)(b);
+ *bm = *rm;
return OK;
}