diff options
author | jlemon <jlemon@FreeBSD.org> | 2003-03-04 23:19:55 +0000 |
---|---|---|
committer | jlemon <jlemon@FreeBSD.org> | 2003-03-04 23:19:55 +0000 |
commit | 04e28d5a816573d1300b4591306a8785d3ace29c (patch) | |
tree | f304f726e8973253d3e8a87e56119fec0276a61c /sys/net/if_arcsubr.c | |
parent | 45fcac94f475f1d18d50dde4f72eb51ee4abddcc (diff) | |
download | FreeBSD-src-04e28d5a816573d1300b4591306a8785d3ace29c.zip FreeBSD-src-04e28d5a816573d1300b4591306a8785d3ace29c.tar.gz |
Update netisr handling; Each SWI now registers its queue, and all queue
drain routines are done by swi_net, which allows for better queue control
at some future point. Packets may also be directly dispatched to a netisr
instead of queued, this may be of interest at some installations, but
currently defaults to off.
Reviewed by: hsu, silby, jayanth, sam
Sponsored by: DARPA, NAI Labs
Diffstat (limited to 'sys/net/if_arcsubr.c')
-rw-r--r-- | sys/net/if_arcsubr.c | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/sys/net/if_arcsubr.c b/sys/net/if_arcsubr.c index dda353a..a2d8a4d 100644 --- a/sys/net/if_arcsubr.c +++ b/sys/net/if_arcsubr.c @@ -507,7 +507,7 @@ arc_input(ifp, m) struct mbuf *m; { struct arc_header *ah; - struct ifqueue *inq; + int isr; u_int8_t atype; if ((ifp->if_flags & IFF_UP) == 0) { @@ -545,16 +545,14 @@ arc_input(ifp, m) m_adj(m, ARC_HDRNEWLEN); if (ipflow_fastforward(m)) return; - schednetisr(NETISR_IP); - inq = &ipintrq; + isr = NETISR_IP; break; case ARCTYPE_IP_OLD: m_adj(m, ARC_HDRLEN); if (ipflow_fastforward(m)) return; - schednetisr(NETISR_IP); - inq = &ipintrq; + isr = NETISR_IP; break; case ARCTYPE_ARP: @@ -564,8 +562,7 @@ arc_input(ifp, m) return; } m_adj(m, ARC_HDRNEWLEN); - schednetisr(NETISR_ARP); - inq = &arpintrq; + isr = NETISR_ARP; #ifdef ARCNET_ALLOW_BROKEN_ARP mtod(m, struct arphdr *)->ar_pro = htons(ETHERTYPE_IP); #endif @@ -578,8 +575,7 @@ arc_input(ifp, m) return; } m_adj(m, ARC_HDRLEN); - schednetisr(NETISR_ARP); - inq = &arpintrq; + isr = NETISR_ARP; #ifdef ARCNET_ALLOW_BROKEN_ARP mtod(m, struct arphdr *)->ar_pro = htons(ETHERTYPE_IP); #endif @@ -588,23 +584,20 @@ arc_input(ifp, m) #ifdef INET6 case ARCTYPE_INET6: m_adj(m, ARC_HDRNEWLEN); - schednetisr(NETISR_IPV6); - inq = &ip6intrq; + isr = NETISR_IPV6; break; #endif #ifdef IPX case ARCTYPE_IPX: m_adj(m, ARC_HDRNEWLEN); - schednetisr(NETISR_IPX); - inq = &ipxintrq; + isr = NETISR_IPX; break; #endif default: m_freem(m); return; } - - IF_HANDOFF(inq, m, NULL); + netisr_dispatch(isr, m); } /* |