From owner-dev-commits-src-branches@freebsd.org Thu Feb 25 01:40:39 2021 Return-Path: Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 350845524FA; Thu, 25 Feb 2021 01:40:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4DmFqC14T8z3DbZ; Thu, 25 Feb 2021 01:40:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 17C8369FD; Thu, 25 Feb 2021 01:40:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 11P1edpT055879; Thu, 25 Feb 2021 01:40:39 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 11P1edYs055878; Thu, 25 Feb 2021 01:40:39 GMT (envelope-from git) Date: Thu, 25 Feb 2021 01:40:39 GMT Message-Id: <202102250140.11P1edYs055878@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Alexander Motin Subject: git: 1f3cff343b45 - stable/13 - cxgb(4): Rework my commit 9dc7c250. MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mav X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 1f3cff343b451d9fc9c10f4f8c4b416ed5eae23f Auto-Submitted: auto-generated X-BeenThere: dev-commits-src-branches@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commits to the stable branches of the FreeBSD src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 25 Feb 2021 01:40:39 -0000 The branch stable/13 has been updated by mav: URL: https://cgit.FreeBSD.org/src/commit/?id=1f3cff343b451d9fc9c10f4f8c4b416ed5eae23f commit 1f3cff343b451d9fc9c10f4f8c4b416ed5eae23f Author: Alexander Motin AuthorDate: 2021-02-22 22:21:05 +0000 Commit: Alexander Motin CommitDate: 2021-02-25 01:40:29 +0000 cxgb(4): Rework my commit 9dc7c250. The previous implementation was reported to try to coalesce packets in situations when it should not, that resulted in assertion later. This implementation better checks the first packet of the chain for the coallescing elligibility. (cherry picked from commit d510bf133d045d6c83742aeda6949bec150f6cbf) --- sys/dev/cxgb/cxgb_sge.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/sys/dev/cxgb/cxgb_sge.c b/sys/dev/cxgb/cxgb_sge.c index 491d1a751f4a..f13d2f03180c 100644 --- a/sys/dev/cxgb/cxgb_sge.c +++ b/sys/dev/cxgb/cxgb_sge.c @@ -312,20 +312,22 @@ set_wr_hdr(struct work_request_hdr *wrp, uint32_t wr_hi, uint32_t wr_lo) struct coalesce_info { int count; int nbytes; + int noncoal; }; static int coalesce_check(struct mbuf *m, void *arg) { struct coalesce_info *ci = arg; - int *count = &ci->count; - int *nbytes = &ci->nbytes; - - if ((*nbytes == 0) || ((*nbytes + m->m_len <= 10500) && - (*count < 7) && (m->m_next == NULL) && - ((mtod(m, vm_offset_t) & PAGE_MASK) + m->m_len <= PAGE_SIZE))) { - *count += 1; - *nbytes += m->m_len; + + if ((m->m_next != NULL) || + ((mtod(m, vm_offset_t) & PAGE_MASK) + m->m_len > PAGE_SIZE)) + ci->noncoal = 1; + + if ((ci->count == 0) || (ci->noncoal == 0 && (ci->count < 7) && + (ci->nbytes + m->m_len <= 10500))) { + ci->count++; + ci->nbytes += m->m_len; return (1); } return (0); @@ -342,7 +344,7 @@ cxgb_dequeue(struct sge_qset *qs) return TXQ_RING_DEQUEUE(qs); m_head = m_tail = NULL; - ci.count = ci.nbytes = 0; + ci.count = ci.nbytes = ci.noncoal = 0; do { m = TXQ_RING_DEQUEUE_COND(qs, coalesce_check, &ci); if (m_head == NULL) {