Commit a whole cluster of last minute critical (and one cosmetic) fixes

from David Greenman, Bruce Evans and Julian Elischer.

They are:

[vnode pager - David/Bruce]:
  The following patch fixes a problem where some data could be lost in a
delayed-write buffer if the cached buffer was larger than a page. This fix was
provided by Bruce Evans and modified slightly by me.

[st.c - Julian]:
  My fix for "bad request, must be between 0 and 0"

RTFS if you're interested).

[gnu/fpemul - David/Bruce]:
  These changes fix single stepping of emulated FPU instructions.
Previously, the instruction after an emulated instruction was
executed without causing a SIGTRAP ...

The also fix the initial control word being different for the
GPL emulator (it is still wrong for the old emulator) and remove
an unnecessary panic when emulation is not configured (I hope at
least init, sh and reboot will run without floating point.  I
remember only df and mkfs being broken by the lack of FP in 0.0).

[Various fixes described below - Bruce/David]:
sys/i386/boot/boot2.S:
        Yet another attempt to propagate the correct fix for 16 vs
        32-bit mode bugs.  [verified]

sys/i386/i386/db_interface.c:
        Protect against reentering Debugger().

sys/kern/kern_time.c:
        Don't allow 'time.tv_usec == 0' except at clock interrupts.

sys/pcfs/pcfs_fat.c:
        Make it compile without -O.

sys/scsi/sd.c:
        Fix as posted to some freebsd mailing list.
        (changes the order of the assignment of "sectors" because it earlier
          value is needed first -DG)

sys/vm/vm_glue.c:
        Fix stale comments and verbose code.

sys/vm/vm_mmap.c
        Fix off by 1 errors and verbose code.

[From Nate - cosmetic but non-intrusive and useful enough to go in]
sys/i386/isa/isa.c:
Appended you'll find a patch to the NMI error log routine in isa/isa.c.
The below patch just adds some additional information when an NMI occurs
which can help debug the hardware problem.
This commit is contained in:
Jordan K. Hubbard 1994-06-22 05:52:25 +00:00
parent 7fd50c04de
commit 1c28e35f68
3 changed files with 22 additions and 7 deletions

View File

@ -55,7 +55,7 @@
*
* W. Metzenthen June 1994.
*
* $Id: fpu_entry.c,v 1.2 1994/04/29 21:16:21 gclarkii Exp $
* $Id: fpu_entry.c,v 1.3 1994/06/10 07:44:22 rich Exp $
*
*/
@ -210,6 +210,7 @@ math_emulate(struct trapframe * tframe)
if ((((struct pcb *) curproc->p_addr)->pcb_flags & FP_SOFTFP) == 0) {
finit();
control_word = __INITIAL_NPXCW__;
((struct pcb *) curproc->p_addr)->pcb_flags |= FP_SOFTFP;
}
FPU_info = tframe;
@ -228,10 +229,8 @@ math_emulate(struct trapframe * tframe)
#endif
FPU_lookahead = FPU_LOOKAHEAD;
#if notnow /* I dont know that much of traceing. Is it right? --pink-- */
if (curproc->p_flag & STRC)
FPU_lookahead = 0;
#endif
do_another_FPU_instruction:

View File

@ -24,7 +24,7 @@
* the rights to redistribute these changes.
*
* from: Mach, Revision 2.2 92/04/04 11:35:26 rpd
* $Id: boot2.S,v 1.2 1993/10/16 19:11:33 rgrimes Exp $
* $Id: boot2.S,v 1.3 1993/11/13 04:43:25 rgrimes Exp $
*/
#include "asm.h"
@ -128,14 +128,22 @@ ENTRY(boot2)
mov %ax, %es
/* fix up IDT entries for bdb */
subl $2, %ebx
data32
subl $2, %ebx /* calculate EA to check it */
jb 1f /* give up if it would trap */
addr32
movl %es: (%ebx), %eax /* actually movw to %ax */
addr32
movl %eax, EXT(Idt)+8*DEBUG_VECTOR /* actually movw %ax */
1:
data32
subl $2, %ecx
jb 1f
addr32
movl %es: (%ecx), %eax /* actually movw to %ax */
addr32
movl %eax, EXT(Idt)+8*BREAKPOINT_VECTOR /* actually movw %ax */
1:
/* finished with groping in real mode segments */
pop %es

View File

@ -24,7 +24,7 @@
* the rights to redistribute these changes.
*
* from: Mach, Revision 2.2 92/04/04 11:35:26 rpd
* $Id: boot2.S,v 1.2 1993/10/16 19:11:33 rgrimes Exp $
* $Id: boot2.S,v 1.3 1993/11/13 04:43:25 rgrimes Exp $
*/
#include "asm.h"
@ -128,14 +128,22 @@ ENTRY(boot2)
mov %ax, %es
/* fix up IDT entries for bdb */
subl $2, %ebx
data32
subl $2, %ebx /* calculate EA to check it */
jb 1f /* give up if it would trap */
addr32
movl %es: (%ebx), %eax /* actually movw to %ax */
addr32
movl %eax, EXT(Idt)+8*DEBUG_VECTOR /* actually movw %ax */
1:
data32
subl $2, %ecx
jb 1f
addr32
movl %es: (%ecx), %eax /* actually movw to %ax */
addr32
movl %eax, EXT(Idt)+8*BREAKPOINT_VECTOR /* actually movw %ax */
1:
/* finished with groping in real mode segments */
pop %es