git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
compress/qat: enable compression on GEN3
[dpdk.git]
/
drivers
/
net
/
vmxnet3
/
vmxnet3_rxtx.c
diff --git
a/drivers/net/vmxnet3/vmxnet3_rxtx.c
b/drivers/net/vmxnet3/vmxnet3_rxtx.c
index
dd99684
..
5cf53d4
100644
(file)
--- a/
drivers/net/vmxnet3/vmxnet3_rxtx.c
+++ b/
drivers/net/vmxnet3/vmxnet3_rxtx.c
@@
-32,7
+32,7
@@
#include <rte_malloc.h>
#include <rte_mbuf.h>
#include <rte_ether.h>
#include <rte_malloc.h>
#include <rte_mbuf.h>
#include <rte_ether.h>
-#include <
rte_
ethdev_driver.h>
+#include <ethdev_driver.h>
#include <rte_prefetch.h>
#include <rte_ip.h>
#include <rte_udp.h>
#include <rte_prefetch.h>
#include <rte_ip.h>
#include <rte_udp.h>
@@
-674,6
+674,7
@@
vmxnet3_guess_mss(struct vmxnet3_hw *hw, const Vmxnet3_RxCompDesc *rcd,
struct rte_ipv6_hdr *ipv6_hdr;
struct rte_tcp_hdr *tcp_hdr;
char *ptr;
struct rte_ipv6_hdr *ipv6_hdr;
struct rte_tcp_hdr *tcp_hdr;
char *ptr;
+ uint8_t segs;
RTE_ASSERT(rcd->tcp);
RTE_ASSERT(rcd->tcp);
@@
-687,8
+688,7
@@
vmxnet3_guess_mss(struct vmxnet3_hw *hw, const Vmxnet3_RxCompDesc *rcd,
- sizeof(struct rte_tcp_hdr);
ipv4_hdr = (struct rte_ipv4_hdr *)(ptr + hlen);
- sizeof(struct rte_tcp_hdr);
ipv4_hdr = (struct rte_ipv4_hdr *)(ptr + hlen);
- hlen += (ipv4_hdr->version_ihl & RTE_IPV4_HDR_IHL_MASK) *
- RTE_IPV4_IHL_MULTIPLIER;
+ hlen += rte_ipv4_hdr_len(ipv4_hdr);
} else if (rcd->v6) {
if (unlikely(slen < hlen + sizeof(struct rte_ipv6_hdr)))
return hw->mtu - sizeof(struct rte_ipv6_hdr) -
} else if (rcd->v6) {
if (unlikely(slen < hlen + sizeof(struct rte_ipv6_hdr)))
return hw->mtu - sizeof(struct rte_ipv6_hdr) -
@@
-711,9
+711,9
@@
vmxnet3_guess_mss(struct vmxnet3_hw *hw, const Vmxnet3_RxCompDesc *rcd,
tcp_hdr = (struct rte_tcp_hdr *)(ptr + hlen);
hlen += (tcp_hdr->data_off & 0xf0) >> 2;
tcp_hdr = (struct rte_tcp_hdr *)(ptr + hlen);
hlen += (tcp_hdr->data_off & 0xf0) >> 2;
- if (rxm->udata64 > 1)
- return (rte_pktmbuf_pkt_len(rxm) - hlen +
-
rxm->udata64 - 1) / rxm->udata64
;
+ segs = *vmxnet3_segs_dynfield(rxm);
+ if (segs > 1)
+
return (rte_pktmbuf_pkt_len(rxm) - hlen + segs - 1) / segs
;
else
return hw->mtu - hlen + sizeof(struct rte_ether_hdr);
}
else
return hw->mtu - hlen + sizeof(struct rte_ether_hdr);
}
@@
-738,7
+738,7
@@
vmxnet3_rx_offload(struct vmxnet3_hw *hw, const Vmxnet3_RxCompDesc *rcd,
(const Vmxnet3_RxCompDescExt *)rcd;
rxm->tso_segsz = rcde->mss;
(const Vmxnet3_RxCompDescExt *)rcd;
rxm->tso_segsz = rcde->mss;
-
rxm->udata64
= rcde->segCnt;
+
*vmxnet3_segs_dynfield(rxm)
= rcde->segCnt;
ol_flags |= PKT_RX_LRO;
}
} else { /* Offloads set in eop */
ol_flags |= PKT_RX_LRO;
}
} else { /* Offloads set in eop */
@@
-950,13
+950,17
@@
vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
RTE_ASSERT(rxd->btype == VMXNET3_RXD_BTYPE_BODY);
RTE_ASSERT(rxd->btype == VMXNET3_RXD_BTYPE_BODY);
- if (
rxm->data_len
) {
+ if (
likely(start && rxm->data_len > 0)
) {
start->pkt_len += rxm->data_len;
start->nb_segs++;
rxq->last_seg->next = rxm;
rxq->last_seg = rxm;
} else {
start->pkt_len += rxm->data_len;
start->nb_segs++;
rxq->last_seg->next = rxm;
rxq->last_seg = rxm;
} else {
+ PMD_RX_LOG(ERR, "Error received empty or out of order frame.");
+ rxq->stats.drop_total++;
+ rxq->stats.drop_err++;
+
rte_pktmbuf_free_seg(rxm);
}
}
rte_pktmbuf_free_seg(rxm);
}
}