From nobody Mon May 13 22:56:43 2024 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1708353299; cv=none; d=zohomail.com; s=zohoarc; b=YpA6O7dnv0sW2MIUyF7cYfgwzB1mqWCycqZFVoiwdICXIzUvf4QEA3Vxtyba64Gd1d39WmgRpJI1hwlINJjcU4YYjjKdtXRDpBV7GRc9XxEExqlbrjTR4pLcE4KtFkqZ3umky0BTCMvpWCc7lCmHoogF+ykJb+GyO+3IGcUeH4M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1708353299; 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=+QflzN+GYU1vmQXpDdo+yVT7fHd7rc1xlsl1lzxUT6A=; b=T4AbRD0s3XtfnPnJHFR8JUuY6Vb25xxXG1FfKkZ/Rvqjzhkrru16alkmKR5FnweGnOCDDUpRxDO1Am2xuDOg8yDbYMjFh6Zq/dbCUuNkiQ8saGsXzjs9JHPlUtek4S517SX6S8/hz9cULy/pon7RthwIHI+d7z5VwSbn2bF0Bm4= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1708353299450527.8994581020422; Mon, 19 Feb 2024 06:34:59 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rc4jE-0007hD-PO; Mon, 19 Feb 2024 09:34:44 -0500 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 1rc4jD-0007ge-2a for qemu-devel@nongnu.org; Mon, 19 Feb 2024 09:34:43 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rc4jB-0003qx-IT for qemu-devel@nongnu.org; Mon, 19 Feb 2024 09:34:42 -0500 Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-330-yEHI0NOZPO6NponbH3xDbA-1; Mon, 19 Feb 2024 09:34:35 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (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 mimecast-mx02.redhat.com (Postfix) with ESMTPS id 8C1D5282D3CD; Mon, 19 Feb 2024 14:34:34 +0000 (UTC) Received: from localhost.localdomain (unknown [10.45.224.250]) by smtp.corp.redhat.com (Postfix) with ESMTP id E80F4200B251; Mon, 19 Feb 2024 14:34:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1708353280; 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=+QflzN+GYU1vmQXpDdo+yVT7fHd7rc1xlsl1lzxUT6A=; b=goLWiOk4OOffnJ0baxD5hdeUDwzIC9OuWAKgJ9kYMncoViWL6oTbhXWF1sh/SwZdn5l7r3 LW+UB3NIAJpX3QKquS3aVXJsUl2o2ZGlfcz0VfTS7eRHJrAqhquoaFMoSM5GX72O3SNIWB mH0NddKJUmHAFsWsjScLRnV/jyHNZpc= X-MC-Unique: yEHI0NOZPO6NponbH3xDbA-1 From: Albert Esteve To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , stefanha@gmail.com, alex.bennee@linaro.org, philmd@linaro.org, kraxel@redhat.com, marcandre.lureau@gmail.com, Albert Esteve , Stefan Hajnoczi Subject: [PATCH v4 1/5] hw/virtio: check owner for removing objects Date: Mon, 19 Feb 2024 15:34:19 +0100 Message-ID: <20240219143423.272012-2-aesteve@redhat.com> In-Reply-To: <20240219143423.272012-1-aesteve@redhat.com> References: <20240219143423.272012-1-aesteve@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.4 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.133.124; envelope-from=aesteve@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.072, 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_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham 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: 1708353301687100002 Content-Type: text/plain; charset="utf-8" Shared objects lack spoofing protection. For VHOST_USER_BACKEND_SHARED_OBJECT_REMOVE messages received by the vhost-user interface, any backend was allowed to remove entries from the shared table just by knowing the UUID. Only the owner of the entry shall be allowed to removed their resources from the table. To fix that, add a check for all *SHARED_OBJECT_REMOVE messages received. A vhost device can only remove TYPE_VHOST_DEV entries that are owned by them, otherwise skip the removal, and inform the device that the entry has not been removed in the answer. Signed-off-by: Albert Esteve Acked-by: Stefan Hajnoczi --- docs/interop/vhost-user.rst | 4 +++- hw/virtio/vhost-user.c | 21 +++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/docs/interop/vhost-user.rst b/docs/interop/vhost-user.rst index ad6e142f23..32496b5aa9 100644 --- a/docs/interop/vhost-user.rst +++ b/docs/interop/vhost-user.rst @@ -1839,7 +1839,9 @@ is sent by the front-end. When the ``VHOST_USER_PROTOCOL_F_SHARED_OBJECT`` protocol feature has been successfully negotiated, this message can be submitted by the backend to remove themselves from to the virtio-dmabuf shared - table API. The shared table will remove the back-end device associated w= ith + table API. Only the back-end owning the entry (i.e., the one that first = added + it) will have permission to remove it. Otherwise, the message is ignored. + The shared table will remove the back-end device associated with the UUID. If ``VHOST_USER_PROTOCOL_F_REPLY_ACK`` is negotiated, and the back-end sets the ``VHOST_USER_NEED_REPLY`` flag, the front-end must res= pond with zero when operation is successfully completed, or non-zero otherwis= e. diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c index f214df804b..152710d30d 100644 --- a/hw/virtio/vhost-user.c +++ b/hw/virtio/vhost-user.c @@ -1611,11 +1611,27 @@ vhost_user_backend_handle_shared_object_add(struct = vhost_dev *dev, } =20 static int -vhost_user_backend_handle_shared_object_remove(VhostUserShared *object) +vhost_user_backend_handle_shared_object_remove(struct vhost_dev *dev, + VhostUserShared *object) { QemuUUID uuid; =20 memcpy(uuid.data, object->uuid, sizeof(object->uuid)); + switch (virtio_object_type(&uuid)) { + case TYPE_VHOST_DEV: + { + struct vhost_dev *owner =3D virtio_lookup_vhost_device(&uuid); + if (dev !=3D owner) { + /* Not allowed to remove non-owned entries */ + return 0; + } + break; + } + default: + /* Not allowed to remove non-owned entries */ + return 0; + } + return virtio_remove_resource(&uuid); } =20 @@ -1794,7 +1810,8 @@ static gboolean backend_read(QIOChannel *ioc, GIOCond= ition condition, ret =3D vhost_user_backend_handle_shared_object_add(dev, &payload.= object); break; case VHOST_USER_BACKEND_SHARED_OBJECT_REMOVE: - ret =3D vhost_user_backend_handle_shared_object_remove(&payload.ob= ject); + ret =3D vhost_user_backend_handle_shared_object_remove(dev, + &payload.obje= ct); break; case VHOST_USER_BACKEND_SHARED_OBJECT_LOOKUP: ret =3D vhost_user_backend_handle_shared_object_lookup(dev->opaque= , ioc, --=20 2.43.1 From nobody Mon May 13 22:56:43 2024 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1708353303; cv=none; d=zohomail.com; s=zohoarc; b=WgI6eS1mYP7BlXBKdLtPCf0y96lw/meCa+GSsjcBujMZdKZMuWhlG1eAtsWQLqhI7TrsTdRGOURohhj8Gf4hxg+KbZl2nunVng0QWr5e7sZISP7eluEe2Aj++AVdTeD1T2q2ZrdVPwpSNg8/nsd9fprPdd47NF0S5pDn6ydpuXM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1708353303; 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=viv1ei9TE6PclCvoUv4smop7x8HeIq1N/VAQZhMnZNE=; b=guV+g3cKVYtZ2DuqTFzCQ9W/KBMy5OR9OAmkBExbMkE97T/HT14zvVIusAR7LJClX/TkHJCe7Gzr2Njhmxa84nuQdmQ5QIqzx3uFLlZQB+Vwq8gVuWqjLXJ6cmjITx3MLTcABlvZX7J6PnkpygVOUIYihKpj8/xqNwdphmo0wSc= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 170835330334384.97228683805758; Mon, 19 Feb 2024 06:35:03 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rc4jK-0007iv-Rs; Mon, 19 Feb 2024 09:34:53 -0500 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 1rc4jE-0007hA-D5 for qemu-devel@nongnu.org; Mon, 19 Feb 2024 09:34:44 -0500 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 1rc4jB-0003qy-Pu for qemu-devel@nongnu.org; Mon, 19 Feb 2024 09:34:44 -0500 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-283-HAIu5jTfNNeKbuMEEzIO2Q-1; Mon, 19 Feb 2024 09:34:37 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (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 mimecast-mx02.redhat.com (Postfix) with ESMTPS id 06FE685A588; Mon, 19 Feb 2024 14:34:37 +0000 (UTC) Received: from localhost.localdomain (unknown [10.45.224.250]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0604F20229A3; Mon, 19 Feb 2024 14:34:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1708353280; 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=viv1ei9TE6PclCvoUv4smop7x8HeIq1N/VAQZhMnZNE=; b=FrDNwlZZybS8P1emhNZ0B2dZ+B0WXxvckpKmz31naqTNr1KyBbjk0eE23t8XU9aaWtdwPB CVPI7TWtMCZuDVIS9yIti/9W8onrjsH9qixj8RIqix3qEntUpfDBAOmcpusVI2SpuxxAAL +ptYfK9matYfYUQnIQsbMiEztDRIySs= X-MC-Unique: HAIu5jTfNNeKbuMEEzIO2Q-1 From: Albert Esteve To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , stefanha@gmail.com, alex.bennee@linaro.org, philmd@linaro.org, kraxel@redhat.com, marcandre.lureau@gmail.com, Albert Esteve Subject: [PATCH v4 2/5] hw/virtio: document SharedObject structures Date: Mon, 19 Feb 2024 15:34:20 +0100 Message-ID: <20240219143423.272012-3-aesteve@redhat.com> In-Reply-To: <20240219143423.272012-1-aesteve@redhat.com> References: <20240219143423.272012-1-aesteve@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.4 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=aesteve@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.072, 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_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham 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: 1708353303706100006 Content-Type: text/plain; charset="utf-8" Change VirtioSharedObject value type from a generic pointer to a union storing the different supported underlying types, which makes naming less confusing. With the update, use the chance to add kdoc to both the SharedObjectType enum and VirtioSharedObject struct. Signed-off-by: Albert Esteve --- hw/display/virtio-dmabuf.c | 8 ++++---- include/hw/virtio/virtio-dmabuf.h | 25 ++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/hw/display/virtio-dmabuf.c b/hw/display/virtio-dmabuf.c index 3dba4577ca..497cb6fa7c 100644 --- a/hw/display/virtio-dmabuf.c +++ b/hw/display/virtio-dmabuf.c @@ -57,7 +57,7 @@ bool virtio_add_dmabuf(QemuUUID *uuid, int udmabuf_fd) } vso =3D g_new(VirtioSharedObject, 1); vso->type =3D TYPE_DMABUF; - vso->value =3D GINT_TO_POINTER(udmabuf_fd); + vso->value.udma_buf =3D udmabuf_fd; result =3D virtio_add_resource(uuid, vso); if (!result) { g_free(vso); @@ -75,7 +75,7 @@ bool virtio_add_vhost_device(QemuUUID *uuid, struct vhost= _dev *dev) } vso =3D g_new(VirtioSharedObject, 1); vso->type =3D TYPE_VHOST_DEV; - vso->value =3D dev; + vso->value.dev =3D dev; result =3D virtio_add_resource(uuid, vso); if (!result) { g_free(vso); @@ -114,7 +114,7 @@ int virtio_lookup_dmabuf(const QemuUUID *uuid) return -1; } assert(vso->type =3D=3D TYPE_DMABUF); - return GPOINTER_TO_INT(vso->value); + return vso->value.udma_buf; } =20 struct vhost_dev *virtio_lookup_vhost_device(const QemuUUID *uuid) @@ -124,7 +124,7 @@ struct vhost_dev *virtio_lookup_vhost_device(const Qemu= UUID *uuid) return NULL; } assert(vso->type =3D=3D TYPE_VHOST_DEV); - return (struct vhost_dev *) vso->value; + return (struct vhost_dev *) vso->value.dev; } =20 SharedObjectType virtio_object_type(const QemuUUID *uuid) diff --git a/include/hw/virtio/virtio-dmabuf.h b/include/hw/virtio/virtio-d= mabuf.h index 627c3b6db7..891a43162d 100644 --- a/include/hw/virtio/virtio-dmabuf.h +++ b/include/hw/virtio/virtio-dmabuf.h @@ -16,15 +16,38 @@ #include "qemu/uuid.h" #include "vhost.h" =20 +/** + * SharedObjectType: + *=20 + * Identifies the type of the underlying type that the current lookup + * table entry is holding. + *=20 + * TYPE_INVALID: Invalid entry + * TYPE_DMABUF: Entry is a dmabuf file descriptor that can be directly + * shared with the requestor + * TYPE_VHOST_DEV: Entry is a pointer to a vhost device that is holding + * the shared object. + */ typedef enum SharedObjectType { TYPE_INVALID =3D 0, TYPE_DMABUF, TYPE_VHOST_DEV, } SharedObjectType; =20 +/** + * VirtioSharedObject: + * @type: Shared object type identifier + * @value: Union containing to the underlying type + *=20 + * The VirtioSharedObject object provides a way to distinguish, + * store, and handle the different types supported by the lookup table. + */ typedef struct VirtioSharedObject { SharedObjectType type; - gpointer value; + union { + struct vhost_dev *dev; /* TYPE_VHOST_DEV */ + int udma_buf; /* TYPE_DMABUF */ + } value; } VirtioSharedObject; =20 /** --=20 2.43.1 From nobody Mon May 13 22:56:43 2024 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1708353379; cv=none; d=zohomail.com; s=zohoarc; b=FlZEuL1+StLiHCGikx73pymiKQmjs2XY7N2iRIGtzH4ry4TiOF0bJCaSZXE3bQXBGsIpPOcMB8aMDn7Yh3oI24dmSsYKN0YtnuDgLZ4FSqx6brIvwEneFO0zNSXmtCPud+XsWQtm9Y1VfR4zj3Nmc9pzCDu3UMGLhj0IS2P09BQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1708353379; 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=98yhwqbsidcnwnpY+o364o71w+Bbdr+rkpAcCec0C3k=; b=av9xK52MOOKoV6A2xcJyFf/BvE6DrcW8KWp2m43ImnVjffGtJKsY4jNTuO+Zu/kMlJ6dblIx//dZPdRxoSuhQWWaf/V6NpU2E6to8jhk/PKLob/pbm5cVeYpLJpRBgPaGDHfMSvlYZ5rRDvg9t1q2KaEJR7iOSEaeZvU2Gax8A8= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1708353379401303.25864269890167; Mon, 19 Feb 2024 06:36:19 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rc4jN-0007jb-AX; Mon, 19 Feb 2024 09:34:53 -0500 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 1rc4jG-0007iP-7w for qemu-devel@nongnu.org; Mon, 19 Feb 2024 09:34:46 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rc4jE-0003rJ-6t for qemu-devel@nongnu.org; Mon, 19 Feb 2024 09:34:45 -0500 Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-488-qUchfjb8PxKuwrLLrO8_UA-1; Mon, 19 Feb 2024 09:34:40 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (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 mimecast-mx02.redhat.com (Postfix) with ESMTPS id 9B68D3830092; Mon, 19 Feb 2024 14:34:39 +0000 (UTC) Received: from localhost.localdomain (unknown [10.45.224.250]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4E799200B2D7; Mon, 19 Feb 2024 14:34:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1708353283; 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=98yhwqbsidcnwnpY+o364o71w+Bbdr+rkpAcCec0C3k=; b=ctil9gSJmVtBHTCW7g9f/wlTBghPEW31/sTeTYGFUFeRnv0STmEUOB08hb1dhgTUe619ee FZA8FAP5US5qOiWEkvfiTk1kVTUihpuP4Fvt5URaXHj5buQGIbXr62jC6E9p1ARnBBXBgs N0qP2HZYusEtXA6AMG6l2NLmky7UfSE= X-MC-Unique: qUchfjb8PxKuwrLLrO8_UA-1 From: Albert Esteve To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , stefanha@gmail.com, alex.bennee@linaro.org, philmd@linaro.org, kraxel@redhat.com, marcandre.lureau@gmail.com, Albert Esteve Subject: [PATCH v4 3/5] hw/virtio: change dmabuf mutex to QemuMutex Date: Mon, 19 Feb 2024 15:34:21 +0100 Message-ID: <20240219143423.272012-4-aesteve@redhat.com> In-Reply-To: <20240219143423.272012-1-aesteve@redhat.com> References: <20240219143423.272012-1-aesteve@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.4 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.133.124; envelope-from=aesteve@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.072, 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_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham 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: 1708353380142100003 Content-Type: text/plain; charset="utf-8" Change GMutex by QemuMutex to be able to use lock contexts with `WITH_QEMU_LOCK_GUARD`. As the lock needs to be initialised and there is no central point for initialisation, add an init public function and call it from virtio.c, each time a new backend structure is initialised. Signed-off-by: Albert Esteve --- hw/display/virtio-dmabuf.c | 55 +++++++++++++++++-------------- hw/virtio/virtio.c | 3 ++ include/hw/virtio/virtio-dmabuf.h | 5 +++ tests/unit/test-virtio-dmabuf.c | 5 +++ 4 files changed, 43 insertions(+), 25 deletions(-) diff --git a/hw/display/virtio-dmabuf.c b/hw/display/virtio-dmabuf.c index 497cb6fa7c..961094a561 100644 --- a/hw/display/virtio-dmabuf.c +++ b/hw/display/virtio-dmabuf.c @@ -11,11 +11,12 @@ */ =20 #include "qemu/osdep.h" +#include "include/qemu/lockable.h" =20 #include "hw/virtio/virtio-dmabuf.h" =20 =20 -static GMutex lock; +static QemuMutex lock; static GHashTable *resource_uuids; =20 /* @@ -27,23 +28,27 @@ static int uuid_equal_func(const void *lhv, const void = *rhv) return qemu_uuid_is_equal(lhv, rhv); } =20 +void virtio_dmabuf_init(void) { + qemu_mutex_init(&lock); +} + static bool virtio_add_resource(QemuUUID *uuid, VirtioSharedObject *value) { bool result =3D true; =20 - g_mutex_lock(&lock); - if (resource_uuids =3D=3D NULL) { - resource_uuids =3D g_hash_table_new_full(qemu_uuid_hash, - uuid_equal_func, - NULL, - g_free); - } - if (g_hash_table_lookup(resource_uuids, uuid) =3D=3D NULL) { - g_hash_table_insert(resource_uuids, uuid, value); - } else { - result =3D false; + WITH_QEMU_LOCK_GUARD(&lock) { + if (resource_uuids =3D=3D NULL) { + resource_uuids =3D g_hash_table_new_full(qemu_uuid_hash, + uuid_equal_func, + NULL, + g_free); + } + if (g_hash_table_lookup(resource_uuids, uuid) =3D=3D NULL) { + g_hash_table_insert(resource_uuids, uuid, value); + } else { + result =3D false; + } } - g_mutex_unlock(&lock); =20 return result; } @@ -87,9 +92,9 @@ bool virtio_add_vhost_device(QemuUUID *uuid, struct vhost= _dev *dev) bool virtio_remove_resource(const QemuUUID *uuid) { bool result; - g_mutex_lock(&lock); - result =3D g_hash_table_remove(resource_uuids, uuid); - g_mutex_unlock(&lock); + WITH_QEMU_LOCK_GUARD(&lock) { + result =3D g_hash_table_remove(resource_uuids, uuid); + } =20 return result; } @@ -98,11 +103,11 @@ static VirtioSharedObject *get_shared_object(const Qem= uUUID *uuid) { gpointer lookup_res =3D NULL; =20 - g_mutex_lock(&lock); - if (resource_uuids !=3D NULL) { - lookup_res =3D g_hash_table_lookup(resource_uuids, uuid); + WITH_QEMU_LOCK_GUARD(&lock) { + if (resource_uuids !=3D NULL) { + lookup_res =3D g_hash_table_lookup(resource_uuids, uuid); + } } - g_mutex_unlock(&lock); =20 return (VirtioSharedObject *) lookup_res; } @@ -138,9 +143,9 @@ SharedObjectType virtio_object_type(const QemuUUID *uui= d) =20 void virtio_free_resources(void) { - g_mutex_lock(&lock); - g_hash_table_destroy(resource_uuids); - /* Reference count shall be 0 after the implicit unref on destroy */ - resource_uuids =3D NULL; - g_mutex_unlock(&lock); + WITH_QEMU_LOCK_GUARD(&lock) { + g_hash_table_destroy(resource_uuids); + /* Reference count shall be 0 after the implicit unref on destroy = */ + resource_uuids =3D NULL; + } } diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index d229755eae..88189e7178 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -29,6 +29,7 @@ #include "hw/virtio/virtio-bus.h" #include "hw/qdev-properties.h" #include "hw/virtio/virtio-access.h" +#include "hw/virtio/virtio-dmabuf.h" #include "sysemu/dma.h" #include "sysemu/runstate.h" #include "virtio-qmp.h" @@ -3221,6 +3222,8 @@ void virtio_init(VirtIODevice *vdev, uint16_t device_= id, size_t config_size) int i; int nvectors =3D k->query_nvectors ? k->query_nvectors(qbus->parent) := 0; =20 + // Ensure virtio dmabuf table is initialised. + virtio_dmabuf_init(); if (nvectors) { vdev->vector_queues =3D g_malloc0(sizeof(*vdev->vector_queues) * nvectors); diff --git a/include/hw/virtio/virtio-dmabuf.h b/include/hw/virtio/virtio-d= mabuf.h index 891a43162d..627d84dce9 100644 --- a/include/hw/virtio/virtio-dmabuf.h +++ b/include/hw/virtio/virtio-dmabuf.h @@ -50,6 +50,11 @@ typedef struct VirtioSharedObject { } value; } VirtioSharedObject; =20 +/** + * virtio_dmabuf_init() - Initialise virtio dmabuf internal structures. + */ +void virtio_dmabuf_init(void); + /** * virtio_add_dmabuf() - Add a new dma-buf resource to the lookup table * @uuid: new resource's UUID diff --git a/tests/unit/test-virtio-dmabuf.c b/tests/unit/test-virtio-dmabu= f.c index a45ec52f42..20213455ee 100644 --- a/tests/unit/test-virtio-dmabuf.c +++ b/tests/unit/test-virtio-dmabuf.c @@ -27,6 +27,7 @@ static void test_add_remove_resources(void) QemuUUID uuid; int i, dmabuf_fd; =20 + virtio_dmabuf_init(); for (i =3D 0; i < 100; ++i) { qemu_uuid_generate(&uuid); dmabuf_fd =3D g_random_int_range(3, 500); @@ -46,6 +47,7 @@ static void test_add_remove_dev(void) struct vhost_dev *dev =3D g_new0(struct vhost_dev, 1); int i; =20 + virtio_dmabuf_init(); for (i =3D 0; i < 100; ++i) { qemu_uuid_generate(&uuid); virtio_add_vhost_device(&uuid, dev); @@ -64,6 +66,7 @@ static void test_remove_invalid_resource(void) QemuUUID uuid; int i; =20 + virtio_dmabuf_init(); for (i =3D 0; i < 20; ++i) { qemu_uuid_generate(&uuid); g_assert_cmpint(virtio_lookup_dmabuf(&uuid), =3D=3D, -1); @@ -78,6 +81,7 @@ static void test_add_invalid_resource(void) struct vhost_dev *dev =3D NULL; int i, dmabuf_fd =3D -2, alt_dmabuf =3D 2; =20 + virtio_dmabuf_init(); for (i =3D 0; i < 20; ++i) { qemu_uuid_generate(&uuid); /* Add a new resource with invalid (negative) resource fd */ @@ -108,6 +112,7 @@ static void test_free_resources(void) QemuUUID uuids[20]; int i, dmabuf_fd; =20 + virtio_dmabuf_init(); for (i =3D 0; i < ARRAY_SIZE(uuids); ++i) { qemu_uuid_generate(&uuids[i]); dmabuf_fd =3D g_random_int_range(3, 500); --=20 2.43.1 From nobody Mon May 13 22:56:43 2024 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1708353311; cv=none; d=zohomail.com; s=zohoarc; b=ZHLZk4Gzkk7T3KcBQB141tQ+KQx+G7Cxh6txtqwJPzhrHHLADUF96Sss/mtMEvBy3ljLC1ahiFjVDJK2FdIoZifXtBRqwVlEqnVZtA8GwG75NYcRMtVC6L8UbLiBPa5Ioh8mIDMgfkZLBwP2V8p7xEDu6JMqIDji65TMSxh85hY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1708353311; 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=hAHUkdCunfllxgibo1PLpB0r1ulLe/NIcsdLvCjyF5s=; b=YfN2DZOw67mJ3JFT8DAnR/Xsp8RhwSWyxtuOvl9IgW2dZbnMzwrT6ELeZtOiXyzri01tzlcm0jpP95GbxQzBmPQVG7SpP5QEnvebRluQRpOwcDIBzkefN+NGtZr4/zmIRJCRq01jpln0Y1+jT6vhJxD8hY4gF7wGJWoQWzZnG40= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1708353311483407.06709020737696; Mon, 19 Feb 2024 06:35:11 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rc4jQ-0007nB-Vz; Mon, 19 Feb 2024 09:34:57 -0500 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 1rc4jK-0007jT-1D for qemu-devel@nongnu.org; Mon, 19 Feb 2024 09:34:51 -0500 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 1rc4jG-0003re-TO for qemu-devel@nongnu.org; Mon, 19 Feb 2024 09:34:49 -0500 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-25-yr363k3hMNGD1kZ9258uPw-1; Mon, 19 Feb 2024 09:34:43 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (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 mimecast-mx02.redhat.com (Postfix) with ESMTPS id 9EC7C811E81; Mon, 19 Feb 2024 14:34:42 +0000 (UTC) Received: from localhost.localdomain (unknown [10.45.224.250]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0A12C200B251; Mon, 19 Feb 2024 14:34:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1708353286; 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=hAHUkdCunfllxgibo1PLpB0r1ulLe/NIcsdLvCjyF5s=; b=Zn/mihlQWaH4K46b2UcDiIg1hPnx09CfgnMtYowyFAvm5eXGes++ckECCn+IR/A6fiNXrP TCDFfjUHLHTpiJ0WSyj1l+qlyCUnz0b6MLt48EY7nK1lfCqX7xzBHjA9jcf5/B71mLq5ii z8nIjLBH+9RS9eXxLe4Zv9iaRWbntcI= X-MC-Unique: yr363k3hMNGD1kZ9258uPw-1 From: Albert Esteve To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , stefanha@gmail.com, alex.bennee@linaro.org, philmd@linaro.org, kraxel@redhat.com, marcandre.lureau@gmail.com, Albert Esteve , Stefan Hajnoczi Subject: [PATCH v4 4/5] hw/virtio: cleanup shared resources Date: Mon, 19 Feb 2024 15:34:22 +0100 Message-ID: <20240219143423.272012-5-aesteve@redhat.com> In-Reply-To: <20240219143423.272012-1-aesteve@redhat.com> References: <20240219143423.272012-1-aesteve@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.4 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=aesteve@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.072, 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_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham 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: 1708353311752100001 Content-Type: text/plain; charset="utf-8" Ensure that we cleanup all virtio shared resources when the vhost devices is cleaned up (after a hot unplug, or a crash). To do so, we add a new function to the virtio_dmabuf API called `virtio_dmabuf_vhost_cleanup`, which loop through the table and removes all resources owned by the vhost device parameter. Also, add a test to verify that the new function in the API behaves as expected. Signed-off-by: Albert Esteve Acked-by: Stefan Hajnoczi Reviewed-by: Manos Pitsidianakis --- hw/display/virtio-dmabuf.c | 21 ++++++++++++++++++++ hw/virtio/vhost.c | 3 +++ include/hw/virtio/virtio-dmabuf.h | 10 ++++++++++ tests/unit/test-virtio-dmabuf.c | 33 +++++++++++++++++++++++++++++++ 4 files changed, 67 insertions(+) diff --git a/hw/display/virtio-dmabuf.c b/hw/display/virtio-dmabuf.c index 961094a561..703b5bd979 100644 --- a/hw/display/virtio-dmabuf.c +++ b/hw/display/virtio-dmabuf.c @@ -141,6 +141,27 @@ SharedObjectType virtio_object_type(const QemuUUID *uu= id) return vso->type; } =20 +static bool virtio_dmabuf_resource_is_owned(gpointer key, + gpointer value, + gpointer dev) +{ + VirtioSharedObject *vso; + + vso =3D (VirtioSharedObject *) value; + return vso->type =3D=3D TYPE_VHOST_DEV && vso->value.dev =3D=3D dev; +} + +int virtio_dmabuf_vhost_cleanup(struct vhost_dev *dev) +{ + int num_removed; + + WITH_QEMU_LOCK_GUARD(&lock) { + num_removed =3D g_hash_table_foreach_remove( + resource_uuids, (GHRFunc) virtio_dmabuf_resource_is_owned, dev= ); + } + return num_removed; +} + void virtio_free_resources(void) { WITH_QEMU_LOCK_GUARD(&lock) { diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 2c9ac79468..c5622eac14 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -16,6 +16,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/virtio/vhost.h" +#include "hw/virtio/virtio-dmabuf.h" #include "qemu/atomic.h" #include "qemu/range.h" #include "qemu/error-report.h" @@ -1599,6 +1600,8 @@ void vhost_dev_cleanup(struct vhost_dev *hdev) migrate_del_blocker(&hdev->migration_blocker); g_free(hdev->mem); g_free(hdev->mem_sections); + /* free virtio shared objects */ + virtio_dmabuf_vhost_cleanup(hdev); if (hdev->vhost_ops) { hdev->vhost_ops->vhost_backend_cleanup(hdev); } diff --git a/include/hw/virtio/virtio-dmabuf.h b/include/hw/virtio/virtio-d= mabuf.h index 627d84dce9..950cd24967 100644 --- a/include/hw/virtio/virtio-dmabuf.h +++ b/include/hw/virtio/virtio-dmabuf.h @@ -119,6 +119,16 @@ struct vhost_dev *virtio_lookup_vhost_device(const Qem= uUUID *uuid); */ SharedObjectType virtio_object_type(const QemuUUID *uuid); =20 +/** + * virtio_dmabuf_vhost_cleanup() - Destroys all entries of the shared + * resources lookup table that are owned by the vhost backend + * @dev: the pointer to the vhost device that owns the entries. Data is ow= ned + * by the called of the function. + *=20 + * Return: the number of resource entries removed. + */ +int virtio_dmabuf_vhost_cleanup(struct vhost_dev *dev); + /** * virtio_free_resources() - Destroys all keys and values of the shared * resources lookup table, and frees them diff --git a/tests/unit/test-virtio-dmabuf.c b/tests/unit/test-virtio-dmabu= f.c index 20213455ee..e5cf7ee19f 100644 --- a/tests/unit/test-virtio-dmabuf.c +++ b/tests/unit/test-virtio-dmabuf.c @@ -107,6 +107,38 @@ static void test_add_invalid_resource(void) } } =20 +static void test_cleanup_res(void) +{ + QemuUUID uuids[20], uuid_alt; + struct vhost_dev *dev =3D g_new0(struct vhost_dev, 1); + struct vhost_dev *dev_alt =3D g_new0(struct vhost_dev, 1); + int i, num_removed; + + for (i =3D 0; i < ARRAY_SIZE(uuids); ++i) { + qemu_uuid_generate(&uuids[i]); + virtio_add_vhost_device(&uuids[i], dev); + /* vhost device is found */ + g_assert(virtio_lookup_vhost_device(&uuids[i]) !=3D NULL); + } + qemu_uuid_generate(&uuid_alt); + virtio_add_vhost_device(&uuid_alt, dev_alt); + /* vhost device is found */ + g_assert(virtio_lookup_vhost_device(&uuid_alt) !=3D NULL); + /* cleanup all dev resources */ + num_removed =3D virtio_dmabuf_vhost_cleanup(dev); + g_assert_cmpint(num_removed, =3D=3D, ARRAY_SIZE(uuids)); + for (i =3D 0; i < ARRAY_SIZE(uuids); ++i) { + /* None of the dev resources is found after free'd */ + g_assert_cmpint(virtio_lookup_dmabuf(&uuids[i]), =3D=3D, -1); + } + /* uuid_alt is still in the hash table */ + g_assert(virtio_lookup_vhost_device(&uuid_alt) !=3D NULL); + + virtio_free_resources(); + g_free(dev); + g_free(dev_alt); +} + static void test_free_resources(void) { QemuUUID uuids[20]; @@ -136,6 +168,7 @@ int main(int argc, char **argv) test_remove_invalid_resource); g_test_add_func("/virtio-dmabuf/add_invalid_res", test_add_invalid_resource); + g_test_add_func("/virtio-dmabuf/cleanup_dev", test_cleanup_res); g_test_add_func("/virtio-dmabuf/free_res", test_free_resources); =20 return g_test_run(); --=20 2.43.1 From nobody Mon May 13 22:56:43 2024 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1708353362; cv=none; d=zohomail.com; s=zohoarc; b=XhfM8xJ2Ez3mxiq09GDcMIxS/+Z4DpMM6QH7hI+JpPta03YderRWq3v/CP1dT32YEiwy59CfxRDin9/o+YVUNgMXS2jutJQFafz4vmFsKjveXP5GTfSI/7JZ6JD5QOYlLVNFc1caA27ddQMSdCVAN1BP+I8e5n0oSYgkOyshqwI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1708353362; h=Content-Type: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=9xWXJ7mtY+Ak3K3k+O+7xgBQ1TPdtLyqqeB0Tb5sew4=; b=N6kFo6oRcjohwPyhvA5UoHXUdd4VCFGbo47CaqdBibcGH0BN/nij3v+G/8o54Iy3tGHOGLuVkFYc8v1cpL0FDVLrzs7IbBs8F5uUwIy3sqmr9Rl4bLDo8XcWsSeFWph9x38Sw2jX0Q9PkbK04ceFP5wy03WCfOUwxf1SQHZUX6Y= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1708353362903126.86779865158599; Mon, 19 Feb 2024 06:36:02 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rc4jQ-0007nD-FU; Mon, 19 Feb 2024 09:34:57 -0500 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 1rc4jN-0007jc-0f for qemu-devel@nongnu.org; Mon, 19 Feb 2024 09:34:53 -0500 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 1rc4jK-0003rt-4G for qemu-devel@nongnu.org; Mon, 19 Feb 2024 09:34:52 -0500 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-609-nvieJVMJM56bkEeiufDX4g-1; Mon, 19 Feb 2024 09:34:46 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (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 mimecast-mx02.redhat.com (Postfix) with ESMTPS id 9A38B10AFA03; Mon, 19 Feb 2024 14:34:45 +0000 (UTC) Received: from localhost.localdomain (unknown [10.45.224.250]) by smtp.corp.redhat.com (Postfix) with ESMTP id E7E8820229A7; Mon, 19 Feb 2024 14:34:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1708353289; 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=9xWXJ7mtY+Ak3K3k+O+7xgBQ1TPdtLyqqeB0Tb5sew4=; b=E25SRJOFOSz9Yc/Hf9vCVUM6kB2ItBon4NsCHGsgKyZ5igE+hcVf7Z7H+Du98Ytjyu7UkN XUrrdqRuhXy9p2htr/BW+cMZ6iVdPd8XtHlCvfGA1lKbg/M2GViD7cXkf3OKOSqrB2jbyS W5DEmyktLdM5g77ON0sO3MTSUFX1WDU= X-MC-Unique: nvieJVMJM56bkEeiufDX4g-1 From: Albert Esteve To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , stefanha@gmail.com, alex.bennee@linaro.org, philmd@linaro.org, kraxel@redhat.com, marcandre.lureau@gmail.com, Albert Esteve , Stefan Hajnoczi Subject: [PATCH v4 5/5] hw/virtio: rename virtio dmabuf API Date: Mon, 19 Feb 2024 15:34:23 +0100 Message-ID: <20240219143423.272012-6-aesteve@redhat.com> In-Reply-To: <20240219143423.272012-1-aesteve@redhat.com> References: <20240219143423.272012-1-aesteve@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.4 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=aesteve@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.072, 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_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham 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: 1708353364127100002 Functions in the virtio-dmabuf module start with 'virtio_*', which is too generic and may not correctly identify them as part of the virtio dmabuf API. Rename all functions to 'virtio_dmabuf_*' instead to avoid confusion. Signed-off-by: Albert Esteve Acked-by: Stefan Hajnoczi Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/display/virtio-dmabuf.c | 14 ++++---- hw/virtio/vhost-user.c | 14 ++++---- include/hw/virtio/virtio-dmabuf.h | 33 +++++++++--------- tests/unit/test-virtio-dmabuf.c | 58 +++++++++++++++---------------- 4 files changed, 60 insertions(+), 59 deletions(-) diff --git a/hw/display/virtio-dmabuf.c b/hw/display/virtio-dmabuf.c index 703b5bd979..4e32af2ad0 100644 --- a/hw/display/virtio-dmabuf.c +++ b/hw/display/virtio-dmabuf.c @@ -53,7 +53,7 @@ static bool virtio_add_resource(QemuUUID *uuid, VirtioSha= redObject *value) return result; } =20 -bool virtio_add_dmabuf(QemuUUID *uuid, int udmabuf_fd) +bool virtio_dmabuf_add(QemuUUID *uuid, int udmabuf_fd) { bool result; VirtioSharedObject *vso; @@ -71,7 +71,7 @@ bool virtio_add_dmabuf(QemuUUID *uuid, int udmabuf_fd) return result; } =20 -bool virtio_add_vhost_device(QemuUUID *uuid, struct vhost_dev *dev) +bool virtio_dmabuf_add_vhost_device(QemuUUID *uuid, struct vhost_dev *dev) { bool result; VirtioSharedObject *vso; @@ -89,7 +89,7 @@ bool virtio_add_vhost_device(QemuUUID *uuid, struct vhost= _dev *dev) return result; } =20 -bool virtio_remove_resource(const QemuUUID *uuid) +bool virtio_dmabuf_remove_resource(const QemuUUID *uuid) { bool result; WITH_QEMU_LOCK_GUARD(&lock) { @@ -112,7 +112,7 @@ static VirtioSharedObject *get_shared_object(const Qemu= UUID *uuid) return (VirtioSharedObject *) lookup_res; } =20 -int virtio_lookup_dmabuf(const QemuUUID *uuid) +int virtio_dmabuf_lookup(const QemuUUID *uuid) { VirtioSharedObject *vso =3D get_shared_object(uuid); if (vso =3D=3D NULL) { @@ -122,7 +122,7 @@ int virtio_lookup_dmabuf(const QemuUUID *uuid) return vso->value.udma_buf; } =20 -struct vhost_dev *virtio_lookup_vhost_device(const QemuUUID *uuid) +struct vhost_dev *virtio_dmabuf_lookup_vhost_device(const QemuUUID *uuid) { VirtioSharedObject *vso =3D get_shared_object(uuid); if (vso =3D=3D NULL) { @@ -132,7 +132,7 @@ struct vhost_dev *virtio_lookup_vhost_device(const Qemu= UUID *uuid) return (struct vhost_dev *) vso->value.dev; } =20 -SharedObjectType virtio_object_type(const QemuUUID *uuid) +SharedObjectType virtio_dmabuf_object_type(const QemuUUID *uuid) { VirtioSharedObject *vso =3D get_shared_object(uuid); if (vso =3D=3D NULL) { @@ -162,7 +162,7 @@ int virtio_dmabuf_vhost_cleanup(struct vhost_dev *dev) return num_removed; } =20 -void virtio_free_resources(void) +void virtio_dmabuf_free_resources(void) { WITH_QEMU_LOCK_GUARD(&lock) { g_hash_table_destroy(resource_uuids); diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c index 152710d30d..104d7d4e62 100644 --- a/hw/virtio/vhost-user.c +++ b/hw/virtio/vhost-user.c @@ -1607,7 +1607,7 @@ vhost_user_backend_handle_shared_object_add(struct vh= ost_dev *dev, QemuUUID uuid; =20 memcpy(uuid.data, object->uuid, sizeof(object->uuid)); - return virtio_add_vhost_device(&uuid, dev); + return virtio_dmabuf_add_vhost_device(&uuid, dev); } =20 static int @@ -1617,10 +1617,10 @@ vhost_user_backend_handle_shared_object_remove(stru= ct vhost_dev *dev, QemuUUID uuid; =20 memcpy(uuid.data, object->uuid, sizeof(object->uuid)); - switch (virtio_object_type(&uuid)) { + switch (virtio_dmabuf_object_type(&uuid)) { case TYPE_VHOST_DEV: { - struct vhost_dev *owner =3D virtio_lookup_vhost_device(&uuid); + struct vhost_dev *owner =3D virtio_dmabuf_lookup_vhost_device(&uui= d); if (dev !=3D owner) { /* Not allowed to remove non-owned entries */ return 0; @@ -1632,7 +1632,7 @@ vhost_user_backend_handle_shared_object_remove(struct= vhost_dev *dev, return 0; } =20 - return virtio_remove_resource(&uuid); + return virtio_dmabuf_remove_resource(&uuid); } =20 static bool vhost_user_send_resp(QIOChannel *ioc, VhostUserHeader *hdr, @@ -1710,13 +1710,13 @@ vhost_user_backend_handle_shared_object_lookup(stru= ct vhost_user *u, memcpy(uuid.data, payload->object.uuid, sizeof(payload->object.uuid)); =20 payload->u64 =3D 0; - switch (virtio_object_type(&uuid)) { + switch (virtio_dmabuf_object_type(&uuid)) { case TYPE_DMABUF: - dmabuf_fd =3D virtio_lookup_dmabuf(&uuid); + dmabuf_fd =3D virtio_dmabuf_lookup(&uuid); break; case TYPE_VHOST_DEV: { - struct vhost_dev *dev =3D virtio_lookup_vhost_device(&uuid); + struct vhost_dev *dev =3D virtio_dmabuf_lookup_vhost_device(&uuid); if (dev =3D=3D NULL) { payload->u64 =3D -EINVAL; break; diff --git a/include/hw/virtio/virtio-dmabuf.h b/include/hw/virtio/virtio-d= mabuf.h index 950cd24967..b9ee761a0c 100644 --- a/include/hw/virtio/virtio-dmabuf.h +++ b/include/hw/virtio/virtio-dmabuf.h @@ -56,7 +56,7 @@ typedef struct VirtioSharedObject { void virtio_dmabuf_init(void); =20 /** - * virtio_add_dmabuf() - Add a new dma-buf resource to the lookup table + * virtio_dmabuf_add() - Add a new dma-buf resource to the lookup table * @uuid: new resource's UUID * @dmabuf_fd: the dma-buf descriptor that will be stored and shared with * other virtio devices. The caller retains ownership over the @@ -69,11 +69,11 @@ void virtio_dmabuf_init(void); * Note that if it finds a repeated UUID, the resource is not inserted in * the lookup table. */ -bool virtio_add_dmabuf(QemuUUID *uuid, int dmabuf_fd); +bool virtio_dmabuf_add(QemuUUID *uuid, int dmabuf_fd); =20 /** - * virtio_add_vhost_device() - Add a new exporter vhost device that holds = the - * resource with the associated UUID + * virtio_dmabuf_add_vhost_device() - Add a new exporter vhost device that + * holds the resource with the associated UUID * @uuid: new resource's UUID * @dev: the pointer to the vhost device that holds the resource. The call= er * retains ownership over the device struct and its lifecycle. @@ -83,41 +83,42 @@ bool virtio_add_dmabuf(QemuUUID *uuid, int dmabuf_fd); * Note that if it finds a repeated UUID, the resource is not inserted in * the lookup table. */ -bool virtio_add_vhost_device(QemuUUID *uuid, struct vhost_dev *dev); +bool virtio_dmabuf_add_vhost_device(QemuUUID *uuid, struct vhost_dev *dev); =20 /** - * virtio_remove_resource() - Removes a resource from the lookup table + * virtio_dmabuf_remove_resource() - Removes a resource from the lookup ta= ble * @uuid: resource's UUID * * Return: true if the UUID has been found and removed from the lookup tab= le. */ -bool virtio_remove_resource(const QemuUUID *uuid); +bool virtio_dmabuf_remove_resource(const QemuUUID *uuid); =20 /** - * virtio_lookup_dmabuf() - Looks for a dma-buf resource in the lookup tab= le + * virtio_dmabuf_lookup() - Looks for a dma-buf resource in the lookup tab= le * @uuid: resource's UUID * * Return: the dma-buf file descriptor integer, or -1 if the key is not fo= und. */ -int virtio_lookup_dmabuf(const QemuUUID *uuid); +int virtio_dmabuf_lookup(const QemuUUID *uuid); =20 /** - * virtio_lookup_vhost_device() - Looks for an exporter vhost device in the - * lookup table + * virtio_dmabuf_lookup_vhost_device() - Looks for an exporter vhost device + * in the lookup table * @uuid: resource's UUID * * Return: pointer to the vhost_dev struct, or NULL if the key is not foun= d. */ -struct vhost_dev *virtio_lookup_vhost_device(const QemuUUID *uuid); +struct vhost_dev *virtio_dmabuf_lookup_vhost_device(const QemuUUID *uuid); =20 /** - * virtio_object_type() - Looks for the type of resource in the lookup tab= le + * virtio_dmabuf_object_type() - Looks for the type of resource in the + * lookup table * @uuid: resource's UUID * * Return: the type of resource associated with the UUID, or TYPE_INVALID = if * the key is not found. */ -SharedObjectType virtio_object_type(const QemuUUID *uuid); +SharedObjectType virtio_dmabuf_object_type(const QemuUUID *uuid); =20 /** * virtio_dmabuf_vhost_cleanup() - Destroys all entries of the shared @@ -130,9 +131,9 @@ SharedObjectType virtio_object_type(const QemuUUID *uui= d); int virtio_dmabuf_vhost_cleanup(struct vhost_dev *dev); =20 /** - * virtio_free_resources() - Destroys all keys and values of the shared + * virtio_dmabuf_free_resources() - Destroys all keys and values of the sh= ared * resources lookup table, and frees them */ -void virtio_free_resources(void); +void virtio_dmabuf_free_resources(void); =20 #endif /* VIRTIO_DMABUF_H */ diff --git a/tests/unit/test-virtio-dmabuf.c b/tests/unit/test-virtio-dmabu= f.c index e5cf7ee19f..a0ff89cd3f 100644 --- a/tests/unit/test-virtio-dmabuf.c +++ b/tests/unit/test-virtio-dmabuf.c @@ -32,12 +32,12 @@ static void test_add_remove_resources(void) qemu_uuid_generate(&uuid); dmabuf_fd =3D g_random_int_range(3, 500); /* Add a new resource */ - g_assert(virtio_add_dmabuf(&uuid, dmabuf_fd)); - g_assert_cmpint(virtio_lookup_dmabuf(&uuid), =3D=3D, dmabuf_fd); + g_assert(virtio_dmabuf_add(&uuid, dmabuf_fd)); + g_assert_cmpint(virtio_dmabuf_lookup(&uuid), =3D=3D, dmabuf_fd); /* Remove the resource */ - g_assert(virtio_remove_resource(&uuid)); + g_assert(virtio_dmabuf_remove_resource(&uuid)); /* Resource is not found anymore */ - g_assert_cmpint(virtio_lookup_dmabuf(&uuid), =3D=3D, -1); + g_assert_cmpint(virtio_dmabuf_lookup(&uuid), =3D=3D, -1); } } =20 @@ -50,13 +50,13 @@ static void test_add_remove_dev(void) virtio_dmabuf_init(); for (i =3D 0; i < 100; ++i) { qemu_uuid_generate(&uuid); - virtio_add_vhost_device(&uuid, dev); + virtio_dmabuf_add_vhost_device(&uuid, dev); /* vhost device is found */ - g_assert(virtio_lookup_vhost_device(&uuid) !=3D NULL); + g_assert(virtio_dmabuf_lookup_vhost_device(&uuid) !=3D NULL); /* Remove the vhost device */ - g_assert(virtio_remove_resource(&uuid)); + g_assert(virtio_dmabuf_remove_resource(&uuid)); /* vhost device is not found anymore */ - g_assert(virtio_lookup_vhost_device(&uuid) =3D=3D NULL); + g_assert(virtio_dmabuf_lookup_vhost_device(&uuid) =3D=3D NULL); } g_free(dev); } @@ -69,9 +69,9 @@ static void test_remove_invalid_resource(void) virtio_dmabuf_init(); for (i =3D 0; i < 20; ++i) { qemu_uuid_generate(&uuid); - g_assert_cmpint(virtio_lookup_dmabuf(&uuid), =3D=3D, -1); + g_assert_cmpint(virtio_dmabuf_lookup(&uuid), =3D=3D, -1); /* Removing a resource that does not exist returns false */ - g_assert_false(virtio_remove_resource(&uuid)); + g_assert_false(virtio_dmabuf_remove_resource(&uuid)); } } =20 @@ -85,25 +85,25 @@ static void test_add_invalid_resource(void) for (i =3D 0; i < 20; ++i) { qemu_uuid_generate(&uuid); /* Add a new resource with invalid (negative) resource fd */ - g_assert_false(virtio_add_dmabuf(&uuid, dmabuf_fd)); + g_assert_false(virtio_dmabuf_add(&uuid, dmabuf_fd)); /* Resource is not found */ - g_assert_cmpint(virtio_lookup_dmabuf(&uuid), =3D=3D, -1); + g_assert_cmpint(virtio_dmabuf_lookup(&uuid), =3D=3D, -1); /* Add a new vhost device with invalid (NULL) pointer */ - g_assert_false(virtio_add_vhost_device(&uuid, dev)); + g_assert_false(virtio_dmabuf_add_vhost_device(&uuid, dev)); /* vhost device is not found */ - g_assert(virtio_lookup_vhost_device(&uuid) =3D=3D NULL); + g_assert(virtio_dmabuf_lookup_vhost_device(&uuid) =3D=3D NULL); } =20 for (i =3D 0; i < 20; ++i) { /* Add a valid resource */ qemu_uuid_generate(&uuid); dmabuf_fd =3D g_random_int_range(3, 500); - g_assert(virtio_add_dmabuf(&uuid, dmabuf_fd)); - g_assert_cmpint(virtio_lookup_dmabuf(&uuid), =3D=3D, dmabuf_fd); + g_assert(virtio_dmabuf_add(&uuid, dmabuf_fd)); + g_assert_cmpint(virtio_dmabuf_lookup(&uuid), =3D=3D, dmabuf_fd); /* Add a new resource with repeated uuid returns false */ - g_assert_false(virtio_add_dmabuf(&uuid, alt_dmabuf)); + g_assert_false(virtio_dmabuf_add(&uuid, alt_dmabuf)); /* The value for the uuid key is not replaced */ - g_assert_cmpint(virtio_lookup_dmabuf(&uuid), =3D=3D, dmabuf_fd); + g_assert_cmpint(virtio_dmabuf_lookup(&uuid), =3D=3D, dmabuf_fd); } } =20 @@ -116,25 +116,25 @@ static void test_cleanup_res(void) =20 for (i =3D 0; i < ARRAY_SIZE(uuids); ++i) { qemu_uuid_generate(&uuids[i]); - virtio_add_vhost_device(&uuids[i], dev); + virtio_dmabuf_add_vhost_device(&uuids[i], dev); /* vhost device is found */ - g_assert(virtio_lookup_vhost_device(&uuids[i]) !=3D NULL); + g_assert(virtio_dmabuf_lookup_vhost_device(&uuids[i]) !=3D NULL); } qemu_uuid_generate(&uuid_alt); - virtio_add_vhost_device(&uuid_alt, dev_alt); + virtio_dmabuf_add_vhost_device(&uuid_alt, dev_alt); /* vhost device is found */ - g_assert(virtio_lookup_vhost_device(&uuid_alt) !=3D NULL); + g_assert(virtio_dmabuf_lookup_vhost_device(&uuid_alt) !=3D NULL); /* cleanup all dev resources */ num_removed =3D virtio_dmabuf_vhost_cleanup(dev); g_assert_cmpint(num_removed, =3D=3D, ARRAY_SIZE(uuids)); for (i =3D 0; i < ARRAY_SIZE(uuids); ++i) { /* None of the dev resources is found after free'd */ - g_assert_cmpint(virtio_lookup_dmabuf(&uuids[i]), =3D=3D, -1); + g_assert_cmpint(virtio_dmabuf_lookup(&uuids[i]), =3D=3D, -1); } /* uuid_alt is still in the hash table */ - g_assert(virtio_lookup_vhost_device(&uuid_alt) !=3D NULL); + g_assert(virtio_dmabuf_lookup_vhost_device(&uuid_alt) !=3D NULL); =20 - virtio_free_resources(); + virtio_dmabuf_free_resources(); g_free(dev); g_free(dev_alt); } @@ -148,13 +148,13 @@ static void test_free_resources(void) for (i =3D 0; i < ARRAY_SIZE(uuids); ++i) { qemu_uuid_generate(&uuids[i]); dmabuf_fd =3D g_random_int_range(3, 500); - g_assert(virtio_add_dmabuf(&uuids[i], dmabuf_fd)); - g_assert_cmpint(virtio_lookup_dmabuf(&uuids[i]), =3D=3D, dmabuf_fd= ); + g_assert(virtio_dmabuf_add(&uuids[i], dmabuf_fd)); + g_assert_cmpint(virtio_dmabuf_lookup(&uuids[i]), =3D=3D, dmabuf_fd= ); } - virtio_free_resources(); + virtio_dmabuf_free_resources(); for (i =3D 0; i < ARRAY_SIZE(uuids); ++i) { /* None of the resources is found after free'd */ - g_assert_cmpint(virtio_lookup_dmabuf(&uuids[i]), =3D=3D, -1); + g_assert_cmpint(virtio_dmabuf_lookup(&uuids[i]), =3D=3D, -1); } =20 } --=20 2.43.1