Module Name: src Committed By: thorpej Date: Sat Sep 3 02:07:33 UTC 2022
Modified Files: src/sys/net: netisr_dispatch.h src/sys/netcan: can.c can_proto.c can_var.h src/sys/rump/net/lib/libnetcan: netcan_component.c Log Message: Convert CAN from a legacy netisr to pktqueue. To generate a diff of this commit: cvs rdiff -u -r1.22 -r1.23 src/sys/net/netisr_dispatch.h cvs rdiff -u -r1.11 -r1.12 src/sys/netcan/can.c cvs rdiff -u -r1.2 -r1.3 src/sys/netcan/can_proto.c src/sys/netcan/can_var.h cvs rdiff -u -r1.3 -r1.4 src/sys/rump/net/lib/libnetcan/netcan_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/netisr_dispatch.h diff -u src/sys/net/netisr_dispatch.h:1.22 src/sys/net/netisr_dispatch.h:1.23 --- src/sys/net/netisr_dispatch.h:1.22 Sat Sep 3 01:48:22 2022 +++ src/sys/net/netisr_dispatch.h Sat Sep 3 02:07:32 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: netisr_dispatch.h,v 1.22 2022/09/03 01:48:22 thorpej Exp $ */ +/* $NetBSD: netisr_dispatch.h,v 1.23 2022/09/03 02:07:32 thorpej Exp $ */ #ifndef _NET_NETISR_DISPATCH_H_ #define _NET_NETISR_DISPATCH_H_ @@ -30,8 +30,5 @@ #ifdef MPLS DONETISR(NETISR_MPLS,mplsintr); #endif -#ifdef CAN - DONETISR(NETISR_CAN,canintr); -#endif #endif /* !_NET_NETISR_DISPATCH_H_ */ Index: src/sys/netcan/can.c diff -u src/sys/netcan/can.c:1.11 src/sys/netcan/can.c:1.12 --- src/sys/netcan/can.c:1.11 Fri Dec 31 14:24:51 2021 +++ src/sys/netcan/can.c Sat Sep 3 02:07:32 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: can.c,v 1.11 2021/12/31 14:24:51 riastradh Exp $ */ +/* $NetBSD: can.c,v 1.12 2022/09/03 02:07:32 thorpej Exp $ */ /*- * Copyright (c) 2003, 2017 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: can.c,v 1.11 2021/12/31 14:24:51 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: can.c,v 1.12 2022/09/03 02:07:32 thorpej Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -46,7 +46,7 @@ __KERNEL_RCSID(0, "$NetBSD: can.c,v 1.11 #include <net/if.h> #include <net/if_types.h> -#include <net/netisr.h> +#include <net/pktqueue.h> #include <net/route.h> #include <net/bpf.h> @@ -61,7 +61,7 @@ struct canpcb canrawpcb; struct canpcbtable cbtable; -struct ifqueue canintrq; +pktqueue_t * can_pktq __read_mostly; int canqmaxlen = IFQ_MAXLEN; int can_copy_output = 0; @@ -86,11 +86,14 @@ static int can_output(struct mbuf *, str static int can_control(struct socket *, u_long, void *, struct ifnet *); +static void canintr(void *); + void can_init(void) { - canintrq.ifq_maxlen = canqmaxlen; - IFQ_LOCK_INIT(&canintrq); + can_pktq = pktq_create(canqmaxlen, canintr, NULL); + KASSERT(can_pktq != NULL); + can_pcbinit(&cbtable, canhashsize, canhashsize); } @@ -290,30 +293,21 @@ can_mbuf_tag_clean(struct mbuf *m) void can_input(struct ifnet *ifp, struct mbuf *m) { - struct ifqueue *inq; - if ((ifp->if_flags & IFF_UP) == 0) { m_freem(m); return; } - inq = &canintrq; - - IFQ_LOCK(inq); - if (IF_QFULL(inq)) { - IF_DROP(inq); - IFQ_UNLOCK(inq); + const int pktlen = m->m_pkthdr.len; + if (__predict_false(!pktq_enqueue(can_pktq, m, 0))) { m_freem(m); } else { - IF_ENQUEUE(inq, m); - IFQ_UNLOCK(inq); - if_statadd2(ifp, if_ipackets, 1, if_ibytes, m->m_pkthdr.len); - schednetisr(NETISR_CAN); + if_statadd2(ifp, if_ipackets, 1, if_ibytes, pktlen); } } -void -canintr(void) +static void +canintr(void *arg __unused) { int rcv_ifindex; struct mbuf *m; @@ -324,14 +318,7 @@ canintr(void) struct canpcb *sender_canp; mutex_enter(softnet_lock); - for (;;) { - IFQ_LOCK(&canintrq); - IF_DEQUEUE(&canintrq, m); - IFQ_UNLOCK(&canintrq); - - if (m == NULL) /* no more queued packets */ - break; - + while ((m = pktq_dequeue(can_pktq)) != NULL) { #if 0 m_claim(m, &can_rx_mowner); #endif Index: src/sys/netcan/can_proto.c diff -u src/sys/netcan/can_proto.c:1.2 src/sys/netcan/can_proto.c:1.3 --- src/sys/netcan/can_proto.c:1.2 Sat May 27 21:02:56 2017 +++ src/sys/netcan/can_proto.c Sat Sep 3 02:07:32 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: can_proto.c,v 1.2 2017/05/27 21:02:56 bouyer Exp $ */ +/* $NetBSD: can_proto.c,v 1.3 2022/09/03 02:07:32 thorpej Exp $ */ /*- * Copyright (c) 2003, 2017 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: can_proto.c,v 1.2 2017/05/27 21:02:56 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: can_proto.c,v 1.3 2022/09/03 02:07:32 thorpej Exp $"); #include <sys/param.h> #include <sys/socket.h> @@ -68,7 +68,6 @@ struct domain candomain = { .dom_externalize = NULL, .dom_dispose = NULL, .dom_protosw = cansw, .dom_protoswNPROTOSW = &cansw[__arraycount(cansw)], - .dom_ifqueues = { &canintrq, NULL }, .dom_link = { NULL }, .dom_mowner = MOWNER_INIT("",""), .dom_sa_cmpofs = offsetof(struct sockaddr_can, can_ifindex), Index: src/sys/netcan/can_var.h diff -u src/sys/netcan/can_var.h:1.2 src/sys/netcan/can_var.h:1.3 --- src/sys/netcan/can_var.h:1.2 Sat May 27 21:02:56 2017 +++ src/sys/netcan/can_var.h Sat Sep 3 02:07:32 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: can_var.h,v 1.2 2017/05/27 21:02:56 bouyer Exp $ */ +/* $NetBSD: can_var.h,v 1.3 2022/09/03 02:07:32 thorpej Exp $ */ /*- * Copyright (c) 2003, 2017 The NetBSD Foundation, Inc. @@ -54,7 +54,6 @@ struct canif_softc { uint32_t csc_linkmodes; }; -extern struct ifqueue canintrq; extern struct domain candomain; extern const struct pr_usrreqs can_usrreqs; @@ -67,7 +66,6 @@ void can_input(struct ifnet *, struct mb void *can_ctlinput(int, struct sockaddr *, void *); int can_ctloutput(int, struct socket *, struct sockopt *); void can_init(void); -void canintr(void); void can_bpf_mtap(struct ifnet *, struct mbuf *, bool); #endif Index: src/sys/rump/net/lib/libnetcan/netcan_component.c diff -u src/sys/rump/net/lib/libnetcan/netcan_component.c:1.3 src/sys/rump/net/lib/libnetcan/netcan_component.c:1.4 --- src/sys/rump/net/lib/libnetcan/netcan_component.c:1.3 Tue Jul 21 18:38:18 2020 +++ src/sys/rump/net/lib/libnetcan/netcan_component.c Sat Sep 3 02:07:33 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: netcan_component.c,v 1.3 2020/07/21 18:38:18 pgoyette Exp $ */ +/* $NetBSD: netcan_component.c,v 1.4 2022/09/03 02:07:33 thorpej Exp $ */ /* * Copyright (c) 2010 Antti Kantee. All Rights Reserved. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netcan_component.c,v 1.3 2020/07/21 18:38:18 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netcan_component.c,v 1.4 2022/09/03 02:07:33 thorpej Exp $"); #include <sys/param.h> #include <sys/domain.h> @@ -42,5 +42,4 @@ RUMP_COMPONENT(RUMP_COMPONENT_NET) extern struct domain candomain; domain_attach(&candomain); - rump_netisr_register(NETISR_CAN, canintr); }