From patchwork Tue Sep 13 07:00:05 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcin Wojtas X-Patchwork-Id: 669201 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3sYFw11CPkz9sRZ for ; Tue, 13 Sep 2016 17:01:37 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=semihalf-com.20150623.gappssmtp.com header.i=@semihalf-com.20150623.gappssmtp.com header.b=1q1789Ef; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755240AbcIMHBe (ORCPT ); Tue, 13 Sep 2016 03:01:34 -0400 Received: from mail-lf0-f46.google.com ([209.85.215.46]:35585 "EHLO mail-lf0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754811AbcIMHBK (ORCPT ); Tue, 13 Sep 2016 03:01:10 -0400 Received: by mail-lf0-f46.google.com with SMTP id l131so103019352lfl.2 for ; Tue, 13 Sep 2016 00:01:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Q5ysgzxAAorw8M+WzkArsnrxXMt29eWfXorCTx3pXEw=; b=1q1789EfQB0jLOzJM77LgeXqam5eu0TuqwjltlDO9rcJEI+6luztba3i/4SN1ib8ZZ 9vbpzM05SQ9k1K7GAYwwUKSozi+IpmdGHA81TMQwi9KFo1EtTxEToFyvu2NuXrJu8xOH gz3quBb8FtSV7wYbReqOdC84BvkBAIlHOpsXAjnFj6E2UlBDHEN8hT8/XyTDRXKnZ2bx AGGdnDyK1nGTQANGGEXvHY/cfdRbb6uOC8b3Ww6DfoKoPQQCpGYVCn1ObQGBJBmGq8JA 0lxMYYpBV7EkCpfE0VThHx22bS4muYA98Wd4T+EgSxFyB9rvxJIJwSeYUN+ktgw1aUQE e1/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Q5ysgzxAAorw8M+WzkArsnrxXMt29eWfXorCTx3pXEw=; b=GarkoaAq3WGWqrjINjX80XjYx1TWJXNBi5bT3pzOMQ/Bwmm5A6pwQebCtbsgYI+IQy 0xIKDuMWQDM4FakfmbSLUMFAty2mvbV1RF0UcDMkEPh5fJ4IVBePbLD+QnwCffPbAkWA GMTTfxzQ3uqRg78F3NnSfvDWtq14lw9CFsrCedaBz+JQ8ropK4ouFbhhA2X4UXaJbfEF 9JHRXnKAcybJg9Wue3Z33lcfWH5d83upi8qq8uQqiiM3/UU0P5ABFvfx0LiG/0kQ6k4a sZ+UJ9uNqO72raxMb7cIVc82gUF/F+xtvHr6l4CkPHDZkkEXhJqWQnhD7N4j6Uu8n+FA uwPQ== X-Gm-Message-State: AE9vXwOTGeEeEvlAoao0G6dP59fNClL3Wi9vGzVgGg1VKMHgG4zTxgUqPsFbO7kg+e9rcg== X-Received: by 10.46.1.134 with SMTP id f6mr7194480lji.24.1473750067496; Tue, 13 Sep 2016 00:01:07 -0700 (PDT) Received: from enkidu.semihalf.local (31-172-191-173.noc.fibertech.net.pl. [31.172.191.173]) by smtp.gmail.com with ESMTPSA id h78sm3699062ljh.45.2016.09.13.00.01.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 13 Sep 2016 00:01:06 -0700 (PDT) From: Marcin Wojtas To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, netdev@vger.kernel.org Cc: davem@davemloft.net, linux@arm.linux.org.uk, sebastian.hesselbarth@gmail.com, andrew@lunn.ch, jason@lakedaemon.net, thomas.petazzoni@free-electrons.com, gregory.clement@free-electrons.com, nadavh@marvell.com, alior@marvell.com, simon.guinot@sequanux.org, nitroshift@yahoo.com, mw@semihalf.com, jaz@semihalf.com Subject: [PATCH net-next 1/2] net: mvneta: add xmit_more support Date: Tue, 13 Sep 2016 09:00:05 +0200 Message-Id: <1473750006-21199-2-git-send-email-mw@semihalf.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1473750006-21199-1-git-send-email-mw@semihalf.com> References: <1473750006-21199-1-git-send-email-mw@semihalf.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Simon Guinot Basing on xmit_more flag of the skb, TX descriptors can be concatenated before flushing. This commit delay Tx descriptor flush if the queue is running and if there is more skb's to send. Signed-off-by: Simon Guinot --- drivers/net/ethernet/marvell/mvneta.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c index d41c28d..b9dccea 100644 --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c @@ -512,6 +512,7 @@ struct mvneta_tx_queue { * descriptor ring */ int count; + int pending; int tx_stop_threshold; int tx_wake_threshold; @@ -802,8 +803,9 @@ static void mvneta_txq_pend_desc_add(struct mvneta_port *pp, /* Only 255 descriptors can be added at once ; Assume caller * process TX desriptors in quanta less than 256 */ - val = pend_desc; + val = pend_desc + txq->pending; mvreg_write(pp, MVNETA_TXQ_UPDATE_REG(txq->id), val); + txq->pending = 0; } /* Get pointer to next TX descriptor to be processed (send) by HW */ @@ -2357,11 +2359,14 @@ out: struct netdev_queue *nq = netdev_get_tx_queue(dev, txq_id); txq->count += frags; - mvneta_txq_pend_desc_add(pp, txq, frags); - if (txq->count >= txq->tx_stop_threshold) netif_tx_stop_queue(nq); + if (!skb->xmit_more || netif_xmit_stopped(nq)) + mvneta_txq_pend_desc_add(pp, txq, frags); + else + txq->pending += frags; + u64_stats_update_begin(&stats->syncp); stats->tx_packets++; stats->tx_bytes += len;