summaryrefslogtreecommitdiff
path: root/sys/netinet/if_ether.c
diff options
context:
space:
mode:
authorDavid Gwynne <dlg@cvs.openbsd.org>2015-09-13 10:42:33 +0000
committerDavid Gwynne <dlg@cvs.openbsd.org>2015-09-13 10:42:33 +0000
commite137ec8e216b9c0d019f9706f2271593c7520cb8 (patch)
tree74a313db90c1be7ee8bcb8b35abc7e433a3a72f8 /sys/netinet/if_ether.c
parent92b3a80e9eac6161aae9d9f4badcafde91a89918 (diff)
queue revarps to softnet so we can defer processing to a context with
the kernel lock. "do it" claudio@ mpi@
Diffstat (limited to 'sys/netinet/if_ether.c')
-rw-r--r--sys/netinet/if_ether.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c
index 5ef7b373cf9..d21b99ba151 100644
--- a/sys/netinet/if_ether.c
+++ b/sys/netinet/if_ether.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_ether.c,v 1.166 2015/09/12 20:26:07 mpi Exp $ */
+/* $OpenBSD: if_ether.c,v 1.167 2015/09/13 10:42:32 dlg Exp $ */
/* $NetBSD: if_ether.c,v 1.31 1996/05/11 12:59:58 mycroft Exp $ */
/*
@@ -95,11 +95,14 @@ void arptfree(struct llinfo_arp *);
void arptimer(void *);
struct rtentry *arplookup(u_int32_t, int, int, u_int);
void in_arpinput(struct mbuf *);
+void revarpinput(struct mbuf *);
+void in_revarpinput(struct mbuf *);
LIST_HEAD(, llinfo_arp) llinfo_arp;
struct pool arp_pool; /* pool for llinfo_arp structures */
/* XXX hate magic numbers */
struct niqueue arpintrq = NIQUEUE_INITIALIZER(50, NETISR_ARP);
+struct niqueue rarpintrq = NIQUEUE_INITIALIZER(50, NETISR_ARP);
int arp_inuse, arp_allocated;
int arp_maxtries = 5;
int arpinit_done;
@@ -498,6 +501,9 @@ arpintr(void)
}
m_freem(m);
}
+
+ while ((m = niq_dequeue(&rarpintrq)) != NULL)
+ revarpinput(m);
}
/*