From nobody Sat Nov 15 22:33:46 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747827445; cv=none; d=zohomail.com; s=zohoarc; b=N67fHZtlplilXplRNKfWKKckUL9qb1eT/ZV3y6IYzad8VvF868IweG7DihQbzTljz6CNWnZf0SfXjfCQRcyKlYHpdnp8ffxOgNaa8u7nNDv4hKKyWhbxY01XM0bZJqlzV01sySA8TvIAgwkUd/rXahYSeDQHRfobyFABb0GZ3I8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747827445; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=enaBYQCINliwTGyHAbl3e/ASgYxjRCYgvrL673vfrl4=; b=WR+xCGkvxNaiAjHX22LVQnnONGCKqrG/AHiX30nexi+PsmJaPk81wYCaHkhbOe6P3Z0q0G8aEIr0REq0CR0E+qRvBK3JLw5j1nbfvVMyo07YOMrLg05aiv7iOMsFFgCODSYehgvB3OVGRTXfxI7bzpVxcfDnz5asLcOb+wrj8cI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747827444923346.5345425106201; Wed, 21 May 2025 04:37:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uHhk9-0003q6-OO; Wed, 21 May 2025 07:36:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uHhjx-0003eQ-On for qemu-devel@nongnu.org; Wed, 21 May 2025 07:36:07 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uHhjo-00016c-Na for qemu-devel@nongnu.org; Wed, 21 May 2025 07:36:05 -0400 Received: from mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-447-QwiUcKQgMIecFlxLmqYVdg-1; Wed, 21 May 2025 07:35:54 -0400 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E266A1954236; Wed, 21 May 2025 11:35:52 +0000 (UTC) Received: from gerbillo.redhat.com (unknown [10.45.224.39]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 3B85E19560B7; Wed, 21 May 2025 11:35:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747827355; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=enaBYQCINliwTGyHAbl3e/ASgYxjRCYgvrL673vfrl4=; b=dfERX2pT9hB+smp7PJFTWT6wom/nBTsip2Sk2t65wB6UkRYusJsVpdnL1xbxmlYly8XH+L d21Vm3GvTIG40pw2c0fhZxHZqRscuevf6+AB0BNn7gPvm7P8lzQfrjTljM548lHVZ3xRX4 7WiINpio3IIihHgYxaXH3nbdpI//cQ0= X-MC-Unique: QwiUcKQgMIecFlxLmqYVdg-1 X-Mimecast-MFC-AGG-ID: QwiUcKQgMIecFlxLmqYVdg_1747827353 From: Paolo Abeni To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Eduardo Habkost , Dmitry Fleytman , Akihiko Odaki , Jason Wang , Sriram Yagnaraman , "Michael S. Tsirkin" , Stefano Garzarella , Peter Xu , Fabiano Rosas , Cornelia Huck , Luigi Rizzo , Giuseppe Lettieri , Vincenzo Maffione , Eric Blake , Markus Armbruster Subject: [PATCH RFC 09/16] vhost-backend: implement extended features support. Date: Wed, 21 May 2025 13:34:03 +0200 Message-ID: <5f1afbf8865c9d51f01aa5ba3b09fb4449c458a0.1747825544.git.pabeni@redhat.com> In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=pabeni@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1747827445663116600 Content-Type: text/plain; charset="utf-8" Leverage the kernel extended features manipulation ioctls(), if available, and fallback to old ops otherwise. Error out when setting extended features but kernel support is not available. Note that extended support for get/set backend features is not needed, as the only feature that can be changed belongs to the 64 bit range. Signed-off-by: Paolo Abeni --- hw/virtio/vhost-backend.c | 59 +++++++++++++++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 6 deletions(-) diff --git a/hw/virtio/vhost-backend.c b/hw/virtio/vhost-backend.c index 833804dd40..a5e28e15ee 100644 --- a/hw/virtio/vhost-backend.c +++ b/hw/virtio/vhost-backend.c @@ -182,12 +182,6 @@ static int vhost_kernel_get_vring_worker(struct vhost_= dev *dev, return vhost_kernel_call(dev, VHOST_GET_VRING_WORKER, worker); } =20 -static int vhost_kernel_set_features(struct vhost_dev *dev, - uint64_t features) -{ - return vhost_kernel_call(dev, VHOST_SET_FEATURES, &features); -} - static int vhost_kernel_set_backend_cap(struct vhost_dev *dev) { uint64_t features; @@ -210,11 +204,59 @@ static int vhost_kernel_set_backend_cap(struct vhost_= dev *dev) return 0; } =20 +#ifdef CONFIG_INT128 +static int vhost_kernel_set_features_ex(struct vhost_dev *dev, + virtio_features_t features) +{ + uint64_t features64; + int r; + + /* + * Can't check for ENOTTY, as the kernel for unknown ioctls interprets + * the argument as a virtio queue id and most likely errors out valida= ting + * such id, instead of reporting an unknown operation. + */ + r =3D vhost_kernel_call(dev, VHOST_SET_FEATURES_EX, &features); + if (!r) { + return 0; + } + + if (!!(features >> 64)) { + error_report("Trying to set extended features without kernel suppo= rt"); + return -EINVAL; + } + features64 =3D (uint64_t)features; + return vhost_kernel_call(dev, VHOST_SET_FEATURES, &features64); +} + +static int vhost_kernel_get_features_ex(struct vhost_dev *dev, + virtio_features_t *features) +{ + uint64_t features64; + int r; + + r =3D vhost_kernel_call(dev, VHOST_GET_FEATURES_EX, features); + if (!r) { + return 0; + } + + r =3D vhost_kernel_call(dev, VHOST_GET_FEATURES, &features64); + *features =3D features64; + return r; +} +#else +static int vhost_kernel_set_features(struct vhost_dev *dev, + uint64_t features) +{ + return vhost_kernel_call(dev, VHOST_SET_FEATURES, &features); +} + static int vhost_kernel_get_features(struct vhost_dev *dev, uint64_t *features) { return vhost_kernel_call(dev, VHOST_GET_FEATURES, features); } +#endif =20 static int vhost_kernel_set_owner(struct vhost_dev *dev) { @@ -341,8 +383,13 @@ const VhostOps kernel_ops =3D { .vhost_attach_vring_worker =3D vhost_kernel_attach_vring_worker, .vhost_new_worker =3D vhost_kernel_new_worker, .vhost_free_worker =3D vhost_kernel_free_worker, +#ifdef CONFIG_INT128 + .vhost_set_features_ex =3D vhost_kernel_set_features_ex, + .vhost_get_features_ex =3D vhost_kernel_get_features_ex, +#else .vhost_set_features =3D vhost_kernel_set_features, .vhost_get_features =3D vhost_kernel_get_features, +#endif .vhost_set_backend_cap =3D vhost_kernel_set_backend_cap, .vhost_set_owner =3D vhost_kernel_set_owner, .vhost_get_vq_index =3D vhost_kernel_get_vq_index, --=20 2.49.0