From patchwork Mon Jan 16 17:08:31 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcin Wojtas X-Patchwork-Id: 715832 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 3v2KRW70ppz9s2G for ; Tue, 17 Jan 2017 04:07:35 +1100 (AEDT) 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="YOQupci5"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751522AbdAPRHd (ORCPT ); Mon, 16 Jan 2017 12:07:33 -0500 Received: from mail-lf0-f51.google.com ([209.85.215.51]:34781 "EHLO mail-lf0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751031AbdAPRGq (ORCPT ); Mon, 16 Jan 2017 12:06:46 -0500 Received: by mail-lf0-f51.google.com with SMTP id v186so88529960lfa.1 for ; Mon, 16 Jan 2017 09:06:45 -0800 (PST) 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=jGioMvPYJ4hL6O1FXkdJnj6g6Onj+n5TMlMicA6829s=; b=YOQupci52pOETB5FKi8JWB8RZhrsWxnzuXDFsnWCEBH6hjeNZmIbOJ685/2mA+T98I yulFJFRCvhW0btF/uMlImzod26NtAvRcRqXsQ6fYzU/2Zu5SkVQ5H9CaKu0RNkqdnLfj SnCbhzYxm183bbvdc71R4YP8BZQKB/HCwOnjBRyl49Xjg5CnMEpjtW6A42HP3wToFHTe 1VIPcxDzasonf6moxYRN3O+MIGXMFcz0eg6GQEar/mrfarNln19im+gwxIM9IBV7NcD5 yU54LlaD5TL68vhkmRPXFm1VlYzBx5l+z8QGJ+Jcq+bE3R4Ce6bpXOBNGjGe9tb83yA0 pltQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=jGioMvPYJ4hL6O1FXkdJnj6g6Onj+n5TMlMicA6829s=; b=eMk+2Yvk+CZuHR5BoEHf1CgSbVhOoy75+paZNpW08Hhb5J3VMFdLL9O7QrWsdd5bdD jgNvn9l5fdNnydpB2yRznIsnxYqMpTu0mfoLk59y6nuU+875h97esVx3+7KgvAmy39y5 jLj6BhaTIXcZz9S4ByW4MQMqaf/czAmMLAUabkfcFPRwqh8A8z/TXZEzY9GzPBnRpWcG KZzhT0zvvVqpc2MjSvK08D/ApM/G8501Kft2Y4CA9AFJghmld4ZHOYQGMVGT+pM8HHcp jIBA0GZdWn/zS094LAdJPoXHdPK1MOMwcqFvSkLl8OVJxyy7nisp9r0+Y0XJM0WW5b50 qwpw== X-Gm-Message-State: AIkVDXK0zolyVrvm0YgXbu9zbIXnZHocMC1PkHQQEoGJYj958MSGv40WU0amwZ/iY0CV7Q== X-Received: by 10.25.215.156 with SMTP id q28mr3277541lfi.57.1484586404371; Mon, 16 Jan 2017 09:06:44 -0800 (PST) Received: from enkidu.semihalf.local (31-172-191-173.noc.fibertech.net.pl. [31.172.191.173]) by smtp.gmail.com with ESMTPSA id 206sm7630733ljf.35.2017.01.16.09.06.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 16 Jan 2017 09:06:43 -0800 (PST) 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, mw@semihalf.com, jaz@semihalf.com, Simon Guinot Subject: [PATCH v2 net-next 1/2] net: mvneta: add xmit_more support Date: Mon, 16 Jan 2017 18:08:31 +0100 Message-Id: <1484586512-16412-2-git-send-email-mw@semihalf.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1484586512-16412-1-git-send-email-mw@semihalf.com> References: <1484586512-16412-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. A maximum allowed number of descriptors for flushing at once due to MVNETA_TXQ_UPDATE_REG(q) reqisters limitation, is 255. Because of that a new macro was added (MVNETA_TXQ_DEC_SENT_MASK) in order to ensure that concatenated amount of descriptor does not exceed that value. Signed-off-by: Simon Guinot Signed-off-by: Marcin Wojtas --- drivers/net/ethernet/marvell/mvneta.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c index 3607d8f..9624537 100644 --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c @@ -224,6 +224,7 @@ #define MVNETA_TXQ_SENT_THRESH_MASK(coal) ((coal) << 16) #define MVNETA_TXQ_UPDATE_REG(q) (0x3c60 + ((q) << 2)) #define MVNETA_TXQ_DEC_SENT_SHIFT 16 +#define MVNETA_TXQ_DEC_SENT_MASK 0xff #define MVNETA_TXQ_STATUS_REG(q) (0x3c40 + ((q) << 2)) #define MVNETA_TXQ_SENT_DESC_SHIFT 16 #define MVNETA_TXQ_SENT_DESC_MASK 0x3fff0000 @@ -525,6 +526,7 @@ struct mvneta_tx_queue { * descriptor ring */ int count; + int pending; int tx_stop_threshold; int tx_wake_threshold; @@ -818,8 +820,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 */ @@ -2399,11 +2402,15 @@ static int mvneta_tx(struct sk_buff *skb, struct net_device *dev) 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) || + txq->pending + frags > MVNETA_TXQ_DEC_SENT_MASK) + 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;