svn commit: r323075 - stable/10/sys/dev/qlnx/qlnxe
David C Somayajulu
davidcs at FreeBSD.org
Thu Aug 31 21:56:19 UTC 2017
Author: davidcs
Date: Thu Aug 31 21:56:17 2017
New Revision: 323075
URL: https://svnweb.freebsd.org/changeset/base/323075
Log:
MFC r322852
Fix qlnx_tso_check() so that every window of
(ETH_TX_LSO_WINDOW_BDS_NUM - nbds_in_hdr) has atleast
ETH_TX_LSO_WINDOW_MIN_LEN bytes
Approved by:re(marius)
Modified:
stable/10/sys/dev/qlnx/qlnxe/qlnx_os.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/dev/qlnx/qlnxe/qlnx_os.c
==============================================================================
--- stable/10/sys/dev/qlnx/qlnxe/qlnx_os.c Thu Aug 31 21:37:22 2017 (r323074)
+++ stable/10/sys/dev/qlnx/qlnxe/qlnx_os.c Thu Aug 31 21:56:17 2017 (r323075)
@@ -2921,25 +2921,35 @@ qlnx_tso_check(struct qlnx_fastpath *fp, bus_dma_segme
{
int i;
uint32_t sum, nbds_in_hdr = 1;
- bus_dma_segment_t *t_segs = segs;
+ uint32_t window;
+ bus_dma_segment_t *s_seg;
- /* count the number of segments spanned by TCP header */
+ /* If the header spans mulitple segments, skip those segments */
+ if (nsegs < ETH_TX_LSO_WINDOW_BDS_NUM)
+ return (0);
+
i = 0;
- while ((i < nsegs) && (offset > t_segs->ds_len)) {
- nbds_in_hdr++;
- offset = offset - t_segs->ds_len;
- t_segs++;
+
+ while ((i < nsegs) && (offset >= segs->ds_len)) {
+ offset = offset - segs->ds_len;
+ segs++;
i++;
+ nbds_in_hdr++;
}
- while (nsegs >= QLNX_MAX_SEGMENTS_NON_TSO) {
+ window = ETH_TX_LSO_WINDOW_BDS_NUM - nbds_in_hdr;
+ nsegs = nsegs - i;
+
+ while (nsegs >= window) {
+
sum = 0;
+ s_seg = segs;
- for (i = 0; i < (ETH_TX_LSO_WINDOW_BDS_NUM - nbds_in_hdr); i++){
- sum += segs->ds_len;
- segs++;
+ for (i = 0; i < window; i++){
+ sum += s_seg->ds_len;
+ s_seg++;
}
if (sum < ETH_TX_LSO_WINDOW_MIN_LEN) {
@@ -2947,7 +2957,8 @@ qlnx_tso_check(struct qlnx_fastpath *fp, bus_dma_segme
return (-1);
}
- nsegs -= QLNX_MAX_SEGMENTS_NON_TSO;
+ nsegs = nsegs - 1;
+ segs++;
}
return (0);
More information about the svn-src-all
mailing list