PERFORCE change 28571 for review

Marcel Moolenaar marcel at FreeBSD.org
Tue Apr 8 15:50:35 PDT 2003


http://perforce.freebsd.org/chv.cgi?CH=28571

Change 28571 by marcel at marcel_nfs on 2003/04/08 15:50:16

	Have savectx() return 0 and restorectx() return 1. That way
	we can swap contexts without actually having to create a
	swapctx() function, because we can write it like:
		if (!savectx(oldpcb))
			restorectx(newpcb);
	
	This pretty much behaves like setjmp()/longjmp() this way.
	
	The prime reason is that we have the right pmap installed
	when we save and restore the contexts.
	
	Keep swapctx() around for now in case things don't turn out
	the way I thought it would do.

Affected files ...

.. //depot/projects/ia64_epc/sys/ia64/ia64/context.s#7 edit
.. //depot/projects/ia64_epc/sys/ia64/ia64/machdep.c#7 edit
.. //depot/projects/ia64_epc/sys/ia64/include/pcb.h#5 edit

Differences ...

==== //depot/projects/ia64_epc/sys/ia64/ia64/context.s#7 (text+ko) ====

@@ -148,9 +148,12 @@
 	ldf.fill	f26=[r32],32
 	ldf.fill	f27=[r31],32
 	;;
+{	.mmi
 	ldf.fill	f28=[r32],32
 	ldf.fill	f29=[r31],32
+	add		r8=1,r0
 	;;
+}
 {	.mmb
 	ldf.fill	f30=[r32]
 	ldf.fill	f31=[r31]
@@ -284,9 +287,9 @@
 	stf.spill	[r31]=f29,32
 	stf.spill	[r32]=f30
 	;;
-{	.mfb
+{	.mib
 	stf.spill	[r31]=f31
-	nop		0
+(p15)	add		r8=0,r0
 (p15)	br.ret.sptk	rp
 	;;
 }

==== //depot/projects/ia64_epc/sys/ia64/ia64/machdep.c#7 (text+ko) ====

@@ -215,9 +215,11 @@
 
 	oldpcb = old->td_pcb;
 	oldpcb->pcb_current_pmap = PCPU_GET(current_pmap);
-	newpcb = new->td_pcb;
-	pmap_install(newpcb->pcb_current_pmap);
-	swapctx(oldpcb, newpcb);
+	if (!savectx(oldpcb)) {
+		newpcb = new->td_pcb;
+		pmap_install(newpcb->pcb_current_pmap);
+		restorectx(newpcb);
+	}
 }
 
 void

==== //depot/projects/ia64_epc/sys/ia64/include/pcb.h#5 (text+ko) ====

@@ -49,8 +49,8 @@
 };
 
 #ifdef _KERNEL
-void restorectx(struct pcb *);
-void savectx(struct pcb *);
+void restorectx(struct pcb *) __dead2;
+int savectx(struct pcb *);
 void swapctx(struct pcb *old, struct pcb *new);
 #endif
 


More information about the p4-projects mailing list