Subject: CVS commit: syssrc/sys/arch/i386/i386
To: None <firstname.lastname@example.org>
From: Andreas Gustafsson <email@example.com>
Date: 04/02/2002 07:02:33
Module Name: syssrc
Committed By: gson
Date: Tue Apr 2 04:02:33 UTC 2002
When profiling a user process, fuswintr() and suswintr() could store
the value fusubail in the pcb_onfault field of the wrong process if a
profiling timer interrupt happened to occur inside cpu_switch() at a
point where curproc had been updated to point to the new process but
curpcb still pointed to the old one. trap() would then fail to ignore
any page fault in fuswintr/suswintr and the system would lock up.
This bug only affected systems with kern_clock.c 1.72 or newer, as
earlier versions only call addupc_intr from interrupts that occur in
user mode. Fixed by assigning to curproc->p_addr->u_pcb.pcb_onfault
instead of curpcb->pcb_onfault, as the former is what trap() checks.
To generate a diff of this commit:
cvs rdiff -r1.249 -r1.250 syssrc/sys/arch/i386/i386/locore.s
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.