summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandrew <andrew@FreeBSD.org>2015-07-05 18:16:06 +0000
committerandrew <andrew@FreeBSD.org>2015-07-05 18:16:06 +0000
commit35acf35c2e04ac9da20ebfb09e37b5b73f2b04fa (patch)
treeef9127dd6ba46823e837e4d05d78ea1a0d78658e
parentb42a3e1f94e9c23fa51a7ba04761eaa7307db353 (diff)
downloadFreeBSD-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.c14
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
OpenPOWER on IntegriCloud