From patchwork Wed Oct 18 17:36:02 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Manlunas, Felix" X-Patchwork-Id: 827774 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="LvuFlkt3"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yHK3d1Kbmz9sDB for ; Thu, 19 Oct 2017 04:36:13 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751141AbdJRRgK (ORCPT ); Wed, 18 Oct 2017 13:36:10 -0400 Received: from mail-bn3nam01on0083.outbound.protection.outlook.com ([104.47.33.83]:57291 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750954AbdJRRgJ (ORCPT ); Wed, 18 Oct 2017 13:36:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=etTdgAscWLCqcLgfn0IOQDic5XF1WI3pEDh7HB/lv0I=; b=LvuFlkt3aUw+BC+DFKH2wKd3zjDTsp6N8pZJAuyfqGib96hjJ/SiuG+wpe4fyBmbpmYAbe01BdOYp9UTI1mcufrs2aVVqFhLFEahPNvmgLJrYIVjFwTdEfwEja/LPuvznYtVeJFNM95md7p6q0pdrlsM0wmYcMkUl+JOynpmImI= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Felix.Manlunas@cavium.com; Received: from localhost (50.233.148.156) by DM5PR07MB3178.namprd07.prod.outlook.com (10.172.85.140) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Wed, 18 Oct 2017 17:36:07 +0000 Date: Wed, 18 Oct 2017 10:36:02 -0700 From: Felix Manlunas To: davem@davemloft.net Cc: netdev@vger.kernel.org, raghu.vatsavayi@cavium.com, derek.chickles@cavium.com, satananda.burla@cavium.com Subject: [PATCH net-next] liquidio: xmit_more support Message-ID: <20171018173602.GA14082@felix-thinkpad.cavium.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.6.1 (2016-04-27) X-Originating-IP: [50.233.148.156] X-ClientProxiedBy: MWHPR13CA0003.namprd13.prod.outlook.com (10.169.208.13) To DM5PR07MB3178.namprd07.prod.outlook.com (10.172.85.140) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1a7d6564-12f6-4168-6112-08d5164eb6c3 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:DM5PR07MB3178; X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3178; 3:HXEhxhCT2XGnD4lQRmstGpDIac+Acx5uyexfxx6Qg9Rz8+s06gF39IZdQXqW6oV00mbbBFBSgLl+FJHE+LOEhonjVuCt43j4vy2TIWhe7yTyHuVCMT27LXi+3PoUUFsVl7PQCkOq2rozPdWWXvSjIpPogXydxHkhM225OSoI50NzuGj88pH8Eo11Sikh/ntwp7e1Xw3u9qf/pNJiYYqvw91VzNnnI2ja126QZ0q+ERVD9ca6JP+GcFpDMZfmSKCV; 25:78lXO/3y1hGgmL8UMqgW3bdnKlIfDgL8NdW/lRd2W3yPEi2SITM53F7q6hE4nXfOqF8fucUMqIfLS+XbDqjdiPpBosw+JHf9hNRBkdYUaEyXJGpDKNfOOmJsxVeKIuoErH86eZ6y5OrllKQhwEjr6GKBXH/fLLC8/2zf9o1ZpKrI2wTq+S6e0RPraK+OOZ4sS0pgleJoLw/sA26RzUzCgB5+vbXNuLUGysLbaLE19cECHt+KY3ftT3hX7rq9EUMp7RSZyT8XrCs/aKAtFbs8Prr6rJFnfk/cHgp80/ix0IVVXeENzySVIC4UZX009lPTmxRrC+z2ofbkzImHkYnw/w==; 31:/ltKTs33fp//+I+lNNAvw7tMz0xexq8o1KbonpoHoy02BlSgq4DdEDM3RcAIyKH1pFIQc8s3pEsXsLg5c+Ic/1jayFgIZX5qxkV74SagNCRFwtesntfzzNYKrtJ0hpL+PaQTrR6kpEXU0kbAN/FLTQUH1NjUS8cSaSMIhxx3cOETVpxyJZod3xgmkgoc0hjEIImKQ++br9EtNGxa5K9vOFFYOwFH4RHmcyXEIm7AHiE= X-MS-TrafficTypeDiagnostic: DM5PR07MB3178: X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3178; 20:gJ9tKIPsnTEJf2NJbzH9BRe5SF6kPTEzDRuht339KzHO269HXX949EnsDQ30fnaf4hXBMMYSuRVIQpGJn9iI8k+xdS+f6nz61Q3JA9pNYNZUXsFtKZam7NX01FVYpscw2x3GlSXzPH+BBpw7mxgLX9G4hXzzmR3ZqYf+k3nouUbgDebpA0OdF1251iJIbHRNHPMjxKAY6bEfVNwhRuNRvnbMIpSF108eefvrwkzCZa5b0Mgyg7Ev0bZckEIBvK18avLdlIQzsEMKEn8usjfqlkLOkbed+z9x1w6qDgGEq+NzjFpb1eUSaMQygxAhYhw5dS5ZvHHXPmNz83jHwSq76PFPMRxJvmKWpxg1nKqfBQ7cP1I5+lYMk9P7VjM82GtD4/nt3J7+TH8mYNYhHjfPAjRfcFuJ4lAS+0M0oL++/HIkxAlRJI+FrPiNriv7eyVsoU+1beBwToImmktAY3W4ZBlwxOxpPvgQtIrCFQvkO6JKOEBwedrm0bDMfbj/n3yb; 4:j346V4RXVIMQQwUorQspGi/L8toVK57eVxplGOensisG212kpJJv95My3p9qUTwKAvuKLmkNAvC1NNTyWgwAmUrZxKOTbkWMz3buFC/u6cs7jH7YCd7o9UJNeKBl0x1YNJPryHr1c9EaUyipePF58ICQ6McNWrLk8OdvQzRqSGbV/kyOIZnHKcwfyWEmsZdqzyt00VsMJmc+52fA6k+DBkwn/8xmN9aAdIgF5WhnEoVulmvHHl8YYf39kleUpKCw X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(10201501046)(100000703101)(100105400095)(93006095)(93001095)(3002001)(6041248)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123558100)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DM5PR07MB3178; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DM5PR07MB3178; X-Forefront-PRVS: 0464DBBBC4 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(6069001)(346002)(376002)(199003)(189002)(72206003)(16586007)(86362001)(316002)(97736004)(6486002)(189998001)(2906002)(575784001)(53936002)(58126008)(6916009)(6116002)(1076002)(3846002)(5660300001)(6666003)(305945005)(7736002)(33656002)(23726003)(50466002)(16526018)(81166006)(81156014)(68736007)(47776003)(478600001)(8676002)(76506005)(66066001)(8936002)(101416001)(83506001)(25786009)(2361001)(106356001)(107886003)(54356999)(50986999)(105586002)(4326008)(2351001)(6496005)(18370500001); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR07MB3178; H:localhost; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3178; 23:XhhpeXzfSveDmhTZdb9iewLuvWkByPWzPhch0zA0g1YLBGGClrR23agHG5CyBBq0HmT7K/sy6t027SZR1JsTGH3HKrK/ipSydFZNs4ii6cCbMzy/kHyPKWJXQB2M2iEVLkOEZi5KK8hc8tINkMrScHRZEUQT6va8ZpB3pdJrkdBSd9EYlipdKbbx9QqgoDOirmCAi/P6GR4OV+waLdXIJwEqHuO1MF2QLt8L2oS3WkudIsDdTz3WbPUB9mlzzTLCPS+UZrKPy5TSXV5/4RYvj0xpXV9CV+ELytKMjbbRruh0+ZI4fPtE2y8fs6H1tk62rk5w1z6FwM4GXI+hWL24cbnqokkBasKRxynG7WRw2nu1qHRkrmmcm26mu6JaExTm8vdDMt1DbpAeoiRvDhjoLdwiwR/E01pkiAVVKl2Ey7GoB/bnKThoJO+EAj8YmdgcG512vjhEafv23HZy2ClAIFXhNZHXlcp4Qtk8q8VhUSldvVJ1vujdk+xZLuUzZzKqYVOmdONIJnT8ExDStIZV+syFkAoF3H/6JDTia+Gq6mRVVwygabgl9jcxvHjwMbdOKNhdWATDPSuTpKsTPvMG9gPk8/odIMfeZCb/nvXMt4CW1UZQazto1qkI6vwAMwnxlfC8RoaWNR58TajzA5/6Bxpc3cBl6JOuMXlm3odrxsDVgOXBua/T1Bj19eBcIR6tEJ14v6qL8o25FPCuADud7J8Lw4KOaC0dUSWGv7SJNsGzTuLuVCmkJ+pfniUpmK0U5EKomBS5tcAJexqz/01R5BZyq93E2dCskGPBWOWhpsNPw8GmTUSaiYBnFgAgNJ3mpt7cL5WXQl8DuQoBUBTvFWvlDKK4D94qu6Hs391aNI+Jiy/1NaJMGW1LjJN7Zhcn05CSmlHqMmQ4iJ8YaQNzpimijL8s/ro8oa4TBgij5aT11KYKJs0cdxuWTb+Elauw1RdKf3SI6F9X930J//3tBw6SJ8iCKnTUEnN5CpUFAIz3+dWfSazm+rDHisVbe/jeHW2U9+2zPfy0cmsl55nnAPRD7KMi1BTfpKSEaND3GaDQPvu+sf/EBaPijAdn4dvTgo3xVa5nlo7bTeQo7L3MZaTuHYd5H/iLE6WEyukcPzSc6Yd5MLEkuVHFdnXDfrdHQvOy3X2gV6BJ2+GKNQdWprCtBzWtgh9J7Ie7qlqh17c= X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3178; 6:nnxNu5djimgfC8fmCxct0KtseI0Go+IPf+Vw42GkF1Ho3GimPKEjuVU12RMfw4YZcAooLfYw5gXnyeFXeRhwDw1YSJdibIXeP/z0KSy0OsSgrkAMcqz9o+4mVv7Hv8aK1Dy9YclD2pWlJP7M4R6u4+vwKL2wkoK7Gslq79Vb6DLp6sJgdJby08wREe9BENOA1k4jDjbfsepKiFhSrnxqnw9x/kUjm3C+IxKcnT+8tfhY+tYv8CGBYAyWuPS8ea5O9glGP6wPP51WGI02R7bMBaWEIQzF8byIiZDch10J+gH28WkY+VspCX6THKF0LeB9ID5E4bl7OjzdwZ8pWvNcbw==; 5:T7WcNqaxMPKw+wrlIEAl/Vpqx28FD8mLxv28vIs0H4+u0zyUp751A07QxWVFCgr0YVgLBg/ZY9CmHGjl2rTR5cwruljd0001RoRkm9RJB2NI0viSMgbba4B2xn+7I/UuIEyrxGSFPCZUj4+Tjl88eV3tXwsI4cPioOjoau6m35w=; 24:vu8zj5l+IwV8yciwhb5vl6Rrtvr4KCr3XqE9TGWHE6+mcdkOJP9CzoDjSfZzcdoo4rQ7N3SCEeVdj5fUUwEOZ5g7flNB7wRg7sBwDVaEhRM=; 7:TA1nh7uz/ep5NDjc3SrCzVWlMa/v5cCAa0rzFlYt/pJhZGIJ11/YS5h5UsSQ4xCh4jliw2Ue9Jc2RhGIygFxS9NL0tnJNpcf7a/W311teAPihQt06cz8TyIXXPN+37KImipunrsthcUuM5JO//f/hfnTXcluGBoB5rSjETO9M+yBIBwS2UAAqyUZlt2HRp94ZLi87Ei13KOApeCCxPGVeOjQQ98B+VKf9FAytDc6W5o= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Oct 2017 17:36:07.0904 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR07MB3178 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Intiyaz Basha Do not write the Tx doorbell if skb->xmit_more is set unless the Tx queue is full or stopped. Signed-off-by: Intiyaz Basha Signed-off-by: Derek Chickles Signed-off-by: Felix Manlunas --- drivers/net/ethernet/cavium/liquidio/lio_core.c | 6 ++++-- drivers/net/ethernet/cavium/liquidio/lio_main.c | 15 +++++++++------ drivers/net/ethernet/cavium/liquidio/lio_vf_main.c | 14 +++++++++----- drivers/net/ethernet/cavium/liquidio/octeon_main.h | 2 +- drivers/net/ethernet/cavium/liquidio/octeon_nic.c | 5 +++-- drivers/net/ethernet/cavium/liquidio/octeon_nic.h | 3 ++- drivers/net/ethernet/cavium/liquidio/request_manager.c | 5 +++-- 7 files changed, 31 insertions(+), 19 deletions(-) diff --git a/drivers/net/ethernet/cavium/liquidio/lio_core.c b/drivers/net/ethernet/cavium/liquidio/lio_core.c index 23f6b60..b891d85 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_core.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_core.c @@ -91,7 +91,7 @@ void octeon_update_tx_completion_counters(void *buf, int reqtype, *bytes_compl += skb->len; } -void octeon_report_sent_bytes_to_bql(void *buf, int reqtype) +int octeon_report_sent_bytes_to_bql(void *buf, int reqtype) { struct octnet_buf_free_info *finfo; struct sk_buff *skb; @@ -112,11 +112,13 @@ void octeon_report_sent_bytes_to_bql(void *buf, int reqtype) break; default: - return; + return 0; } txq = netdev_get_tx_queue(skb->dev, skb_get_queue_mapping(skb)); netdev_tx_sent_queue(txq, skb->len); + + return netif_xmit_stopped(txq); } void liquidio_link_ctrl_cmd_completion(void *nctrl_ptr) diff --git a/drivers/net/ethernet/cavium/liquidio/lio_main.c b/drivers/net/ethernet/cavium/liquidio/lio_main.c index 963803b..f9a0e14 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c @@ -2479,7 +2479,8 @@ static void handle_timestamp(struct octeon_device *oct, */ static inline int send_nic_timestamp_pkt(struct octeon_device *oct, struct octnic_data_pkt *ndata, - struct octnet_buf_free_info *finfo) + struct octnet_buf_free_info *finfo, + int xmit_more) { int retval; struct octeon_soft_command *sc; @@ -2514,7 +2515,7 @@ static inline int send_nic_timestamp_pkt(struct octeon_device *oct, len = (u32)((struct octeon_instr_ih2 *) (&sc->cmd.cmd2.ih2))->dlengsz; - ring_doorbell = 1; + ring_doorbell = !xmit_more; retval = octeon_send_command(oct, sc->iq_no, ring_doorbell, &sc->cmd, sc, len, ndata->reqtype); @@ -2548,7 +2549,7 @@ static int liquidio_xmit(struct sk_buff *skb, struct net_device *netdev) union tx_info *tx_info; int status = 0; int q_idx = 0, iq_no = 0; - int j; + int j, xmit_more = 0; u64 dptr = 0; u32 tag = 0; @@ -2753,17 +2754,19 @@ static int liquidio_xmit(struct sk_buff *skb, struct net_device *netdev) irh->vlan = skb_vlan_tag_get(skb) & 0xfff; } + xmit_more = skb->xmit_more; + if (unlikely(cmdsetup.s.timestamp)) - status = send_nic_timestamp_pkt(oct, &ndata, finfo); + status = send_nic_timestamp_pkt(oct, &ndata, finfo, xmit_more); else - status = octnet_send_nic_data_pkt(oct, &ndata); + status = octnet_send_nic_data_pkt(oct, &ndata, xmit_more); if (status == IQ_SEND_FAILED) goto lio_xmit_failed; netif_info(lio, tx_queued, lio->netdev, "Transmit queued successfully\n"); if (status == IQ_SEND_STOP) - stop_q(lio->netdev, q_idx); + stop_q(netdev, q_idx); netif_trans_update(netdev); diff --git a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c index 2e993ce..a6a5dff 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c @@ -1691,7 +1691,8 @@ static void handle_timestamp(struct octeon_device *oct, u32 status, void *buf) */ static int send_nic_timestamp_pkt(struct octeon_device *oct, struct octnic_data_pkt *ndata, - struct octnet_buf_free_info *finfo) + struct octnet_buf_free_info *finfo, + int xmit_more) { struct octeon_soft_command *sc; int ring_doorbell; @@ -1721,7 +1722,7 @@ static int send_nic_timestamp_pkt(struct octeon_device *oct, len = (u32)((struct octeon_instr_ih3 *)(&sc->cmd.cmd3.ih3))->dlengsz; - ring_doorbell = 1; + ring_doorbell = !xmit_more; retval = octeon_send_command(oct, sc->iq_no, ring_doorbell, &sc->cmd, sc, len, ndata->reqtype); @@ -1753,6 +1754,7 @@ static int liquidio_xmit(struct sk_buff *skb, struct net_device *netdev) struct octeon_device *oct; int q_idx = 0, iq_no = 0; union tx_info *tx_info; + int xmit_more = 0; struct lio *lio; int status = 0; u64 dptr = 0; @@ -1941,10 +1943,12 @@ static int liquidio_xmit(struct sk_buff *skb, struct net_device *netdev) irh->vlan = skb_vlan_tag_get(skb) & VLAN_VID_MASK; } + xmit_more = skb->xmit_more; + if (unlikely(cmdsetup.s.timestamp)) - status = send_nic_timestamp_pkt(oct, &ndata, finfo); + status = send_nic_timestamp_pkt(oct, &ndata, finfo, xmit_more); else - status = octnet_send_nic_data_pkt(oct, &ndata); + status = octnet_send_nic_data_pkt(oct, &ndata, xmit_more); if (status == IQ_SEND_FAILED) goto lio_xmit_failed; @@ -1953,7 +1957,7 @@ static int liquidio_xmit(struct sk_buff *skb, struct net_device *netdev) if (status == IQ_SEND_STOP) { dev_err(&oct->pci_dev->dev, "Rcvd IQ_SEND_STOP signal; stopping IQ-%d\n", iq_no); - stop_q(lio->netdev, q_idx); + stop_q(netdev, q_idx); } netif_trans_update(netdev); diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_main.h b/drivers/net/ethernet/cavium/liquidio/octeon_main.h index 32ef3a7..c846eec 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_main.h +++ b/drivers/net/ethernet/cavium/liquidio/octeon_main.h @@ -63,7 +63,7 @@ struct octnet_buf_free_info { }; /* BQL-related functions */ -void octeon_report_sent_bytes_to_bql(void *buf, int reqtype); +int octeon_report_sent_bytes_to_bql(void *buf, int reqtype); void octeon_update_tx_completion_counters(void *buf, int reqtype, unsigned int *pkts_compl, unsigned int *bytes_compl); diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_nic.c b/drivers/net/ethernet/cavium/liquidio/octeon_nic.c index b457cf2..150609b 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_nic.c +++ b/drivers/net/ethernet/cavium/liquidio/octeon_nic.c @@ -82,9 +82,10 @@ } int octnet_send_nic_data_pkt(struct octeon_device *oct, - struct octnic_data_pkt *ndata) + struct octnic_data_pkt *ndata, + int xmit_more) { - int ring_doorbell = 1; + int ring_doorbell = !xmit_more; return octeon_send_command(oct, ndata->q_no, ring_doorbell, &ndata->cmd, ndata->buf, ndata->datasize, diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_nic.h b/drivers/net/ethernet/cavium/liquidio/octeon_nic.h index 6480ef8..de4130d 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_nic.h +++ b/drivers/net/ethernet/cavium/liquidio/octeon_nic.h @@ -279,7 +279,8 @@ static inline int octnet_iq_is_full(struct octeon_device *oct, u32 q_no) * queue should be stopped, and IQ_SEND_OK if it sent okay. */ int octnet_send_nic_data_pkt(struct octeon_device *oct, - struct octnic_data_pkt *ndata); + struct octnic_data_pkt *ndata, + int xmit_more); /** Send a NIC control packet to the device * @param oct - octeon device pointer diff --git a/drivers/net/ethernet/cavium/liquidio/request_manager.c b/drivers/net/ethernet/cavium/liquidio/request_manager.c index 1e0fbce..0086cda 100644 --- a/drivers/net/ethernet/cavium/liquidio/request_manager.c +++ b/drivers/net/ethernet/cavium/liquidio/request_manager.c @@ -543,6 +543,7 @@ static void check_db_timeout(struct work_struct *work) u32 force_db, void *cmd, void *buf, u32 datasize, u32 reqtype) { + int xmit_stopped; struct iq_post_status st; struct octeon_instr_queue *iq = oct->instr_queue[iq_no]; @@ -554,12 +555,12 @@ static void check_db_timeout(struct work_struct *work) st = __post_command2(iq, cmd); if (st.status != IQ_SEND_FAILED) { - octeon_report_sent_bytes_to_bql(buf, reqtype); + xmit_stopped = octeon_report_sent_bytes_to_bql(buf, reqtype); __add_to_request_list(iq, st.index, buf, reqtype); INCR_INSTRQUEUE_PKT_COUNT(oct, iq_no, bytes_sent, datasize); INCR_INSTRQUEUE_PKT_COUNT(oct, iq_no, instr_posted, 1); - if (force_db) + if (force_db || xmit_stopped || st.status == IQ_SEND_STOP) ring_doorbell(oct, iq); } else { INCR_INSTRQUEUE_PKT_COUNT(oct, iq_no, instr_dropped, 1);