fix a ldtlb handling bug:

- set to PTE{H,L,A} and call LDTLB must do atomically.
 - never call LDTLB when it's unnecessary.

Broken kernel oocasionally causes cpu reset when /etc/security is called.
Now fix this problem.
This commit is contained in:
msaitoh 2001-08-10 18:27:08 +00:00
parent b5560b60b9
commit 0756145b0f
5 changed files with 7 additions and 9 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: locore.s,v 1.8 2001/05/15 08:54:57 msaitoh Exp $ */
/* $NetBSD: locore.s,v 1.9 2001/08/10 18:27:12 msaitoh Exp $ */
/*-
* Copyright (c) 1993, 1994, 1995, 1997
@ -1335,7 +1335,6 @@ XL_splimit_low3: .long 0x80000000
nop
add #4, r15 /* pop dummy code */
EXCEPT_DISABLE
ldtlb
INTRFASTEXIT
.align 2

View File

@ -1,4 +1,4 @@
/* $NetBSD: locore.s,v 1.32 2001/05/15 08:54:56 msaitoh Exp $ */
/* $NetBSD: locore.s,v 1.33 2001/08/10 18:27:12 msaitoh Exp $ */
/*-
* Copyright (c) 1993, 1994, 1995, 1997
@ -1336,7 +1336,6 @@ XL_splimit_low3: .long 0x80000000
nop
add #4, r15 /* pop dummy code */
EXCEPT_DISABLE
ldtlb
INTRFASTEXIT
.align 2

View File

@ -1,4 +1,4 @@
/* $NetBSD: locore.s,v 1.8 2001/05/15 08:54:57 msaitoh Exp $ */
/* $NetBSD: locore.s,v 1.9 2001/08/10 18:27:13 msaitoh Exp $ */
/*-
* Copyright (c) 1993, 1994, 1995, 1997
@ -1193,7 +1193,6 @@ XL_splimit_low3: .long 0x80000000
nop
add #4, r15 /* pop dummy code */
EXCEPT_DISABLE
ldtlb
INTRFASTEXIT
.align 2

View File

@ -1,4 +1,4 @@
/* $NetBSD: locore.s,v 1.21 2001/02/05 18:14:43 thorpej Exp $ */
/* $NetBSD: locore.s,v 1.22 2001/08/10 18:27:13 msaitoh Exp $ */
/*-
* Copyright (c) 1993, 1994, 1995, 1997
@ -1150,7 +1150,6 @@ XL_splimit_low3: .long 0x80000000
nop
add #4, r15 /* pop dummy code */
EXCEPT_DISABLE
ldtlb
INTRFASTEXIT
.align 2

View File

@ -1,4 +1,4 @@
/* $NetBSD: trap.c,v 1.27 2001/06/24 05:34:07 msaitoh Exp $ */
/* $NetBSD: trap.c,v 1.28 2001/08/10 18:27:08 msaitoh Exp $ */
/*-
* Copyright (c) 1995 Charles M. Hannum. All rights reserved.
@ -691,6 +691,7 @@ tlb_handler(p1, p2, p3, p4, frame)
#else
SHREG_PTEL = pte & PTEL_VALIDBITS;
#endif
__asm __volatile ("ldtlb; nop");
return;
}
@ -841,6 +842,7 @@ tlb_handler(p1, p2, p3, p4, frame)
#endif
}
}
__asm __volatile("ldtlb; nop");
if (user)
userret(p, frame.tf_spc, sticks);
return;