Sat May 28 20:56:37 2011 UTC ()
Restore ci_intr_depth increment for duration of pic_do_pending_ints() lost
when this code was moved.


(jakllsch)
diff -r1.1 -r1.2 src/sys/arch/arm/pic/pic_splfuncs.c

cvs diff -r1.1 -r1.2 src/sys/arch/arm/pic/pic_splfuncs.c (expand / switch to unified diff)

--- src/sys/arch/arm/pic/pic_splfuncs.c 2011/03/11 03:16:14 1.1
+++ src/sys/arch/arm/pic/pic_splfuncs.c 2011/05/28 20:56:37 1.2
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: pic_splfuncs.c,v 1.1 2011/03/11 03:16:14 bsh Exp $ */ 1/* $NetBSD: pic_splfuncs.c,v 1.2 2011/05/28 20:56:37 jakllsch Exp $ */
2/*- 2/*-
3 * Copyright (c) 2008 The NetBSD Foundation, Inc. 3 * Copyright (c) 2008 The NetBSD Foundation, Inc.
4 * All rights reserved. 4 * All rights reserved.
5 * 5 *
6 * This code is derived from software contributed to The NetBSD Foundation 6 * This code is derived from software contributed to The NetBSD Foundation
7 * by Matt Thomas. 7 * by Matt Thomas.
8 * 8 *
9 * Redistribution and use in source and binary forms, with or without 9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions 10 * modification, are permitted provided that the following conditions
11 * are met: 11 * are met:
12 * 1. Redistributions of source code must retain the above copyright 12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer. 13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright 14 * 2. Redistributions in binary form must reproduce the above copyright
@@ -18,27 +18,27 @@ @@ -18,27 +18,27 @@
18 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 18 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 19 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 20 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 21 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGE. 28 * POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30#include <sys/cdefs.h> 30#include <sys/cdefs.h>
31__KERNEL_RCSID(0, "$NetBSD: pic_splfuncs.c,v 1.1 2011/03/11 03:16:14 bsh Exp $"); 31__KERNEL_RCSID(0, "$NetBSD: pic_splfuncs.c,v 1.2 2011/05/28 20:56:37 jakllsch Exp $");
32 32
33#define _INTR_PRIVATE 33#define _INTR_PRIVATE
34#include <sys/param.h> 34#include <sys/param.h>
35#include <sys/evcnt.h> 35#include <sys/evcnt.h>
36#include <sys/atomic.h> 36#include <sys/atomic.h>
37#include <sys/malloc.h> 37#include <sys/malloc.h>
38#include <sys/mallocvar.h> 38#include <sys/mallocvar.h>
39#include <sys/atomic.h> 39#include <sys/atomic.h>
40 40
41#include <arm/armreg.h> 41#include <arm/armreg.h>
42#include <arm/cpu.h> 42#include <arm/cpu.h>
43#include <arm/cpufunc.h> 43#include <arm/cpufunc.h>
44 44
@@ -53,31 +53,35 @@ _splraise(int newipl) @@ -53,31 +53,35 @@ _splraise(int newipl)
53 KASSERT(newipl < NIPL); 53 KASSERT(newipl < NIPL);
54 if (newipl > ci->ci_cpl) 54 if (newipl > ci->ci_cpl)
55 ci->ci_cpl = newipl; 55 ci->ci_cpl = newipl;
56 return oldipl; 56 return oldipl;
57} 57}
58int 58int
59_spllower(int newipl) 59_spllower(int newipl)
60{ 60{
61 struct cpu_info * const ci = curcpu(); 61 struct cpu_info * const ci = curcpu();
62 const int oldipl = ci->ci_cpl; 62 const int oldipl = ci->ci_cpl;
63 KASSERT(panicstr || newipl <= ci->ci_cpl); 63 KASSERT(panicstr || newipl <= ci->ci_cpl);
64 if (newipl < ci->ci_cpl) { 64 if (newipl < ci->ci_cpl) {
65 register_t psw = disable_interrupts(I32_bit); 65 register_t psw = disable_interrupts(I32_bit);
 66 ci->ci_intr_depth++;
66 pic_do_pending_ints(psw, newipl, NULL); 67 pic_do_pending_ints(psw, newipl, NULL);
 68 ci->ci_intr_depth--;
67 restore_interrupts(psw); 69 restore_interrupts(psw);
68 } 70 }
69 return oldipl; 71 return oldipl;
70} 72}
71 73
72void 74void
73splx(int savedipl) 75splx(int savedipl)
74{ 76{
75 struct cpu_info * const ci = curcpu(); 77 struct cpu_info * const ci = curcpu();
76 KASSERT(savedipl < NIPL); 78 KASSERT(savedipl < NIPL);
77 if (savedipl < ci->ci_cpl) { 79 if (savedipl < ci->ci_cpl) {
78 register_t psw = disable_interrupts(I32_bit); 80 register_t psw = disable_interrupts(I32_bit);
 81 ci->ci_intr_depth++;
79 pic_do_pending_ints(psw, savedipl, NULL); 82 pic_do_pending_ints(psw, savedipl, NULL);
 83 ci->ci_intr_depth--;
80 restore_interrupts(psw); 84 restore_interrupts(psw);
81 } 85 }
82 ci->ci_cpl = savedipl; 86 ci->ci_cpl = savedipl;
83} 87}