PERFORCE change 68938 for review
John Baldwin
jhb at FreeBSD.org
Thu Jan 13 13:07:05 PST 2005
http://perforce.freebsd.org/chv.cgi?CH=68938
Change 68938 by jhb at jhb_slimer on 2005/01/13 21:06:03
cpu_exit() cleaning inspired by sparc64 use-after-free bug:
- Remove stale comment (alpha, powerpc)
- Drop redundant dbregs drop (i386, amd64)
- Note that fp state should probably be per thread (alpha, ia64)
Affected files ...
.. //depot/projects/smpng/sys/alpha/alpha/vm_machdep.c#37 edit
.. //depot/projects/smpng/sys/amd64/amd64/vm_machdep.c#22 edit
.. //depot/projects/smpng/sys/i386/i386/vm_machdep.c#59 edit
.. //depot/projects/smpng/sys/ia64/ia64/vm_machdep.c#44 edit
.. //depot/projects/smpng/sys/powerpc/powerpc/vm_machdep.c#40 edit
Differences ...
==== //depot/projects/smpng/sys/alpha/alpha/vm_machdep.c#37 (text+ko) ====
@@ -224,17 +224,15 @@
td->td_pcb->pcb_context[2] = (u_long) arg;
}
-/*
- * cpu_exit is called as the last action during exit.
- * We release the address space of the process, block interrupts,
- * and call switch_exit. switch_exit switches to proc0's PCB and stack,
- * then jumps into the middle of cpu_switch, as if it were switching
- * from proc0.
- */
void
cpu_exit(struct thread *td)
{
+ /*
+ * XXX: Should this be in thread_exit instead? If so,
+ * alpha_fpstate_save() should be in cpu_set_upcall()
+ * as well.
+ */
alpha_fpstate_drop(td);
}
==== //depot/projects/smpng/sys/amd64/amd64/vm_machdep.c#22 (text+ko) ====
@@ -185,13 +185,6 @@
void
cpu_exit(struct thread *td)
{
- struct pcb *pcb = td->td_pcb;
-
- if (pcb->pcb_flags & PCB_DBREGS) {
- /* disable all hardware breakpoints */
- reset_dbregs();
- pcb->pcb_flags &= ~PCB_DBREGS;
- }
}
void
==== //depot/projects/smpng/sys/i386/i386/vm_machdep.c#59 (text+ko) ====
@@ -295,8 +295,6 @@
cpu_exit(struct thread *td)
{
struct mdproc *mdp;
- struct pcb *pcb = td->td_pcb;
-
/* Reset pc->pcb_gs and %gs before possibly invalidating it. */
mdp = &td->td_proc->p_md;
@@ -307,18 +305,13 @@
user_ldt_free(td);
} else
mtx_unlock_spin(&sched_lock);
-
- if (pcb->pcb_flags & PCB_DBREGS) {
- /* disable all hardware breakpoints */
- reset_dbregs();
- pcb->pcb_flags &= ~PCB_DBREGS;
- }
}
void
cpu_thread_exit(struct thread *td)
{
struct pcb *pcb = td->td_pcb;
+
#ifdef DEV_NPX
if (td == PCPU_GET(fpcurthread))
npxdrop();
==== //depot/projects/smpng/sys/ia64/ia64/vm_machdep.c#44 (text+ko) ====
@@ -297,6 +297,7 @@
cpu_exit(struct thread *td)
{
+ /* XXX: Should this be in cpu_thread_exit() instead? */
/* Throw away the high FP registers. */
ia64_highfp_drop(td);
}
==== //depot/projects/smpng/sys/powerpc/powerpc/vm_machdep.c#40 (text+ko) ====
@@ -182,13 +182,6 @@
cf->cf_arg0 = (register_t)arg;
}
-/*
- * cpu_exit is called as the last action during exit.
- * We release the address space of the process, block interrupts,
- * and call switch_exit. switch_exit switches to proc0's PCB and stack,
- * then jumps into the middle of cpu_switch, as if it were switching
- * from proc0.
- */
void
cpu_exit(td)
register struct thread *td;
More information about the p4-projects
mailing list