Module Name: src Committed By: riz Date: Tue Jun 12 19:35:47 UTC 2012
Modified Files: src/sys/arch/powerpc/pic [netbsd-6]: intr.c Log Message: Pull up following revision(s) (requested by macallan in ticket #320): sys/arch/powerpc/pic/intr.c: revision 1.21 sys/arch/powerpc/pic/intr.c: revision 1.22 look at the right cpu_softints bits in pic_do_pending_int() so we call the right softint handlers fix same thinko as in previous commit, in have_pending_intr_p() To generate a diff of this commit: cvs rdiff -u -r1.20 -r1.20.2.1 src/sys/arch/powerpc/pic/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/powerpc/pic/intr.c diff -u src/sys/arch/powerpc/pic/intr.c:1.20 src/sys/arch/powerpc/pic/intr.c:1.20.2.1 --- src/sys/arch/powerpc/pic/intr.c:1.20 Wed Feb 1 09:54:03 2012 +++ src/sys/arch/powerpc/pic/intr.c Tue Jun 12 19:35:46 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.c,v 1.20 2012/02/01 09:54:03 matt Exp $ */ +/* $NetBSD: intr.c,v 1.20.2.1 2012/06/12 19:35:46 riz Exp $ */ /*- * Copyright (c) 2007 Michael Lorenz @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.20 2012/02/01 09:54:03 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.20.2.1 2012/06/12 19:35:46 riz Exp $"); #include "opt_interrupt.h" #include "opt_multiprocessor.h" @@ -508,7 +508,11 @@ again: } #ifdef __HAVE_FAST_SOFTINTS - const u_int softints = (ci->ci_data.cpu_softints << pcpl) & IPL_SOFTMASK; + const u_int softints = ci->ci_data.cpu_softints & + (IPL_SOFTMASK << pcpl); + + /* make sure there are no bits to screw with the line above */ + KASSERT((ci->ci_data.cpu_softints & ~IPL_SOFTMASK) == 0); if (__predict_false(softints != 0)) { ci->ci_cpl = IPL_HIGH; @@ -618,7 +622,7 @@ have_pending_intr_p(struct cpu_info *ci, if (ci->ci_ipending & ~imask[ncpl]) return true; #ifdef __HAVE_FAST_SOFTINTS - if ((ci->ci_data.cpu_softints << ncpl) & IPL_SOFTMASK) + if (ci->ci_data.cpu_softints & (IPL_SOFTMASK << ncpl)) return true; #endif return false;