diff options
author | andrew <andrew@FreeBSD.org> | 2015-07-05 18:16:06 +0000 |
---|---|---|
committer | andrew <andrew@FreeBSD.org> | 2015-07-05 18:16:06 +0000 |
commit | 35acf35c2e04ac9da20ebfb09e37b5b73f2b04fa (patch) | |
tree | ef9127dd6ba46823e837e4d05d78ea1a0d78658e | |
parent | b42a3e1f94e9c23fa51a7ba04761eaa7307db353 (diff) | |
download | FreeBSD-src-35acf35c2e04ac9da20ebfb09e37b5b73f2b04fa.zip FreeBSD-src-35acf35c2e04ac9da20ebfb09e37b5b73f2b04fa.tar.gz |
Add the kernel functions needed to enable threading.
Sponsored by: ABT Systems Ltd
-rw-r--r-- | sys/arm64/arm64/vm_machdep.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/sys/arm64/arm64/vm_machdep.c b/sys/arm64/arm64/vm_machdep.c index 11591f0..bd6d980 100644 --- a/sys/arm64/arm64/vm_machdep.c +++ b/sys/arm64/arm64/vm_machdep.c @@ -184,15 +184,25 @@ void cpu_set_upcall_kse(struct thread *td, void (*entry)(void *), void *arg, stack_t *stack) { + struct trapframe *tf = td->td_frame; - panic("cpu_set_upcall_kse"); + tf->tf_sp = STACKALIGN(stack->ss_sp + stack->ss_size); + tf->tf_elr = (register_t)entry; + tf->tf_x[0] = (register_t)arg; } int cpu_set_user_tls(struct thread *td, void *tls_base) { + struct pcb *pcb; - panic("cpu_set_user_tls"); + if ((uintptr_t)tls_base >= VM_MAXUSER_ADDRESS) + return (EINVAL); + + pcb = td->td_pcb; + pcb->pcb_tpidr_el0 = (register_t)tls_base; + + return (0); } void |