Module Name: src Committed By: cliff Date: Sat May 1 06:13:34 UTC 2010
Modified Files: src/sys/arch/mips/rmi [matt-nb5-mips64]: rmixl_intr.c Log Message: in evbmips_iointr() for RMI, where we ack the EIRR, replace (relatively expensive) splhigh()/splx() protection with (more efficient) EIMR-based disable/restore. To generate a diff of this commit: cvs rdiff -u -r1.1.2.17 -r1.1.2.18 src/sys/arch/mips/rmi/rmixl_intr.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/mips/rmi/rmixl_intr.c diff -u src/sys/arch/mips/rmi/rmixl_intr.c:1.1.2.17 src/sys/arch/mips/rmi/rmixl_intr.c:1.1.2.18 --- src/sys/arch/mips/rmi/rmixl_intr.c:1.1.2.17 Mon Apr 12 22:40:55 2010 +++ src/sys/arch/mips/rmi/rmixl_intr.c Sat May 1 06:13:34 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: rmixl_intr.c,v 1.1.2.17 2010/04/12 22:40:55 cliff Exp $ */ +/* $NetBSD: rmixl_intr.c,v 1.1.2.18 2010/05/01 06:13:34 cliff Exp $ */ /*- * Copyright (c) 2007 Ruslan Ermilov and Vsevolod Lobko. @@ -64,7 +64,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rmixl_intr.c,v 1.1.2.17 2010/04/12 22:40:55 cliff Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rmixl_intr.c,v 1.1.2.18 2010/05/01 06:13:34 cliff Exp $"); #include "opt_ddb.h" #define __INTR_PRIVATE @@ -813,13 +813,13 @@ for (;;) { rmixl_intrhand_t *ih; uint64_t eirr; + uint64_t eimr; uint64_t vecbit; int vec; asm volatile("dmfc0 %0, $9, 6;" : "=r"(eirr)); #ifdef IOINTR_DEBUG - uint64_t eimr; asm volatile("dmfc0 %0, $9, 7;" : "=r"(eimr)); printf("%s: eirr %#"PRIx64", eimr %#"PRIx64", mask %#"PRIx64"\n", __func__, eirr, eimr, ipl_eimr_map[ipl-1]); @@ -833,14 +833,16 @@ vec = 63 - dclz(eirr); ih = &rmixl_intrhand[vec]; - int s = splhigh(); + asm volatile("dmfc0 %0, $9, 7;" : "=r"(eimr)); + asm volatile("dmtc0 $0, $9, 7;"); vecbit = 1ULL << vec; + KASSERT ((vecbit & eimr) == 0); KASSERT ((vecbit & RMIXL_EIRR_PRESERVE_MASK) == 0); asm volatile("dmfc0 %0, $9, 6;" : "=r"(eirr)); eirr &= RMIXL_EIRR_PRESERVE_MASK; eirr |= vecbit; asm volatile("dmtc0 %0, $9, 6;" :: "r"(eirr)); - splx(s); + asm volatile("dmtc0 %0, $9, 7;" :: "r"(eimr)); if (vec < 32) RMIXL_PICREG_WRITE(RMIXL_PIC_INTRACK,