From patchwork Tue Jun 9 17:02:12 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Hajnoczi X-Patchwork-Id: 11596235 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2C77992A for ; Tue, 9 Jun 2020 17:22:18 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B3E9620691 for ; Tue, 9 Jun 2020 17:22:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="TvulPAED" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B3E9620691 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:41264 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jihx2-0007Ia-Pu for patchwork-qemu-devel@patchwork.kernel.org; Tue, 09 Jun 2020 13:22:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51694) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiheE-0003jr-Rm for qemu-devel@nongnu.org; Tue, 09 Jun 2020 13:02:50 -0400 Received: from us-smtp-2.mimecast.com ([207.211.31.81]:38803 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jiheD-0007Rs-R3 for qemu-devel@nongnu.org; Tue, 09 Jun 2020 13:02:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1591722169; 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=qF88Pnhc3gxM5yDMB0InTKt9dbTPBc7inrRPDmmW7V8=; b=TvulPAEDdwrEvERYILL5PImF3G8bEmX1j5D5Po2iyBOq8PV+yYNDIfNE+7VSErdujqvN1Z FhrImi8T/ytbda+YUTFLl3KzgRHRBbRwj9w0L+/HyAkPDQHg43a4qV2u7Dl+NQVl2NC3bI w28XFigAxzTM1A2B8+u/NwUMiBMOUsc= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-43-qt7p7kgbNsektfhZ3ATYYQ-1; Tue, 09 Jun 2020 13:02:45 -0400 X-MC-Unique: qt7p7kgbNsektfhZ3ATYYQ-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 34363801504; Tue, 9 Jun 2020 17:02:44 +0000 (UTC) Received: from localhost (ovpn-115-52.ams2.redhat.com [10.36.115.52]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2EA245D9E4; Tue, 9 Jun 2020 17:02:32 +0000 (UTC) From: Stefan Hajnoczi To: qemu-devel@nongnu.org Subject: [PATCH v2 1/7] tests/libqos: mask out VIRTIO_F_RING_PACKED for now Date: Tue, 9 Jun 2020 18:02:12 +0100 Message-Id: <20200609170218.246468-2-stefanha@redhat.com> In-Reply-To: <20200609170218.246468-1-stefanha@redhat.com> References: <20200609170218.246468-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=stefanha@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/08 23:42:34 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MIME_BASE64_TEXT=1.741, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Fam Zheng , Thomas Huth , Eduardo Habkost , qemu-block@nongnu.org, "Michael S. Tsirkin" , Laurent Vivier , jasowang@redhat.com, cohuck@redhat.com, Stefan Hajnoczi , "Dr. David Alan Gilbert" , Raphael Norwitz , "Gonglei \(Arei\)" , Gerd Hoffmann , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , Max Reitz Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" The libqos VIRTIO code does not implement the packed virtqueue layout yet. Mask out the feature bit for now because tests have a habit of enabling all device feature bits and we don't want packed virtqueues to be enabled. Later patches will enable VIRTIO_F_RING_PACKED so prepare libqos now. Acked-by: Thomas Huth Signed-off-by: Stefan Hajnoczi --- tests/qtest/libqos/virtio.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/qtest/libqos/virtio.c b/tests/qtest/libqos/virtio.c index 9aa360620c..1c3f4a0c8b 100644 --- a/tests/qtest/libqos/virtio.c +++ b/tests/qtest/libqos/virtio.c @@ -96,7 +96,8 @@ uint64_t qvirtio_config_readq(QVirtioDevice *d, uint64_t addr) uint64_t qvirtio_get_features(QVirtioDevice *d) { - return d->bus->get_features(d); + /* qvirtio does not support packed virtqueues yet */ + return d->bus->get_features(d) & ~(1ull << VIRTIO_F_RING_PACKED); } void qvirtio_set_features(QVirtioDevice *d, uint64_t features) From patchwork Tue Jun 9 17:02:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stefan Hajnoczi X-Patchwork-Id: 11596249 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6DFB492A for ; Tue, 9 Jun 2020 17:29:04 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 428D820774 for ; Tue, 9 Jun 2020 17:29:04 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="WxTLnpi7" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 428D820774 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:38252 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jii3b-0001Di-DT for patchwork-qemu-devel@patchwork.kernel.org; Tue, 09 Jun 2020 13:29:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51744) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiheT-00043o-UA for qemu-devel@nongnu.org; Tue, 09 Jun 2020 13:03:05 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:48983 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jiheS-0007Xq-Jd for qemu-devel@nongnu.org; Tue, 09 Jun 2020 13:03:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1591722183; 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=rAnKvQtas0Df8i94IWZGQbelkFtafrMMwgZzKd+IpYY=; b=WxTLnpi7e335hX0Y5l3aS42DSwTRpAYBjagBD91JwvvbHbaH/ZwRxXEmdUgCvAa3L/9VzM b1sF5Hczg2tZh8nhcOMepxhFbJPejaq6SGJK4taUmssXk9VtJLDcf4XV6bjd2kdZTYhkvA 7Shom+ZbFGmlXxqc9q5DEuxKmtEXyIA= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-418-I8TtLYdsONi7m_tEhKieMA-1; Tue, 09 Jun 2020 13:02:58 -0400 X-MC-Unique: I8TtLYdsONi7m_tEhKieMA-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 1FDC4107ACCD; Tue, 9 Jun 2020 17:02:57 +0000 (UTC) Received: from localhost (ovpn-115-52.ams2.redhat.com [10.36.115.52]) by smtp.corp.redhat.com (Postfix) with ESMTP id 758F560C87; Tue, 9 Jun 2020 17:02:45 +0000 (UTC) From: Stefan Hajnoczi To: qemu-devel@nongnu.org Subject: [PATCH v2 2/7] libvhost-user: advertise vring features Date: Tue, 9 Jun 2020 18:02:13 +0100 Message-Id: <20200609170218.246468-3-stefanha@redhat.com> In-Reply-To: <20200609170218.246468-1-stefanha@redhat.com> References: <20200609170218.246468-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.120; envelope-from=stefanha@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/09 02:44:16 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Fam Zheng , Thomas Huth , Eduardo Habkost , qemu-block@nongnu.org, "Michael S. Tsirkin" , Laurent Vivier , jasowang@redhat.com, cohuck@redhat.com, Stefan Hajnoczi , "Dr. David Alan Gilbert" , Raphael Norwitz , "Gonglei \(Arei\)" , Gerd Hoffmann , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , Max Reitz Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" libvhost-user implements several vring features without advertising them. There is no way for the vhost-user master to detect support for these features. Things more or less work today because QEMU assumes the vhost-user backend always implements certain feature bits like VIRTIO_RING_F_EVENT_IDX. This is not documented anywhere. This patch explicitly advertises features implemented in libvhost-user so that the vhost-user master does not need to make undocumented assumptions. Feature bits that libvhost-user now advertises can be removed from vhost-user-blk.c. Devices should not be responsible for advertising vring feature bits, that is libvhost-user's job. Cc: Jason Wang Cc: Michael S. Tsirkin Signed-off-by: Stefan Hajnoczi Reviewed-by: Marc-André Lureau --- I have tested make check and virtiofsd. --- contrib/libvhost-user/libvhost-user.c | 10 ++++++++++ contrib/vhost-user-blk/vhost-user-blk.c | 4 +--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/contrib/libvhost-user/libvhost-user.c b/contrib/libvhost-user/libvhost-user.c index 3bca996c62..b43874ba12 100644 --- a/contrib/libvhost-user/libvhost-user.c +++ b/contrib/libvhost-user/libvhost-user.c @@ -495,6 +495,16 @@ static bool vu_get_features_exec(VuDev *dev, VhostUserMsg *vmsg) { vmsg->payload.u64 = + /* + * The following VIRTIO feature bits are supported by our virtqueue + * implementation: + */ + 1ULL << VIRTIO_F_NOTIFY_ON_EMPTY | + 1ULL << VIRTIO_RING_F_INDIRECT_DESC | + 1ULL << VIRTIO_RING_F_EVENT_IDX | + 1ULL << VIRTIO_F_VERSION_1 | + + /* vhost-user feature bits */ 1ULL << VHOST_F_LOG_ALL | 1ULL << VHOST_USER_F_PROTOCOL_FEATURES; diff --git a/contrib/vhost-user-blk/vhost-user-blk.c b/contrib/vhost-user-blk/vhost-user-blk.c index 6fd91c7e99..25eccd02b5 100644 --- a/contrib/vhost-user-blk/vhost-user-blk.c +++ b/contrib/vhost-user-blk/vhost-user-blk.c @@ -382,9 +382,7 @@ vub_get_features(VuDev *dev) 1ull << VIRTIO_BLK_F_DISCARD | 1ull << VIRTIO_BLK_F_WRITE_ZEROES | #endif - 1ull << VIRTIO_BLK_F_CONFIG_WCE | - 1ull << VIRTIO_F_VERSION_1 | - 1ull << VHOST_USER_F_PROTOCOL_FEATURES; + 1ull << VIRTIO_BLK_F_CONFIG_WCE; if (vdev_blk->enable_ro) { features |= 1ull << VIRTIO_BLK_F_RO; From patchwork Tue Jun 9 17:02:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Hajnoczi X-Patchwork-Id: 11596241 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DF4E4618 for ; Tue, 9 Jun 2020 17:24:28 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B516F20774 for ; Tue, 9 Jun 2020 17:24:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="BlDORSuM" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B516F20774 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:49934 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jihz9-0002Vx-U3 for patchwork-qemu-devel@patchwork.kernel.org; Tue, 09 Jun 2020 13:24:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51776) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jihec-0004Kc-NB for qemu-devel@nongnu.org; Tue, 09 Jun 2020 13:03:14 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:30875 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jiheb-0007aQ-NT for qemu-devel@nongnu.org; Tue, 09 Jun 2020 13:03:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1591722192; 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=TkQ44PTxX2eS9NNAe6MLYdIuw4/KeDlhn5YNPr177VY=; b=BlDORSuMGV844JKEHfmxUuxqv+iUJUJuhur3pMBtARCGlm8C+aZnQEKlVdAEg3G/d64rn3 XGvjWABKlgPcj20YvS0crSWwAzp2prQMjjhoZQ5jcdXnRXTY4WUHv2zfd9wRNfTlgn6V5G bG2kohnJd1jtS6zvs//RKp03KVN70oc= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-294-9LnoJ3V8PnSPE46RUhlCJA-1; Tue, 09 Jun 2020 13:03:11 -0400 X-MC-Unique: 9LnoJ3V8PnSPE46RUhlCJA-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id D433A107ACF4; Tue, 9 Jun 2020 17:03:09 +0000 (UTC) Received: from localhost (ovpn-115-52.ams2.redhat.com [10.36.115.52]) by smtp.corp.redhat.com (Postfix) with ESMTP id 83D8F5D9E4; Tue, 9 Jun 2020 17:02:58 +0000 (UTC) From: Stefan Hajnoczi To: qemu-devel@nongnu.org Subject: [PATCH v2 3/7] docs: document non-net VHOST_USER_GET_FEATURES behavior Date: Tue, 9 Jun 2020 18:02:14 +0100 Message-Id: <20200609170218.246468-4-stefanha@redhat.com> In-Reply-To: <20200609170218.246468-1-stefanha@redhat.com> References: <20200609170218.246468-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.120; envelope-from=stefanha@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/09 02:44:16 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MIME_BASE64_TEXT=1.741, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Fam Zheng , Thomas Huth , Eduardo Habkost , qemu-block@nongnu.org, "Michael S. Tsirkin" , Laurent Vivier , jasowang@redhat.com, cohuck@redhat.com, Stefan Hajnoczi , "Dr. David Alan Gilbert" , Raphael Norwitz , Ben Walker , "Gonglei \(Arei\)" , Gerd Hoffmann , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , Max Reitz , Sebastien Boeuf Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" QEMU enabled several feature bits for non-net devices without allowing the device backend to control them. This only works when the device backend implements support for those features. It won't work for new features like the packed virtqueue layout, where proper feature negotiation will be needed. Document the legacy behavior and specify that device backends must report features so that we can avoid problems in the future. Cc: Ben Walker Cc: Sebastien Boeuf Signed-off-by: Stefan Hajnoczi --- CCing SPDK and cloud-hypervisor folks in case they are affected. DPDK isn't affected since vhost-user-net performs full feature negotiation. --- docs/interop/vhost-user.rst | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docs/interop/vhost-user.rst b/docs/interop/vhost-user.rst index 3b1b6602c7..dfadee411d 100644 --- a/docs/interop/vhost-user.rst +++ b/docs/interop/vhost-user.rst @@ -290,6 +290,27 @@ bit was dedicated for this purpose:: #define VHOST_USER_F_PROTOCOL_FEATURES 30 +Feature negotiation +------------------- +The master fetches features from the backend using the +``VHOST_USER_GET_FEATURES`` message. The feature bits correspond to those from +the virtio specification, VHOST_F_LOG_ALL (26), and +``VHOST_USER_F_PROTOCOL_FEATURES`` (30). + +Backends must report all supported feature bits. If a feature bit is set then +the master may set it in the ``VHOST_USER_SET_FEATURES`` message. If a feature +bit is cleared then the master must not set it in the +``VHOST_USER_SET_FEATURES`` message. + +For devices other than the networking device, masters may assume the following +feature bits are always set in ``VHOST_USER_GET_FEATURES`` for compatibility +with legacy backend implementations that do not report them correctly: +* ``VIRTIO_F_RING_INDIRECT_DESC`` +* ``VIRTIO_F_RING_EVENT_IDX`` +* ``VIRTIO_F_VERSION_1`` +* ``VIRTIO_F_NOTIFY_ON_EMPTY`` +* ``VIRTIO_F_ANY_LAYOUT`` + Starting and stopping rings --------------------------- From patchwork Tue Jun 9 17:02:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Hajnoczi X-Patchwork-Id: 11596263 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5CEF7618 for ; Tue, 9 Jun 2020 17:33:35 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 21C2C20691 for ; Tue, 9 Jun 2020 17:33:35 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="E68CyAE8" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 21C2C20691 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:51462 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jii7y-0006pV-92 for patchwork-qemu-devel@patchwork.kernel.org; Tue, 09 Jun 2020 13:33:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51826) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jiher-0004l7-Ov for qemu-devel@nongnu.org; Tue, 09 Jun 2020 13:03:29 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:26921 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jiheq-0007cH-Ew for qemu-devel@nongnu.org; Tue, 09 Jun 2020 13:03:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1591722207; 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=rsgvzTEwMAiOGtcr5HbITQzEbqGEfdUCE+BFNgeiYgg=; b=E68CyAE83xYFBs34nyK/8a7wQA1IXoignhwIeNIsDZFrQw4r+qNHQHlQE8Eg8RU+FCB/xP 2Ytk+TTLBIETKlE/VYXDsiQINlCAK/DEcB/CMGR9HBMLjuydZYP9uCh1/t7J1FNdYimiu/ iMdEZR5iHLvmA41zp52x+vEyxsg22tk= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-227-BSHehA1KOAW7e8rqAJvaJA-1; Tue, 09 Jun 2020 13:03:23 -0400 X-MC-Unique: BSHehA1KOAW7e8rqAJvaJA-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5D9568015CE; Tue, 9 Jun 2020 17:03:22 +0000 (UTC) Received: from localhost (ovpn-115-52.ams2.redhat.com [10.36.115.52]) by smtp.corp.redhat.com (Postfix) with ESMTP id 565F51001281; Tue, 9 Jun 2020 17:03:11 +0000 (UTC) From: Stefan Hajnoczi To: qemu-devel@nongnu.org Subject: [PATCH v2 4/7] vhost: involve device backends in feature negotiation Date: Tue, 9 Jun 2020 18:02:15 +0100 Message-Id: <20200609170218.246468-5-stefanha@redhat.com> In-Reply-To: <20200609170218.246468-1-stefanha@redhat.com> References: <20200609170218.246468-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=stefanha@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/08 23:42:34 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MIME_BASE64_TEXT=1.741, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Fam Zheng , Thomas Huth , Eduardo Habkost , qemu-block@nongnu.org, "Michael S. Tsirkin" , Laurent Vivier , jasowang@redhat.com, cohuck@redhat.com, Stefan Hajnoczi , "Dr. David Alan Gilbert" , Raphael Norwitz , "Gonglei \(Arei\)" , Gerd Hoffmann , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , Max Reitz Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Many vhost devices in QEMU currently do not involve the device backend in feature negotiation. This seems fine at first glance when no device-specific feature bits are defined (virtio-net has many but some devices have none). Unfortunately this causes problems when QEMU's virtqueue implementation and the device backend's implementation support different features. QEMU must not report features to the guest that aren't supported by the device backend. For example, QEMU supports VIRTIO 1.1 packed virtqueues while many existing vhost device backends do not. The device backend breaks when the user sets packed=on. This should have been handled gracefully by feature negotiation instead of resulting in a cryptic failure when the device backend cannot parse the vring. Introduce the vhost_old_default_feature_bits[] array so existing devices can involve the device backend in feature negotiation. libvhost-user does not report VIRTIO_RING_F_INDIRECT_DESC and other core feature bits even though it implements them. Therefore vhost_old_default_feature_bits[] only includes feature bits that can be explicitly negotiated without breaking existing libvhost-user device backends. This patch fixes the following error: $ x86_64-softmmu/qemu-system-x86_64 \ -drive if=virtio,file=test.img,format=raw \ -chardev socket,path=/tmp/vhost-user-blk.sock,id=char0 \ -device vhost-user-blk-pci,chardev=char0,packed=on \ -object memory-backend-memfd,size=1G,share=on,id=ram0 \ -M accel=kvm,memory-backend=ram0 qemu-system-x86_64: Failed to set msg fds. qemu-system-x86_64: vhost VQ 0 ring restore failed: -1: Success (0) The vhost-user-blk backend failed as follows: $ ./vhost-user-blk --socket-path=/tmp/vhost-user-blk.sock -b test2.img vu_panic: virtio: zero sized buffers are not allowed virtio-blk request missing headers Signed-off-by: Stefan Hajnoczi --- include/hw/virtio/vhost.h | 1 + include/hw/virtio/virtio-gpu.h | 2 ++ include/sysemu/cryptodev-vhost.h | 11 +++++++++++ backends/cryptodev-vhost.c | 21 +++++++++++++++++++++ hw/display/vhost-user-gpu.c | 18 ++++++++++++++++++ hw/display/virtio-gpu-base.c | 2 +- hw/input/vhost-user-input.c | 11 +++++++++++ hw/virtio/vhost-user-fs.c | 6 ++++-- hw/virtio/vhost-vsock.c | 7 +++++-- hw/virtio/vhost.c | 24 ++++++++++++++++++++++++ hw/virtio/virtio-crypto.c | 3 ++- 11 files changed, 100 insertions(+), 6 deletions(-) diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h index 085450c6f8..4cd278a395 100644 --- a/include/hw/virtio/vhost.h +++ b/include/hw/virtio/vhost.h @@ -110,6 +110,7 @@ bool vhost_virtqueue_pending(struct vhost_dev *hdev, int n); */ void vhost_virtqueue_mask(struct vhost_dev *hdev, VirtIODevice *vdev, int n, bool mask); +extern const int vhost_old_default_feature_bits[]; uint64_t vhost_get_features(struct vhost_dev *hdev, const int *feature_bits, uint64_t features); void vhost_ack_features(struct vhost_dev *hdev, const int *feature_bits, diff --git a/include/hw/virtio/virtio-gpu.h b/include/hw/virtio/virtio-gpu.h index 6dd57f2025..41d270d80e 100644 --- a/include/hw/virtio/virtio-gpu.h +++ b/include/hw/virtio/virtio-gpu.h @@ -192,6 +192,8 @@ bool virtio_gpu_base_device_realize(DeviceState *qdev, void virtio_gpu_base_reset(VirtIOGPUBase *g); void virtio_gpu_base_fill_display_info(VirtIOGPUBase *g, struct virtio_gpu_resp_display_info *dpy_info); +uint64_t virtio_gpu_base_get_features(VirtIODevice *vdev, uint64_t features, + Error **errp); /* virtio-gpu.c */ void virtio_gpu_ctrl_response(VirtIOGPU *g, diff --git a/include/sysemu/cryptodev-vhost.h b/include/sysemu/cryptodev-vhost.h index f42824fbde..e629446bfb 100644 --- a/include/sysemu/cryptodev-vhost.h +++ b/include/sysemu/cryptodev-vhost.h @@ -122,6 +122,17 @@ int cryptodev_vhost_start(VirtIODevice *dev, int total_queues); */ void cryptodev_vhost_stop(VirtIODevice *dev, int total_queues); +/** + * cryptodev_vhost_get_features: + * @dev: the virtio crypto object + * @requested_features: the features being offered + * + * Returns: the requested features bits that are supported by the vhost device, + * or the original request feature bits if vhost is disabled + * + */ +uint64_t cryptodev_vhost_get_features(VirtIODevice *dev, uint64_t features); + /** * cryptodev_vhost_virtqueue_mask: * @dev: the virtio crypto object diff --git a/backends/cryptodev-vhost.c b/backends/cryptodev-vhost.c index 8337c9a495..945004c536 100644 --- a/backends/cryptodev-vhost.c +++ b/backends/cryptodev-vhost.c @@ -266,6 +266,22 @@ void cryptodev_vhost_stop(VirtIODevice *dev, int total_queues) assert(r >= 0); } +uint64_t cryptodev_vhost_get_features(VirtIODevice *dev, uint64_t features) +{ + VirtIOCrypto *vcrypto = VIRTIO_CRYPTO(dev); + CryptoDevBackend *b = vcrypto->cryptodev; + CryptoDevBackendClient *cc = b->conf.peers.ccs[0]; + CryptoDevBackendVhost *vhost_crypto = cryptodev_get_vhost(cc, b, 0); + + if (!vhost_crypto) { + return features; /* vhost disabled */ + } + + return vhost_get_features(&vhost_crypto->dev, + vhost_old_default_feature_bits, + features); +} + void cryptodev_vhost_virtqueue_mask(VirtIODevice *dev, int queue, int idx, bool mask) @@ -333,6 +349,11 @@ void cryptodev_vhost_stop(VirtIODevice *dev, int total_queues) { } +uint64_t cryptodev_vhost_get_features(VirtIODevice *dev, uint64_t features) +{ + return features; +} + void cryptodev_vhost_virtqueue_mask(VirtIODevice *dev, int queue, int idx, bool mask) diff --git a/hw/display/vhost-user-gpu.c b/hw/display/vhost-user-gpu.c index 4cdaee1bde..eeb000bcbe 100644 --- a/hw/display/vhost-user-gpu.c +++ b/hw/display/vhost-user-gpu.c @@ -466,6 +466,23 @@ vhost_user_gpu_set_config(VirtIODevice *vdev, } } +static uint64_t +vhost_user_gpu_get_features(VirtIODevice *vdev, uint64_t features, + Error **errp) +{ + VhostUserGPU *g = VHOST_USER_GPU(vdev); + Error *local_err = NULL; + + features = virtio_gpu_base_get_features(vdev, features, &local_err); + if (local_err) { + error_propagate(errp, local_err); + return 0; + } + + return vhost_get_features(&g->vhost->dev, vhost_old_default_feature_bits, + features); +} + static void vhost_user_gpu_set_status(VirtIODevice *vdev, uint8_t val) { @@ -582,6 +599,7 @@ vhost_user_gpu_class_init(ObjectClass *klass, void *data) vdc->realize = vhost_user_gpu_device_realize; vdc->reset = vhost_user_gpu_reset; + vdc->get_features = vhost_user_gpu_get_features; vdc->set_status = vhost_user_gpu_set_status; vdc->guest_notifier_mask = vhost_user_gpu_guest_notifier_mask; vdc->guest_notifier_pending = vhost_user_gpu_guest_notifier_pending; diff --git a/hw/display/virtio-gpu-base.c b/hw/display/virtio-gpu-base.c index c159351be3..05d1ff2db2 100644 --- a/hw/display/virtio-gpu-base.c +++ b/hw/display/virtio-gpu-base.c @@ -176,7 +176,7 @@ virtio_gpu_base_device_realize(DeviceState *qdev, return true; } -static uint64_t +uint64_t virtio_gpu_base_get_features(VirtIODevice *vdev, uint64_t features, Error **errp) { diff --git a/hw/input/vhost-user-input.c b/hw/input/vhost-user-input.c index 63984a8ba7..c9ec675c49 100644 --- a/hw/input/vhost-user-input.c +++ b/hw/input/vhost-user-input.c @@ -45,6 +45,16 @@ static void vhost_input_change_active(VirtIOInput *vinput) } } +static uint64_t vhost_input_get_features(VirtIODevice *vdev, uint64_t features, + Error **errp) +{ + VHostUserInput *vhi = VHOST_USER_INPUT(vdev); + + return vhost_get_features(&vhi->vhost->dev, + vhost_old_default_feature_bits, + features); +} + static void vhost_input_get_config(VirtIODevice *vdev, uint8_t *config_data) { VirtIOInput *vinput = VIRTIO_INPUT(vdev); @@ -89,6 +99,7 @@ static void vhost_input_class_init(ObjectClass *klass, void *data) DeviceClass *dc = DEVICE_CLASS(klass); dc->vmsd = &vmstate_vhost_input; + vdc->get_features = vhost_input_get_features; vdc->get_config = vhost_input_get_config; vdc->set_config = vhost_input_set_config; vic->realize = vhost_input_realize; diff --git a/hw/virtio/vhost-user-fs.c b/hw/virtio/vhost-user-fs.c index 1bc5d03a00..9ca9f9d3d8 100644 --- a/hw/virtio/vhost-user-fs.c +++ b/hw/virtio/vhost-user-fs.c @@ -130,8 +130,10 @@ static uint64_t vuf_get_features(VirtIODevice *vdev, uint64_t requested_features, Error **errp) { - /* No feature bits used yet */ - return requested_features; + VHostUserFS *fs = VHOST_USER_FS(vdev); + + return vhost_get_features(&fs->vhost_dev, vhost_old_default_feature_bits, + requested_features); } static void vuf_handle_output(VirtIODevice *vdev, VirtQueue *vq) diff --git a/hw/virtio/vhost-vsock.c b/hw/virtio/vhost-vsock.c index 4a228f5168..b96b03cb06 100644 --- a/hw/virtio/vhost-vsock.c +++ b/hw/virtio/vhost-vsock.c @@ -180,8 +180,11 @@ static uint64_t vhost_vsock_get_features(VirtIODevice *vdev, uint64_t requested_features, Error **errp) { - /* No feature bits used yet */ - return requested_features; + VHostVSock *vsock = VHOST_VSOCK(vdev); + + return vhost_get_features(&vsock->vhost_dev, + vhost_old_default_feature_bits, + requested_features); } static void vhost_vsock_handle_output(VirtIODevice *vdev, VirtQueue *vq) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index aff98a0ede..56d671852b 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1454,6 +1454,30 @@ void vhost_virtqueue_mask(struct vhost_dev *hdev, VirtIODevice *vdev, int n, } } +/* + * Default vhost_get_features() feature bits for existing device types that do + * not define their own. + * + * This is a workaround for existing device types, do not use this in new vhost + * device types. Explicitly define a list of feature bits instead. + * + * The following feature bits are excluded because libvhost-user device + * backends did not advertise them for a long time. Therefore we cannot detect + * their presence. Instead we assume they are always supported by the device + * backend: + * VIRTIO_F_NOTIFY_ON_EMPTY + * VIRTIO_F_ANY_LAYOUT + * VIRTIO_F_VERSION_1 + * VIRTIO_RING_F_INDIRECT_DESC + * VIRTIO_RING_F_EVENT_IDX + */ +const int vhost_old_default_feature_bits[] = { + VIRTIO_F_IOMMU_PLATFORM, + VIRTIO_F_RING_PACKED, + VIRTIO_F_ORDER_PLATFORM, + VHOST_INVALID_FEATURE_BIT +}; + uint64_t vhost_get_features(struct vhost_dev *hdev, const int *feature_bits, uint64_t features) { diff --git a/hw/virtio/virtio-crypto.c b/hw/virtio/virtio-crypto.c index bd9165c565..ef711b56f4 100644 --- a/hw/virtio/virtio-crypto.c +++ b/hw/virtio/virtio-crypto.c @@ -739,7 +739,8 @@ static uint64_t virtio_crypto_get_features(VirtIODevice *vdev, uint64_t features, Error **errp) { - return features; + /* Just returns features when vhost is disabled */ + return cryptodev_vhost_get_features(vdev, features); } static void virtio_crypto_reset(VirtIODevice *vdev) From patchwork Tue Jun 9 17:02:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Hajnoczi X-Patchwork-Id: 11596261 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4053E618 for ; Tue, 9 Jun 2020 17:32:54 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 150B620691 for ; Tue, 9 Jun 2020 17:32:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="bYnDduhz" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 150B620691 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:49630 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jii7J-00063V-9c for patchwork-qemu-devel@patchwork.kernel.org; Tue, 09 Jun 2020 13:32:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51842) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jihf2-00057h-3h for qemu-devel@nongnu.org; Tue, 09 Jun 2020 13:03:40 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:56208 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jihf1-0007eI-6N for qemu-devel@nongnu.org; Tue, 09 Jun 2020 13:03:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1591722218; 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=TcbWQH7pJHVpoNeJquNw2ZsCFOjczssRU3nlPknFYGU=; b=bYnDduhzY6+ONWZn20HMc4e7Y+jNTTeac6Wlv29x1mCCr9qKjFTF4r1IK5gP3raIHHCO2H 33cYhmC5o7yQKn3k6jiRNzXCwFGKKYRaTWsoVBsgwLA9q1sS54ueeGz0TDn3YZ/7J+2HoD H728/wLlHqjLljVeoqeyGegULisezXU= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-231-bxu390EONniWOfF15S7FgQ-1; Tue, 09 Jun 2020 13:03:36 -0400 X-MC-Unique: bxu390EONniWOfF15S7FgQ-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 744B1461; Tue, 9 Jun 2020 17:03:35 +0000 (UTC) Received: from localhost (ovpn-115-52.ams2.redhat.com [10.36.115.52]) by smtp.corp.redhat.com (Postfix) with ESMTP id EFA27768AE; Tue, 9 Jun 2020 17:03:23 +0000 (UTC) From: Stefan Hajnoczi To: qemu-devel@nongnu.org Subject: [PATCH v2 5/7] vhost-user-blk: add VIRTIO_F_RING_PACKED feature bit Date: Tue, 9 Jun 2020 18:02:16 +0100 Message-Id: <20200609170218.246468-6-stefanha@redhat.com> In-Reply-To: <20200609170218.246468-1-stefanha@redhat.com> References: <20200609170218.246468-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=stefanha@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/08 23:42:34 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MIME_BASE64_TEXT=1.741, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Fam Zheng , Thomas Huth , Eduardo Habkost , qemu-block@nongnu.org, "Michael S. Tsirkin" , Laurent Vivier , jasowang@redhat.com, cohuck@redhat.com, Stefan Hajnoczi , "Dr. David Alan Gilbert" , Raphael Norwitz , "Gonglei \(Arei\)" , Gerd Hoffmann , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , Max Reitz Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Vhost devices have a list of feature bits that the device backend is allowed to control. The VIRTIO_F_RING_PACKED feature is a feature that must be negotiated through all the way to the device backend. Add it so the device backend can declare whether or not it supports the packed ring layout. Signed-off-by: Stefan Hajnoczi Reviewed-by: Raphael Norwitz --- hw/block/vhost-user-blk.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c index 9d8c0b3909..10e114a19a 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -44,6 +44,7 @@ static const int user_feature_bits[] = { VIRTIO_BLK_F_DISCARD, VIRTIO_BLK_F_WRITE_ZEROES, VIRTIO_F_VERSION_1, + VIRTIO_F_RING_PACKED, VIRTIO_RING_F_INDIRECT_DESC, VIRTIO_RING_F_EVENT_IDX, VIRTIO_F_NOTIFY_ON_EMPTY, From patchwork Tue Jun 9 17:02:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Hajnoczi X-Patchwork-Id: 11596239 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 83238618 for ; Tue, 9 Jun 2020 17:23:47 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 56F5720774 for ; Tue, 9 Jun 2020 17:23:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Pu9IIzA8" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 56F5720774 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46750 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jihyU-00019b-It for patchwork-qemu-devel@patchwork.kernel.org; Tue, 09 Jun 2020 13:23:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51874) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jihfH-0005Zm-GS for qemu-devel@nongnu.org; Tue, 09 Jun 2020 13:03:55 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:55389 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jihfG-0007fJ-8j for qemu-devel@nongnu.org; Tue, 09 Jun 2020 13:03:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1591722233; 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=vpBjdPJit81RyLQg32b3Yht5C7v5b4PqLtOChucBn8I=; b=Pu9IIzA8du5cabm+yse1D3T5dxM8g6EXRUWwqR4TBwgxJ7zyur4cguB8LqPSRtgi4NxjQ9 w01C7TSFEKlkxqG5xeZCKql4V3dEG+OToIDFH1QyI1u2ihvivglZxPBItpN/tWBQzUgYUp Jzr+ViPT0e6udoKeq4z6j8hoIyvSFUI= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-30-MrRZydAbNkKDwnDZECfKbQ-1; Tue, 09 Jun 2020 13:03:49 -0400 X-MC-Unique: MrRZydAbNkKDwnDZECfKbQ-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 44D131005512; Tue, 9 Jun 2020 17:03:48 +0000 (UTC) Received: from localhost (ovpn-115-52.ams2.redhat.com [10.36.115.52]) by smtp.corp.redhat.com (Postfix) with ESMTP id BE6B260C87; Tue, 9 Jun 2020 17:03:36 +0000 (UTC) From: Stefan Hajnoczi To: qemu-devel@nongnu.org Subject: [PATCH v2 6/7] vhost-scsi: add VIRTIO_F_VERSION_1 and VIRTIO_F_RING_PACKED Date: Tue, 9 Jun 2020 18:02:17 +0100 Message-Id: <20200609170218.246468-7-stefanha@redhat.com> In-Reply-To: <20200609170218.246468-1-stefanha@redhat.com> References: <20200609170218.246468-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.120; envelope-from=stefanha@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/09 02:44:16 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MIME_BASE64_TEXT=1.741, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Fam Zheng , Thomas Huth , Eduardo Habkost , qemu-block@nongnu.org, "Michael S. Tsirkin" , Laurent Vivier , jasowang@redhat.com, cohuck@redhat.com, Stefan Hajnoczi , "Dr. David Alan Gilbert" , Raphael Norwitz , "Gonglei \(Arei\)" , Gerd Hoffmann , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , Max Reitz Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Let vhost-scsi and vhost-user-scsi device backends determine whether VIRTIO 1.0 and packed virtqueues are supported. It doesn't make sense to handle these feature bits in QEMU since the device backend needs to support them if we want to use them. Signed-off-by: Stefan Hajnoczi Reviewed-by: Raphael Norwitz --- hw/scsi/vhost-scsi.c | 2 ++ hw/scsi/vhost-user-scsi.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/hw/scsi/vhost-scsi.c b/hw/scsi/vhost-scsi.c index c1b012aea4..a7fb788af5 100644 --- a/hw/scsi/vhost-scsi.c +++ b/hw/scsi/vhost-scsi.c @@ -34,6 +34,8 @@ /* Features supported by host kernel. */ static const int kernel_feature_bits[] = { + VIRTIO_F_VERSION_1, + VIRTIO_F_RING_PACKED, VIRTIO_F_NOTIFY_ON_EMPTY, VIRTIO_RING_F_INDIRECT_DESC, VIRTIO_RING_F_EVENT_IDX, diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c index cbb5d97599..6aa0d5ded2 100644 --- a/hw/scsi/vhost-user-scsi.c +++ b/hw/scsi/vhost-user-scsi.c @@ -32,6 +32,8 @@ /* Features supported by the host application */ static const int user_feature_bits[] = { + VIRTIO_F_VERSION_1, + VIRTIO_F_RING_PACKED, VIRTIO_F_NOTIFY_ON_EMPTY, VIRTIO_RING_F_INDIRECT_DESC, VIRTIO_RING_F_EVENT_IDX, From patchwork Tue Jun 9 17:02:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Hajnoczi X-Patchwork-Id: 11596265 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8843A913 for ; Tue, 9 Jun 2020 17:36:21 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5CA5C2074B for ; Tue, 9 Jun 2020 17:36:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Ra2pU8vh" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5CA5C2074B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:60848 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jiiAe-0002fT-HV for patchwork-qemu-devel@patchwork.kernel.org; Tue, 09 Jun 2020 13:36:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51870) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jihfH-0005Yh-0x for qemu-devel@nongnu.org; Tue, 09 Jun 2020 13:03:55 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:48367 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jihfG-0007fE-1A for qemu-devel@nongnu.org; Tue, 09 Jun 2020 13:03:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1591722233; 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=zJZxjrBJaT8eusDoBo1V3W0mMDRWiqAgNXG5M0R0cJ4=; b=Ra2pU8vhnlAyunE67stUEzce2nXceIh1DUOwm/iY+K/8j28pCnepqMBxAgaHCzQpVDxkB7 fkLbm2F1dfWJzOyAmVrtyubb3ffj5ndO6dXiDClRlmp0v8C308QWzkEAy1CCnrsiHoHf+O LGFVyKl4xgg/v5UgHkpxAsVIwCsK4ZU= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-311-PvG-7KOvMQSyiYyfOCn0Ww-1; Tue, 09 Jun 2020 13:03:51 -0400 X-MC-Unique: PvG-7KOvMQSyiYyfOCn0Ww-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 361B9801504; Tue, 9 Jun 2020 17:03:50 +0000 (UTC) Received: from localhost (ovpn-115-52.ams2.redhat.com [10.36.115.52]) by smtp.corp.redhat.com (Postfix) with ESMTP id BBED061984; Tue, 9 Jun 2020 17:03:49 +0000 (UTC) From: Stefan Hajnoczi To: qemu-devel@nongnu.org Subject: [PATCH v2 7/7] virtio: enable VIRTIO_F_RING_PACKED for all devices Date: Tue, 9 Jun 2020 18:02:18 +0100 Message-Id: <20200609170218.246468-8-stefanha@redhat.com> In-Reply-To: <20200609170218.246468-1-stefanha@redhat.com> References: <20200609170218.246468-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.120; envelope-from=stefanha@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/09 01:38:49 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MIME_BASE64_TEXT=1.741, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Fam Zheng , Thomas Huth , Eduardo Habkost , qemu-block@nongnu.org, "Michael S. Tsirkin" , Laurent Vivier , jasowang@redhat.com, cohuck@redhat.com, Stefan Hajnoczi , "Dr. David Alan Gilbert" , Raphael Norwitz , "Gonglei \(Arei\)" , Gerd Hoffmann , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , Max Reitz Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" The packed virtqueue layout was introduced in VIRTIO 1.1. It is a single ring instead of a split avail/used ring design. There are CPU cache advantages to this layout and it is also suited better to hardware implementation. The vhost-net backend has already supported packed virtqueues for some time. Performance benchmarks show that virtio-blk performance on NVMe drives is also improved. Go ahead and enable this feature for all VIRTIO devices. Keep it disabled for QEMU 5.0 and earlier machine types. Signed-off-by: Stefan Hajnoczi --- include/hw/virtio/virtio.h | 2 +- hw/core/machine.c | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h index b69d517496..fd5b4a2044 100644 --- a/include/hw/virtio/virtio.h +++ b/include/hw/virtio/virtio.h @@ -292,7 +292,7 @@ typedef struct VirtIORNGConf VirtIORNGConf; DEFINE_PROP_BIT64("iommu_platform", _state, _field, \ VIRTIO_F_IOMMU_PLATFORM, false), \ DEFINE_PROP_BIT64("packed", _state, _field, \ - VIRTIO_F_RING_PACKED, false) + VIRTIO_F_RING_PACKED, true) hwaddr virtio_queue_get_desc_addr(VirtIODevice *vdev, int n); bool virtio_queue_enabled(VirtIODevice *vdev, int n); diff --git a/hw/core/machine.c b/hw/core/machine.c index bb3a7b18b1..a9bf76f318 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -28,7 +28,9 @@ #include "hw/mem/nvdimm.h" #include "migration/vmstate.h" -GlobalProperty hw_compat_5_0[] = {}; +GlobalProperty hw_compat_5_0[] = { + { "virtio-device", "packed", "off" }, +}; const size_t hw_compat_5_0_len = G_N_ELEMENTS(hw_compat_5_0); GlobalProperty hw_compat_4_2[] = {