From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E6D36C433E2 for ; Tue, 15 Sep 2020 07:06:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id AE14C21D7E for ; Tue, 15 Sep 2020 07:06:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726179AbgIOHFR (ORCPT ); Tue, 15 Sep 2020 03:05:17 -0400 Received: from szxga07-in.huawei.com ([45.249.212.35]:36512 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726134AbgIOHEk (ORCPT ); Tue, 15 Sep 2020 03:04:40 -0400 Received: from DGGEMS412-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id 394AD1C3D1EE78AF187E; Tue, 15 Sep 2020 15:04:22 +0800 (CST) Received: from [10.74.191.121] (10.74.191.121) by DGGEMS412-HUB.china.huawei.com (10.3.19.212) with Microsoft SMTP Server id 14.3.487.0; Tue, 15 Sep 2020 15:04:14 +0800 Subject: Re: [PATCH net-next 6/6] net: hns3: use napi_consume_skb() when cleaning tx desc To: Saeed Mahameed , "tanhuazhong@huawei.com" , "davem@davemloft.net" CC: "yisen.zhuang@huawei.com" , "salil.mehta@huawei.com" , "linuxarm@huawei.com" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "kuba@kernel.org" References: <1600085217-26245-1-git-send-email-tanhuazhong@huawei.com> <1600085217-26245-7-git-send-email-tanhuazhong@huawei.com> From: Yunsheng Lin Message-ID: <2b1219b6-a7dd-38a3-bfb7-1cb49330df90@huawei.com> Date: Tue, 15 Sep 2020 15:04:13 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.2.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.74.191.121] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2020/9/15 13:09, Saeed Mahameed wrote: > On Mon, 2020-09-14 at 20:06 +0800, Huazhong Tan wrote: >> From: Yunsheng Lin >> >> Use napi_consume_skb() to batch consuming skb when cleaning >> tx desc in NAPI polling. >> >> Signed-off-by: Yunsheng Lin >> Signed-off-by: Huazhong Tan >> --- >> drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 27 +++++++++++- >> ---------- >> drivers/net/ethernet/hisilicon/hns3/hns3_enet.h | 2 +- >> drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c | 4 ++-- >> 3 files changed, 17 insertions(+), 16 deletions(-) >> >> diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c >> b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c >> index 4a49a76..feeaf75 100644 >> --- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c >> +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c >> @@ -2333,10 +2333,10 @@ static int hns3_alloc_buffer(struct >> hns3_enet_ring *ring, >> } >> >> static void hns3_free_buffer(struct hns3_enet_ring *ring, >> - struct hns3_desc_cb *cb) >> + struct hns3_desc_cb *cb, int budget) >> { >> if (cb->type == DESC_TYPE_SKB) >> - dev_kfree_skb_any((struct sk_buff *)cb->priv); >> + napi_consume_skb(cb->priv, budget); > > This code can be reached from hns3_lb_clear_tx_ring() below which is > your loopback test and called with non-zero budget, I am not sure you > are allowed to call napi_consume_skb() with non-zero budget outside > napi context, perhaps the cb->type for loopback test is different in lb > test case ? Idk.. , please double check other code paths. Yes, loopback test may call napi_consume_skb() with non-zero budget outside napi context. Thanks for pointing out this case. How about add the below WARN_ONCE() in napi_consume_skb() to catch this kind of error? WARN_ONCE(!in_serving_softirq(), "napi_consume_skb() is called with non-zero budget outside napi context"); > > [...] > >> static void hns3_lb_clear_tx_ring(struct hns3_nic_priv *priv, u32 >> start_ringid, >> - u32 end_ringid, u32 budget) >> + u32 end_ringid, int budget) >> { >> u32 i; >> >> for (i = start_ringid; i <= end_ringid; i++) { >> struct hns3_enet_ring *ring = &priv->ring[i]; >> >> - hns3_clean_tx_ring(ring); >> + hns3_clean_tx_ring(ring, budget); >> } >> } >>