From nobody Sun Sep 7 17:13:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; 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=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1756878479; cv=none; d=zohomail.com; s=zohoarc; b=E4g4K1Sc+A96JYxYQGw3yHKox/2i09zjqNN7YKDULTCJqdbVb91R0Uv9Vf1qvomOpw5KjH0oWUMHHFt6ExvkrBwKmk0tS0ilej7EBVM97RqxpBY91+b0/oqYxe/zM1jJ73q4DYap75KpYQRdH3FbEVXyeVwrQ4COd1ahou7pH1U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1756878479; 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=v4J/E84GuSsyncT+2xlC4Y7ILFTp6vK5b2IjscNjRR4=; b=VwQmue0pX8JRsB8kYOP0kn4ZCXRLROtBh8qywD1P1NNd3kxAXl4IJCOB1nZEQza0zCrh3pXk6SQENQ9ndGkOG0bXs6KuGpjh+xJr1n31gvKdOG6wu10215OmktiWYdWfQpNFqG2iA9G4Mpc03uNcp4Tr0OmUfTe23LCJx6AwbIQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; 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 1756878479957774.4687074384544; Tue, 2 Sep 2025 22:47:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1utgL4-0005Rz-Pz; Wed, 03 Sep 2025 01:47:24 -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 1utgKz-0005RW-PC for qemu-devel@nongnu.org; Wed, 03 Sep 2025 01:47:17 -0400 Received: from mgamail.intel.com ([198.175.65.20]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1utgKx-000206-Vq for qemu-devel@nongnu.org; Wed, 03 Sep 2025 01:47:17 -0400 Received: from orviesa003.jf.intel.com ([10.64.159.143]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Sep 2025 22:47:09 -0700 Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Sep 2025 22:47:08 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1756878437; x=1788414437; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=9bqaUsWa3QbbmlyhD5WfWA5wuCxJhAlSjQHGJk486Wc=; b=SNmt7GMeGCDdZ9gbMn+kE5+7Wh5s0V1+DkD+YtaRSpajaA1GL4r+Glql oCKwzntId1DwTCQrBF9wnlK6Nu1tu3j1c09a+y2u1P3Y+4fSP/1hKp283 fhSYcWsUNp9QjP4QgP/1u/JUpM3rdnbXD+1+jwHcutNTbc/bamRC/139O RHJSl7S8YrV1ANo8o7xmW5yymCTwL3WycxMs9lT41CmodC9iw2pAS3hmo Gp7hEtSPhjTsJR9OGabHXDGhpCJW3INq59lHmApdDNRoxOzQBTsDTcz39 TmP1DFR34eCDzpRmxMVF6qt/qZ42ZsCbLDH0YSha10T7h/Nhdeg/azmnI A==; X-CSE-ConnectionGUID: 6V+KQSJKRGKNPz7W4o3RPw== X-CSE-MsgGUID: TdeHfOpxSEejC++lOagGJQ== X-IronPort-AV: E=McAfee;i="6800,10657,11541"; a="58878186" X-IronPort-AV: E=Sophos;i="6.18,233,1751266800"; d="scan'208";a="58878186" X-CSE-ConnectionGUID: Y08t34jhQcmKyODJS5b6yQ== X-CSE-MsgGUID: GDoKVTtqRY63G6SDifAzEg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,233,1751266800"; d="scan'208";a="175634762" From: Vivek Kasireddy To: qemu-devel@nongnu.org Cc: Vivek Kasireddy Subject: [RFC 1/6] linux-headers: Update vfio.h to include VFIO_DEVICE_FEATURE_DMA_BUF Date: Tue, 2 Sep 2025 22:42:14 -0700 Message-ID: <20250903054438.1179384-2-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250903054438.1179384-1-vivek.kasireddy@intel.com> References: <20250903054438.1179384-1-vivek.kasireddy@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=198.175.65.20; envelope-from=vivek.kasireddy@intel.com; helo=mgamail.intel.com X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.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, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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 @intel.com) X-ZM-MESSAGEID: 1756878483053116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vivek Kasireddy --- linux-headers/linux/vfio.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h index 79bf8c0cc5..d2177c9cba 100644 --- a/linux-headers/linux/vfio.h +++ b/linux-headers/linux/vfio.h @@ -1468,6 +1468,31 @@ struct vfio_device_feature_bus_master { }; #define VFIO_DEVICE_FEATURE_BUS_MASTER 10 =20 +/** + * Upon VFIO_DEVICE_FEATURE_GET create a dma_buf fd for the + * regions selected. + * + * open_flags are the typical flags passed to open(2), eg O_RDWR, O_CLOEXE= C, + * etc. offset/length specify a slice of the region to create the dmabuf f= rom. + * nr_ranges is the total number of (P2P DMA) ranges that comprise the dma= buf. + * + * Return: The fd number on success, -1 and errno is set on failure. + */ +#define VFIO_DEVICE_FEATURE_DMA_BUF 11 + +struct vfio_region_dma_range { + __u64 offset; + __u64 length; +}; + +struct vfio_device_feature_dma_buf { + __u32 region_index; + __u32 open_flags; + __u32 flags; + __u32 nr_ranges; + struct vfio_region_dma_range dma_ranges[]; +}; + /* -------- API for Type1 VFIO IOMMU -------- */ =20 /** --=20 2.50.1 From nobody Sun Sep 7 17:13:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; 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=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1756878555; cv=none; d=zohomail.com; s=zohoarc; b=NOIZViEed+66W9/2HYaqu7ULLDOYyIqswILT7bv7eOZoTLalIlJvrf8RVuisn0Z/aYS7gh8PDk9pfK/EwB9Esc9uSOLmqv1C642tZpp0RdLnNQB6KLYfpuL1wfxzwOwbI9VMDVDmmYp1EglwAgAIYQNfnqkLQ/dpi4dcJDJy/VI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1756878555; 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=A7OaSXRoS5SqaFf3VFHjqMYcEYyBn0glsJIRdETEUxk=; b=dSNoF634GTkz+UhjZGH8dwUG92qAhJQbR7iib88IxhHiXfjK49kPd/FyhzJPgwjidW6qmOnhayOYbpnxomdt3TBl5oCblEXIx2FvrUY1RDFWXuwzPjd5IP/foIXXnFAabgr/z9nBv6yCTB57qotF2X2y8Op/C0v1MUc1jk3AKFM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; 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 1756878555247216.04944755275437; Tue, 2 Sep 2025 22:49:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1utgL7-0005Tg-E7; Wed, 03 Sep 2025 01:47:25 -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 1utgL0-0005Rm-GG for qemu-devel@nongnu.org; Wed, 03 Sep 2025 01:47:18 -0400 Received: from mgamail.intel.com ([198.175.65.20]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1utgKy-00020Q-P0 for qemu-devel@nongnu.org; Wed, 03 Sep 2025 01:47:18 -0400 Received: from orviesa003.jf.intel.com ([10.64.159.143]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Sep 2025 22:47:09 -0700 Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Sep 2025 22:47:08 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1756878437; x=1788414437; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=L8wsa5EiKVsZTTAjXcSAQwAl5L2jNrbI/NYMZNyKHtE=; b=F467Gd/JI0PyGyk7OsGoGxsAtrx9E+9hJlnoSSJDX1IZS8YK6Msd6Ozn SVHS6FRQY2TCUEZup+hGCM0Mi07Fj08WnDEJzNqBIbIIBsOMK9aGHVwpK TvUlYTWvhg8HRmKURV6ZNvBE2bZEvbR/0rznZAJpOVhB8Q5ICyU3h3P7S sPX2fAa3KRte6hc98PNBSU1DMLq3u2sj/7x82Jy+sSOAMtUj+GHjj0X30 uAGX1D0V8EkAzIu21DI4MAZd5fxSZLq9HGZZ1DnxoGLzUzLXrvV2zwItu tK8smSdhP1Tn4DdRV9Ur1Hy7zSmepTBdGKapSdE7epJ/Sv52YyDoJcWYX A==; X-CSE-ConnectionGUID: 7M9uiSF5QLOxpLqZFLBO2g== X-CSE-MsgGUID: ZcrgeHNQQ4CehCl04/GTrA== X-IronPort-AV: E=McAfee;i="6800,10657,11541"; a="58878187" X-IronPort-AV: E=Sophos;i="6.18,233,1751266800"; d="scan'208";a="58878187" X-CSE-ConnectionGUID: m6/wSRLwQ4KmS0uOH7X2dg== X-CSE-MsgGUID: y9dLOmXjTb2ChRg4VaroMg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,233,1751266800"; d="scan'208";a="175634765" From: Vivek Kasireddy To: qemu-devel@nongnu.org Cc: Vivek Kasireddy , Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Subject: [RFC 2/6] vfio: Add support for VFIO_DEVICE_FEATURE_DMA_BUF Date: Tue, 2 Sep 2025 22:42:15 -0700 Message-ID: <20250903054438.1179384-3-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250903054438.1179384-1-vivek.kasireddy@intel.com> References: <20250903054438.1179384-1-vivek.kasireddy@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=198.175.65.20; envelope-from=vivek.kasireddy@intel.com; helo=mgamail.intel.com X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.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, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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 @intel.com) X-ZM-MESSAGEID: 1756878558289124100 In order to implement VFIO_DEVICE_FEATURE_DMA_BUF, we first need to identify the PCI region the buffer (represented by iovec) belongs to and then translate its addresses to offsets within that region. The qemu_ram_block_from_host() API gives us both the region and the offset info we need to populate the dma ranges in order to invoke this feature. Cc: Alex Williamson Cc: C=C3=A9dric Le Goater Signed-off-by: Vivek Kasireddy --- hw/vfio/region.c | 49 +++++++++++++++++++++++++++++++++++ include/hw/vfio/vfio-device.h | 3 +++ 2 files changed, 52 insertions(+) diff --git a/hw/vfio/region.c b/hw/vfio/region.c index d04c57db63..b58188147c 100644 --- a/hw/vfio/region.c +++ b/hw/vfio/region.c @@ -28,6 +28,7 @@ #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/units.h" +#include "system/ramblock.h" #include "monitor/monitor.h" #include "vfio-helpers.h" =20 @@ -401,3 +402,51 @@ void vfio_region_mmaps_set_enabled(VFIORegion *region,= bool enabled) trace_vfio_region_mmaps_set_enabled(memory_region_name(region->mem), enabled); } + +int vfio_device_create_dmabuf(VFIODevice *vdev, + struct iovec *iov, unsigned int iov_cnt) +{ + g_autofree struct vfio_device_feature *feature; + struct vfio_device_feature_dma_buf *dma_buf; + VFIORegion *region; + ram_addr_t offset; + MemoryRegion *mr; + RAMBlock *rb; + size_t argsz; + int i; + + argsz =3D sizeof(*feature) + sizeof (*dma_buf) + + sizeof(struct vfio_region_dma_range) * iov_cnt; + feature =3D g_malloc0(argsz); + dma_buf =3D (struct vfio_device_feature_dma_buf *)feature->data; + + for (i =3D 0; i < iov_cnt; i++) { + rcu_read_lock(); + rb =3D qemu_ram_block_from_host(iov[i].iov_base, false, &offset); + rcu_read_unlock(); + + if (!rb) { + return -1; + } + + mr =3D rb->mr; + if (mr->ops !=3D &vfio_region_ops) { + mr =3D mr->container; + if (mr->ops !=3D &vfio_region_ops) { + return -1; + } + } + + region =3D mr->opaque; + dma_buf->region_index =3D region->nr; + dma_buf->dma_ranges[i].offset =3D offset; + dma_buf->dma_ranges[i].length =3D iov[i].iov_len; + } + + dma_buf->nr_ranges =3D iov_cnt; + dma_buf->open_flags =3D O_RDONLY | O_CLOEXEC; + feature->argsz =3D argsz; + feature->flags =3D VFIO_DEVICE_FEATURE_GET | VFIO_DEVICE_FEATURE_DMA_B= UF; + + return ioctl(vdev->fd, VFIO_DEVICE_FEATURE, feature); +} diff --git a/include/hw/vfio/vfio-device.h b/include/hw/vfio/vfio-device.h index 6e4d5ccdac..e127abd5f0 100644 --- a/include/hw/vfio/vfio-device.h +++ b/include/hw/vfio/vfio-device.h @@ -277,6 +277,9 @@ bool vfio_device_has_region_cap(VFIODevice *vbasedev, i= nt region, uint16_t cap_t =20 int vfio_device_get_irq_info(VFIODevice *vbasedev, int index, struct vfio_irq_info *info); + +int vfio_device_create_dmabuf(VFIODevice *vbasedev, + struct iovec *iov, unsigned int iov_cnt); #endif =20 /* Returns 0 on success, or a negative errno. */ --=20 2.50.1 From nobody Sun Sep 7 17:13:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; 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=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1756878502; cv=none; d=zohomail.com; s=zohoarc; b=cFrq3eewhbNxVgA6mUs1b8YZy/LiT5tDY1qUFSM6saXzaR2O7bdd6EGiabEdWBUu6l2pL9ganBtf+e//9QEp19uImv0DOpJUuLoOkOGFKLjUhoaPQXW57jmANA6kjZcrep46sN5b+6sC2PPrt4ajh1u6MXSwUT38mFVwTes9FO0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1756878502; 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=eHYJ2CAFolp7Bm+UoHdo2TUgYGvj4YVwMpmxcaXPiD8=; b=h0k3T2lH8vZ/YC81ch02hbx+CgaqauwNAwVboJ4zBdOAwyPpsorcWW9sfzAitiBVM7hZwgyecOmw6UAn8gEYJlLiEg7pQM64EsCo4wLul0/UAkimDSPbHCW9yVaRgnmAigOJ3zkpOChRmLRss2gAB1Jgm+F8XzjomiAjFk7kR5Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; 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 1756878502034615.1274636970011; Tue, 2 Sep 2025 22:48:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1utgLB-0005Vh-EH; Wed, 03 Sep 2025 01:47:29 -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 1utgL2-0005ST-F9 for qemu-devel@nongnu.org; Wed, 03 Sep 2025 01:47:22 -0400 Received: from mgamail.intel.com ([198.175.65.20]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1utgL0-000206-3w for qemu-devel@nongnu.org; Wed, 03 Sep 2025 01:47:19 -0400 Received: from orviesa003.jf.intel.com ([10.64.159.143]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Sep 2025 22:47:09 -0700 Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Sep 2025 22:47:08 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1756878439; x=1788414439; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=nHIkY6xxQVZuAgYEJkhfdggVCrRA/bv+587dx6C5wpY=; b=bZe8AXlatlIXGKYw0aqcHG1tO7zjoRm0Yckf/tSEhJCELEvzLfiVuxtn T+mSAiBk8MhG32hEk0bzV39UekVxVHollO7GG9MiezNumLr8D0SsPSm4l 65WF1+DWJmrqTJRCbtJyiPOGDX+YW0WBsTrDcYubUNax/0soS0Qp7H3ax ZiNeFRiwbPfhAr4J+eS+55wB7xmR+e6fPckqWN12VXXvcxr2FDtYW7b2U 1LxA9g0yn7Iz/ApwoSA9j7MXjnsdTmWoZt6ty+3o2arAPn0GeAUugmwTV tcG/xYEXNnbOUOFKz4Cb5kPkHNzhZA6ZMMptmJgfSCC6YvExKzXVoVoZi A==; X-CSE-ConnectionGUID: Iyh0kuPzQ8SjL+lkDOnCDA== X-CSE-MsgGUID: 2WXy0sgQTzey/2B50phL4g== X-IronPort-AV: E=McAfee;i="6800,10657,11541"; a="58878194" X-IronPort-AV: E=Sophos;i="6.18,233,1751266800"; d="scan'208";a="58878194" X-CSE-ConnectionGUID: i10GpvOySWysoFeNqw6gXw== X-CSE-MsgGUID: fHiCdSqcTdWD5ho2YkXW+Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,233,1751266800"; d="scan'208";a="175634770" From: Vivek Kasireddy To: qemu-devel@nongnu.org Cc: Vivek Kasireddy , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Dmitry Osipenko Subject: [RFC 3/6] virtio-gpu-udmabuf: Create dmabuf for blobs associated with VFIO devices Date: Tue, 2 Sep 2025 22:42:16 -0700 Message-ID: <20250903054438.1179384-4-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250903054438.1179384-1-vivek.kasireddy@intel.com> References: <20250903054438.1179384-1-vivek.kasireddy@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=198.175.65.20; envelope-from=vivek.kasireddy@intel.com; helo=mgamail.intel.com X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.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, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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 @intel.com) X-ZM-MESSAGEID: 1756878503282116600 In addition to memfd, a blob resource can also have its backing storage in a VFIO device region. Therefore, we first need to figure out if the blob is backed by a VFIO device region or a memfd before we can call the right API to get a dmabuf fd created. So, once we have the ramblock and the associated mr, we rely on memory_region_is_ram_device() to tell us where the backing storage is located. If the blob resource is VFIO backed, we try to find the right VFIO device that contains the blob and then invoke the API vfio_create_dmabuf(). Note that we only call virtio_gpu_remap_udmabuf() if the blob is backed by a memfd. This is because the VFIO dmabuf implementation may not support mmap. Cc: Marc-Andr=C3=A9 Lureau Cc: Alex Benn=C3=A9e Cc: Akihiko Odaki Cc: Dmitry Osipenko Signed-off-by: Vivek Kasireddy --- hw/display/virtio-gpu-udmabuf.c | 60 ++++++++++++++++++++++++++++----- 1 file changed, 52 insertions(+), 8 deletions(-) diff --git a/hw/display/virtio-gpu-udmabuf.c b/hw/display/virtio-gpu-udmabu= f.c index d804f321aa..0390a8f488 100644 --- a/hw/display/virtio-gpu-udmabuf.c +++ b/hw/display/virtio-gpu-udmabuf.c @@ -18,6 +18,7 @@ #include "ui/console.h" #include "hw/virtio/virtio-gpu.h" #include "hw/virtio/virtio-gpu-pixman.h" +#include "hw/vfio/vfio-device.h" #include "trace.h" #include "system/ramblock.h" #include "system/hostmem.h" @@ -27,6 +28,32 @@ #include "standard-headers/linux/udmabuf.h" #include "standard-headers/drm/drm_fourcc.h" =20 +static void vfio_create_dmabuf(VFIODevice *vdev, + struct virtio_gpu_simple_resource *res) +{ + res->dmabuf_fd =3D vfio_device_create_dmabuf(vdev, res->iov, res->iov_= cnt); + if (res->dmabuf_fd < 0) { + warn_report("%s: VFIO_DEVICE_FEATURE_DMA_BUF: %s", __func__, + strerror(errno)); + } +} + +static VFIODevice *vfio_device_lookup(MemoryRegion *mr) +{ + VFIODevice *vdev; + + if (QLIST_EMPTY(&vfio_device_list)) { + return NULL; + } + + QLIST_FOREACH(vdev, &vfio_device_list, next) { + if (vdev->dev =3D=3D mr->dev) { + return vdev; + } + } + return NULL; +} + static void virtio_gpu_create_udmabuf(struct virtio_gpu_simple_resource *r= es) { struct udmabuf_create_list *list; @@ -130,6 +157,9 @@ bool virtio_gpu_have_udmabuf(void) =20 void virtio_gpu_init_udmabuf(struct virtio_gpu_simple_resource *res) { + bool memfd_blob =3D false; + ram_addr_t offset; + RAMBlock *rb; void *pdata =3D NULL; =20 res->dmabuf_fd =3D -1; @@ -137,15 +167,31 @@ void virtio_gpu_init_udmabuf(struct virtio_gpu_simple= _resource *res) res->iov[0].iov_len < 4096) { pdata =3D res->iov[0].iov_base; } else { - virtio_gpu_create_udmabuf(res); + rb =3D qemu_ram_block_from_host(res->iov[0].iov_base, false, &offs= et); + if (rb && memory_region_is_ram_device(rb->mr)) { + VFIODevice *vdev =3D vfio_device_lookup(rb->mr); + + if (!vdev) { + warn_report("Could not find device to create dmabuf"); + return; + } + vfio_create_dmabuf(vdev, res); + } else { + virtio_gpu_create_udmabuf(res); + memfd_blob =3D true; + } + if (res->dmabuf_fd < 0) { return; } - virtio_gpu_remap_udmabuf(res); - if (!res->remapped) { - return; + + if (memfd_blob) { + virtio_gpu_remap_udmabuf(res); + if (!res->remapped) { + return; + } + pdata =3D res->remapped; } - pdata =3D res->remapped; } =20 res->blob =3D pdata; @@ -153,9 +199,7 @@ void virtio_gpu_init_udmabuf(struct virtio_gpu_simple_r= esource *res) =20 void virtio_gpu_fini_udmabuf(struct virtio_gpu_simple_resource *res) { - if (res->remapped) { - virtio_gpu_destroy_udmabuf(res); - } + virtio_gpu_destroy_udmabuf(res); } =20 static void virtio_gpu_free_dmabuf(VirtIOGPU *g, VGPUDMABuf *dmabuf) --=20 2.50.1 From nobody Sun Sep 7 17:13:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; 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=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1756878476; cv=none; d=zohomail.com; s=zohoarc; b=UPUo4dyJ/XvuaPVvlm6JbZAFHER9HK3f33Yzu7phKhW3RZeWIRKzaLqhZuCgwW/ioBe2733mI5DmTAwDp2gHTg2bMVUpHImtD09SouYdYy3n0swP1U/msJZawVC2NB5w3gMg/4bjUr5CzGoAAcdieWCp7UsOEjo/2wwhGCSU+0s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1756878476; 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=TuiI99wdy6cIllkkbbrAY1c9UdiAt7xG87JR/i2sI5o=; b=kP+enBah9lsXMa76oMSdX1Z+2o2qsDs2I3eQGAh6rGb6E1FnPd0dfFUqoxZ41qYoFE/2YKheCpv9aTOdodQePBVTEevHEzd2u15pe1EGnTvTOlUk403STKbFsQQJm0LshGzwdTjWZtUKZ6jbCS1oHZ9BD30TtyunSioPp/vLwTo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; 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 1756878475908829.6673771792025; Tue, 2 Sep 2025 22:47:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1utgLB-0005Vm-R0; Wed, 03 Sep 2025 01:47:29 -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 1utgL4-0005Sd-1O for qemu-devel@nongnu.org; Wed, 03 Sep 2025 01:47:24 -0400 Received: from mgamail.intel.com ([198.175.65.20]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1utgL1-00020d-1J for qemu-devel@nongnu.org; Wed, 03 Sep 2025 01:47:21 -0400 Received: from orviesa003.jf.intel.com ([10.64.159.143]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Sep 2025 22:47:09 -0700 Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Sep 2025 22:47:08 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1756878440; x=1788414440; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=/b9BrS4N3IBhHzwSjL7/bGnI4s0+FhlyYtfD4N/KW4c=; b=JLF6/uZFmi1AwCPlpknmL5uxW8seIV1gcye1h6IoVlIzg7OzZnMFWO95 xrCoYymUUVSKon9D4eAblD/uY2GIGy9w8xCmUOLujCptYyH4lsp9EL6Hm SPf+a+Ti/7IzoN2OYzfsu8DXf/JhiMWNrIUFv3nZiRDLNcBu2YUpwivom sJBDS6o6EU3IwvivKLzCEAABSDRv4Jki4IAX7GkqIQhs5B3I9J+pLqmBv i2RffkTxarBBmfHsRb3J0j6rcfEl5ygjNHx54JZNCKhh8+aVRSpsPAWCN Y8S9KQx8lVI+xl4RByFd6oRexjiw5Jk2LyawJsryiuoL8F8z5dVd2do5J A==; X-CSE-ConnectionGUID: lCz8yaA+T9OHmRcZb3b1PQ== X-CSE-MsgGUID: q2fkgIsZTO6NL5XJ6s97kw== X-IronPort-AV: E=McAfee;i="6800,10657,11541"; a="58878200" X-IronPort-AV: E=Sophos;i="6.18,233,1751266800"; d="scan'208";a="58878200" X-CSE-ConnectionGUID: PUiCqFV2RxuMYLNF1fZeEQ== X-CSE-MsgGUID: JvnLlx8tRxq656Pk+Y4qTQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,233,1751266800"; d="scan'208";a="175634774" From: Vivek Kasireddy To: qemu-devel@nongnu.org Cc: Vivek Kasireddy , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Dmitry Osipenko Subject: [RFC 4/6] virtio-gpu: Don't rely on res->blob to identify blob resources Date: Tue, 2 Sep 2025 22:42:17 -0700 Message-ID: <20250903054438.1179384-5-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250903054438.1179384-1-vivek.kasireddy@intel.com> References: <20250903054438.1179384-1-vivek.kasireddy@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=198.175.65.20; envelope-from=vivek.kasireddy@intel.com; helo=mgamail.intel.com X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.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, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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 @intel.com) X-ZM-MESSAGEID: 1756878477813124100 The res->blob pointer is only valid for blobs that have their backing storage in memfd. Therefore, we cannot use it to determine if a resource is a blob or not. Instead, we could use res->blob_size to make this determination as it is non-zero for blob resources regardless of where their backing storage is located. Cc: Marc-Andr=C3=A9 Lureau Cc: Alex Benn=C3=A9e Cc: Akihiko Odaki Cc: Dmitry Osipenko Signed-off-by: Vivek Kasireddy --- hw/display/virtio-gpu.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index 0a1a625b0e..2f9133c3b6 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -57,7 +57,7 @@ void virtio_gpu_update_cursor_data(VirtIOGPU *g, } =20 if (res->blob_size) { - if (res->blob_size < (s->current_cursor->width * + if (!res->blob || res->blob_size < (s->current_cursor->width * s->current_cursor->height * 4)) { return; } @@ -144,7 +144,7 @@ virtio_gpu_find_check_resource(VirtIOGPU *g, uint32_t r= esource_id, } =20 if (require_backing) { - if (!res->iov || (!res->image && !res->blob)) { + if (!res->iov || (!res->image && !res->blob_size)) { qemu_log_mask(LOG_GUEST_ERROR, "%s: no backing storage %d\n", caller, resource_id); if (error) { @@ -444,7 +444,7 @@ static void virtio_gpu_transfer_to_host_2d(VirtIOGPU *g, =20 res =3D virtio_gpu_find_check_resource(g, t2d.resource_id, true, __func__, &cmd->error); - if (!res || res->blob) { + if (!res || res->blob_size) { return; } =20 @@ -507,7 +507,7 @@ static void virtio_gpu_resource_flush(VirtIOGPU *g, return; } =20 - if (res->blob) { + if (res->blob_size) { for (i =3D 0; i < g->parent_obj.conf.max_outputs; i++) { scanout =3D &g->parent_obj.scanout[i]; if (scanout->resource_id =3D=3D res->resource_id && @@ -538,7 +538,7 @@ static void virtio_gpu_resource_flush(VirtIOGPU *g, } } =20 - if (!res->blob && + if (!res->blob_size && (rf.r.x > res->width || rf.r.y > res->height || rf.r.width > res->width || @@ -634,7 +634,7 @@ static bool virtio_gpu_do_set_scanout(VirtIOGPU *g, =20 g->parent_obj.enable =3D 1; =20 - if (res->blob) { + if (res->blob_size) { if (console_has_gl(scanout->con)) { if (!virtio_gpu_update_dmabuf(g, scanout_id, res, fb, r)) { virtio_gpu_update_scanout(g, scanout_id, res, fb, r); @@ -645,13 +645,16 @@ static bool virtio_gpu_do_set_scanout(VirtIOGPU *g, return true; } =20 + if (!res->blob) { + return false; + } data =3D res->blob; } else { data =3D (uint8_t *)pixman_image_get_data(res->image); } =20 /* create a surface for this scanout */ - if ((res->blob && !console_has_gl(scanout->con)) || + if ((res->blob_size && !console_has_gl(scanout->con)) || !scanout->ds || surface_data(scanout->ds) !=3D data + fb->offset || scanout->width !=3D r->width || @@ -899,7 +902,7 @@ void virtio_gpu_cleanup_mapping(VirtIOGPU *g, g_free(res->addrs); res->addrs =3D NULL; =20 - if (res->blob) { + if (res->blob_size) { virtio_gpu_fini_udmabuf(res); } } --=20 2.50.1 From nobody Sun Sep 7 17:13:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; 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=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1756878555; cv=none; d=zohomail.com; s=zohoarc; b=GqmgWBs9XOoR4HCHgEQe62WZWbyMtwMQMgu/KhX7AnvNHDBnm9TvHm/gqo6LrGlE/LOsMdfRE2pkn/8uahxiS3LBfCabUTWJGgzJ+TymTmywMy0viOP4gHPTbA8Wls+ww8YLSLtm0jBbGy+9QQagk9LRheHpJrWhATHDE8C1yys= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1756878555; 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=EsaqUOhgylaGGZGgy76cDB32SlHI+pCusaVYPgc3e9E=; b=VGlUZPGzL4aTQ7u2ideRXtjAlLd7Oe9TAdkgRzFy4jpwAu/5aP0tawoa9u9JY0n2HaXlczG38/Ph9gZdteQ92r+V5I3Lc3+zvoyf36U3wxWOAWYcLbA3Ietx7R+C5oybM+jp7YsECLm+pbMydFZ2HNh3T7LcITiEO4Egzp5x0+U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; 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 1756878555541286.24587686414475; Tue, 2 Sep 2025 22:49:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1utgL7-0005U9-QB; Wed, 03 Sep 2025 01:47:25 -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 1utgL2-0005SV-MN for qemu-devel@nongnu.org; Wed, 03 Sep 2025 01:47:20 -0400 Received: from mgamail.intel.com ([198.175.65.20]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1utgL0-00020Q-TC for qemu-devel@nongnu.org; Wed, 03 Sep 2025 01:47:20 -0400 Received: from orviesa003.jf.intel.com ([10.64.159.143]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Sep 2025 22:47:10 -0700 Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Sep 2025 22:47:08 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1756878439; x=1788414439; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=5Ayv9ykhpHFD10nLL3YGERsihuG+v7/E0vJkkQ01MWc=; b=IZpX1beXi6/onvk7SeznqjNeEeDsgYey3WfRUbY60RYCbG9Fdq9IC+c3 DFV3gErTd1uysMm13FneaV25Ur8vsmCQrrhuK+4TauOG0wFYEX0TjpXGu ze+SPfpIV9w+91poICx7WjaJdNrl/z1B5Aiy4byBJeoRXrgowg2KIaoFH jHYmjD+sueP6PIz7zvHKXpYtUnBxbvDRRpqAdiK53sOEIJF3ySyEf8ulc BKa4v+zPVPb0l3WHFYCX6BaS/WMY4Jev++l88stajNy4Sw4EU3I9571fr yMSJlOGT/iysJgEd/op0q43DuuopsUk6oSGcXfESG2icK39KzvzBOMjyv g==; X-CSE-ConnectionGUID: Ln8jW7sISved5MaEdt6Ulg== X-CSE-MsgGUID: ppbpfPVMQwWMh8UwExcEvQ== X-IronPort-AV: E=McAfee;i="6800,10657,11541"; a="58878205" X-IronPort-AV: E=Sophos;i="6.18,233,1751266800"; d="scan'208";a="58878205" X-CSE-ConnectionGUID: RRVBDD9OSwm6XsCCOHWCvw== X-CSE-MsgGUID: I9aLMdMSQpeoF1p8CM8ZMQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,233,1751266800"; d="scan'208";a="175634781" From: Vivek Kasireddy To: qemu-devel@nongnu.org Cc: Vivek Kasireddy , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Dmitry Osipenko Subject: [RFC 5/6] virtio-gpu: Recreate the resource's dmabuf if new backing is attached Date: Tue, 2 Sep 2025 22:42:18 -0700 Message-ID: <20250903054438.1179384-6-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250903054438.1179384-1-vivek.kasireddy@intel.com> References: <20250903054438.1179384-1-vivek.kasireddy@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=198.175.65.20; envelope-from=vivek.kasireddy@intel.com; helo=mgamail.intel.com X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.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, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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 @intel.com) X-ZM-MESSAGEID: 1756878556139116600 There are cases when a blob resource's backing might get detached and re-attached again such as when the underlying object is getting migrated in the Guest. In these situations, we need to obtain a new dmabuf fd, which can be done by calling virtio_gpu_init_udmabuf(). Cc: Marc-Andr=C3=A9 Lureau Cc: Alex Benn=C3=A9e Cc: Akihiko Odaki Cc: Dmitry Osipenko Signed-off-by: Vivek Kasireddy --- hw/display/virtio-gpu.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index 2f9133c3b6..1654a417b8 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -938,6 +938,10 @@ virtio_gpu_resource_attach_backing(VirtIOGPU *g, cmd->error =3D VIRTIO_GPU_RESP_ERR_UNSPEC; return; } + + if (res->blob_size && res->dmabuf_fd < 0) { + virtio_gpu_init_udmabuf(res); + } } =20 static void --=20 2.50.1 From nobody Sun Sep 7 17:13:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; 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=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1756878457; cv=none; d=zohomail.com; s=zohoarc; b=kT9WhWGXGEgh3UC+vNlhOaXvLMabuuug8KDq/94K08Cbubx+gzrqDmeKK1coHW7hZpUoFE0IZ9V59s1Cd91hunQblowlESs2/7lI/YSu5hSP/6f9DAzyM7RwWth7b8UJiIxsG/1kU+iOlyVOnhoItHdHv3NDwjMnyuQX6PbGCsY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1756878457; 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=aRTF8kfHpiRJAXjXWOrWQcuuUTox9F5iwl4v9M879io=; b=SJGRwdJJlWomPJ2NhOgze+bAL6WizYCijel4mWK0Ahvf8ludmbCulNCJJI/NcXdlDA9NSLqNspLZNcBrZ+Hl3kF0zbV4gjG4HDSL34E+8AteOlkSO8wOVWUmgFiqohFXdD8gCUugc+TZtN0flICvvT16133kQ4kHK+kMIITxgoY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; 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 1756878457415656.3873615540389; Tue, 2 Sep 2025 22:47:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1utgL9-0005V8-2F; Wed, 03 Sep 2025 01:47:27 -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 1utgL4-0005Sg-Gp for qemu-devel@nongnu.org; Wed, 03 Sep 2025 01:47:24 -0400 Received: from mgamail.intel.com ([198.175.65.20]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1utgL2-000206-Qb for qemu-devel@nongnu.org; Wed, 03 Sep 2025 01:47:22 -0400 Received: from orviesa003.jf.intel.com ([10.64.159.143]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Sep 2025 22:47:10 -0700 Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Sep 2025 22:47:09 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1756878441; x=1788414441; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=BU5RBu9Owyo/QkBmmzVDRxjd1vlxZzGymV4N3uTNCYw=; b=ixBcuQYMlAQvnkDAh5ePmwhBqiSCIihrAcCs5UyinsvEobbuQEhfbVnY 2UHESoEPk+Rpp06wXGGNW9IJfso+dnZcg9Idg8EEG7O3kg5zikkuqDZEM wACDgEP9GWr0a2DMbExCsXqclI+mKLl1h6F/JG2Q+O15HNMIOcn3sv3Ro 35Enuz88xS7Y8SuxQd0Vs/2dI4sMnhLsZRIf0HDqT1SgWrVpn5e36gA9w fqTMc8+1X7/5yUEsi1RS/S50uQ6Y8ZzSm9eb7O65X+qzsEZYQJr15ivHq 2gwKVLwuOwd5AYEnwefro7riPeOfKs73D+KVSy/lzDGMzKsATU3tcCpWB g==; X-CSE-ConnectionGUID: wFd46wkcQtyCybBAx3AJlQ== X-CSE-MsgGUID: XrrfRx8/Q8ygHSSXRmlaqA== X-IronPort-AV: E=McAfee;i="6800,10657,11541"; a="58878210" X-IronPort-AV: E=Sophos;i="6.18,233,1751266800"; d="scan'208";a="58878210" X-CSE-ConnectionGUID: x09CrNPgQNey1k8mnzMB+A== X-CSE-MsgGUID: zRdOdsBqTTKKOP44V0peaw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,233,1751266800"; d="scan'208";a="175634784" From: Vivek Kasireddy To: qemu-devel@nongnu.org Cc: Vivek Kasireddy , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Dmitry Osipenko Subject: [RFC 6/6] virtio-gpu: Find the host addr given gpa associated with a ram device Date: Tue, 2 Sep 2025 22:42:19 -0700 Message-ID: <20250903054438.1179384-7-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250903054438.1179384-1-vivek.kasireddy@intel.com> References: <20250903054438.1179384-1-vivek.kasireddy@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=198.175.65.20; envelope-from=vivek.kasireddy@intel.com; helo=mgamail.intel.com X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.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, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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 @intel.com) X-ZM-MESSAGEID: 1756878459492124100 If the Guest provides a gpa (guest physical address) associated with a PCI region, then we can obtain the hva (host virtual address) via gpa2hva() API instead of dma_memory_map(). Note that we would still call dma_memory_unmap() (to unref mr) regardless of how we obtained the hva. Cc: Marc-Andr=C3=A9 Lureau Cc: Alex Benn=C3=A9e Cc: Akihiko Odaki Cc: Dmitry Osipenko Signed-off-by: Vivek Kasireddy --- hw/display/virtio-gpu.c | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index 1654a417b8..4af8390bb5 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -32,6 +32,7 @@ #include "qemu/module.h" #include "qapi/error.h" #include "qemu/error-report.h" +#include "monitor/monitor.h" =20 #define VIRTIO_GPU_VM_VERSION 1 =20 @@ -799,6 +800,36 @@ static void virtio_gpu_set_scanout_blob(VirtIOGPU *g, &fb, res, &ss.r, &cmd->error); } =20 +static void *map_gpa2hva(VirtIOGPU *g, + struct virtio_gpu_ctrl_command *cmd, + uint64_t gpa, hwaddr *len) +{ + MemoryRegion *mr =3D NULL; + Error *errp =3D NULL; + void *map; + + if (cmd->cmd_hdr.type !=3D VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB) { + return dma_memory_map(VIRTIO_DEVICE(g)->dma_as, gpa, len, + DMA_DIRECTION_TO_DEVICE, + MEMTXATTRS_UNSPECIFIED); + } + + map =3D gpa2hva(&mr, gpa, 1, &errp); + if (errp) { + error_report_err(errp); + return NULL; + } + + if (!memory_region_is_ram_device(mr)) { + memory_region_unref(mr); + map =3D dma_memory_map(VIRTIO_DEVICE(g)->dma_as, gpa, len, + DMA_DIRECTION_TO_DEVICE, + MEMTXATTRS_UNSPECIFIED); + } + + return map; +} + int virtio_gpu_create_mapping_iov(VirtIOGPU *g, uint32_t nr_entries, uint32_t offset, struct virtio_gpu_ctrl_command *cmd, @@ -840,9 +871,7 @@ int virtio_gpu_create_mapping_iov(VirtIOGPU *g, =20 do { len =3D l; - map =3D dma_memory_map(VIRTIO_DEVICE(g)->dma_as, a, &len, - DMA_DIRECTION_TO_DEVICE, - MEMTXATTRS_UNSPECIFIED); + map =3D map_gpa2hva(g, cmd, a, &len); if (!map) { qemu_log_mask(LOG_GUEST_ERROR, "%s: failed to map MMIO mem= ory for" " element %d\n", __func__, e); --=20 2.50.1