Module Name:    src
Committed By:   thorpej
Date:           Sat Sep  3 01:35:04 UTC 2022

Modified Files:
        src/sys/net: if_arcsubr.c if_ethersubr.c if_ieee1394subr.c
            netisr_dispatch.h
        src/sys/netinet: if_arp.c if_inarp.h
        src/sys/rump/net/lib/libnetinet: netinet_component.c

Log Message:
Convert ARP from a legacy netisr to pktqueue.


To generate a diff of this commit:
cvs rdiff -u -r1.83 -r1.84 src/sys/net/if_arcsubr.c
cvs rdiff -u -r1.316 -r1.317 src/sys/net/if_ethersubr.c
cvs rdiff -u -r1.67 -r1.68 src/sys/net/if_ieee1394subr.c
cvs rdiff -u -r1.20 -r1.21 src/sys/net/netisr_dispatch.h
cvs rdiff -u -r1.307 -r1.308 src/sys/netinet/if_arp.c
cvs rdiff -u -r1.52 -r1.53 src/sys/netinet/if_inarp.h
cvs rdiff -u -r1.11 -r1.12 \
    src/sys/rump/net/lib/libnetinet/netinet_component.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/net/if_arcsubr.c
diff -u src/sys/net/if_arcsubr.c:1.83 src/sys/net/if_arcsubr.c:1.84
--- src/sys/net/if_arcsubr.c:1.83	Wed Jun 16 00:21:19 2021
+++ src/sys/net/if_arcsubr.c	Sat Sep  3 01:35:03 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_arcsubr.c,v 1.83 2021/06/16 00:21:19 riastradh Exp $	*/
+/*	$NetBSD: if_arcsubr.c,v 1.84 2022/09/03 01:35:03 thorpej Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Ignatios Souvatzis
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_arcsubr.c,v 1.83 2021/06/16 00:21:19 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_arcsubr.c,v 1.84 2022/09/03 01:35:03 thorpej Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -508,9 +508,7 @@ arc_input(struct ifnet *ifp, struct mbuf
 {
 	pktqueue_t *pktq = NULL;
 	struct arc_header *ah;
-	struct ifqueue *inq;
 	uint8_t atype;
-	int isr = 0;
 
 	if ((ifp->if_flags & IFF_UP) == 0) {
 		m_freem(m);
@@ -546,8 +544,7 @@ arc_input(struct ifnet *ifp, struct mbuf
 
 	case ARCTYPE_ARP:
 		m_adj(m, ARC_HDRNEWLEN);
-		isr = NETISR_ARP;
-		inq = &arpintrq;
+		pktq = arp_pktq;
 #ifdef ARCNET_ALLOW_BROKEN_ARP
 		mtod(m, struct arphdr *)->ar_pro = htons(ETHERTYPE_IP);
 #endif
@@ -555,8 +552,7 @@ arc_input(struct ifnet *ifp, struct mbuf
 
 	case ARCTYPE_ARP_OLD:
 		m_adj(m, ARC_HDRLEN);
-		isr = NETISR_ARP;
-		inq = &arpintrq;
+		pktq = arp_pktq;
 #ifdef ARCNET_ALLOW_BROKEN_ARP
 		mtod(m, struct arphdr *)->ar_pro = htons(ETHERTYPE_IP);
 #endif
@@ -573,14 +569,10 @@ arc_input(struct ifnet *ifp, struct mbuf
 		return;
 	}
 
-	if (__predict_true(pktq)) {
-		if (__predict_false(!pktq_enqueue(pktq, m, 0))) {
-			m_freem(m);
-		}
-		return;
+	KASSERT(pktq != NULL);
+	if (__predict_false(!pktq_enqueue(pktq, m, 0))) {
+		m_freem(m);
 	}
-
-	IFQ_ENQUEUE_ISR(inq, m, isr);
 }
 
 /*

Index: src/sys/net/if_ethersubr.c
diff -u src/sys/net/if_ethersubr.c:1.316 src/sys/net/if_ethersubr.c:1.317
--- src/sys/net/if_ethersubr.c:1.316	Sat Sep  3 00:31:02 2022
+++ src/sys/net/if_ethersubr.c	Sat Sep  3 01:35:03 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ethersubr.c,v 1.316 2022/09/03 00:31:02 thorpej Exp $	*/
+/*	$NetBSD: if_ethersubr.c,v 1.317 2022/09/03 01:35:03 thorpej Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.316 2022/09/03 00:31:02 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.317 2022/09/03 01:35:03 thorpej Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -904,8 +904,7 @@ ether_input(struct ifnet *ifp, struct mb
 		break;
 
 	case ETHERTYPE_ARP:
-		isr = NETISR_ARP;
-		inq = &arpintrq;
+		pktq = arp_pktq;
 		break;
 
 	case ETHERTYPE_REVARP:

Index: src/sys/net/if_ieee1394subr.c
diff -u src/sys/net/if_ieee1394subr.c:1.67 src/sys/net/if_ieee1394subr.c:1.68
--- src/sys/net/if_ieee1394subr.c:1.67	Fri Dec 31 14:25:24 2021
+++ src/sys/net/if_ieee1394subr.c	Sat Sep  3 01:35:03 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ieee1394subr.c,v 1.67 2021/12/31 14:25:24 riastradh Exp $	*/
+/*	$NetBSD: if_ieee1394subr.c,v 1.68 2022/09/03 01:35:03 thorpej Exp $	*/
 
 /*
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ieee1394subr.c,v 1.67 2021/12/31 14:25:24 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ieee1394subr.c,v 1.68 2022/09/03 01:35:03 thorpej Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -326,10 +326,8 @@ void
 ieee1394_input(struct ifnet *ifp, struct mbuf *m, uint16_t src)
 {
 	pktqueue_t *pktq = NULL;
-	struct ifqueue *inq;
 	uint16_t etype;
 	struct ieee1394_unfraghdr *iuh;
-	int isr = 0;
 
 	if ((ifp->if_flags & IFF_UP) == 0) {
 		m_freem(m);
@@ -381,8 +379,7 @@ ieee1394_input(struct ifnet *ifp, struct
 		break;
 
 	case ETHERTYPE_ARP:
-		isr = NETISR_ARP;
-		inq = &arpintrq;
+		pktq = arp_pktq;
 		break;
 #endif /* INET */
 
@@ -397,14 +394,10 @@ ieee1394_input(struct ifnet *ifp, struct
 		return;
 	}
 
-	if (__predict_true(pktq)) {
-		if (__predict_false(!pktq_enqueue(pktq, m, 0))) {
-			m_freem(m);
-		}
-		return;
+	KASSERT(pktq != NULL);
+	if (__predict_false(!pktq_enqueue(pktq, m, 0))) {
+		m_freem(m);
 	}
-
-	IFQ_ENQUEUE_ISR(inq, m, isr);
 }
 
 static struct mbuf *

Index: src/sys/net/netisr_dispatch.h
diff -u src/sys/net/netisr_dispatch.h:1.20 src/sys/net/netisr_dispatch.h:1.21
--- src/sys/net/netisr_dispatch.h:1.20	Thu Sep  6 06:42:00 2018
+++ src/sys/net/netisr_dispatch.h	Sat Sep  3 01:35:03 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: netisr_dispatch.h,v 1.20 2018/09/06 06:42:00 maxv Exp $ */
+/* $NetBSD: netisr_dispatch.h,v 1.21 2022/09/03 01:35:03 thorpej Exp $ */
 
 #ifndef _NET_NETISR_DISPATCH_H_
 #define _NET_NETISR_DISPATCH_H_
@@ -27,11 +27,6 @@
  * their prototypes in <net/netisr.h> (if necessary).
  */
 
-#ifdef INET
-#if NARP > 0
-	DONETISR(NETISR_ARP,arpintr);
-#endif
-#endif
 #ifdef NETATALK
 	DONETISR(NETISR_ATALK,atintr);
 #endif

Index: src/sys/netinet/if_arp.c
diff -u src/sys/netinet/if_arp.c:1.307 src/sys/netinet/if_arp.c:1.308
--- src/sys/netinet/if_arp.c:1.307	Fri Feb 19 14:51:59 2021
+++ src/sys/netinet/if_arp.c	Sat Sep  3 01:35:03 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_arp.c,v 1.307 2021/02/19 14:51:59 christos Exp $	*/
+/*	$NetBSD: if_arp.c,v 1.308 2022/09/03 01:35:03 thorpej Exp $	*/
 
 /*
  * Copyright (c) 1998, 2000, 2008 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.307 2021/02/19 14:51:59 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.308 2022/09/03 01:35:03 thorpej Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -196,13 +196,9 @@ static void arp_dad_start(struct ifaddr 
 static void arp_dad_stop(struct ifaddr *);
 static void arp_dad_duplicated(struct ifaddr *, const struct sockaddr_dl *);
 
-struct ifqueue arpintrq = {
-	.ifq_head = NULL,
-	.ifq_tail = NULL,
-	.ifq_len = 0,
-	.ifq_maxlen = 50,
-	.ifq_drops = 0,
-};
+#define	ARP_MAXQLEN	50
+pktqueue_t *		arp_pktq		__read_mostly;
+
 static int useloopback = 1;	/* use loopback interface for local traffic */
 
 static percpu_t *arpstat_percpu;
@@ -269,9 +265,11 @@ void
 arp_init(void)
 {
 
+	arp_pktq = pktq_create(ARP_MAXQLEN, arpintr, NULL);
+	KASSERT(arp_pktq != NULL);
+
 	sysctl_net_inet_arp_setup(NULL);
 	arpstat_percpu = percpu_alloc(sizeof(uint64_t) * ARP_NSTATS);
-	IFQ_LOCK_INIT(&arpintrq);
 
 #ifdef MBUFTRACE
 	MOWNER_ATTACH(&arpdomain.dom_mowner);
@@ -678,7 +676,7 @@ bad:
  * then the protocol-specific routine is called.
  */
 void
-arpintr(void)
+arpintr(void *arg __unused)
 {
 	struct mbuf *m;
 	struct arphdr *ar;
@@ -688,13 +686,7 @@ arpintr(void)
 	bool badhrd;
 
 	SOFTNET_KERNEL_LOCK_UNLESS_NET_MPSAFE();
-	for (;;) {
-
-		IFQ_LOCK(&arpintrq);
-		IF_DEQUEUE(&arpintrq, m);
-		IFQ_UNLOCK(&arpintrq);
-		if (m == NULL)
-			goto out;
+	while ((m = pktq_dequeue(arp_pktq)) != NULL) {
 		if ((m->m_flags & M_PKTHDR) == 0)
 			panic("arpintr");
 
@@ -753,8 +745,6 @@ badlen:
 free:
 		m_freem(m);
 	}
-
-out:
 	SOFTNET_KERNEL_UNLOCK_UNLESS_NET_MPSAFE();
 	return; /* XXX gcc */
 }

Index: src/sys/netinet/if_inarp.h
diff -u src/sys/netinet/if_inarp.h:1.52 src/sys/netinet/if_inarp.h:1.53
--- src/sys/netinet/if_inarp.h:1.52	Fri Sep 11 15:16:00 2020
+++ src/sys/netinet/if_inarp.h	Sat Sep  3 01:35:03 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_inarp.h,v 1.52 2020/09/11 15:16:00 roy Exp $	*/
+/*	$NetBSD: if_inarp.h,v 1.53 2022/09/03 01:35:03 thorpej Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1993
@@ -57,6 +57,8 @@ struct sockaddr_inarp {
 
 #ifdef _KERNEL
 
+#include <net/pktqueue.h>
+
 /* ARP timings from RFC5227 */
 #define PROBE_WAIT               1
 #define PROBE_NUM                3
@@ -69,12 +71,12 @@ struct sockaddr_inarp {
 #define RATE_LIMIT_INTERVAL     60
 #define DEFEND_INTERVAL         10
 
-extern struct ifqueue arpintrq;
+extern pktqueue_t *arp_pktq;
 void arp_ifinit(struct ifnet *, struct ifaddr *);
 void arp_rtrequest(int, struct rtentry *, const struct rt_addrinfo *);
 int arpresolve(struct ifnet *, const struct rtentry *, struct mbuf *,
     const struct sockaddr *, void *, size_t);
-void arpintr(void);
+void arpintr(void *);
 void arpannounce(struct ifnet *, struct ifaddr *, const uint8_t *);
 struct llentry *arplookup(struct ifnet *,
     const struct in_addr *, const struct sockaddr *, int);

Index: src/sys/rump/net/lib/libnetinet/netinet_component.c
diff -u src/sys/rump/net/lib/libnetinet/netinet_component.c:1.11 src/sys/rump/net/lib/libnetinet/netinet_component.c:1.12
--- src/sys/rump/net/lib/libnetinet/netinet_component.c:1.11	Sat Feb 24 07:37:08 2018
+++ src/sys/rump/net/lib/libnetinet/netinet_component.c	Sat Sep  3 01:35:03 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: netinet_component.c,v 1.11 2018/02/24 07:37:08 ozaki-r Exp $	*/
+/*	$NetBSD: netinet_component.c,v 1.12 2022/09/03 01:35:03 thorpej Exp $	*/
 
 /*
  * Copyright (c) 2009 Antti Kantee.  All Rights Reserved.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netinet_component.c,v 1.11 2018/02/24 07:37:08 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netinet_component.c,v 1.12 2022/09/03 01:35:03 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/domain.h>
@@ -51,8 +51,6 @@ RUMP_COMPONENT(RUMP_COMPONENT_NET)
 
 	domain_attach(&arpdomain);
 	domain_attach(&inetdomain);
-
-	rump_netisr_register(NETISR_ARP, arpintr);
 }
 
 int carpattach(int);

Reply via email to