From df5e1987230850fe5983a4479523708640160215 Mon Sep 17 00:00:00 2001 From: Jonathan Lemon Date: Sat, 25 Nov 2000 07:35:38 +0000 Subject: Lock down the network interface queues. The queue mutex must be obtained before adding/removing packets from the queue. Also, the if_obytes and if_omcasts fields should only be manipulated under protection of the mutex. IF_ENQUEUE, IF_PREPEND, and IF_DEQUEUE perform all necessary locking on the queue. An IF_LOCK macro is provided, as well as the old (mutex-less) versions of the macros in the form _IF_ENQUEUE, _IF_QFULL, for code which needs them, but their use is discouraged. Two new macros are introduced: IF_DRAIN() to drain a queue, and IF_HANDOFF, which takes care of locking/enqueue, and also statistics updating/start if necessary. --- sys/netns/ns_ip.c | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) (limited to 'sys/netns/ns_ip.c') diff --git a/sys/netns/ns_ip.c b/sys/netns/ns_ip.c index 0c5fbeb84647..45e9b8ed46b7 100644 --- a/sys/netns/ns_ip.c +++ b/sys/netns/ns_ip.c @@ -220,17 +220,8 @@ idpip_input(m, ifp) /* * Deliver to NS */ - s = splimp(); - if (IF_QFULL(ifq)) { - IF_DROP(ifq); -bad: - m_freem(m); - splx(s); - return; - } - IF_ENQUEUE(ifq, m); - schednetisr(NETISR_NS); - splx(s); + if (IF_HANDOFF(ifq, m, NULL)) + schednetisr(NETISR_NS); return; } -- cgit v1.2.3