Received: by 2002:a05:6358:16cc:b0:ea:6187:17c9 with SMTP id r12csp12763668rwl; Tue, 3 Jan 2023 21:07:06 -0800 (PST) X-Google-Smtp-Source: AMrXdXsRa3t+NU+t5zkL6q6AhcV6Y1JqRCXXuA1eBOp6nI5cPMLOhaX7kfEIBmifx0boBLif65g2 X-Received: by 2002:a05:6402:528e:b0:481:420e:206d with SMTP id en14-20020a056402528e00b00481420e206dmr35171392edb.42.1672808825797; Tue, 03 Jan 2023 21:07:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1672808825; cv=none; d=google.com; s=arc-20160816; b=LFpZdyYMHLsI1+89BUoHxOLEh5rkDUa6VJWGe3ORMXqHqRIIsU2Aes+kTo4Mq7fTRP mAi7shL/7NdEaPcVT/pBy16dyjB9YtYB5doPdxnlUyKJnCdqMs2iGdRif5s6PcUYUdgy 2VRi58EHbthOIuF7psy8eAlYBIdSvMsQTnwx6+06Q4b1znuCxVdgpdgmpeFaBMQYF4/Y Nq4ECMhi7aej5XaKr66px+ZL3tWX70V0X9qhfphAOwHK6wdRTjg801TX5DWbgf/rEF8W mvyp8cPfsVN1rvTg6T4qvibt4p+bMGTdVdZObpak9lZf5PU8BJqscHCbGsf8IhzXte1+ aE6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to :content-language:references:cc:to:from:subject:user-agent :mime-version:date:message-id:dkim-signature; bh=mgnhlnuG8Qrqs2IY3wKLTrPyEJc3j7HXcojektB5wC8=; b=B/ugsB2CJo4OrWznHNuPnDanuK3FdQ2tJ/ge/UxwNc0/dchynsUbVuRLixiEeotKcz DmTl+nSeSNO9GkB+7jcs6Yi6uBmYY8ZWpJhSY2YLkPYKs5Up79zXhsnx2sXF2Tut7QpT YQZS/2rUQBfP+dn5YwtXZZGz5DIND0HNdhGLfb3ztO0oPT1ydAEQYITKn0ZAJX91czHm AxtJCJTVdSR/2nmzghqApgCgMGMLzppOnfEGNGkHEwNG1n0wZQNQNzWltkgt+TqAL7/b KNyyOHXpJN1veZChWaWsuCU4A3meB0PC/wSsG6ZK7D3nHHDMe7+zY6+hQLe9OiKr65uf s73A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=fTJ2pzU9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id r9-20020a508d89000000b0046fd3acedb3si26240853edh.399.2023.01.03.21.06.39; Tue, 03 Jan 2023 21:07:05 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=fTJ2pzU9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234400AbjADEYM (ORCPT + 57 others); Tue, 3 Jan 2023 23:24:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45338 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234000AbjADEYD (ORCPT ); Tue, 3 Jan 2023 23:24:03 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 19582115B for ; Tue, 3 Jan 2023 20:23:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1672806195; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mgnhlnuG8Qrqs2IY3wKLTrPyEJc3j7HXcojektB5wC8=; b=fTJ2pzU9apKVA1cwmNUpb8u5UoOD0b3PqrX440xJdSaFhPT2OR67f5dQEJQH4xWJ8mOnRl RSTKYNcvE3mwK+Ps2w2DLMnquy4LhBFGsSKD7QV0T11C6dS813i6NlYIoEqokwXi+eT4Cg 7lo8vHpbtmAC1CscRuSr4ntoMa5wZJk= Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-97-82r5DplWPr6EK-pw0jtt5Q-1; Tue, 03 Jan 2023 23:23:14 -0500 X-MC-Unique: 82r5DplWPr6EK-pw0jtt5Q-1 Received: by mail-pg1-f199.google.com with SMTP id 84-20020a630257000000b00477f88d334eso14842235pgc.11 for ; Tue, 03 Jan 2023 20:23:14 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=mgnhlnuG8Qrqs2IY3wKLTrPyEJc3j7HXcojektB5wC8=; b=Cir98njF7JCxbXmyxC0hIjbmZpD8vilpQQkwCQTrfj2nYTSENa2CfYhXUdlaQtClAl 7MhZXlc0g2PQKRNoM5oLnuk3ijAZtAtNJhP4CwSv1iFyOYzko5z9ahQEJW0pu7zIXvMv XKYq3bJ/uKX4KIfasvlotXF94pCfKKf1xgMKEMpyrKbAHeB5JLKIAsCxxYEM+tTNqKLL lAPR7sBkqWhKpBMtOrGrLkwySu3PKesIVXJUhXEEC7aO8WxUSbYSglKmjeLSBqjG5YTr P/VJH05lbcSeqae1zeDGGzB38KM/XSsz6b7HFVdhSecmZg7WAP/aM32PuVcMnBhO1Per R6vg== X-Gm-Message-State: AFqh2krdQwONYtVRbTIh7JuvPtuQ64krFjVtTKGt2SZGrWQUeuMWutYJ vJ+UviKq/wVtedjSAMpG5V2c/G8iwqoZ0Ae8vXhgEK38zwZodsJFeNGZpee6JOSAyjEmLwjSd8k wZP5/gBp4R7C1klUQ00fAOSsg X-Received: by 2002:a17:90a:a28:b0:223:f78c:15d with SMTP id o37-20020a17090a0a2800b00223f78c015dmr50555164pjo.41.1672806193512; Tue, 03 Jan 2023 20:23:13 -0800 (PST) X-Received: by 2002:a17:90a:a28:b0:223:f78c:15d with SMTP id o37-20020a17090a0a2800b00223f78c015dmr50555150pjo.41.1672806193244; Tue, 03 Jan 2023 20:23:13 -0800 (PST) Received: from [10.72.12.120] ([43.228.180.230]) by smtp.gmail.com with ESMTPSA id ml4-20020a17090b360400b00217090ece49sm20040933pjb.31.2023.01.03.20.23.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 03 Jan 2023 20:23:12 -0800 (PST) Message-ID: <50eb0df0-89fe-a5df-f89f-07bf69bd00ae@redhat.com> Date: Wed, 4 Jan 2023 12:23:07 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: [PATCH net V2] virtio-net: correctly enable callback during start_xmit From: Jason Wang To: "Michael S. Tsirkin" Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, xuanzhuo@linux.alibaba.com References: <20221215032719.72294-1-jasowang@redhat.com> <20221215034740-mutt-send-email-mst@kernel.org> <20221215042918-mutt-send-email-mst@kernel.org> Content-Language: en-US In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-5.2 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 在 2022/12/23 14:29, Jason Wang 写道: > On Fri, Dec 16, 2022 at 11:43 AM Jason Wang wrote: >> On Thu, Dec 15, 2022 at 5:35 PM Michael S. Tsirkin wrote: >>> On Thu, Dec 15, 2022 at 05:15:43PM +0800, Jason Wang wrote: >>>> On Thu, Dec 15, 2022 at 5:02 PM Michael S. Tsirkin wrote: >>>>> On Thu, Dec 15, 2022 at 11:27:19AM +0800, Jason Wang wrote: >>>>>> Commit a7766ef18b33("virtio_net: disable cb aggressively") enables >>>>>> virtqueue callback via the following statement: >>>>>> >>>>>> do { >>>>>> ...... >>>>>> } while (use_napi && kick && >>>>>> unlikely(!virtqueue_enable_cb_delayed(sq->vq))); >>>>>> >>>>>> When NAPI is used and kick is false, the callback won't be enabled >>>>>> here. And when the virtqueue is about to be full, the tx will be >>>>>> disabled, but we still don't enable tx interrupt which will cause a TX >>>>>> hang. This could be observed when using pktgen with burst enabled. >>>>>> >>>>>> Fixing this by trying to enable tx interrupt after we disable TX when >>>>>> we're not using napi or kick is false. >>>>>> >>>>>> Fixes: a7766ef18b33 ("virtio_net: disable cb aggressively") >>>>>> Signed-off-by: Jason Wang >>>>>> --- >>>>>> The patch is needed for -stable. >>>>>> Changes since V1: >>>>>> - enable tx interrupt after we disable tx >>>>>> --- >>>>>> drivers/net/virtio_net.c | 2 +- >>>>>> 1 file changed, 1 insertion(+), 1 deletion(-) >>>>>> >>>>>> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c >>>>>> index 86e52454b5b5..dcf3a536d78a 100644 >>>>>> --- a/drivers/net/virtio_net.c >>>>>> +++ b/drivers/net/virtio_net.c >>>>>> @@ -1873,7 +1873,7 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) >>>>>> */ >>>>>> if (sq->vq->num_free < 2+MAX_SKB_FRAGS) { >>>>>> netif_stop_subqueue(dev, qnum); >>>>>> - if (!use_napi && >>>>>> + if ((!use_napi || !kick) && >>>>>> unlikely(!virtqueue_enable_cb_delayed(sq->vq))) { >>>>>> /* More just got used, free them then recheck. */ >>>>>> free_old_xmit_skbs(sq, false); >>>>> This will work but the following lines are: >>>>> >>>>> if (sq->vq->num_free >= 2+MAX_SKB_FRAGS) { >>>>> netif_start_subqueue(dev, qnum); >>>>> virtqueue_disable_cb(sq->vq); >>>>> } >>>>> >>>>> >>>>> and I thought we are supposed to keep callbacks enabled with napi? >>>> This seems to be the opposite logic of commit a7766ef18b33 that >>>> disables callbacks for NAPI. >>>> >>>> It said: >>>> >>>> There are currently two cases where we poll TX vq not in response to a >>>> callback: start xmit and rx napi. We currently do this with callbacks >>>> enabled which can cause extra interrupts from the card. Used not to be >>>> a big issue as we run with interrupts disabled but that is no longer the >>>> case, and in some cases the rate of spurious interrupts is so high >>>> linux detects this and actually kills the interrupt. >>>> >>>> My undersatnding is that it tries to disable callbacks on TX. >>> I think we want to disable callbacks while polling, yes. here we are not >>> polling, and I think we want a callback because otherwise nothing will >>> orphan skbs and a socket can be blocked, not transmitting anything - a >>> deadlock. >> I'm not sure how I got here, did you mean a partial revert of >> a7766ef18b33 (the part that disables TX callbacks on start_xmit)? > Michael, any idea on this? > > Thanks Michael, any comment? Thanks