svn commit: r266957 - in projects/arm64/sys/arm64: arm64 include
Andrew Turner
andrew at FreeBSD.org
Sun Jun 1 21:33:04 UTC 2014
Author: andrew
Date: Sun Jun 1 21:33:02 2014
New Revision: 266957
URL: http://svnweb.freebsd.org/changeset/base/266957
Log:
Add cpu_thread_alloc and start on cpu_fork
Modified:
projects/arm64/sys/arm64/arm64/vm_machdep.c
projects/arm64/sys/arm64/include/frame.h
projects/arm64/sys/arm64/include/param.h
projects/arm64/sys/arm64/include/proc.h
Modified: projects/arm64/sys/arm64/arm64/vm_machdep.c
==============================================================================
--- projects/arm64/sys/arm64/arm64/vm_machdep.c Sun Jun 1 21:30:45 2014 (r266956)
+++ projects/arm64/sys/arm64/arm64/vm_machdep.c Sun Jun 1 21:33:02 2014 (r266957)
@@ -33,6 +33,7 @@ __FBSDID("$FreeBSD$");
#include <sys/proc.h>
#include <sys/sf_buf.h>
#include <sys/signal.h>
+#include <sys/unistd.h>
#include <vm/vm.h>
#include <vm/vm_page.h>
@@ -40,6 +41,8 @@ __FBSDID("$FreeBSD$");
#include <vm/uma_int.h>
#include <machine/cpu.h>
+#include <machine/pcb.h>
+#include <machine/frame.h>
/*
* Finish a fork operation, with process p2 nearly set up.
@@ -49,8 +52,21 @@ __FBSDID("$FreeBSD$");
void
cpu_fork(struct thread *td1, struct proc *p2, struct thread *td2, int flags)
{
+ struct pcb *pcb2;
- panic("cpu_fork");
+ if ((flags & RFPROC) == 0)
+ return;
+
+ pcb2 = (struct pcb *)(td2->td_kstack +
+ td2->td_kstack_pages * PAGE_SIZE) - 1;
+
+ td2->td_pcb = pcb2;
+ bcopy(td1->td_pcb, pcb2, sizeof(*pcb2));
+
+ /* Set the return value registers for fork() */
+ td1->td_frame->tf_x[0] = 0;
+
+ printf("TODO: cpu_fork");
}
void
@@ -120,7 +136,10 @@ void
cpu_thread_alloc(struct thread *td)
{
- panic("cpu_thread_alloc");
+ td->td_pcb = (struct pcb *)(td->td_kstack +
+ td->td_kstack_pages * PAGE_SIZE) - 1;
+ td->td_frame = (struct trapframe *)STACKALIGN(
+ td->td_pcb - 1);
}
void
Modified: projects/arm64/sys/arm64/include/frame.h
==============================================================================
--- projects/arm64/sys/arm64/include/frame.h Sun Jun 1 21:30:45 2014 (r266956)
+++ projects/arm64/sys/arm64/include/frame.h Sun Jun 1 21:33:02 2014 (r266957)
@@ -35,7 +35,7 @@
* NOTE: keep this structure in sync with struct reg and struct mcontext.
*/
struct trapframe {
- uint64_t tf_x0[31];
+ uint64_t tf_x[31];
uint64_t tf_sp;
uint64_t tf_pc;
uint64_t tf_spsr;
Modified: projects/arm64/sys/arm64/include/param.h
==============================================================================
--- projects/arm64/sys/arm64/include/param.h Sun Jun 1 21:30:45 2014 (r266956)
+++ projects/arm64/sys/arm64/include/param.h Sun Jun 1 21:33:02 2014 (r266957)
@@ -39,6 +39,9 @@
#include <machine/_align.h>
+#define STACKALIGNBYTES (16 - 1)
+#define STACKALIGN(p) ((uint64_t)(p) & ~STACKALIGNBYTES)
+
#ifndef MACHINE
#define MACHINE "arm64"
#endif
Modified: projects/arm64/sys/arm64/include/proc.h
==============================================================================
--- projects/arm64/sys/arm64/include/proc.h Sun Jun 1 21:30:45 2014 (r266956)
+++ projects/arm64/sys/arm64/include/proc.h Sun Jun 1 21:33:02 2014 (r266957)
@@ -36,10 +36,12 @@
#include <machine/utrap.h>
+#if 0
struct md_utrap {
utrap_entry_t *ut_precise[UT_MAX]; /* must be first */
int ut_refcnt;
};
+#endif
struct mdthread {
int md_spinlock_count; /* (k) */
@@ -47,8 +49,7 @@ struct mdthread {
};
struct mdproc {
- struct md_utrap *md_utrap;
- void *md_sigtramp;
+ int dummy;
};
#define KINFO_PROC_SIZE 1088
More information about the svn-src-projects
mailing list