svn commit: r256981 - in projects/vps/sys: amd64/amd64 i386/i386 mips/conf mips/mips vps
Will Andrews
will at FreeBSD.org
Wed Oct 23 16:14:51 UTC 2013
Author: will
Date: Wed Oct 23 16:14:48 2013
New Revision: 256981
URL: http://svnweb.freebsd.org/changeset/base/256981
Log:
Sync with svn.7he.at/vps/trunk r184.
r184 | klaus | 2013-07-09 03:58:48 -0600 (Tue, 09 Jul 2013) | 3 lines
Fixed the mips port (td->td_md.md_tls was not set properly).
Submitted by: Klaus P. Ohrhallinger <k at 7he.at>
Modified:
projects/vps/sys/amd64/amd64/vps_machdep.c
projects/vps/sys/i386/i386/vps_machdep.c
projects/vps/sys/mips/conf/EDGEROUTER_VPS
projects/vps/sys/mips/mips/vps_machdep.c
projects/vps/sys/vps/vps2.h
projects/vps/sys/vps/vps_libdump.h
projects/vps/sys/vps/vps_priv.c
projects/vps/sys/vps/vps_snapst.c
projects/vps/sys/vps/vps_suspend.c
Modified: projects/vps/sys/amd64/amd64/vps_machdep.c
==============================================================================
--- projects/vps/sys/amd64/amd64/vps_machdep.c Wed Oct 23 16:12:20 2013 (r256980)
+++ projects/vps/sys/amd64/amd64/vps_machdep.c Wed Oct 23 16:14:48 2013 (r256981)
@@ -87,6 +87,14 @@ vps_md_print_thread(struct thread *td)
/*__attribute__((inline))*/
int
+vps_md_snapshot_thread(struct vps_dump_thread *vdtd, struct thread *td)
+{
+
+ return (0);
+}
+
+/*__attribute__((inline))*/
+int
vps_md_restore_thread(struct vps_dump_thread *vdtd, struct thread *ntd,
struct proc *p)
{
Modified: projects/vps/sys/i386/i386/vps_machdep.c
==============================================================================
--- projects/vps/sys/i386/i386/vps_machdep.c Wed Oct 23 16:12:20 2013 (r256980)
+++ projects/vps/sys/i386/i386/vps_machdep.c Wed Oct 23 16:14:48 2013 (r256981)
@@ -87,6 +87,14 @@ vps_md_print_thread(struct thread *td)
/*__attribute__((inline))*/
int
+vps_md_snapshot_thread(struct vps_dump_thread *vdtd, struct thread *td)
+{
+
+ return (0);
+}
+
+/*__attribute__((inline))*/
+int
vps_md_restore_thread(struct vps_dump_thread *vdtd, struct thread *ntd,
struct proc *p)
{
Modified: projects/vps/sys/mips/conf/EDGEROUTER_VPS
==============================================================================
--- projects/vps/sys/mips/conf/EDGEROUTER_VPS Wed Oct 23 16:12:20 2013 (r256980)
+++ projects/vps/sys/mips/conf/EDGEROUTER_VPS Wed Oct 23 16:14:48 2013 (r256981)
@@ -23,6 +23,7 @@ ident EDGEROUTER_VPS
options VPS
options VPS_STATIC
options VIMAGE
+options DIAGNOSTIC
#options MD_ROOT_SIZE=8192 # Reserve 8 MB for MD root image
#makeoptions MFS_IMAGE=/usr/src/edgerouter/mdroot.img
Modified: projects/vps/sys/mips/mips/vps_machdep.c
==============================================================================
--- projects/vps/sys/mips/mips/vps_machdep.c Wed Oct 23 16:12:20 2013 (r256980)
+++ projects/vps/sys/mips/mips/vps_machdep.c Wed Oct 23 16:14:48 2013 (r256981)
@@ -105,6 +105,16 @@ vps_md_print_thread(struct thread *td)
/*__attribute__((inline))*/
int
+vps_md_snapshot_thread(struct vps_dump_thread *vdtd, struct thread *td)
+{
+
+ vdtd->td_spare[0] = (uint64)td->td_md.md_tls;
+
+ return (0);
+}
+
+/*__attribute__((inline))*/
+int
vps_md_restore_thread(struct vps_dump_thread *vdtd, struct thread *ntd,
struct proc *p)
{
@@ -116,17 +126,6 @@ vps_md_restore_thread(struct vps_dump_th
return (EOPNOTSUPP);
}
- /*
- ntd->td_pcb->pcb_cr3 =
- DMAP_TO_PHYS((vm_offset_t)vmspace_pmap(p->p_vmspace)->pm_pml4);
- ntd->td_pcb->pcb_r12 = (uint64_t)vps_func->vps_restore_return;
- ntd->td_pcb->pcb_rbp = 0;
- ntd->td_pcb->pcb_rsp = (uint64_t)ntd->td_frame - sizeof(void *);
- ntd->td_pcb->pcb_rbx = (uint64_t)ntd;
- ntd->td_pcb->pcb_rip = (uint64_t)fork_trampoline;
- ntd->td_md.md_spinlock_count = 1;
- ntd->td_md.md_saved_flags = PSL_KERNEL | PSL_I;
- */
ntd->td_pcb->pcb_context[PCB_REG_RA] = (register_t)(intptr_t)
fork_trampoline;
/* Make sp 64-bit aligned */
@@ -139,11 +138,12 @@ vps_md_restore_thread(struct vps_dump_th
ntd->td_frame;
ntd->td_pcb->pcb_context[PCB_REG_SR] = mips_rd_status() &
(MIPS_SR_KX | MIPS_SR_UX | MIPS_SR_INT_MASK);
- ntd->td_md.md_tls = curthread->td_md.md_tls;
ntd->td_md.md_saved_intr = MIPS_SR_INT_IE;
ntd->td_md.md_spinlock_count = 1;
- /* XXX CPU_CNMIPS stuff ?! */
+ ntd->td_md.md_tls = (void *)vdtd->td_spare[0];
+
+ /* XXX CPU_CNMIPS stuff */
ntd->td_errno = vdtd->td_errno;
ntd->td_retval[0] = vdtd->td_retval[0];
@@ -279,7 +279,7 @@ XXX
*/
if (vdsf->sf_length != sizeof(struct savefpu)) {
DBGCORE("%s: vdsf->sf_length != sizeof(struct savefpu) "
- (%u != %lu)\n", __func__, vdsf->sf_length,
+ "(%u != %lu)\n", __func__, vdsf->sf_length,
sizeof(struct savefpu));
return (EINVAL);
}
@@ -499,15 +499,6 @@ vps_md_syscall_fixup_setup_inthread(stru
if (vps_func->vps_syscall_fixup_inthread == NULL)
return (EOPNOTSUPP);
- /*
- td->td_pcb->pcb_r12 =
- (uint64_t)vps_func->vps_syscall_fixup_inthread;
- td->td_pcb->pcb_rip = (uint64_t)fork_trampoline;
- td->td_pcb->pcb_rsp = (uint64_t)td->td_frame -
- sizeof(void *);
- td->td_pcb->pcb_rbx = (uint64_t)code;
- td->td_pcb->pcb_rbp = 0;
- */
td->td_pcb->pcb_context[PCB_REG_RA] = (register_t)(intptr_t)
fork_trampoline;
/* Make sp 64-bit aligned */
Modified: projects/vps/sys/vps/vps2.h
==============================================================================
--- projects/vps/sys/vps/vps2.h Wed Oct 23 16:12:20 2013 (r256980)
+++ projects/vps/sys/vps/vps2.h Wed Oct 23 16:14:48 2013 (r256981)
@@ -240,6 +240,7 @@ struct vps_dump_thread;
struct execve_args;
void vps_md_print_thread(struct thread *td);
void vps_md_print_pcb(struct thread *td);
+int vps_md_snapshot_thread(struct vps_dump_thread *vdtd, struct thread *td);
int vps_md_restore_thread(struct vps_dump_thread *vdtd, struct thread *ntd, struct proc *p);
int vps_md_snapshot_sysentvec(struct sysentvec *sv, long *svtype);
int vps_md_restore_sysentvec(long svtype, struct sysentvec **sv);
Modified: projects/vps/sys/vps/vps_libdump.h
==============================================================================
--- projects/vps/sys/vps/vps_libdump.h Wed Oct 23 16:12:20 2013 (r256980)
+++ projects/vps/sys/vps/vps_libdump.h Wed Oct 23 16:14:48 2013 (r256981)
@@ -128,7 +128,7 @@ void vps_libdump_printheader(struct vps_
#define VPS_DUMPOBJT_UCRED 120
#define VPS_DUMPH_MAGIC 0xc0debabe
-#define VPS_DUMPH_VERSION 0x20130512
+#define VPS_DUMPH_VERSION 0x20130709
#define VPS_DUMPH_MSB 12
#define VPS_DUMPH_LSB 21
#define VPS_DUMPH_32BIT 32
@@ -573,6 +573,8 @@ struct vps_dump_thread {
sint32 td_errno;
uint32 _pad2;
+ uint64 td_spare[4];
+
sint32 td_tid;
uint32 td_kstack_pages;
char td_kstack[0]; /* always padded to 64 bit alignment */
Modified: projects/vps/sys/vps/vps_priv.c
==============================================================================
--- projects/vps/sys/vps/vps_priv.c Wed Oct 23 16:12:20 2013 (r256980)
+++ projects/vps/sys/vps/vps_priv.c Wed Oct 23 16:14:48 2013 (r256981)
@@ -383,7 +383,7 @@ vps_devfs_ruleset_free(struct vps *vps,
struct thread *td;
int ruleset_num;
devfs_rid rid;
- int error;
+ int error = 0;
DBGCORE("%s: vps=%p dm=%p\n", __func__, vps, dm);
Modified: projects/vps/sys/vps/vps_snapst.c
==============================================================================
--- projects/vps/sys/vps/vps_snapst.c Wed Oct 23 16:12:20 2013 (r256980)
+++ projects/vps/sys/vps/vps_snapst.c Wed Oct 23 16:14:48 2013 (r256981)
@@ -3280,6 +3280,12 @@ vps_snapshot_thread(struct vps_snapst_ct
goto again;
}
+ if (vps_md_snapshot_thread(vdtd, td) != 0) {
+ thread_unlock(td);
+ vdo_discard(ctx, o1);
+ goto again;
+ }
+
if (vps_snapshot_thread_savefpu(ctx, vps, td) != 0) {
thread_unlock(td);
vdo_discard(ctx, o1);
Modified: projects/vps/sys/vps/vps_suspend.c
==============================================================================
--- projects/vps/sys/vps/vps_suspend.c Wed Oct 23 16:12:20 2013 (r256980)
+++ projects/vps/sys/vps/vps_suspend.c Wed Oct 23 16:14:48 2013 (r256981)
@@ -755,7 +755,7 @@ vps_syscall_fixup_inthread(register_t co
DBGCORE("%s: ####################### curthread=%p/%u code=%zu\n",
__func__, td, td->td_tid, (size_t)code);
- KASSERT(frame == td->td_frame, ("%s: frame == td->td_frame\n",
+ KASSERT(frame == td->td_frame, ("%s: frame != td->td_frame\n",
__func__));
switch(code) {
More information about the svn-src-projects
mailing list