PERFORCE change 30777 for review
John Baldwin
jhb at FreeBSD.org
Thu May 8 07:39:53 PDT 2003
On 08-May-2003 Peter Wemm wrote:
> http://perforce.freebsd.org/chv.cgi?CH=30777
>
> Change 30777 by peter at peter_overcee on 2003/05/08 01:21:28
>
> Change the page IDTVEC back to an interrupt gate instead of a trap
> gate. Otherwise we could preempt and %cr2 could be reused on another
> process when it faults.
>
> Affected files ...
>
> .. //depot/projects/hammer/sys/amd64/amd64/machdep.c#12 edit
> .. //depot/projects/hammer/sys/amd64/amd64/trap.c#6 edit
>
> Differences ...
>
> ==== //depot/projects/hammer/sys/amd64/amd64/machdep.c#12 (text+ko) ====
>
> @@ -1219,7 +1219,7 @@
> setidt(11, &IDTVEC(missing), SDT_SYSTGT, SEL_KPL, 0);
> setidt(12, &IDTVEC(stk), SDT_SYSTGT, SEL_KPL, 0);
> setidt(13, &IDTVEC(prot), SDT_SYSTGT, SEL_KPL, 0);
> - setidt(14, &IDTVEC(page), SDT_SYSTGT, SEL_KPL, 0);
> + setidt(14, &IDTVEC(page), SDT_SYSIGT, SEL_KPL, 0);
> setidt(15, &IDTVEC(rsvd), SDT_SYSTGT, SEL_KPL, 0);
> setidt(16, &IDTVEC(fpu), SDT_SYSTGT, SEL_KPL, 0);
> setidt(17, &IDTVEC(align), SDT_SYSTGT, SEL_KPL, 0);
>
> ==== //depot/projects/hammer/sys/amd64/amd64/trap.c#6 (text+ko) ====
>
> @@ -213,9 +213,17 @@
> * do the VM lookup, so just consider it a fatal trap so the
> * kernel can print out a useful trap message and even get
> * to the debugger.
> + *
> + * Note that T_PAGEFLT is registered as an interrupt gate. This
> + * is just like a trap gate, except interrupts are disabled. This
> + * happens to be critically important, because we could otherwise
> + * preempt and run another process that may cause %cr2 to be
> + * clobbered for something else.
> */
> eva = rcr2();
> - if (PCPU_GET(spinlocks) != NULL)
> + if (PCPU_GET(spinlocks) == NULL)
> + enable_intr();
> + else
> trap_fatal(&frame, eva);
> }
The spinlocks check only works if witness is on. What you want to
do is check td_critnest > 0 instead.
--
John Baldwin <jhb at FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!" - http://www.FreeBSD.org/
More information about the p4-projects
mailing list