Tue Feb 25 22:40:53 2014 UTC ()
Schedule only those netisr's that have registered handlers.


(pooka)
diff -r1.7 -r1.8 src/sys/rump/librump/rumpnet/netisr.c

cvs diff -r1.7 -r1.8 src/sys/rump/librump/rumpnet/Attic/netisr.c (expand / switch to unified diff)

--- src/sys/rump/librump/rumpnet/Attic/netisr.c 2014/02/14 01:43:13 1.7
+++ src/sys/rump/librump/rumpnet/Attic/netisr.c 2014/02/25 22:40:53 1.8
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: netisr.c,v 1.7 2014/02/14 01:43:13 pooka Exp $ */ 1/* $NetBSD: netisr.c,v 1.8 2014/02/25 22:40:53 pooka Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2008 Antti Kantee. All Rights Reserved. 4 * Copyright (c) 2008 Antti Kantee. All Rights Reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright 11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the 12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution. 13 * documentation and/or other materials provided with the distribution.
14 * 14 *
@@ -16,39 +16,46 @@ @@ -16,39 +16,46 @@
16 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * SUCH DAMAGE. 25 * SUCH DAMAGE.
26 */ 26 */
27 27
28#include <sys/cdefs.h> 28#include <sys/cdefs.h>
29__KERNEL_RCSID(0, "$NetBSD: netisr.c,v 1.7 2014/02/14 01:43:13 pooka Exp $"); 29__KERNEL_RCSID(0, "$NetBSD: netisr.c,v 1.8 2014/02/25 22:40:53 pooka Exp $");
30 30
31#include <sys/param.h> 31#include <sys/param.h>
32#include <sys/intr.h> 32#include <sys/intr.h>
33 33
34#include <net/netisr.h> 34#include <net/netisr.h>
35 35
36#include <rump/rumpuser.h> 36#include <rump/rumpuser.h>
37 37
38#include "rump_net_private.h" 38#include "rump_net_private.h"
39 39
40static void *netisrs[NETISR_MAX]; 40static void *netisrs[NETISR_MAX];
41void 41void
42schednetisr(int isr) 42schednetisr(int isr)
43{ 43{
44 44
45 softint_schedule(netisrs[isr]); 45 /*
 46 * Do not schedule a softint that is not registered.
 47 * This might cause the inq to fill, but the one calling us
 48 * should start dropping packets once the inq is full,
 49 * so no big harm done.
 50 */
 51 if (__predict_true(netisrs[isr]))
 52 softint_schedule(netisrs[isr]);
46} 53}
47 54
48void 55void
49rump_netisr_register(int level, void (*handler)(void)) 56rump_netisr_register(int level, void (*handler)(void))
50{ 57{
51 58
52 netisrs[level] = softint_establish(SOFTINT_NET | SOFTINT_MPSAFE, 59 netisrs[level] = softint_establish(SOFTINT_NET | SOFTINT_MPSAFE,
53 (void (*)(void *))handler, NULL); 60 (void (*)(void *))handler, NULL);
54} 61}