Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp2912458ybx; Fri, 8 Nov 2019 11:10:39 -0800 (PST) X-Google-Smtp-Source: APXvYqz6m27Ag3msDbJBKDhaeRJEvFPvXs5rTLZWSkweWQ0BspWNvuC3+QTzFxwG+3d/C0OWkRG1 X-Received: by 2002:aa7:c343:: with SMTP id j3mr12044377edr.4.1573240239039; Fri, 08 Nov 2019 11:10:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573240239; cv=none; d=google.com; s=arc-20160816; b=Z5tZT5WHCQkmx9DYRy8Ll4WonqlLss2tjhxpVUFtRFhJwvtHvGFdpXDyG4MvS5Hxtl 2+fALuu/9Gys6VojHX6H2BnifI4p/EoQk/oZBJIc2bawXyB+3RXdCbesHVkvM+f2x8X1 43s/sdfn6gwSAyZBH4oygQ/mEXczpCImxxEgJL/rTAUDmrgObHMNdWQFxz2okRMRKIxU RVgpySi/PLURSq4sNJ74nSd7aPlTdVjrrATdXYtXBVrrSsUjhUwm4NH6o+2fRYhkqMKH CshEGc9UOu/nxnDJljhn0gmaFclUvwhJQYO2QzFLR1Br5jdf4dhGp5MLqdoX4tYnKXFi B5/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=3w0bOOHCHPv98OhXKMUoFRAMn4Y60In7SV80DtU/P84=; b=Re+GLFpB+7oMub+cw9ErrGsDyF2SmbZPfozgOmu1CNLxd2z+5mavQ2EAgEH1NCXD+F BZshEGhFPufakcZvcQWVITycTYbPZSHmpWuUWaSU3OtxWQMneOSM3vAswQlbzJWxjb/d dRFkQ5GxaF5LyVTE9gfYBrQm8S3CAnXBi7QxHBFEkaBWvNMob21d86yLRW6gpOY3S/8z HxbuefHj9xGbq0Wp3OatonhiDVLUZzTBKKCfa0eiCVO2NIWBF0/B7zQ/kHxXNR8uww3+ 45X7lYZeOPRSzxZVS5Grccqn2KUuljSQnZaBwowu35P7NJjKMKVSN9LGzSKgpS8tJgEn BitQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=1lAfgIdg; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u4si4248914ejb.386.2019.11.08.11.10.15; Fri, 08 Nov 2019 11:10:39 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=1lAfgIdg; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391618AbfKHTIY (ORCPT + 99 others); Fri, 8 Nov 2019 14:08:24 -0500 Received: from mail.kernel.org ([198.145.29.99]:39338 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388102AbfKHTIV (ORCPT ); Fri, 8 Nov 2019 14:08:21 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 09A9720673; Fri, 8 Nov 2019 19:08:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1573240101; bh=N4KjHgFK9d/d12dmfSPmyBLi3zVooy+ZWFOBJe3ffqE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=1lAfgIdgNDRJN4Uxu4L1dQ8EwbHOCxtajfRuPhqLRpnDnTmPuqG4wdnsBn0RmiuI6 ihBLo4MQVpOHa2aIHPWE8iyBri7LNvXSnxr86lrAnGhosu/X3LjFBS3Ve8xrhhhEv6 AgsYki8IAoa12d+RP6z7Sam+cVUBCmpcFQPLESYU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jiangfeng Xiao , "David S. Miller" Subject: [PATCH 5.3 089/140] net: hisilicon: Fix ping latency when deal with high throughput Date: Fri, 8 Nov 2019 19:50:17 +0100 Message-Id: <20191108174910.699178710@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191108174900.189064908@linuxfoundation.org> References: <20191108174900.189064908@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jiangfeng Xiao [ Upstream commit e56bd641ca61beb92b135298d5046905f920b734 ] This is due to error in over budget processing. When dealing with high throughput, the used buffers that exceeds the budget is not cleaned up. In addition, it takes a lot of cycles to clean up the used buffer, and then the buffer where the valid data is located can take effect. Signed-off-by: Jiangfeng Xiao Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/hisilicon/hip04_eth.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) --- a/drivers/net/ethernet/hisilicon/hip04_eth.c +++ b/drivers/net/ethernet/hisilicon/hip04_eth.c @@ -237,6 +237,7 @@ struct hip04_priv { dma_addr_t rx_phys[RX_DESC_NUM]; unsigned int rx_head; unsigned int rx_buf_size; + unsigned int rx_cnt_remaining; struct device_node *phy_node; struct phy_device *phy; @@ -575,7 +576,6 @@ static int hip04_rx_poll(struct napi_str struct hip04_priv *priv = container_of(napi, struct hip04_priv, napi); struct net_device *ndev = priv->ndev; struct net_device_stats *stats = &ndev->stats; - unsigned int cnt = hip04_recv_cnt(priv); struct rx_desc *desc; struct sk_buff *skb; unsigned char *buf; @@ -588,8 +588,8 @@ static int hip04_rx_poll(struct napi_str /* clean up tx descriptors */ tx_remaining = hip04_tx_reclaim(ndev, false); - - while (cnt && !last) { + priv->rx_cnt_remaining += hip04_recv_cnt(priv); + while (priv->rx_cnt_remaining && !last) { buf = priv->rx_buf[priv->rx_head]; skb = build_skb(buf, priv->rx_buf_size); if (unlikely(!skb)) { @@ -635,11 +635,13 @@ refill: hip04_set_recv_desc(priv, phys); priv->rx_head = RX_NEXT(priv->rx_head); - if (rx >= budget) + if (rx >= budget) { + --priv->rx_cnt_remaining; goto done; + } - if (--cnt == 0) - cnt = hip04_recv_cnt(priv); + if (--priv->rx_cnt_remaining == 0) + priv->rx_cnt_remaining += hip04_recv_cnt(priv); } if (!(priv->reg_inten & RCV_INT)) { @@ -724,6 +726,7 @@ static int hip04_mac_open(struct net_dev int i; priv->rx_head = 0; + priv->rx_cnt_remaining = 0; priv->tx_head = 0; priv->tx_tail = 0; hip04_reset_ppe(priv);