Module Name: src Committed By: thorpej Date: Sun Aug 21 14:13:00 UTC 2022
Modified Files: src/sys/dev/pci: if_jme.c Log Message: jme_encap(): Fix up some botched formatting, and don't use (*m_head) all over the place (just assign m = *m_head earlier). NFCI. To generate a diff of this commit: cvs rdiff -u -r1.51 -r1.52 src/sys/dev/pci/if_jme.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/dev/pci/if_jme.c diff -u src/sys/dev/pci/if_jme.c:1.51 src/sys/dev/pci/if_jme.c:1.52 --- src/sys/dev/pci/if_jme.c:1.51 Wed Mar 16 10:08:02 2022 +++ src/sys/dev/pci/if_jme.c Sun Aug 21 14:12:59 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: if_jme.c,v 1.51 2022/03/16 10:08:02 andvar Exp $ */ +/* $NetBSD: if_jme.c,v 1.52 2022/08/21 14:12:59 thorpej Exp $ */ /* * Copyright (c) 2008 Manuel Bouyer. All rights reserved. @@ -58,7 +58,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_jme.c,v 1.51 2022/03/16 10:08:02 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_jme.c,v 1.52 2022/08/21 14:12:59 thorpej Exp $"); #include <sys/param.h> @@ -1320,15 +1320,14 @@ jme_ifioctl(struct ifnet *ifp, unsigned } static int -jme_encap(struct jme_softc *sc, struct mbuf **m_head) +jme_encap(struct jme_softc *sc, struct mbuf **m_headp) { struct jme_desc *desc; - struct mbuf *m; + struct mbuf * const m = *m_headp; int error, i, prod, headdsc, nsegs; uint32_t cflags, tso_segsz; - if (((*m_head)->m_pkthdr.csum_flags & (M_CSUM_TSOv4 | M_CSUM_TSOv6)) - != 0) { + if ((m->m_pkthdr.csum_flags & (M_CSUM_TSOv4 | M_CSUM_TSOv6)) != 0) { /* * Due to the adherence to NDIS specification JMC250 * assumes upper stack computed TCP pseudo checksum @@ -1337,10 +1336,10 @@ jme_encap(struct jme_softc *sc, struct m * pseudo checksum for JMC250. Hopefully this wouldn't * be much burden on modern CPUs. */ - bool v4 = ((*m_head)->m_pkthdr.csum_flags & M_CSUM_TSOv4) != 0; + bool v4 = (m->m_pkthdr.csum_flags & M_CSUM_TSOv4) != 0; int iphl = v4 ? - M_CSUM_DATA_IPv4_IPHL((*m_head)->m_pkthdr.csum_data) : - M_CSUM_DATA_IPv6_IPHL((*m_head)->m_pkthdr.csum_data); + M_CSUM_DATA_IPv4_IPHL(m->m_pkthdr.csum_data) : + M_CSUM_DATA_IPv6_IPHL(m->m_pkthdr.csum_data); /* * note: we support vlan offloading, so we should never have * a ETHERTYPE_VLAN packet here - so ETHER_HDR_LEN is always @@ -1348,90 +1347,88 @@ jme_encap(struct jme_softc *sc, struct m */ int hlen = ETHER_HDR_LEN + iphl; - if (__predict_false((*m_head)->m_len < + if (__predict_false(m->m_len < (hlen + sizeof(struct tcphdr)))) { - /* - * TCP/IP headers are not in the first mbuf; we need - * to do this the slow and painful way. Let's just - * hope this doesn't happen very often. - */ - struct tcphdr th; - - m_copydata((*m_head), hlen, sizeof(th), &th); - if (v4) { - struct ip ip; - - m_copydata((*m_head), ETHER_HDR_LEN, - sizeof(ip), &ip); - ip.ip_len = 0; - m_copyback((*m_head), - ETHER_HDR_LEN + offsetof(struct ip, ip_len), - sizeof(ip.ip_len), &ip.ip_len); - th.th_sum = in_cksum_phdr(ip.ip_src.s_addr, - ip.ip_dst.s_addr, htons(IPPROTO_TCP)); - } else { + /* + * + * TCP/IP headers are not in the first mbuf; we need + * to do this the slow and painful way. Let's just + * hope this doesn't happen very often. + */ + struct tcphdr th; + + m_copydata(m, hlen, sizeof(th), &th); + if (v4) { + struct ip ip; + + m_copydata(m, ETHER_HDR_LEN, sizeof(ip), &ip); + ip.ip_len = 0; + m_copyback(m, + ETHER_HDR_LEN + offsetof(struct ip, ip_len), + sizeof(ip.ip_len), &ip.ip_len); + th.th_sum = in_cksum_phdr(ip.ip_src.s_addr, + ip.ip_dst.s_addr, htons(IPPROTO_TCP)); + } else { #if INET6 - struct ip6_hdr ip6; + struct ip6_hdr ip6; - m_copydata((*m_head), ETHER_HDR_LEN, + m_copydata(m, ETHER_HDR_LEN, sizeof(ip6), &ip6); - ip6.ip6_plen = 0; - m_copyback((*m_head), ETHER_HDR_LEN + + ip6.ip6_plen = 0; + m_copyback(m, ETHER_HDR_LEN + offsetof(struct ip6_hdr, ip6_plen), - sizeof(ip6.ip6_plen), &ip6.ip6_plen); - th.th_sum = in6_cksum_phdr(&ip6.ip6_src, - &ip6.ip6_dst, 0, htonl(IPPROTO_TCP)); + sizeof(ip6.ip6_plen), &ip6.ip6_plen); + th.th_sum = in6_cksum_phdr(&ip6.ip6_src, + &ip6.ip6_dst, 0, htonl(IPPROTO_TCP)); #endif /* INET6 */ - } - m_copyback((*m_head), - hlen + offsetof(struct tcphdr, th_sum), - sizeof(th.th_sum), &th.th_sum); + } + m_copyback(m, hlen + offsetof(struct tcphdr, th_sum), + sizeof(th.th_sum), &th.th_sum); - hlen += th.th_off << 2; + hlen += th.th_off << 2; } else { - /* - * TCP/IP headers are in the first mbuf; we can do - * this the easy way. - */ - struct tcphdr *th; - - if (v4) { - struct ip *ip = - (void *)(mtod((*m_head), char *) + - ETHER_HDR_LEN); - th = (void *)(mtod((*m_head), char *) + hlen); - - ip->ip_len = 0; - th->th_sum = in_cksum_phdr(ip->ip_src.s_addr, - ip->ip_dst.s_addr, htons(IPPROTO_TCP)); - } else { + /* + * TCP/IP headers are in the first mbuf; we can do + * this the easy way. + */ + struct tcphdr *th; + + if (v4) { + struct ip *ip = + (void *)(mtod(m, char *) + + ETHER_HDR_LEN); + th = (void *)(mtod(m, char *) + hlen); + + ip->ip_len = 0; + th->th_sum = in_cksum_phdr(ip->ip_src.s_addr, + ip->ip_dst.s_addr, htons(IPPROTO_TCP)); + } else { #if INET6 - struct ip6_hdr *ip6 = - (void *)(mtod((*m_head), char *) + + struct ip6_hdr *ip6 = + (void *)(mtod(m, char *) + ETHER_HDR_LEN); - th = (void *)(mtod((*m_head), char *) + hlen); + th = (void *)(mtod(m, char *) + hlen); - ip6->ip6_plen = 0; - th->th_sum = in6_cksum_phdr(&ip6->ip6_src, - &ip6->ip6_dst, 0, htonl(IPPROTO_TCP)); + ip6->ip6_plen = 0; + th->th_sum = in6_cksum_phdr(&ip6->ip6_src, + &ip6->ip6_dst, 0, htonl(IPPROTO_TCP)); #endif /* INET6 */ - } + } hlen += th->th_off << 2; } - } prod = sc->jme_tx_prod; error = bus_dmamap_load_mbuf(sc->jme_dmatag, sc->jme_txmbufm[prod], - *m_head, BUS_DMA_NOWAIT | BUS_DMA_WRITE); + m, BUS_DMA_NOWAIT | BUS_DMA_WRITE); if (error) { if (error == EFBIG) { log(LOG_ERR, "%s: Tx packet consumes too many " "DMA segments, dropping...\n", device_xname(sc->jme_dev)); - m_freem(*m_head); - *m_head = NULL; + m_freem(m); + *m_headp = NULL; } return (error); } @@ -1451,7 +1448,6 @@ jme_encap(struct jme_softc *sc, struct m bus_dmamap_sync(sc->jme_dmatag, sc->jme_txmbufm[prod], 0, sc->jme_txmbufm[prod]->dm_mapsize, BUS_DMASYNC_PREWRITE); - m = *m_head; cflags = 0; tso_segsz = 0; /* Configure checksum offload and TSO. */