[{"id":2936531,"web_url":"http://patchwork.ozlabs.org/comment/2936531/","msgid":"<efb6adca-a2a8-98d2-5604-5482d8be6ec9@redhat.com>","list_archive_url":null,"date":"2022-07-21T09:15:11","subject":"Re: [PATCH v12 30/40] virtio_pci: support VIRTIO_F_RING_RESET","submitter":{"id":5225,"url":"http://patchwork.ozlabs.org/api/people/5225/","name":"Jason Wang","email":"jasowang@redhat.com"},"content":"在 2022/7/20 11:04, Xuan Zhuo 写道:\n> This patch implements virtio pci support for QUEUE RESET.\n>\n> Performing reset on a queue is divided into these steps:\n>\n>   1. notify the device to reset the queue\n>   2. recycle the buffer submitted\n>   3. reset the vring (may re-alloc)\n>   4. mmap vring to device, and enable the queue\n>\n> This patch implements virtio_reset_vq(), virtio_enable_resetq() in the\n> pci scenario.\n>\n> Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>\n> ---\n>   drivers/virtio/virtio_pci_common.c | 12 +++-\n>   drivers/virtio/virtio_pci_modern.c | 96 ++++++++++++++++++++++++++++++\n>   2 files changed, 105 insertions(+), 3 deletions(-)\n>\n> diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c\n> index ca51fcc9daab..ad258a9d3b9f 100644\n> --- a/drivers/virtio/virtio_pci_common.c\n> +++ b/drivers/virtio/virtio_pci_common.c\n> @@ -214,9 +214,15 @@ static void vp_del_vq(struct virtqueue *vq)\n>   \tstruct virtio_pci_vq_info *info = vp_dev->vqs[vq->index];\n>   \tunsigned long flags;\n>   \n> -\tspin_lock_irqsave(&vp_dev->lock, flags);\n> -\tlist_del(&info->node);\n> -\tspin_unlock_irqrestore(&vp_dev->lock, flags);\n> +\t/*\n> +\t * If it fails during re-enable reset vq. This way we won't rejoin\n> +\t * info->node to the queue. Prevent unexpected irqs.\n> +\t */\n> +\tif (!vq->reset) {\n> +\t\tspin_lock_irqsave(&vp_dev->lock, flags);\n> +\t\tlist_del(&info->node);\n> +\t\tspin_unlock_irqrestore(&vp_dev->lock, flags);\n> +\t}\n>   \n>   \tvp_dev->del_vq(info);\n>   \tkfree(info);\n> diff --git a/drivers/virtio/virtio_pci_modern.c b/drivers/virtio/virtio_pci_modern.c\n> index 9041d9a41b7d..4d28b6918c80 100644\n> --- a/drivers/virtio/virtio_pci_modern.c\n> +++ b/drivers/virtio/virtio_pci_modern.c\n> @@ -34,6 +34,9 @@ static void vp_transport_features(struct virtio_device *vdev, u64 features)\n>   \tif ((features & BIT_ULL(VIRTIO_F_SR_IOV)) &&\n>   \t\t\tpci_find_ext_capability(pci_dev, PCI_EXT_CAP_ID_SRIOV))\n>   \t\t__virtio_set_bit(vdev, VIRTIO_F_SR_IOV);\n> +\n> +\tif (features & BIT_ULL(VIRTIO_F_RING_RESET))\n> +\t\t__virtio_set_bit(vdev, VIRTIO_F_RING_RESET);\n>   }\n>   \n>   /* virtio config->finalize_features() implementation */\n> @@ -199,6 +202,95 @@ static int vp_active_vq(struct virtqueue *vq, u16 msix_vec)\n>   \treturn 0;\n>   }\n>   \n> +static int vp_modern_reset_vq(struct virtqueue *vq)\n> +{\n> +\tstruct virtio_pci_device *vp_dev = to_vp_device(vq->vdev);\n> +\tstruct virtio_pci_modern_device *mdev = &vp_dev->mdev;\n> +\tstruct virtio_pci_vq_info *info;\n> +\tunsigned long flags;\n> +\n> +\tif (!virtio_has_feature(vq->vdev, VIRTIO_F_RING_RESET))\n> +\t\treturn -ENOENT;\n> +\n> +\tvp_modern_set_queue_reset(mdev, vq->index);\n> +\n> +\tinfo = vp_dev->vqs[vq->index];\n> +\n> +\t/* delete vq from irq handler */\n> +\tspin_lock_irqsave(&vp_dev->lock, flags);\n> +\tlist_del(&info->node);\n> +\tspin_unlock_irqrestore(&vp_dev->lock, flags);\n> +\n> +\tINIT_LIST_HEAD(&info->node);\n> +\n> +\t/* For the case where vq has an exclusive irq, to prevent the irq from\n> +\t * being received again and the pending irq, call synchronize_irq(), and\n> +\t * break it.\n> +\t *\n> +\t * We can't use disable_irq() since it conflicts with the affinity\n> +\t * managed IRQ that is used by some drivers. So this is done on top of\n> +\t * IRQ hardening.\n> +\t *\n> +\t * In the scenario based on shared interrupts, vq will be searched from\n> +\t * the queue virtqueues. Since the previous list_del() has been deleted\n> +\t * from the queue, it is impossible for vq to be called in this case.\n> +\t * There is no need to close the corresponding interrupt.\n> +\t */\n> +\tif (vp_dev->per_vq_vectors && info->msix_vector != VIRTIO_MSI_NO_VECTOR) {\n> +#ifdef CONFIG_VIRTIO_HARDEN_NOTIFICATION\n> +\t\t__virtqueue_break(vq);\n> +#endif\n\n\nI think we should do this unconditionally since it's an independent \nfeature, though the list_del() above should be sufficient.\n\n\n> +\t\tsynchronize_irq(pci_irq_vector(vp_dev->pci_dev, info->msix_vector));\n> +\t}\n> +\n> +\tvq->reset = true;\n> +\n> +\treturn 0;\n> +}\n> +\n> +static int vp_modern_enable_reset_vq(struct virtqueue *vq)\n> +{\n> +\tstruct virtio_pci_device *vp_dev = to_vp_device(vq->vdev);\n> +\tstruct virtio_pci_modern_device *mdev = &vp_dev->mdev;\n> +\tstruct virtio_pci_vq_info *info;\n> +\tunsigned long flags, index;\n> +\tint err;\n> +\n> +\tif (!vq->reset)\n> +\t\treturn -EBUSY;\n> +\n> +\tindex = vq->index;\n> +\tinfo = vp_dev->vqs[index];\n> +\n> +\tif (vp_modern_get_queue_reset(mdev, index))\n> +\t\treturn -EBUSY;\n> +\n> +\tif (vp_modern_get_queue_enable(mdev, index))\n> +\t\treturn -EBUSY;\n> +\n> +\terr = vp_active_vq(vq, info->msix_vector);\n> +\tif (err)\n> +\t\treturn err;\n> +\n> +\tif (vq->callback) {\n> +\t\tspin_lock_irqsave(&vp_dev->lock, flags);\n> +\t\tlist_add(&info->node, &vp_dev->virtqueues);\n> +\t\tspin_unlock_irqrestore(&vp_dev->lock, flags);\n> +\t} else {\n> +\t\tINIT_LIST_HEAD(&info->node);\n> +\t}\n> +\n> +#ifdef CONFIG_VIRTIO_HARDEN_NOTIFICATION\n> +\tif (vp_dev->per_vq_vectors && info->msix_vector != VIRTIO_MSI_NO_VECTOR)\n> +\t\t__virtqueue_unbreak(vq);\n> +#endif\n> +\n> +\tvp_modern_set_queue_enable(&vp_dev->mdev, index, true);\n> +\tvq->reset = false;\n> +\n> +\treturn 0;\n> +}\n> +\n>   static u16 vp_config_vector(struct virtio_pci_device *vp_dev, u16 vector)\n>   {\n>   \treturn vp_modern_config_vector(&vp_dev->mdev, vector);\n> @@ -413,6 +505,8 @@ static const struct virtio_config_ops virtio_pci_config_nodev_ops = {\n>   \t.set_vq_affinity = vp_set_vq_affinity,\n>   \t.get_vq_affinity = vp_get_vq_affinity,\n>   \t.get_shm_region  = vp_get_shm_region,\n> +\t.disable_vq_and_reset = vp_modern_reset_vq,\n> +\t.enable_vq_after_reset = vp_modern_enable_reset_vq,\n\n\nNit:\n\nTo be consistent, let's use vp_modern_disable_vq_and_reset() and \nvp_modern_enable_vq_after_reset()\n\nThanks\n\n\n>   };\n>   \n>   static const struct virtio_config_ops virtio_pci_config_ops = {\n> @@ -431,6 +525,8 @@ static const struct virtio_config_ops virtio_pci_config_ops = {\n>   \t.set_vq_affinity = vp_set_vq_affinity,\n>   \t.get_vq_affinity = vp_get_vq_affinity,\n>   \t.get_shm_region  = vp_get_shm_region,\n> +\t.disable_vq_and_reset = vp_modern_reset_vq,\n> +\t.enable_vq_after_reset = vp_modern_enable_reset_vq,\n>   };\n>   \n>   /* the PCI probing function */","headers":{"Return-Path":"\n <linux-um-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["bilbo.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=lists.infradead.org header.i=@lists.infradead.org\n header.a=rsa-sha256 header.s=bombadil.20210309 header.b=oeMTHvRe;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=WcfiQiRA;\n\tdkim-atps=neutral","ozlabs.org;\n spf=none (no SPF record) smtp.mailfrom=lists.infradead.org\n (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org;\n envelope-from=linux-um-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n receiver=<UNKNOWN>)","relay.mimecast.com;\n\tauth=pass smtp.auth=CUSA124A263 smtp.mailfrom=jasowang@redhat.com"],"Received":["from bombadil.infradead.org (bombadil.infradead.org\n [IPv6:2607:7c80:54:3::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby bilbo.ozlabs.org (Postfix) with ESMTPS id 4LpRkN0Kycz9s09\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 21 Jul 2022 19:15:40 +1000 (AEST)","from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux))\n\tid 1oESHM-0036Y5-JI; Thu, 21 Jul 2022 09:15:32 +0000","from us-smtp-delivery-124.mimecast.com ([170.10.129.124])\n\tby bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux))\n\tid 1oESHH-0036Tg-8t\n\tfor linux-um@lists.infradead.org; Thu, 21 Jul 2022 09:15:28 +0000","from mail-pl1-f198.google.com (mail-pl1-f198.google.com\n [209.85.214.198]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n us-mta-663-YFh8eF9TOt68Ovhk31ETWw-1; Thu, 21 Jul 2022 05:15:24 -0400","by mail-pl1-f198.google.com with SMTP id\n c15-20020a170902d48f00b0016c01db365cso864624plg.20\n        for <linux-um@lists.infradead.org>;\n Thu, 21 Jul 2022 02:15:24 -0700 (PDT)","from [10.72.12.47] ([209.132.188.80])\n        by smtp.gmail.com with ESMTPSA id\n y20-20020a170902e19400b0016c35b21901sm1077023pla.195.2022.07.21.02.15.12\n        (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n        Thu, 21 Jul 2022 02:15:22 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type:\n\tContent-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive:\n\tList-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject:\n\tMIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=JMW4TrvutW7dIoaSE4AdX9cprLsK+WHgAKR4d2fPMKQ=; b=oeMTHvRes/LgBE\n\t4wRGDPPvfwUDRh+dh1RSEmuffUSmzdxt3uslF9Zh3XlLGSd/7kqnidlD0oNkyXadOUBIgt0sBzkI/\n\tzFRHHQKODbiS9ank84AzE+pqpntL7Bjdh0TIUi1Jlb7EstlgiNGVPMDn/cdhkQXfEt5SmenT7eaBn\n\tHPz9gqtfr2y1eKClTbqsN0J9TWw146DkcA75jUrvIq3C6RJNfPxSqmoLf6Tg2BvnArSYZojKUHhfq\n\t/TCnR0cKyZQisxSRIxCFQbjlTcKeKLct85VDkXs2h8w8V4YPer5+OQFCWPde+rJ+f9R5dRzpXP2IW\n\tFqHB/VlixBW/OJSjvO4Q==;","v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1658394926;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\t to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\t content-transfer-encoding:content-transfer-encoding:\n\t in-reply-to:in-reply-to:references:references;\n\tbh=PKluuKiO4nPSBSIDesJ3n2h9tlkDSbj9xB+0JNp3iV8=;\n\tb=WcfiQiRAlmV74e9X8N+DVGVpVH/kZ3ZNYRkxl3VSsuectEykOLvVvc3PH5wa+k19T8PCwc\n\tLDhzLNQa/OQHYPprT0xYIV/RmlUeaOPCMU38Dnc0kupVG4i2tuL4Ed1Y81Dru0fa09cZe9\n\tID8EdEBQDNYSl2yiueVvkT0cXjXeE0w="],"X-MC-Unique":"YFh8eF9TOt68Ovhk31ETWw-1","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20210112;\n        h=x-gm-message-state:message-id:date:mime-version:user-agent:subject\n         :content-language:to:cc:references:from:in-reply-to\n         :content-transfer-encoding;\n        bh=PKluuKiO4nPSBSIDesJ3n2h9tlkDSbj9xB+0JNp3iV8=;\n        b=ZTdTbKZdSDw00ShlVYLfao+4VCDlm8xa3Ib+m5/etghRFDmovQUIhKFs5TwlCg7m87\n         qB2LSwbpAuyliqAQB2caD/wT9Fyyb2MTJVBvknaKOCuFe8x016vsqEaoWToSiCch+rJ2\n         YoIUC6Xufp9+BBtwq81NchzrA3FwaiMn8HQGXqxGkcgQyMrHp2VbZXOdGy+1Fi8U4iad\n         P0hgpA2jpJ1rsPZG9Q5uA2jj4frqOB6CbOO9S/lsZj2MWCzFz1XBJCasrguMua3u/rvo\n         nG2HaCzErWwhO72nvSsca7xfFf/Y3aDLI9rkzt63zIjSd911TSdn1MyOmCuyRxHKQfRm\n         bBAw==","X-Gm-Message-State":"AJIora/zMUTbB0rRc+4oACVTlvTYud0OuLwlwSagpvo9YlWYooYxDn57\n\tKukcS2rJXGsxJIiJ7ixWEOHchmD6AN1JaIlnZeWDZ2RbxYjxlF131G3WhdWSvWvsMpVckl5GvE+\n\t13/pd/1ZKK1W5tx5qhJKbR8KZ","X-Received":["by 2002:a65:42cc:0:b0:3a9:f71f:33f9 with SMTP id\n l12-20020a6542cc000000b003a9f71f33f9mr36793847pgp.391.1658394923333;\n        Thu, 21 Jul 2022 02:15:23 -0700 (PDT)","by 2002:a65:42cc:0:b0:3a9:f71f:33f9 with SMTP id\n l12-20020a6542cc000000b003a9f71f33f9mr36793799pgp.391.1658394922973;\n        Thu, 21 Jul 2022 02:15:22 -0700 (PDT)"],"X-Google-Smtp-Source":"\n AGRyM1sgEw6i8bsR36Y8ICw8UMYj7/O02SOjej4lcmI0dJ1BovICarsVAAvAc6/oM7JcSOz5o3pTJA==","Message-ID":"<efb6adca-a2a8-98d2-5604-5482d8be6ec9@redhat.com>","Date":"Thu, 21 Jul 2022 17:15:11 +0800","MIME-Version":"1.0","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0)\n Gecko/20100101 Thunderbird/91.11.0","Subject":"Re: [PATCH v12 30/40] virtio_pci: support VIRTIO_F_RING_RESET","To":"Xuan Zhuo <xuanzhuo@linux.alibaba.com>,\n virtualization@lists.linux-foundation.org","Cc":"Richard Weinberger <richard@nod.at>,\n Anton Ivanov <anton.ivanov@cambridgegreys.com>,\n Johannes Berg <johannes@sipsolutions.net>,\n \"Michael S. Tsirkin\" <mst@redhat.com>, \"David S. Miller\"\n <davem@davemloft.net>, Eric Dumazet <edumazet@google.com>,\n Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,\n Hans de Goede <hdegoede@redhat.com>, Mark Gross <markgross@kernel.org>,\n Vadim Pasternak <vadimp@nvidia.com>,\n Bjorn Andersson <bjorn.andersson@linaro.org>,\n Mathieu Poirier <mathieu.poirier@linaro.org>,\n Cornelia Huck <cohuck@redhat.com>, Halil Pasic <pasic@linux.ibm.com>,\n Eric Farman <farman@linux.ibm.com>, Heiko Carstens <hca@linux.ibm.com>,\n Vasily Gorbik <gor@linux.ibm.com>, Alexander Gordeev\n <agordeev@linux.ibm.com>, Christian Borntraeger <borntraeger@linux.ibm.com>,\n Sven Schnelle <svens@linux.ibm.com>, Alexei Starovoitov <ast@kernel.org>,\n Daniel Borkmann <daniel@iogearbox.net>,\n Jesper Dangaard Brouer <hawk@kernel.org>,\n John Fastabend <john.fastabend@gmail.com>,\n Vincent Whitchurch <vincent.whitchurch@axis.com>,\n linux-um@lists.infradead.org, netdev@vger.kernel.org,\n platform-driver-x86@vger.kernel.org, linux-remoteproc@vger.kernel.org,\n linux-s390@vger.kernel.org, kvm@vger.kernel.org, bpf@vger.kernel.org,\n kangjie.xu@linux.alibaba.com","References":"<20220720030436.79520-1-xuanzhuo@linux.alibaba.com>\n <20220720030436.79520-31-xuanzhuo@linux.alibaba.com>","From":"Jason Wang <jasowang@redhat.com>","In-Reply-To":"<20220720030436.79520-31-xuanzhuo@linux.alibaba.com>","X-Mimecast-Spam-Score":"0","X-Mimecast-Originator":"redhat.com","Content-Language":"en-US","X-CRM114-Version":"20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ","X-CRM114-CacheID":"sfid-20220721_021527_416706_58973440 ","X-CRM114-Status":"GOOD (  32.96  )","X-Spam-Score":"-1.6 (-)","X-Spam-Report":"=?unknown-8bit?q?Spam_detection_software=2C_running_on_the_sy?=\n\t=?unknown-8bit?q?stem_=22bombadil=2Einfradead=2Eorg=22=2C?=\n\t=?unknown-8bit?q?_has_NOT_identified_this_incoming_email_as_spam=2E__The_ori?=\n\t=?unknown-8bit?q?ginal?=\n\t=?unknown-8bit?q?_message_has_been_attached_to_this_so_you_can_view_it_or_la?=\n\t=?unknown-8bit?q?bel?=\n\t=?unknown-8bit?q?_similar_future_email=2E__If_you_have_any_questions=2C_see?=\n\t=?unknown-8bit?q?_the_administrator_of_that_system_for_details=2E?=\n\t=?unknown-8bit?q?_?=\n\t=?unknown-8bit?b?IENvbnRlbnQgcHJldmlldzogIOWcqCAyMDIyLzcvMjAgMTE6MDQsIFh1?=\n\t=?unknown-8bit?b?YW4gWmh1byDlhpnpgZM6ID4gVGhpcyBwYXRjaCBpbXBsZW1lbnRz?=\n\t=?unknown-8bit?q?_virtio_pci_support_for_QUEUE_RESET=2E_=3E_=3E_Performing_r?=\n\t=?unknown-8bit?q?eset_on_a_queue_is_divided?=\n\t=?unknown-8bit?q?_into_these_steps=3A_=3E_=3E_1=2E_notify_the_device_to_rese?=\n\t=?unknown-8bit?q?t_the_qu_=5B=2E=2E=2E=5D_?=\n\t=?unknown-8bit?q?_?=\n\t=?unknown-8bit?q?_Content_analysis_details=3A___=28-1=2E6_points=2C_5=2E0_re?=\n\t=?unknown-8bit?q?quired=29?=\n\t=?unknown-8bit?q?_?=\n\t=?unknown-8bit?q?_pts_rule_name______________description?=\n\t=?unknown-8bit?q?_----_----------------------_------------------------------?=\n\t=?unknown-8bit?q?--------------------?=\n\t=?unknown-8bit?q?_-0=2E7_RCVD=5FIN=5FDNSWL=5FLOW______RBL=3A_Sender_listed_a?=\n\t=?unknown-8bit?q?t_https=3A//www=2Ednswl=2Eorg/=2C?=\n\t=?unknown-8bit?q?_low_trust?=\n\t=?unknown-8bit?q?_=5B170=2E10=2E129=2E124_listed_in_list=2Ednswl=2Eorg=5D?=\n\t=?unknown-8bit?q?_0=2E0_SPF=5FHELO=5FNONE__________SPF=3A_HELO_does_not_publ?=\n\t=?unknown-8bit?q?ish_an_SPF_Record?=\n\t=?unknown-8bit?q?_0=2E0_SPF=5FNONE_______________SPF=3A_sender_does_not_publ?=\n\t=?unknown-8bit?q?ish_an_SPF_Record?=\n\t=?unknown-8bit?q?_-0=2E1_DKIM=5FVALID=5FAU__________Message_has_a_valid_DKIM?=\n\t=?unknown-8bit?q?_or_DK_signature_from?=\n\t=?unknown-8bit?q?_author=27s_domain?=\n\t=?unknown-8bit?q?_-0=2E1_DKIM=5FVALID_____________Message_has_at_least_one_v?=\n\t=?unknown-8bit?q?alid_DKIM_or_DK_signature?=\n\t=?unknown-8bit?q?_0=2E1_DKIM=5FSIGNED____________Message_has_a_DKIM_or_DK_si?=\n\t=?unknown-8bit?q?gnature=2C_not_necessarily?=\n\t=?unknown-8bit?q?_valid?=\n\t=?unknown-8bit?q?_-0=2E1_DKIM=5FVALID=5FEF__________Message_has_a_valid_DKIM?=\n\t=?unknown-8bit?q?_or_DK_signature_from?=\n\t=?unknown-8bit?q?_envelope-from_domain?=\n\t=?unknown-8bit?q?_-0=2E5_NICE=5FREPLY=5FA___________Looks_like_a_legit_reply?=\n\t=?unknown-8bit?q?_=28A=29?=\n\t=?unknown-8bit?q?_-0=2E2_DKIMWL=5FWL=5FHIGH_________DKIMwl=2Eorg_-_High_trus?=\n\t=?unknown-8bit?q?t_sender?=","X-BeenThere":"linux-um@lists.infradead.org","X-Mailman-Version":"2.1.34","Precedence":"list","List-Id":"<linux-um.lists.infradead.org>","List-Unsubscribe":"<http://lists.infradead.org/mailman/options/linux-um>,\n <mailto:linux-um-request@lists.infradead.org?subject=unsubscribe>","List-Archive":"<http://lists.infradead.org/pipermail/linux-um/>","List-Post":"<mailto:linux-um@lists.infradead.org>","List-Help":"<mailto:linux-um-request@lists.infradead.org?subject=help>","List-Subscribe":"<http://lists.infradead.org/mailman/listinfo/linux-um>,\n <mailto:linux-um-request@lists.infradead.org?subject=subscribe>","Content-Transfer-Encoding":"base64","Content-Type":"text/plain; charset=\"utf-8\"; Format=\"flowed\"","Sender":"\"linux-um\" <linux-um-bounces@lists.infradead.org>","Errors-To":"linux-um-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"}},{"id":2937150,"web_url":"http://patchwork.ozlabs.org/comment/2937150/","msgid":"<1658459137.1276448-1-xuanzhuo@linux.alibaba.com>","list_archive_url":null,"date":"2022-07-22T03:05:37","subject":"Re: [PATCH v12 30/40] virtio_pci: support VIRTIO_F_RING_RESET","submitter":{"id":80519,"url":"http://patchwork.ozlabs.org/api/people/80519/","name":"Xuan Zhuo","email":"xuanzhuo@linux.alibaba.com"},"content":"On Thu, 21 Jul 2022 17:15:11 +0800, Jason Wang <jasowang@redhat.com> wrote:\n>\n> 在 2022/7/20 11:04, Xuan Zhuo 写道:\n> > This patch implements virtio pci support for QUEUE RESET.\n> >\n> > Performing reset on a queue is divided into these steps:\n> >\n> >   1. notify the device to reset the queue\n> >   2. recycle the buffer submitted\n> >   3. reset the vring (may re-alloc)\n> >   4. mmap vring to device, and enable the queue\n> >\n> > This patch implements virtio_reset_vq(), virtio_enable_resetq() in the\n> > pci scenario.\n> >\n> > Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>\n> > ---\n> >   drivers/virtio/virtio_pci_common.c | 12 +++-\n> >   drivers/virtio/virtio_pci_modern.c | 96 ++++++++++++++++++++++++++++++\n> >   2 files changed, 105 insertions(+), 3 deletions(-)\n> >\n> > diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c\n> > index ca51fcc9daab..ad258a9d3b9f 100644\n> > --- a/drivers/virtio/virtio_pci_common.c\n> > +++ b/drivers/virtio/virtio_pci_common.c\n> > @@ -214,9 +214,15 @@ static void vp_del_vq(struct virtqueue *vq)\n> >   \tstruct virtio_pci_vq_info *info = vp_dev->vqs[vq->index];\n> >   \tunsigned long flags;\n> >\n> > -\tspin_lock_irqsave(&vp_dev->lock, flags);\n> > -\tlist_del(&info->node);\n> > -\tspin_unlock_irqrestore(&vp_dev->lock, flags);\n> > +\t/*\n> > +\t * If it fails during re-enable reset vq. This way we won't rejoin\n> > +\t * info->node to the queue. Prevent unexpected irqs.\n> > +\t */\n> > +\tif (!vq->reset) {\n> > +\t\tspin_lock_irqsave(&vp_dev->lock, flags);\n> > +\t\tlist_del(&info->node);\n> > +\t\tspin_unlock_irqrestore(&vp_dev->lock, flags);\n> > +\t}\n> >\n> >   \tvp_dev->del_vq(info);\n> >   \tkfree(info);\n> > diff --git a/drivers/virtio/virtio_pci_modern.c b/drivers/virtio/virtio_pci_modern.c\n> > index 9041d9a41b7d..4d28b6918c80 100644\n> > --- a/drivers/virtio/virtio_pci_modern.c\n> > +++ b/drivers/virtio/virtio_pci_modern.c\n> > @@ -34,6 +34,9 @@ static void vp_transport_features(struct virtio_device *vdev, u64 features)\n> >   \tif ((features & BIT_ULL(VIRTIO_F_SR_IOV)) &&\n> >   \t\t\tpci_find_ext_capability(pci_dev, PCI_EXT_CAP_ID_SRIOV))\n> >   \t\t__virtio_set_bit(vdev, VIRTIO_F_SR_IOV);\n> > +\n> > +\tif (features & BIT_ULL(VIRTIO_F_RING_RESET))\n> > +\t\t__virtio_set_bit(vdev, VIRTIO_F_RING_RESET);\n> >   }\n> >\n> >   /* virtio config->finalize_features() implementation */\n> > @@ -199,6 +202,95 @@ static int vp_active_vq(struct virtqueue *vq, u16 msix_vec)\n> >   \treturn 0;\n> >   }\n> >\n> > +static int vp_modern_reset_vq(struct virtqueue *vq)\n> > +{\n> > +\tstruct virtio_pci_device *vp_dev = to_vp_device(vq->vdev);\n> > +\tstruct virtio_pci_modern_device *mdev = &vp_dev->mdev;\n> > +\tstruct virtio_pci_vq_info *info;\n> > +\tunsigned long flags;\n> > +\n> > +\tif (!virtio_has_feature(vq->vdev, VIRTIO_F_RING_RESET))\n> > +\t\treturn -ENOENT;\n> > +\n> > +\tvp_modern_set_queue_reset(mdev, vq->index);\n> > +\n> > +\tinfo = vp_dev->vqs[vq->index];\n> > +\n> > +\t/* delete vq from irq handler */\n> > +\tspin_lock_irqsave(&vp_dev->lock, flags);\n> > +\tlist_del(&info->node);\n> > +\tspin_unlock_irqrestore(&vp_dev->lock, flags);\n> > +\n> > +\tINIT_LIST_HEAD(&info->node);\n> > +\n> > +\t/* For the case where vq has an exclusive irq, to prevent the irq from\n> > +\t * being received again and the pending irq, call synchronize_irq(), and\n> > +\t * break it.\n> > +\t *\n> > +\t * We can't use disable_irq() since it conflicts with the affinity\n> > +\t * managed IRQ that is used by some drivers. So this is done on top of\n> > +\t * IRQ hardening.\n> > +\t *\n> > +\t * In the scenario based on shared interrupts, vq will be searched from\n> > +\t * the queue virtqueues. Since the previous list_del() has been deleted\n> > +\t * from the queue, it is impossible for vq to be called in this case.\n> > +\t * There is no need to close the corresponding interrupt.\n> > +\t */\n> > +\tif (vp_dev->per_vq_vectors && info->msix_vector != VIRTIO_MSI_NO_VECTOR) {\n> > +#ifdef CONFIG_VIRTIO_HARDEN_NOTIFICATION\n> > +\t\t__virtqueue_break(vq);\n> > +#endif\n>\n>\n> I think we should do this unconditionally since it's an independent\n> feature, though the list_del() above should be sufficient.\n\nYes.\n\n>\n>\n> > +\t\tsynchronize_irq(pci_irq_vector(vp_dev->pci_dev, info->msix_vector));\n> > +\t}\n> > +\n> > +\tvq->reset = true;\n> > +\n> > +\treturn 0;\n> > +}\n> > +\n> > +static int vp_modern_enable_reset_vq(struct virtqueue *vq)\n> > +{\n> > +\tstruct virtio_pci_device *vp_dev = to_vp_device(vq->vdev);\n> > +\tstruct virtio_pci_modern_device *mdev = &vp_dev->mdev;\n> > +\tstruct virtio_pci_vq_info *info;\n> > +\tunsigned long flags, index;\n> > +\tint err;\n> > +\n> > +\tif (!vq->reset)\n> > +\t\treturn -EBUSY;\n> > +\n> > +\tindex = vq->index;\n> > +\tinfo = vp_dev->vqs[index];\n> > +\n> > +\tif (vp_modern_get_queue_reset(mdev, index))\n> > +\t\treturn -EBUSY;\n> > +\n> > +\tif (vp_modern_get_queue_enable(mdev, index))\n> > +\t\treturn -EBUSY;\n> > +\n> > +\terr = vp_active_vq(vq, info->msix_vector);\n> > +\tif (err)\n> > +\t\treturn err;\n> > +\n> > +\tif (vq->callback) {\n> > +\t\tspin_lock_irqsave(&vp_dev->lock, flags);\n> > +\t\tlist_add(&info->node, &vp_dev->virtqueues);\n> > +\t\tspin_unlock_irqrestore(&vp_dev->lock, flags);\n> > +\t} else {\n> > +\t\tINIT_LIST_HEAD(&info->node);\n> > +\t}\n> > +\n> > +#ifdef CONFIG_VIRTIO_HARDEN_NOTIFICATION\n> > +\tif (vp_dev->per_vq_vectors && info->msix_vector != VIRTIO_MSI_NO_VECTOR)\n> > +\t\t__virtqueue_unbreak(vq);\n> > +#endif\n> > +\n> > +\tvp_modern_set_queue_enable(&vp_dev->mdev, index, true);\n> > +\tvq->reset = false;\n> > +\n> > +\treturn 0;\n> > +}\n> > +\n> >   static u16 vp_config_vector(struct virtio_pci_device *vp_dev, u16 vector)\n> >   {\n> >   \treturn vp_modern_config_vector(&vp_dev->mdev, vector);\n> > @@ -413,6 +505,8 @@ static const struct virtio_config_ops virtio_pci_config_nodev_ops = {\n> >   \t.set_vq_affinity = vp_set_vq_affinity,\n> >   \t.get_vq_affinity = vp_get_vq_affinity,\n> >   \t.get_shm_region  = vp_get_shm_region,\n> > +\t.disable_vq_and_reset = vp_modern_reset_vq,\n> > +\t.enable_vq_after_reset = vp_modern_enable_reset_vq,\n>\n>\n> Nit:\n>\n> To be consistent, let's use vp_modern_disable_vq_and_reset() and\n> vp_modern_enable_vq_after_reset()\n\nWill fix.\n\nThanks.\n\n\n>\n> Thanks\n>\n>\n> >   };\n> >\n> >   static const struct virtio_config_ops virtio_pci_config_ops = {\n> > @@ -431,6 +525,8 @@ static const struct virtio_config_ops virtio_pci_config_ops = {\n> >   \t.set_vq_affinity = vp_set_vq_affinity,\n> >   \t.get_vq_affinity = vp_get_vq_affinity,\n> >   \t.get_shm_region  = vp_get_shm_region,\n> > +\t.disable_vq_and_reset = vp_modern_reset_vq,\n> > +\t.enable_vq_after_reset = vp_modern_enable_reset_vq,\n> >   };\n> >\n> >   /* the PCI probing function */\n>","headers":{"Return-Path":"\n <linux-um-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["bilbo.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=lists.infradead.org header.i=@lists.infradead.org\n header.a=rsa-sha256 header.s=bombadil.20210309 header.b=soSPlJXW;\n\tdkim-atps=neutral","ozlabs.org;\n spf=none (no SPF record) smtp.mailfrom=lists.infradead.org\n (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org;\n envelope-from=linux-um-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n receiver=<UNKNOWN>)"],"Received":["from bombadil.infradead.org (bombadil.infradead.org\n [IPv6:2607:7c80:54:3::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby bilbo.ozlabs.org (Postfix) with ESMTPS id 4LpvTs5CXpz9sFr\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 22 Jul 2022 13:06:25 +1000 (AEST)","from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux))\n\tid 1oEizW-00H5nx-Gd; Fri, 22 Jul 2022 03:06:14 +0000","from out30-54.freemail.mail.aliyun.com ([115.124.30.54])\n\tby bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux))\n\tid 1oEizS-00H5jo-Ct\n\tfor linux-um@lists.infradead.org; Fri, 22 Jul 2022 03:06:13 +0000","from localhost(mailfrom:xuanzhuo@linux.alibaba.com\n fp:SMTPD_---0VK3N6a-_1658459160)\n          by smtp.aliyun-inc.com;\n          Fri, 22 Jul 2022 11:06:01 +0800"],"DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20210309; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:MIME-Version:List-Subscribe:List-Help:\n\tList-Post:List-Archive:List-Unsubscribe:List-Id:In-Reply-To:References:Cc:To:\n\tFrom:Date:Subject:Message-ID:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=I9+KL0ne6jU7LbH4DAy4Yo05DBMLGjnEQXvjYjFvf9o=; b=soSPlJXWT3ajDm\n\tbMkI+Je9wEpRwOgngb1eNEsD1MiEySBgRH5ykVpFj9Y3o3s3RsKiOopdJp3RqEC+MiaUMJZq0SShJ\n\tKCAoHW65VLa4vP6y46oCGfGA9N23rOMUpCWn11vMabi8OsD5qSJvHjuo8YH06p9+Q1bMvcoYSCKvl\n\t5KqY/CGYFaabR63zl3B0wakE/wXupRLeXtldh5jb+qIaE3R0N/t72ELUFHjeAfG/8QQgKSraNokEK\n\t8+zuoxMqWS+VQaMZwqU2eSMNc3lQeDZvV5MhXGUvN8MxAhuAawHgs5AGOuU3OQWkycKLZjb1CxtM2\n\tLpkBwd6/gHv68/4sDN+g==;","X-Alimail-AntiSpam":"\n AC=PASS;BC=-1|-1;BR=01201311R211e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046050;MF=xuanzhuo@linux.alibaba.com;NM=1;PH=DS;RN=36;SR=0;TI=SMTPD_---0VK3N6a-_1658459160;","Message-ID":"<1658459137.1276448-1-xuanzhuo@linux.alibaba.com>","Subject":"Re: [PATCH v12 30/40] virtio_pci: support VIRTIO_F_RING_RESET","Date":"Fri, 22 Jul 2022 11:05:37 +0800","From":"Xuan Zhuo <xuanzhuo@linux.alibaba.com>","To":"Jason Wang <jasowang@redhat.com>","Cc":"Richard Weinberger <richard@nod.at>,\n Anton Ivanov <anton.ivanov@cambridgegreys.com>,\n Johannes Berg <johannes@sipsolutions.net>,\n \"Michael S. Tsirkin\" <mst@redhat.com>,\n \"David S. Miller\" <davem@davemloft.net>,\n Eric Dumazet <edumazet@google.com>,\n Jakub Kicinski <kuba@kernel.org>,\n Paolo Abeni <pabeni@redhat.com>,\n Hans de Goede <hdegoede@redhat.com>,\n Mark Gross <markgross@kernel.org>,\n Vadim Pasternak <vadimp@nvidia.com>,\n Bjorn Andersson <bjorn.andersson@linaro.org>,\n Mathieu Poirier <mathieu.poirier@linaro.org>,\n Cornelia Huck <cohuck@redhat.com>,\n Halil Pasic <pasic@linux.ibm.com>,\n Eric Farman <farman@linux.ibm.com>,\n Heiko Carstens <hca@linux.ibm.com>,\n Vasily Gorbik <gor@linux.ibm.com>,\n Alexander Gordeev <agordeev@linux.ibm.com>,\n Christian Borntraeger <borntraeger@linux.ibm.com>,\n Sven Schnelle <svens@linux.ibm.com>,\n Alexei Starovoitov <ast@kernel.org>,\n Daniel Borkmann <daniel@iogearbox.net>,\n Jesper Dangaard Brouer <hawk@kernel.org>,\n John Fastabend <john.fastabend@gmail.com>,\n Vincent Whitchurch <vincent.whitchurch@axis.com>,\n linux-um@lists.infradead.org,\n netdev@vger.kernel.org,\n platform-driver-x86@vger.kernel.org,\n linux-remoteproc@vger.kernel.org,\n linux-s390@vger.kernel.org,\n kvm@vger.kernel.org,\n bpf@vger.kernel.org,\n kangjie.xu@linux.alibaba.com,\n virtualization@lists.linux-foundation.org","References":"<20220720030436.79520-1-xuanzhuo@linux.alibaba.com>\n <20220720030436.79520-31-xuanzhuo@linux.alibaba.com>\n <efb6adca-a2a8-98d2-5604-5482d8be6ec9@redhat.com>","In-Reply-To":"<efb6adca-a2a8-98d2-5604-5482d8be6ec9@redhat.com>","X-CRM114-Version":"20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ","X-CRM114-CacheID":"sfid-20220721_200610_635416_A8E653D6 ","X-CRM114-Status":"GOOD (  31.72  )","X-Spam-Score":"-8.0 (--------)","X-Spam-Report":"=?unknown-8bit?q?Spam_detection_software=2C_running_on_the_sy?=\n\t=?unknown-8bit?q?stem_=22bombadil=2Einfradead=2Eorg=22=2C?=\n\t=?unknown-8bit?q?_has_NOT_identified_this_incoming_email_as_spam=2E__The_ori?=\n\t=?unknown-8bit?q?ginal?=\n\t=?unknown-8bit?q?_message_has_been_attached_to_this_so_you_can_view_it_or_la?=\n\t=?unknown-8bit?q?bel?=\n\t=?unknown-8bit?q?_similar_future_email=2E__If_you_have_any_questions=2C_see?=\n\t=?unknown-8bit?q?_the_administrator_of_that_system_for_details=2E?=\n\t=?unknown-8bit?q?_?=\n\t=?unknown-8bit?q?_Content_preview=3A__On_Thu=2C_21_Jul_2022_17=3A15=3A11_+08?=\n\t=?unknown-8bit?q?00=2C_Jason_Wang_=3Cjasowang=40redhat=2Ecom=3E?=\n\t=?unknown-8bit?b?IHdyb3RlOiA+ID4g5ZyoIDIwMjIvNy8yMCAxMTowNCwgWHVhbiBaaHVv?=\n\t=?unknown-8bit?b?IOWGmemBkzogPiA+IFRoaXMgcGF0Y2ggaW1wbGVtZW50cw==?=\n\t=?unknown-8bit?q?_virtio_pci_support_for_QUEUE_RESET=2E_=3E_=3E_=3E_=3E_Perf?=\n\t=?unknown-8bit?q?orming_=5B=2E=2E=2E=5D_?=\n\t=?unknown-8bit?q?_?=\n\t=?unknown-8bit?q?_Content_analysis_details=3A___=28-8=2E0_points=2C_5=2E0_re?=\n\t=?unknown-8bit?q?quired=29?=\n\t=?unknown-8bit?q?_?=\n\t=?unknown-8bit?q?_pts_rule_name______________description?=\n\t=?unknown-8bit?q?_----_----------------------_------------------------------?=\n\t=?unknown-8bit?q?--------------------?=\n\t=?unknown-8bit?q?_-0=2E0_RCVD=5FIN=5FDNSWL=5FNONE_____RBL=3A_Sender_listed_a?=\n\t=?unknown-8bit?q?t_https=3A//www=2Ednswl=2Eorg/=2C?=\n\t=?unknown-8bit?q?_no_trust?=\n\t=?unknown-8bit?q?_=5B115=2E124=2E30=2E54_listed_in_list=2Ednswl=2Eorg=5D?=\n\t=?unknown-8bit?q?_-0=2E0_SPF=5FPASS_______________SPF=3A_sender_matches_SPF_?=\n\t=?unknown-8bit?q?record?=\n\t=?unknown-8bit?q?_0=2E0_SPF=5FHELO=5FNONE__________SPF=3A_HELO_does_not_publ?=\n\t=?unknown-8bit?q?ish_an_SPF_Record?=\n\t=?unknown-8bit?q?_-7=2E5_USER=5FIN=5FDEF=5FSPF=5FWL_____From=3A_address_is_i?=\n\t=?unknown-8bit?q?n_the_default_SPF?=\n\t=?unknown-8bit?q?_white-list?=\n\t=?unknown-8bit?q?_-0=2E5_ENV=5FAND=5FHDR=5FSPF=5FMATCH__Env_and_Hdr_From_use?=\n\t=?unknown-8bit?q?d_in_default_SPF_WL?=\n\t=?unknown-8bit?q?_Match?=\n\t=?unknown-8bit?q?_0=2E0_UNPARSEABLE=5FRELAY______Informational=3A_message_ha?=\n\t=?unknown-8bit?q?s_unparseable_relay?=\n\t=?unknown-8bit?q?_lines?=","X-BeenThere":"linux-um@lists.infradead.org","X-Mailman-Version":"2.1.34","Precedence":"list","List-Id":"<linux-um.lists.infradead.org>","List-Unsubscribe":"<http://lists.infradead.org/mailman/options/linux-um>,\n <mailto:linux-um-request@lists.infradead.org?subject=unsubscribe>","List-Archive":"<http://lists.infradead.org/pipermail/linux-um/>","List-Post":"<mailto:linux-um@lists.infradead.org>","List-Help":"<mailto:linux-um-request@lists.infradead.org?subject=help>","List-Subscribe":"<http://lists.infradead.org/mailman/listinfo/linux-um>,\n <mailto:linux-um-request@lists.infradead.org?subject=subscribe>","MIME-Version":"1.0","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Sender":"\"linux-um\" <linux-um-bounces@lists.infradead.org>","Errors-To":"linux-um-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"}}]