Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp202976pxk; Thu, 17 Sep 2020 00:10:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyiYWcjsov+lG/49bDqsiakwpWNY+8UbHSp7H9S1zN/UOQzj2Ak4+6pfR+F0anbiwKnBMFv X-Received: by 2002:a50:9fa1:: with SMTP id c30mr30786782edf.207.1600326648842; Thu, 17 Sep 2020 00:10:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1600326648; cv=none; d=google.com; s=arc-20160816; b=dlD1gVzN0fcv0r5UGVr7qyzyBN5hIdJjnT/2kMRrkuit2pJBeuqr9rufnE9wiGaHaG sxIclx4KZLIQjK1x1sMtXGIePS7thmZ9o+iB0sqKGrHirdYNQE8EjxBTxOq1C942nE1L 62GHLjAjMSfXOpL7qChCKrnsLDpGQL/9eRBPoPoHFOH74sisEHoUax3aUKSH253UvdqS Bpubg/CLbQov3oSqrmiJIlSqRtqBLq02B2WJ5DP9V0flSw1v5Lb3kaHX+1sBkPHzuC0U iEH3KCig2aJQngMqeKH18/IXKFhj6LtcDGoDSx5Fp2j7BmqT++QCkdNSZzxTjzwR8+9Z OSEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=9RFBEE3zIcCcxA1enlhUAdX+r5DLimEIkCz5RjRMZZo=; b=Kl0iO9S+huRYaG1XHXEWLVDy2t4SF9CvTpjW0xP0Mc+EmImwEgr2Eb7yq85+5ntTfE vtjw1L0OxCqPiTys0n/O0FvCHRvgxjtKnJwlY/bexdto7irQHVd/oClrWy4lfuMV0M/8 MYsJfpSbYHLpPgxK1+rQ5erghLyoDxAIccwWzl87rySpzApr2fZnHvsPp8O3y8o7EvZe TSa20ZhGv2GtMRJzCwrjhYndCmFAG6PJk3NzrahQE+TLsgZ34wpWf5P5bLAoMfig2L/9 PleyQRj/G5oXoiO4F5Inofb5q/NGTlGAQKNmHevi0S7Ie+ey09vpu6+hjMyXYYlX8MEJ 7+0g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w17si13483906eds.432.2020.09.17.00.10.25; Thu, 17 Sep 2020 00:10:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726178AbgIQHJZ (ORCPT + 99 others); Thu, 17 Sep 2020 03:09:25 -0400 Received: from szxga07-in.huawei.com ([45.249.212.35]:50398 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726142AbgIQHJI (ORCPT ); Thu, 17 Sep 2020 03:09:08 -0400 X-Greylist: delayed 959 seconds by postgrey-1.27 at vger.kernel.org; Thu, 17 Sep 2020 03:09:05 EDT Received: from DGGEMS409-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id 0FEE185A67CC42766640; Thu, 17 Sep 2020 14:53:02 +0800 (CST) Received: from [10.74.191.121] (10.74.191.121) by DGGEMS409-HUB.china.huawei.com (10.3.19.209) with Microsoft SMTP Server id 14.3.487.0; Thu, 17 Sep 2020 14:52:54 +0800 Subject: Re: [PATCH net-next 6/6] net: hns3: use napi_consume_skb() when cleaning tx desc To: Eric Dumazet , Saeed Mahameed CC: Saeed Mahameed , "tanhuazhong@huawei.com" , "davem@davemloft.net" , "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> <2b1219b6-a7dd-38a3-bfb7-1cb49330df90@huawei.com> From: Yunsheng Lin Message-ID: <3a5c8a23-bc03-e79b-47ef-b67f66452327@huawei.com> Date: Thu, 17 Sep 2020 14:52:54 +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 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2020/9/16 16:38, Eric Dumazet wrote: > On Wed, Sep 16, 2020 at 10:33 AM Saeed Mahameed wrote: >> >> On Tue, 2020-09-15 at 15:04 +0800, Yunsheng Lin wrote: >>> 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"); >>> >> >> Cc: Eric >> >> I don't know, need to check performance impact. >> And in_serving_softirq() doesn't necessarily mean in napi >> but looking at _kfree_skb_defer(), i think it shouldn't care if napi or >> not as long as it runs in soft irq it will push the skb to that >> particular cpu napi_alloc_cache, which should be fine. Yes, we only need to ensure _kfree_skb_defer() runs with automic context. And it seems NAPI polling can be in thread context with BH disabled in below patch, so in_softirq() checking should be more future-proof? * in_softirq() - We have BH disabled, or are processing softirqs net: add support for threaded NAPI polling https://www.mail-archive.com/netdev@vger.kernel.org/msg348491.html >> >> Maybe instead of the WARN_ONCE just remove the budget condition and >> replace it with >> >> if (!in_serving_softirq()) >> dev_consume_skb_any(skb); Yes, that is good idea, _kfree_skb_defer() is only called in softirq or BH disabled context, dev_consume_skb_any(skb) is called in other context, so driver author do not need to worry about the calling context of the napi_consume_skb(). >> > > I think we need to keep costs small. > > So lets add a CONFIG_DEBUG_NET option so that developers can add > various DEBUG_NET() clauses. Do you means something like below: diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 157e024..61a6a62 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -5104,6 +5104,15 @@ do { \ }) #endif +#if defined(CONFIG_DEBUG_NET) +#define DEBUG_NET_WARN(condition, format...) \ + do { \ + WARN(condition, ##__VA_ARGS__); + } while (0) +#else +#define DEBUG_NET_WARN(condition, format...) +#endif + /* * The list of packet types we will receive (as opposed to discard) * and the routines to invoke. diff --git a/net/Kconfig b/net/Kconfig index 3831206..f59ea4b 100644 --- a/net/Kconfig +++ b/net/Kconfig @@ -473,3 +473,9 @@ config HAVE_CBPF_JIT # Extended BPF JIT (eBPF) config HAVE_EBPF_JIT bool + +config DEBUG_NET + bool + depends on DEBUG_KERNEL + help + Say Y here to add some extra checks and diagnostics to networking. diff --git a/net/core/skbuff.c b/net/core/skbuff.c index bfd7483..10547db 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -904,6 +904,9 @@ void napi_consume_skb(struct sk_buff *skb, int budget) return; } + DEBUG_NET_WARN(!in_serving_softirq(), + "napi_consume_skb() is called with non-zero budget outside softirq context"); + if (!skb_unref(skb)) return; > . >