From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=45.249.212.191; helo=huawei.com; envelope-from=zhengxiang9@huawei.com; receiver=edk2-devel@lists.01.org Received: from huawei.com (szxga05-in.huawei.com [45.249.212.191]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 46D11221E069B for ; Wed, 13 Dec 2017 22:51:30 -0800 (PST) Received: from DGGEMS404-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id E94485DEC208A; Thu, 14 Dec 2017 14:55:55 +0800 (CST) Received: from [127.0.0.1] (10.177.29.32) by DGGEMS404-HUB.china.huawei.com (10.3.19.204) with Microsoft SMTP Server id 14.3.361.1; Thu, 14 Dec 2017 14:55:47 +0800 To: Laszlo Ersek , Paolo Bonzini CC: , Ard Biesheuvel , Jordan Justen , Shannon Zhao , Maxime Coquelin References: <20171213031632.11856-1-zhengxiang9@huawei.com> <06533b91-8ff0-1ad2-56fa-5f2c4f56bb19@redhat.com> <7161de6e-99c2-ed81-bbf6-c7a89336c36d@redhat.com> From: "zhengxiang (A)" Message-ID: Date: Thu, 14 Dec 2017 14:55:47 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 In-Reply-To: X-Originating-IP: [10.177.29.32] X-CFilter-Loop: Reflected Subject: Re: [PATCH] OvmfPkg/VirtioScsiDxe: Allocate all required vrings at VirtioScsiInit X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Dec 2017 06:51:31 -0000 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Language: en-US Hello Laszlo and Paolo, Thanks for your review! On 2017/12/13 19:16, Laszlo Ersek wrote: > On 12/13/17 10:29, Paolo Bonzini wrote: >> On 13/12/2017 09:35, Laszlo Ersek wrote: >>> I consider the lack of a "VIRTIO_SCSI_F_MQ" feature bit an issue with >>> the virtio specification (and consequently with vhost-scsi), not with >>> the guest driver(s). >> VIRTIO_SCSI_F_MQ does not exist because virtio-scsi has _always_ >> supported multiqueue and has always had a "num_queues" field in the >> configuration space. For virtio-net, VIRTIO_NET_F_MQ does not say >> "the device or driver knows about multiqueue", it says "the device or >> driver wants to read max_virtqueue_pairs" from configuration space. >> It's perfectly fine for a device to propose VIRTIO_NET_F_MQ and set >> max_virtqueue_pairs=1, or for a driver to negotiate VIRTIO_NET_F_MQ >> and then skip initialization of some virtqueues. >> >> This also means that Maxime's patch to DPDK is also not enough. :) >> Virtio-net actually does have a configuration mechanism for >> multiqueue, namely the VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET command; the >> driver sends that command specifying the number of the transmit and >> receive queues to use. However, in my understanding, that command is >> only needed for the device to configure receive flow steering, so >> virtio-scsi doesn't need that either. >> >>> Perhaps you can update vhost-scsi similarly to the last patch of >>> Maxime's v4 series, even without "VIRTIO_SCSI_F_MQ" -- in the >>> SET_FEATURES request handler, just destroy the unused virtqueues that >>> have not been configured by the guest driver until that time? >> Yes, this is the right solution. We can assume that if the descriptor >> address is equal to zero, the queue is not in use. This is not in the >> spec as far as I can see, but it is QEMU's assumption. I will send a >> patch to the virtio specification. I would try this solution! However, is there any possibility that the allocated descriptor address is exactly equal to zero and the queue is in use? Moreover, is it feasible to skip the vhost_virtqueue_start() call for the unused queues in vhost_dev_start() in QEMU? Thanks, Xiang