- account idepth in a clock interrupt handler too

- use idepth for CLKF_INTR()
This commit is contained in:
tsutsui 2008-01-28 16:21:19 +00:00
parent 671b15c8ef
commit 57e395fd49
3 changed files with 8 additions and 4 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: locore.s,v 1.142 2008/01/07 16:55:15 joerg Exp $ */
/* $NetBSD: locore.s,v 1.143 2008/01/28 16:21:19 tsutsui Exp $ */
/*
* Copyright (c) 1980, 1990, 1993
@ -1071,6 +1071,7 @@ ENTRY_NOPROFILE(intrhand) /* levels 1 through 5 */
ENTRY_NOPROFILE(lev6intr) /* level 6: clock */
INTERRUPT_SAVEREG
addql #1,_C_LABEL(idepth) | entering interrupt
CLKADDR(%a0)
movb %a0@(CLKSR),%d0 | read clock status
Lclkagain:
@ -1132,6 +1133,7 @@ Lrecheck:
addql #1,_C_LABEL(uvmexp)+UVMEXP_INTRS | chalk up another interrupt
movb %a0@(CLKSR),%d0 | see if anything happened
jmi Lclkagain | while we were in hardclock/statintr
subql #1,_C_LABEL(idepth) | exiting from interrupt
INTERRUPT_RESTOREREG
jra _ASM_LABEL(rei) | all done

View File

@ -1,4 +1,4 @@
/* $NetBSD: cpu.h,v 1.57 2007/10/17 19:54:25 garbled Exp $ */
/* $NetBSD: cpu.h,v 1.58 2008/01/28 16:21:20 tsutsui Exp $ */
/*
* Copyright (c) 1982, 1990, 1993
@ -141,7 +141,8 @@ struct clockframe {
#define CLKF_INTR(framep) (((framep)->sr & PSL_M) == 0)
#else
/* but until we start using PSL_M, we have to do this instead */
#define CLKF_INTR(framep) (0) /* XXX */
#include <machine/intr.h>
#define CLKF_INTR(framep) (idepth > 1) /* XXX */
#endif

View File

@ -1,4 +1,4 @@
/* $NetBSD: intr.h,v 1.26 2007/12/03 15:33:39 ad Exp $ */
/* $NetBSD: intr.h,v 1.27 2008/01/28 16:21:20 tsutsui Exp $ */
/*-
* Copyright (c) 1996, 1997, 1999 The NetBSD Foundation, Inc.
@ -69,6 +69,7 @@
#define PSLTOIPL(x) (((x) >> 8) & 0xf)
#define IPLTOPSL(x) ((((x) & 0xf) << 8) | PSL_S)
extern int idepth;
extern u_short hp300_ipl2psl[];
typedef int ipl_t;