From nobody Mon Apr 6 14:59:12 2026 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=1773897837; cv=none; d=zohomail.com; s=zohoarc; b=hxN/bCTsxo3psvTMm7nBuHPDfudpsUiWISwuRVAFSPkjYMpGFsU7qEzJ/i139go+QfIUCIX29JADDhY2sskEJPEkZuPfKqroYGGA7pILcmKMY5NMM+5ZoNCZuXOcKa/YisgnuINoxmaHV21o/ZELWjaqycI16ihOuyri3SoIaks= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773897837; 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=DXEFF3+XgI7oKdzFe0QSn5npoJKUCPvUu/RvsChzHO0=; b=Bp2AMwiSBInlaBGQ6DryS53NIs3h1q8jPDE6alw2V+YY4sLOn2sW4OvuPjY+mprtfEEG1fpN1e6axMTx3KRR5y8TolZVzpvximta3SvJqEIPkJ4D8qhUjMkaJeMDaiG+hse1PbBxPCJSxJ93cHGZ7q6alo0PIS+IyWx5mEjaJTI= 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 177389783728635.041300024192196; Wed, 18 Mar 2026 22:23:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w35qi-0004m2-1k; Thu, 19 Mar 2026 01:23:12 -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 1w35qg-0004ko-Fq for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:10 -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 1w35qd-0007td-QT for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:10 -0400 Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:05 -0700 Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:03 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1773897788; x=1805433788; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ETF3G7leSpIcvyOSGf7KM/8USMG9qoyMXZhqJgz/1aE=; b=Wey+m9AeDQlWJZJotffM3EHVYITkCBgdwRS2uPR2ZCE089+Y0hpsWFG3 iBUjkf8zGIb88RsV7fci5rTAdgsItEI9ceflUzgorZavGgFK+y2znkwsf FacM6Gi7VficTBpR74bsD2rLZN5EA0scTnQpEv1/pDvQj/ZqL5ujCEYzn kcTbga78gLxM0w/KUxIu3VM5IoocwXbn50H/1eTCPs4EvC17jpVgRTbEn w2BiUQfDXrj5UjMdgxurDCWy6fumDRUI41AxPU1PpoEpFsrp/xoXUIElJ lIQAbQycPb+IeTAmnPOeRZNK6V7cA3yqeD9aD4KRjpPs/2LlxfoSDVcFT Q==; X-CSE-ConnectionGUID: Q6wHq2EZRTaxYNTuuJka4g== X-CSE-MsgGUID: MzqXkw2WTEq78ndyDeEd1A== X-IronPort-AV: E=McAfee;i="6800,10657,11733"; a="74660356" X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="74660356" X-CSE-ConnectionGUID: L8W4P3cVSG+fw+tFAPL5mQ== X-CSE-MsgGUID: NCYUhwwRRCykJ2yoGXK6mw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="218355511" 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 , Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Subject: [PATCH v12 01/10] virtio-gpu: Recreate the resource's dmabuf if new backing is attached Date: Wed, 18 Mar 2026 22:15:50 -0700 Message-ID: <20260319052023.2088685-2-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319052023.2088685-1-vivek.kasireddy@intel.com> References: <20260319052023.2088685-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: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 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_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, 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: qemu development 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: 1773897841194158500 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 Cc: Alex Williamson Cc: C=C3=A9dric Le Goater Reviewed-by: Akihiko Odaki 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 b998ce8324..ccb229ff3f 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -949,6 +949,10 @@ virtio_gpu_resource_attach_backing(VirtIOGPU *g, cmd->error =3D VIRTIO_GPU_RESP_ERR_UNSPEC; return; } + + if (res->blob_size) { + virtio_gpu_init_udmabuf(res); + } } =20 static void --=20 2.53.0 From nobody Mon Apr 6 14:59:12 2026 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=1773897872; cv=none; d=zohomail.com; s=zohoarc; b=HXDh2H6wwH3kGw5agUYoMUYDhUhRbCVixzm9c1KpU8jsz5tacgUx2IGv6Xw0CMrYawXmm+sMpvHD+5Mw3Wvnx9f1/4fA8tYC0hR5ZYiFSmgupLUL/rHdGoT6tkusbE5C3hlq+iBYSVNtOqzHqWRhUUnL0z7siJKL8Sds/xxRxGI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773897872; 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=d7v7RZenVqDciDHJwCX+jGJ/zbEQDFoWsYPJaeaEaZk=; b=VE+XmAPvpjVBc9lGGBY53xbfl9GPRlfxtdy9h2xuwdp2cKiZornEPVGTr2eRplGyj/vNTcfkbbuTUdgTFvPj9/m51CcGsCGdm4J+UE3kTYGj+cUtoqjlnSdhGBfMze7iVe7H3dqBtUm7qUZkQX7mhzjDezzsemWtbnW383sJwyU= 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 1773897872458442.27911656121216; Wed, 18 Mar 2026 22:24:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w35qk-0004mm-Vv; Thu, 19 Mar 2026 01:23:15 -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 1w35qj-0004m9-4U for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:13 -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 1w35qg-0007td-QH for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:12 -0400 Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:05 -0700 Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:03 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1773897791; x=1805433791; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=HYsUGr97xhAnQqg3pKyd7iSnJDKo/AjovuIKIcNPE84=; b=n0wS9PocC1dIs5Jhh4cNtjrrw39IIrA5VoSG8atyuztmjBDmv5ylXVfS iklZYpaGjruXnTTiFeSgE+OcwPrSXCGbWa4pBO+todMVkiN+nHC78n+6G eX7Rqtj4IFC9HgRUHQGc8ulKQCWS7xWjn03IY8oCEKQgCUN7RZhm6mq6d Ns9yAiwxDbgzzaf+jiIv+Q6D+tSMe8wPaJ8Aeub1+JKWBV5ZLVGAtPY4c Kc3H4o09pVPM14mmLV/14sqet5i3QnPhAqk6knANh9CKqTDfA1qVpqJV4 HkZkK7woUoI/hSXdYnpMAid39JjFVyqgjabRNuxgtvwIn8irm3GvYeKln w==; X-CSE-ConnectionGUID: AE6JC3UtSdumx/F943x24w== X-CSE-MsgGUID: QAecdeAgRMyOh8Lr2I1XBg== X-IronPort-AV: E=McAfee;i="6800,10657,11733"; a="74660365" X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="74660365" X-CSE-ConnectionGUID: ZKcQ1tDXTFaZ5NwEgtMMPQ== X-CSE-MsgGUID: UGO+U2cjQm2Ph9g7X72KBA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="218355515" 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 , Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Subject: [PATCH v12 02/10] virtio-gpu: Find hva for Guest's DMA addr associated with a ram device Date: Wed, 18 Mar 2026 22:15:51 -0700 Message-ID: <20260319052023.2088685-3-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319052023.2088685-1-vivek.kasireddy@intel.com> References: <20260319052023.2088685-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: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 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_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, 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: qemu development 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: 1773897873477158500 If the Guest provides a DMA address that is associated with a ram device (such as a VFIO PCI device region and not its system memory), then we can obtain the hva (host virtual address) by invoking address_space_translate() followed by memory_region_get_ram_ptr(). We cannot use dma_memory_map() because for memory regions that do not support direct access, it would create bounce buffers instead of returning the actual hva, which is not desirable here. And, since VFIO device regions are not considered directly accessible (because they are mostly MMIO based), virtio-gpu cannot invoke dma_memory_map() to obtain the hva in this case. Therefore, in order to handle addresses associated with VFIO devices, we need to use the address_space_translate() API to first identify the right memory region and the appropriate offset within that region and then use memory_region_get_ram_ptr() to get the hva. This approach also works for addresses associated with the system memory region. Note that, although we take an explicit reference on the memory region, we would still rely on dma_memory_unmap() to drop that reference when the dma mapping is eventually unmapped. Cc: Marc-Andr=C3=A9 Lureau Cc: Alex Benn=C3=A9e Cc: Akihiko Odaki Cc: Dmitry Osipenko Cc: Alex Williamson Cc: C=C3=A9dric Le Goater Reviewed-by: Akihiko Odaki Signed-off-by: Vivek Kasireddy --- hw/display/virtio-gpu.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index ccb229ff3f..1c6a8e2995 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -810,6 +810,23 @@ static void virtio_gpu_set_scanout_blob(VirtIOGPU *g, &fb, res, &ss.r, &cmd->error); } =20 +static void *virtio_gpu_dma_memory_map(VirtIOGPU *g, + struct virtio_gpu_ctrl_command *cmd, + uint64_t a, hwaddr *len) +{ + MemoryRegion *mr; + hwaddr xlat; + + mr =3D address_space_translate(VIRTIO_DEVICE(g)->dma_as, a, &xlat, len, + DMA_DIRECTION_TO_DEVICE, + MEMTXATTRS_UNSPECIFIED); + if (memory_region_is_ram(mr)) { + memory_region_ref(mr); + return memory_region_get_ram_ptr(mr) + xlat; + } + return NULL; +} + int virtio_gpu_create_mapping_iov(VirtIOGPU *g, uint32_t nr_entries, uint32_t offset, struct virtio_gpu_ctrl_command *cmd, @@ -851,9 +868,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 virtio_gpu_dma_memory_map(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.53.0 From nobody Mon Apr 6 14:59:12 2026 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=1773897873; cv=none; d=zohomail.com; s=zohoarc; b=WsqNNyTuqg0jymMzicIgGx6W2xhptPNW9mQPs/eS7Y6u3wCsbNZDV0cjWuIIb+jlkLoAT30nHMJNsif5gkCF+6iqM5JffBKOyzLIl2NR3O0dCjGWkG7K12q1SgoizAfo6XYR36PhUfJm4FLQVnYBXL5I0Q7hpxuiaCiWKPBGkCA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773897873; 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=U2Vy/557RYqI5QGtrVnu/owPLuPhx/A7Gia2zNyYQBI=; b=gYDGNhHBY/b5x9OQfKi/qBxy+Q+bjfPGvdVu0lCRkiw/j85znPzcOy1FDAR2CBIfPk/F5BTdiYzcp/x1rUDsSJlfE5YVj8RtYp1d4g3/nMQHZZJ0WcKcGOt/dPRj607aBplYSSzED2b1eal+AQfU5/3U7sTXa+fxsvXLpjok/14= 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 1773897873594696.7213635213396; Wed, 18 Mar 2026 22:24:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w35qp-0004nr-F8; Thu, 19 Mar 2026 01:23:19 -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 1w35qj-0004mA-4s for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:13 -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 1w35qh-0007tU-7o for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:12 -0400 Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:05 -0700 Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:03 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1773897792; x=1805433792; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=nJ7cXSWJRwb5tHqKyGx71DcG7tDYW03lthjiJrJcXnw=; b=Fg2M+edZUJKcn7jhPhGwXPrPfn+QZGWGTrr1wYfO6l1GoCUkbQwdysgg LoF6ZHb6IqDpLNRbIf39lGHYP3xLU3ifZnTtErDOVKysefiHhPIluE0wa IqTKeMK/l+Z4pwXWjG4D7F5kEK2o95I/l95wSn++nqElO3AG08YCBDMbm 5q4UBfKjtUdqePTzt5iVuk8UKoLG55PiE3LMtq5BkUyJ/52YHib58NU8u kwGj2FONw/LEBGo1IQj/ZTMXNzs4BX4XCLo/2dwVBzpkPsDLSIItATn36 XSMXsplWXW7bIoG9lfgKV7gz+db38vSGvErRNfV+pRrU6I3nEJDMQuQ1Y Q==; X-CSE-ConnectionGUID: UDxwhpdSTIiJwgkkFs1Bdg== X-CSE-MsgGUID: mDHx8+QdR82D/R2X2BMKPg== X-IronPort-AV: E=McAfee;i="6800,10657,11733"; a="74660371" X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="74660371" X-CSE-ConnectionGUID: YwGjmzgtR3WVjxbHEJpzUQ== X-CSE-MsgGUID: OJbTo5gcTVmDyfMYJuFvxQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="218355518" 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 , Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Subject: [PATCH v12 03/10] virtio-gpu: Rename udmabuf files and helpers to dmabuf Date: Wed, 18 Mar 2026 22:15:52 -0700 Message-ID: <20260319052023.2088685-4-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319052023.2088685-1-vivek.kasireddy@intel.com> References: <20260319052023.2088685-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: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 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_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, 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: qemu development 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: 1773897875478158500 This is prep-work for adding the ability to create dmabuf fds from VFIO devices in addition to udmabuf. Cc: Marc-Andr=C3=A9 Lureau Cc: Alex Benn=C3=A9e Cc: Akihiko Odaki Cc: Dmitry Osipenko Cc: Alex Williamson Cc: C=C3=A9dric Le Goater Reviewed-by: Akihiko Odaki Signed-off-by: Vivek Kasireddy --- include/hw/virtio/virtio-gpu.h | 6 +++--- ...gpu-udmabuf-stubs.c =3D> virtio-gpu-dmabuf-stubs.c} | 4 ++-- .../{virtio-gpu-udmabuf.c =3D> virtio-gpu-dmabuf.c} | 12 ++++++------ hw/display/virtio-gpu.c | 8 ++++---- hw/display/meson.build | 4 ++-- 5 files changed, 17 insertions(+), 17 deletions(-) rename hw/display/{virtio-gpu-udmabuf-stubs.c =3D> virtio-gpu-dmabuf-stubs= .c} (77%) rename hw/display/{virtio-gpu-udmabuf.c =3D> virtio-gpu-dmabuf.c} (94%) diff --git a/include/hw/virtio/virtio-gpu.h b/include/hw/virtio/virtio-gpu.h index f69fc19462..99e0865e38 100644 --- a/include/hw/virtio/virtio-gpu.h +++ b/include/hw/virtio/virtio-gpu.h @@ -370,10 +370,10 @@ bool virtio_gpu_scanout_blob_to_fb(struct virtio_gpu_= framebuffer *fb, struct virtio_gpu_set_scanout_blob *ss, uint64_t blob_size); =20 -/* virtio-gpu-udmabuf.c */ +/* virtio-gpu-dmabuf.c */ bool virtio_gpu_have_udmabuf(void); -void virtio_gpu_init_udmabuf(struct virtio_gpu_simple_resource *res); -void virtio_gpu_fini_udmabuf(VirtIOGPU *g, +void virtio_gpu_init_dmabuf(struct virtio_gpu_simple_resource *res); +void virtio_gpu_fini_dmabuf(VirtIOGPU *g, struct virtio_gpu_simple_resource *res); int virtio_gpu_update_dmabuf(VirtIOGPU *g, uint32_t scanout_id, diff --git a/hw/display/virtio-gpu-udmabuf-stubs.c b/hw/display/virtio-gpu-= dmabuf-stubs.c similarity index 77% rename from hw/display/virtio-gpu-udmabuf-stubs.c rename to hw/display/virtio-gpu-dmabuf-stubs.c index 85d03935a3..f2c4002800 100644 --- a/hw/display/virtio-gpu-udmabuf-stubs.c +++ b/hw/display/virtio-gpu-dmabuf-stubs.c @@ -7,12 +7,12 @@ bool virtio_gpu_have_udmabuf(void) return false; } =20 -void virtio_gpu_init_udmabuf(struct virtio_gpu_simple_resource *res) +void virtio_gpu_init_dmabuf(struct virtio_gpu_simple_resource *res) { /* nothing (stub) */ } =20 -void virtio_gpu_fini_udmabuf(VirtIOGPU *g, struct virtio_gpu_simple_resour= ce *res) +void virtio_gpu_fini_dmabuf(VirtIOGPU *g, struct virtio_gpu_simple_resourc= e *res) { /* nothing (stub) */ } diff --git a/hw/display/virtio-gpu-udmabuf.c b/hw/display/virtio-gpu-dmabuf= .c similarity index 94% rename from hw/display/virtio-gpu-udmabuf.c rename to hw/display/virtio-gpu-dmabuf.c index 74b6a7766a..776e5c4c64 100644 --- a/hw/display/virtio-gpu-udmabuf.c +++ b/hw/display/virtio-gpu-dmabuf.c @@ -68,7 +68,7 @@ static void virtio_gpu_create_udmabuf(struct virtio_gpu_s= imple_resource *res) g_free(list); } =20 -static void virtio_gpu_remap_udmabuf(struct virtio_gpu_simple_resource *re= s) +static void virtio_gpu_remap_dmabuf(struct virtio_gpu_simple_resource *res) { res->remapped =3D mmap(NULL, res->blob_size, PROT_READ, MAP_SHARED, res->dmabuf_fd, 0); @@ -79,7 +79,7 @@ static void virtio_gpu_remap_udmabuf(struct virtio_gpu_si= mple_resource *res) } } =20 -static void virtio_gpu_destroy_udmabuf(struct virtio_gpu_simple_resource *= res) +static void virtio_gpu_destroy_dmabuf(struct virtio_gpu_simple_resource *r= es) { if (res->remapped) { munmap(res->remapped, res->blob_size); @@ -128,7 +128,7 @@ bool virtio_gpu_have_udmabuf(void) return memfd_backend; } =20 -void virtio_gpu_init_udmabuf(struct virtio_gpu_simple_resource *res) +void virtio_gpu_init_dmabuf(struct virtio_gpu_simple_resource *res) { void *pdata =3D NULL; =20 @@ -141,7 +141,7 @@ void virtio_gpu_init_udmabuf(struct virtio_gpu_simple_r= esource *res) if (res->dmabuf_fd < 0) { return; } - virtio_gpu_remap_udmabuf(res); + virtio_gpu_remap_dmabuf(res); if (!res->remapped) { return; } @@ -162,7 +162,7 @@ static void virtio_gpu_free_dmabuf(VirtIOGPU *g, VGPUDM= ABuf *dmabuf) g_free(dmabuf); } =20 -void virtio_gpu_fini_udmabuf(VirtIOGPU *g, struct virtio_gpu_simple_resour= ce *res) +void virtio_gpu_fini_dmabuf(VirtIOGPU *g, struct virtio_gpu_simple_resourc= e *res) { int max_outputs =3D g->parent_obj.conf.max_outputs; int i; @@ -179,7 +179,7 @@ void virtio_gpu_fini_udmabuf(VirtIOGPU *g, struct virti= o_gpu_simple_resource *re } } =20 - virtio_gpu_destroy_udmabuf(res); + virtio_gpu_destroy_dmabuf(res); } =20 static VGPUDMABuf diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index 1c6a8e2995..b169772321 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -372,7 +372,7 @@ static void virtio_gpu_resource_create_blob(VirtIOGPU *= g, return; } =20 - virtio_gpu_init_udmabuf(res); + virtio_gpu_init_dmabuf(res); QTAILQ_INSERT_HEAD(&g->reslist, res, next); } =20 @@ -929,7 +929,7 @@ void virtio_gpu_cleanup_mapping(VirtIOGPU *g, res->addrs =3D NULL; =20 if (res->blob) { - virtio_gpu_fini_udmabuf(g, res); + virtio_gpu_fini_dmabuf(g, res); } } =20 @@ -966,7 +966,7 @@ virtio_gpu_resource_attach_backing(VirtIOGPU *g, } =20 if (res->blob_size) { - virtio_gpu_init_udmabuf(res); + virtio_gpu_init_dmabuf(res); } } =20 @@ -1457,7 +1457,7 @@ static int virtio_gpu_blob_load(QEMUFile *f, void *op= aque, size_t size, return -EINVAL; } =20 - virtio_gpu_init_udmabuf(res); + virtio_gpu_init_dmabuf(res); =20 resource_id =3D qemu_get_be32(f); } diff --git a/hw/display/meson.build b/hw/display/meson.build index e730c289b1..6169e47bee 100644 --- a/hw/display/meson.build +++ b/hw/display/meson.build @@ -69,9 +69,9 @@ if config_all_devices.has_key('CONFIG_VIRTIO_GPU') virtio_gpu_ss.add(when: 'CONFIG_VIRTIO_GPU', if_true: [files('virtio-gpu-base.c', 'virtio-gpu.c'), = pixman]) if host_os =3D=3D 'linux' - virtio_gpu_ss.add(files('virtio-gpu-udmabuf.c')) + virtio_gpu_ss.add(files('virtio-gpu-dmabuf.c')) else - virtio_gpu_ss.add(files('virtio-gpu-udmabuf-stubs.c')) + virtio_gpu_ss.add(files('virtio-gpu-dmabuf-stubs.c')) endif virtio_gpu_ss.add(when: 'CONFIG_VHOST_USER_GPU', if_true: files('vhost-u= ser-gpu.c')) hw_display_modules +=3D {'virtio-gpu': virtio_gpu_ss} --=20 2.53.0 From nobody Mon Apr 6 14:59:12 2026 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=1773897881; cv=none; d=zohomail.com; s=zohoarc; b=jNZjbWIWHRzYDdkXt++5lqBarFrErjNBSsT8YsxQggSByuRm6iS6CtTXsB0z3KEwXw/CIcTF2sy/OgezppZ5pLib98ySVmQYO4iOu9yLlFeIjpSdvOprl2+yRp6LYBRf5JiuHbsqE2tnD114dVem9E56iYUiWfwW4yODBi7YwDc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773897881; 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=VCzoR8KZmQN3rCj2kev+fElXPi0JDUXZufwpueG+2gg=; b=f7ehvScdS7yQY1uQcV/3dTtKrxcEsGl7KRrlRj0MYzGi/adT5uGHAu74g6z+U3rOjrDl+irrHiHgxkXrMNZLl8ivJUl+vlv4JhA+SuqtZtDtAueEuJbtXQ1vEmzcgxuHxBgN0thDKbwth9VYDe4nFUf+ujo0JhSAL5tgZJupgxY= 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 1773897881239447.3495166922295; Wed, 18 Mar 2026 22:24:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w35qr-0004og-C0; Thu, 19 Mar 2026 01:23:21 -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 1w35qj-0004mb-Qh for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:13 -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 1w35qh-0007uV-Gr for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:13 -0400 Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:06 -0700 Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:03 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1773897792; x=1805433792; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=1J4eoFf4c2OuvI54QAuPBMcNUljr0h10rY6DxxOl8Dw=; b=lUa4X2YcCQ7nApneNNU5Y4MINQxBXuaY5siU/Kv0L4xlygMtkc9qJwSN 9ZULJBHNvIDf7u7jEVMRwU8CB313kkRlOeVu45vn2nl7yntRHnikkMaL4 GYhKhF2wtCQqToF5aHuxhAJ9g196kEi6FjsE1ulVzyGR5Oz/sCT72RHOR qHxAS+vDMuAJmRpHg56WWbk5DOQ71x1LdztueAp/OXW/2HBB/30kK9R47 F+2wPfZX1x/l9U+rV7pyhUlUXj+1Wh+xyA6T53OOFBBowhPm5JN/sy44y LpkOdR1Zj4PigFhcsIrLaDKQ2i8crRK1DnulDWyGn+cxx0zTQOU0zXoWP A==; X-CSE-ConnectionGUID: i62XiPfeSbWN+c1GHJSd/g== X-CSE-MsgGUID: wm9MhUSYS5q6MsYz8oKvYA== X-IronPort-AV: E=McAfee;i="6800,10657,11733"; a="74660378" X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="74660378" X-CSE-ConnectionGUID: Fr2hl/pJRwiRdcW6dQTXFg== X-CSE-MsgGUID: zg0ba3jmSgaWKPyTBzKJVQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="218355521" 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 , Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Subject: [PATCH v12 04/10] virtio-gpu-dmabuf: Remove rcu_read_lock/unlock from virtio_gpu_create_udmabuf() Date: Wed, 18 Mar 2026 22:15:53 -0700 Message-ID: <20260319052023.2088685-5-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319052023.2088685-1-vivek.kasireddy@intel.com> References: <20260319052023.2088685-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: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 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_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, 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: qemu development 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: 1773897881672158500 There is no need to wrap the call to qemu_ram_block_from_host() with rcu_read_lock/unlock as we already hold a reference to the memory region that owns the ram block. Note that, the reference was obtained via dma_memory_map() while creating the mapping. Cc: Marc-Andr=C3=A9 Lureau Cc: Alex Benn=C3=A9e Cc: Akihiko Odaki Cc: Dmitry Osipenko Cc: Alex Williamson Cc: C=C3=A9dric Le Goater Reviewed-by: Akihiko Odaki Signed-off-by: Vivek Kasireddy --- hw/display/virtio-gpu-dmabuf.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/hw/display/virtio-gpu-dmabuf.c b/hw/display/virtio-gpu-dmabuf.c index 776e5c4c64..64582f973c 100644 --- a/hw/display/virtio-gpu-dmabuf.c +++ b/hw/display/virtio-gpu-dmabuf.c @@ -43,10 +43,7 @@ static void virtio_gpu_create_udmabuf(struct virtio_gpu_= simple_resource *res) sizeof(struct udmabuf_create_item) * res->iov_cnt); =20 for (i =3D 0; i < res->iov_cnt; i++) { - rcu_read_lock(); rb =3D qemu_ram_block_from_host(res->iov[i].iov_base, false, &offs= et); - rcu_read_unlock(); - if (!rb || rb->fd < 0) { g_free(list); return; --=20 2.53.0 From nobody Mon Apr 6 14:59:12 2026 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=1773897880; cv=none; d=zohomail.com; s=zohoarc; b=oB93TAQmoK6kuWpA+9KFzT2m66wlyPj6i832DOnSdyIrD1REryKxGNT7R6/WPacpKeNPCnb5aJePxOyUcQKQHDhkKCtIuJtn1Pwak1Sp2sxnW9z/0C9aBMi+m8N7EvH6W0aicjWU0+kZYwyMirehz0K3GRtBwALelzwlz0gGjgE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773897880; 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=QcovW6r7MDyI5Udjl+fQ9upR3Ph3aHFQKITMHGiFC/0=; b=mseSv0qtSWOsJYjIW2ileeyO3Yal3k1Pp4laoI7YzhXjDnzpUUPTitrN1bfNdAX/tqsdn1gx5Q/ieQuvg4IcxF1B83U+COQPN6/Nf7u50SzTv63QhJ1jxakdxJrxd+886x0m1HCpoz5QFmosCgvYFrFSeYK3tp+GEVy49GBQok0= 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 1773897880475564.845922966572; Wed, 18 Mar 2026 22:24:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w35r0-0004pZ-UW; Thu, 19 Mar 2026 01:23:30 -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 1w35ql-0004n0-6G for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:15 -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 1w35qj-0007td-FE for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:14 -0400 Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:06 -0700 Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:03 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1773897794; x=1805433794; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=9ziDSbHwSrkEPqHaPeAgFsuOnr9zwiAAHFHy8DDHCZ0=; b=MMjyjUMHb095vVp5PyZV71zTkgbkKvHAQRwiUvSoUHawSfPrCCVrukG1 G2bFs8T2LIw21ggZgSlseIu2h8UuRuwI4JI0zB34R12pJns096tphjghG 693iIBv3nbAtpcuxXsOlgsERhJfOMkS8J+0EtgEnowlW/T9o39O7bLQza WcTVF+N7n9DLIHQTKnlveB+bzfbzFuCqj0gvVwqC0NNjyVrGF/Q7M/XRz aZCe09aA2iZyvLDnWrjFPAxDDW8IH987XE/+STIEDOV1CUthqJR+6gsVK yAbGLPSuL69kLcsxh/dBVZiBHv6evrS2wY40cOMvBru3f72b+YZ6mWXqf Q==; X-CSE-ConnectionGUID: 74z4Rv4+Rza7nDxKzpWkMg== X-CSE-MsgGUID: G/h/6cSsToKfcLdgHSp09A== X-IronPort-AV: E=McAfee;i="6800,10657,11733"; a="74660384" X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="74660384" X-CSE-ConnectionGUID: cRZJBxL6T9OnGffBi5JrHA== X-CSE-MsgGUID: C/X9PcJDRgew7ztaN+KjhA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="218355524" 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 , Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Subject: [PATCH v12 05/10] virtio-gpu-dmabuf: Use g_autofree for the list pointer Date: Wed, 18 Mar 2026 22:15:54 -0700 Message-ID: <20260319052023.2088685-6-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319052023.2088685-1-vivek.kasireddy@intel.com> References: <20260319052023.2088685-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: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 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_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, 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: qemu development 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: 1773897883147154100 Avoid the manual g_free() calls for the list pointer by using g_autofree in virtio_gpu_create_udmabuf(). Cc: Marc-Andr=C3=A9 Lureau Cc: Alex Benn=C3=A9e Cc: Akihiko Odaki Cc: Dmitry Osipenko Cc: Alex Williamson Cc: C=C3=A9dric Le Goater Reviewed-by: Akihiko Odaki Signed-off-by: Vivek Kasireddy --- hw/display/virtio-gpu-dmabuf.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/hw/display/virtio-gpu-dmabuf.c b/hw/display/virtio-gpu-dmabuf.c index 64582f973c..e35f7714a9 100644 --- a/hw/display/virtio-gpu-dmabuf.c +++ b/hw/display/virtio-gpu-dmabuf.c @@ -29,7 +29,7 @@ =20 static void virtio_gpu_create_udmabuf(struct virtio_gpu_simple_resource *r= es) { - struct udmabuf_create_list *list; + g_autofree struct udmabuf_create_list *list =3D NULL; RAMBlock *rb; ram_addr_t offset; int udmabuf, i; @@ -45,7 +45,6 @@ static void virtio_gpu_create_udmabuf(struct virtio_gpu_s= imple_resource *res) for (i =3D 0; i < res->iov_cnt; i++) { rb =3D qemu_ram_block_from_host(res->iov[i].iov_base, false, &offs= et); if (!rb || rb->fd < 0) { - g_free(list); return; } =20 @@ -62,7 +61,6 @@ static void virtio_gpu_create_udmabuf(struct virtio_gpu_s= imple_resource *res) warn_report("%s: UDMABUF_CREATE_LIST: %s", __func__, strerror(errno)); } - g_free(list); } =20 static void virtio_gpu_remap_dmabuf(struct virtio_gpu_simple_resource *res) --=20 2.53.0 From nobody Mon Apr 6 14:59:12 2026 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=1773897837; cv=none; d=zohomail.com; s=zohoarc; b=X/tp00wE6ohV5AG5uwbTw2UqUvHNianXO0xwss/kuwPRrPAfOM2luQd+TyMS6ZCnpzAJkE/zLvOqsgjtw0CAZXq/uBVo8OSmzimS3ZLhnL2/m+hUaaZgcI7ZHX+sSQgFlckIGBK2AgNT1+zgKekh6pnXYagYM3kB59wls26h4OY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773897837; 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=JSObVbUyyNKBkfPDqfdG3YvtUZhUDTGtDJ8b3cvu7EU=; b=BkF59OzeP6sHMrZ25VkA/4d2g9AyhtBpowGW3FvlZed+LmhHTYg/swsuEO3CFxlFww2/E6pBD6a81pbBcUWWT5rUHmmkhUfMuSoTNNWQjKYwZlqONi/7Eyo4MhhcbDLnfnC8RnvTMDzeKdsb/F6AkJA0f5OijF8dwxuCWxgFAcg= 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 1773897837112264.31486168811637; Wed, 18 Mar 2026 22:23:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w35qy-0004ow-IT; Thu, 19 Mar 2026 01:23:28 -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 1w35qk-0004mv-WF for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:15 -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 1w35qj-0007tU-Fu for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:14 -0400 Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:06 -0700 Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:03 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1773897794; x=1805433794; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=QuvOPLgWq33qfjM99tcEL47AWR773cTQyaf9yFQOg/M=; b=Z4ufSM8ekfXkli8kiwrYu5V4QIG4gpjk9udjuxgFaE2HFuyH2dEfxXkc m7HasEh2mlAFZBJBo6sV8On/oK2kgHwiJMdvmptPudiU5iS2W87yWIjrq nZPRI1ZOIaXlV8mTBJojEy0yncgHwj9FQxLgdYmTpZzVi6+yj2MpwQnkh cd8QV7ltT6F5a55s+DyY6joZ/C5as2p1CB9POanySWryrJtYAt5KrZsM0 zgDEPi64FrZWHKsVMCatOoC6uBNKsY7MQWME0/uduu4iCc7hZzevCy7e2 thRTERIMt/BM1TJ4i9mysgzEao7U07YvE8Z1+jgKYJiRTPVXEUJF/B9+N A==; X-CSE-ConnectionGUID: jBtewN6hTG+YBfZsKjo/5w== X-CSE-MsgGUID: ZSPVOkw+SD+pJxlHfGsLFw== X-IronPort-AV: E=McAfee;i="6800,10657,11733"; a="74660389" X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="74660389" X-CSE-ConnectionGUID: 2/bsmXsVRWWLjwVi6/d5Qw== X-CSE-MsgGUID: iJRmHkU7ToC42YDPKLjPMg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="218355527" From: Vivek Kasireddy To: qemu-devel@nongnu.org Cc: Vivek Kasireddy , Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Subject: [PATCH v12 06/10] vfio/region: Add a helper to get VFIO region from memory region Date: Wed, 18 Mar 2026 22:15:55 -0700 Message-ID: <20260319052023.2088685-7-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319052023.2088685-1-vivek.kasireddy@intel.com> References: <20260319052023.2088685-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: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 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_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, 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: qemu development 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: 1773897841870154100 Having a way to get the VFIO region associated with a memory region is helpful in various scenarios. For example, this capability can be useful in retrieving the region info such as index and offset needed for mapping a part of a VFIO region or creating a dmabuf. Cc: Alex Williamson Cc: C=C3=A9dric Le Goater Signed-off-by: Vivek Kasireddy --- hw/vfio/vfio-region.h | 10 ++++++++++ hw/vfio/region.c | 11 +++++++++++ 2 files changed, 21 insertions(+) diff --git a/hw/vfio/vfio-region.h b/hw/vfio/vfio-region.h index 9b21d4ee5b..3dd47f77f6 100644 --- a/hw/vfio/vfio-region.h +++ b/hw/vfio/vfio-region.h @@ -45,4 +45,14 @@ void vfio_region_unmap(VFIORegion *region); void vfio_region_exit(VFIORegion *region); void vfio_region_finalize(VFIORegion *region); =20 +/** + * Return the VFIO region associated with a given MemoryRegion. This can + * be useful in retrieving region info such as index and offset. + * + * @mr: MemoryRegion to use + * + * Returns the region or NULL on error. + */ +void *vfio_get_region_from_mr(MemoryRegion *mr); + #endif /* HW_VFIO_REGION_H */ diff --git a/hw/vfio/region.c b/hw/vfio/region.c index 47fdc2df34..9d7ac339c9 100644 --- a/hw/vfio/region.c +++ b/hw/vfio/region.c @@ -539,3 +539,14 @@ void vfio_region_mmaps_set_enabled(VFIORegion *region,= bool enabled) trace_vfio_region_mmaps_set_enabled(memory_region_name(region->mem), enabled); } + +void *vfio_get_region_from_mr(MemoryRegion *mr) +{ + while (mr->container) { + if (mr->ops =3D=3D &vfio_region_ops) { + return mr->opaque; + } + mr =3D mr->container; + } + return NULL; +} --=20 2.53.0 From nobody Mon Apr 6 14:59:12 2026 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=1773897862; cv=none; d=zohomail.com; s=zohoarc; b=h4yGnvVZ5dG/czM7W7xe+h/WqcLMJgVad+RvCJvb4ldw782Cd64K6UxJ/FP6IPDG3lQwHJFkpAhQyLkbPdRpvH7xnaln7V1tAw912jCTVYaXt5hYcLbfIVthbolJfj+oU6HsmjyyyoDcOwva02srd6ILDfKrmY02CtWPTPQ8D6s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773897862; 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=iRjzzOSoHX8vkqcN1EKuFPgDMlEceHHGhaxMubqJ120=; b=hCdKwWC3gQSNvkz/IagnboGHmhCEWKUyHpoAE1ppddLu+xbVXY1yOXoGc0fts+3neg+41PM9erxWcg/k0aEOX6S3BKDDtCXV/z9fh/Mf6mSOheTjAFRPTyjg5juxMHvbTfsbIMQX41CNXPls+pxuos7M52+aiOWuU8uldbiWMP0= 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 17738978629841015.0692671417478; Wed, 18 Mar 2026 22:24:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w35r1-0004qG-HF; Thu, 19 Mar 2026 01:23:31 -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 1w35qn-0004ne-F9 for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:19 -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 1w35qk-0007uV-4M for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:16 -0400 Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:06 -0700 Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:04 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1773897794; x=1805433794; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=JTTCEdUVw9+0aUi3ZfwFDBMu95wnyduf3HZFBnxLZFk=; b=Fnh68D4DkFIrtXQLSP7i0jXLVUhmcpbbyf/MeVK6UOnflqvwxMABoEjD 6LVv1xvySnlf5+WB+zBLQTqSIplC4gKvm4VmCZ63PBfPiyjvUB2qGsL/Y TWBfjyAPOIJOoHlgj+p43AjX7uUj7FTJGlWGA042fXgAG0LQuV5HJ0/Wt GIjYEJSqRQeNw1zQysXyd9zNhW/FV4uE2yTykVCgCXBroxquoc6XNn66Q yFRM3SDAbRifrB2xfTivnoK1OW7bdWbHnoe1yXVQIs1/yoC3QNjFeHTb/ 4TYqDaw9jquEyScEm6g++9L7QQOlVl6Qm17ypbiVomWE9tCsRDZWn34ve g==; X-CSE-ConnectionGUID: RRaZsP4kRxiy/VQU2v1rZQ== X-CSE-MsgGUID: Zm+jDHXrSOeeKNc/Z3xRDw== X-IronPort-AV: E=McAfee;i="6800,10657,11733"; a="74660393" X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="74660393" X-CSE-ConnectionGUID: qkD6k2z9Ssq75a/Yvr2vrg== X-CSE-MsgGUID: N5WOTdevSMOQBjK84ZoV8Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="218355531" From: Vivek Kasireddy To: qemu-devel@nongnu.org Cc: Vivek Kasireddy , Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Subject: [PATCH v12 07/10] vfio/device: Add support for creating dmabuf from multiple ranges Date: Wed, 18 Mar 2026 22:15:56 -0700 Message-ID: <20260319052023.2088685-8-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319052023.2088685-1-vivek.kasireddy@intel.com> References: <20260319052023.2088685-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: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 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_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, 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: qemu development 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: 1773897864717154100 In order to create a dmabuf associated with a buffer that spans multiple ranges, we first need to identify the VFIO region and index 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 so that we can invoke the VFIO_DEVICE_FEATURE_DMA_BUF feature to create the dmabuf. Also, instead of iterating over all QOM devices to find the VFIODevice associated with a memory region, introduce a helper to just use the vfio_device_list to lookup the VFIODevice. And, introduce another helper lookup the VFIO region given an address. Lastly, introduce an enum to return the type of error encountered while creating the dmabuf fd. Cc: Alex Williamson Cc: C=C3=A9dric Le Goater Signed-off-by: Vivek Kasireddy --- include/hw/vfio/vfio-device.h | 23 +++++++ hw/vfio/device.c | 114 ++++++++++++++++++++++++++++++++++ hw/vfio/dmabuf-stubs.c | 17 +++++ hw/vfio/meson.build | 1 + 4 files changed, 155 insertions(+) create mode 100644 hw/vfio/dmabuf-stubs.c diff --git a/include/hw/vfio/vfio-device.h b/include/hw/vfio/vfio-device.h index 828a31c006..d46640ff53 100644 --- a/include/hw/vfio/vfio-device.h +++ b/include/hw/vfio/vfio-device.h @@ -41,6 +41,13 @@ enum { VFIO_DEVICE_TYPE_AP =3D 3, }; =20 +enum { + /* The Guest passed addresses stored in IOV are invalid */ + VFIO_DMABUF_CREATE_ERR_INVALID_IOV =3D -1, + /* Guest or Host may be at fault for this type of error */ + VFIO_DMABUF_CREATE_ERR_UNSPEC =3D -2, +}; + typedef struct VFIODeviceOps VFIODeviceOps; typedef struct VFIODeviceIOOps VFIODeviceIOOps; typedef struct VFIOMigration VFIOMigration; @@ -308,6 +315,22 @@ bool vfio_device_has_region_cap(VFIODevice *vbasedev, = int region, uint16_t cap_t =20 int vfio_device_get_irq_info(VFIODevice *vbasedev, int index, struct vfio_irq_info *info); + +/** + * Create a dmabuf fd by first translating the addresses in the + * iovec array into VFIO region offsets and then invoking the + * VFIO_DEVICE_FEATURE_DMA_BUF feature. + * + * @iov: array of iovec entries associated with a buffer + * @iov_cnt: number of entries in the iovec array + * @total_size: total size of the dmabuf + * @errp: pointer to Error*, to store an error if it happens. + * + * Returns the created dmabuf fd or either VFIO_DMABUF_CREATE_ERR_UNSPEC + * or VFIO_DMABUF_CREATE_ERR_INVALID_IOV on error. + */ +int vfio_device_create_dmabuf_fd(struct iovec *iov, unsigned int iov_cnt, + size_t total_size, Error **errp); #endif =20 /* Returns 0 on success, or a negative errno. */ diff --git a/hw/vfio/device.c b/hw/vfio/device.c index 973fc35b59..542c378913 100644 --- a/hw/vfio/device.c +++ b/hw/vfio/device.c @@ -21,7 +21,9 @@ #include "qemu/osdep.h" #include =20 +#include "system/ramblock.h" #include "hw/vfio/vfio-device.h" +#include "hw/vfio/vfio-region.h" #include "hw/vfio/pci.h" #include "hw/core/iommu.h" #include "hw/core/hw-error.h" @@ -644,3 +646,115 @@ static VFIODeviceIOOps vfio_device_io_ops_ioctl =3D { .region_read =3D vfio_device_io_region_read, .region_write =3D vfio_device_io_region_write, }; + +/* + * This helper looks up the VFIODevice corresponding to the given iov. It + * can be useful to determinine if a buffer (represented by the iov) belon= gs + * to a VFIO device or not. This is mainly invoked when external components + * such as virtio-gpu request creation of dmabuf fds for buffers that may + * belong to a VFIO device. + */ +static bool vfio_device_lookup(struct iovec *iov, VFIODevice **vbasedevp, + RAMBlock **first_rbp, Error **errp) +{ + VFIODevice *vbasedev; + RAMBlock *first_rb; + ram_addr_t offset; + + first_rb =3D qemu_ram_block_from_host(iov[0].iov_base, false, &offset); + if (!first_rb) { + error_setg(errp, "Could not find first ramblock\n"); + return false; + } + + *first_rbp =3D first_rb; + QLIST_FOREACH(vbasedev, &vfio_device_list, next) { + if (vbasedev->dev =3D=3D first_rb->mr->dev) { + *vbasedevp =3D vbasedev; + return true; + } + } + error_setg(errp, "No VFIO device found to create dmabuf from\n"); + return false; +} + +/* + * This helper looks up the VFIORegion corresponding to the given address. + * It also verifies that the RAMBlock associated with the address is the + * same as the first_rb passed in. This is to ensure that all addresses + * in the iov belong to the same region. + */ +static bool vfio_region_lookup(void *addr, VFIORegion **regionp, + RAMBlock *first_rb, ram_addr_t *offsetp, + Error **errp) +{ + VFIORegion *region; + RAMBlock *rb; + + rb =3D qemu_ram_block_from_host(addr, false, offsetp); + if (!rb || rb !=3D first_rb) { + error_setg(errp, "Dmabuf segments must belong to the same region\n= "); + return false; + } + + region =3D vfio_get_region_from_mr(rb->mr); + if (region) { + *regionp =3D region; + return true; + } + error_setg(errp, "Could not find valid region for dmabuf segment\n"); + return false; +} + +int vfio_device_create_dmabuf_fd(struct iovec *iov, unsigned int iov_cnt, + size_t total_size, Error **errp) +{ + g_autofree struct vfio_device_feature *feature =3D NULL; + struct vfio_device_feature_dma_buf *dma_buf; + RAMBlock *first_rb =3D NULL; + VFIODevice *vbasedev; + VFIORegion *region; + ram_addr_t offset; + size_t argsz; + int i, ret; + + if (iov_size(iov, iov_cnt) !=3D total_size) { + error_setg(errp, "Total size of iov does not match dmabuf size\n"); + return VFIO_DMABUF_CREATE_ERR_INVALID_IOV; + } + + if (!vfio_device_lookup(iov, &vbasedev, &first_rb, errp)) { + return VFIO_DMABUF_CREATE_ERR_INVALID_IOV; + } + + argsz =3D sizeof(*feature) + sizeof (*dma_buf) + + sizeof(struct vfio_region_dma_range) * iov_cnt; + feature =3D g_malloc0(argsz); + *feature =3D (struct vfio_device_feature) { + .argsz =3D argsz, + .flags =3D VFIO_DEVICE_FEATURE_GET | VFIO_DEVICE_FEATURE_DMA_BUF, + }; + dma_buf =3D (struct vfio_device_feature_dma_buf *)feature->data; + + for (i =3D 0; i < iov_cnt; i++) { + if (!vfio_region_lookup(iov[i].iov_base, ®ion, + first_rb, &offset, errp)) { + return VFIO_DMABUF_CREATE_ERR_INVALID_IOV; + } + + 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; + + ret =3D vfio_device_get_feature(vbasedev, feature); + if (ret < 0) { + error_setg_errno(errp, -ret, + "Could not create dmabuf fd via VFIO device"); + return VFIO_DMABUF_CREATE_ERR_UNSPEC; + } + return ret; +} diff --git a/hw/vfio/dmabuf-stubs.c b/hw/vfio/dmabuf-stubs.c new file mode 100644 index 0000000000..374bd2a188 --- /dev/null +++ b/hw/vfio/dmabuf-stubs.c @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2026 Intel and/or its affiliates. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "qemu/error-report.h" +#include "qemu/iov.h" +#include "hw/vfio/vfio-device.h" + +int vfio_device_create_dmabuf_fd(struct iovec *iov, unsigned int iov_cnt, + size_t total_size, Error **errp) +{ + error_setg(errp, "VFIO dmabuf support is not enabled"); + return VFIO_DMABUF_CREATE_HOST_ERROR; +} diff --git a/hw/vfio/meson.build b/hw/vfio/meson.build index 82f68698fb..ac899d30a8 100644 --- a/hw/vfio/meson.build +++ b/hw/vfio/meson.build @@ -34,3 +34,4 @@ system_ss.add(when: 'CONFIG_IOMMUFD', if_false: files('io= mmufd-stubs.c')) system_ss.add(when: 'CONFIG_VFIO_PCI', if_true: files( 'display.c', )) +system_ss.add(when: 'CONFIG_VFIO', if_false: files('dmabuf-stubs.c')) --=20 2.53.0 From nobody Mon Apr 6 14:59:12 2026 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=1773897873; cv=none; d=zohomail.com; s=zohoarc; b=VjYyi+8Ndt4V1ZTWSXv3KZUFEWrpGgGKSbXTLKToPmRYV8i5wvcFfcX+KsnLEeALEqN0fJN+Zvlt9C/UXBCh5HyakvpI79ir96vJuY1Gi9uqfUNLf7VjUqDBIx6dxCKbdZbY8BQ2A/hoPYYkj/oYqdw+7+XO9uimbKJR2aD4Da8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773897873; 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=YG5ARRIGxtGvnSLN/dAt7ETPJ9eFMgzjkatSch2cS6M=; b=UmWVPAMfEcfJ7yh7EjynQ0qIk9jXBUMIFrxNU5gSbQ/7Bazrb2IUNXirNVSKOVmh8JCDojYNRd6ZtgcsWnnSUQkm7hZLwDJehFnBOI/fhz7LUylv1qqZBfWYepYZbhQTQgkWXhwh35Zn0Q/4ccvGFIe+IshutObfxbN/4bpel3I= 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 1773897873571379.50126774177113; Wed, 18 Mar 2026 22:24:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w35r0-0004p5-MA; Thu, 19 Mar 2026 01:23:30 -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 1w35qo-0004ng-Nf for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:19 -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 1w35ql-0007tU-H5 for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:18 -0400 Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:07 -0700 Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:04 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1773897796; x=1805433796; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=TgTxvHCWi3fXEA43aM8mwolMJTMmN/YWQczQ7WYTzBs=; b=IJ7iaP1xFSM3EY1ukVqetpGAsg2gY50Lx74NUbqnAj4q4ZYNFeRyGk6m tUoa90C3Di0ypJigPWO1owbA4s6FQWJ9PB2hIN3GGz6z/95oPtMXqKKGR N6LBeWvZOCQA6+qduPhApw0cCI9E3TxKTJsVDq58/reTPoNOE/X7KR54O VyDm6dYG8uCVnv/+fsP7c2zQ4wiu84JJlSTYC1KwkTW5W9D1rLS5794XH w87OtEPZUYvlK5XCGTFBfNAtZ8Ej6vzzk7/kaYvvQmM1QFcjtY2aTJP+9 vg+5LQbf9930jGMWqohWxl3z7yTIR2my1fOzpfikXcjcVa1eDIORz9oZg A==; X-CSE-ConnectionGUID: pdLCrS0DTdGejwfvBDWJPA== X-CSE-MsgGUID: v6rZXbBBTPGDrWH4deB82Q== X-IronPort-AV: E=McAfee;i="6800,10657,11733"; a="74660395" X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="74660395" X-CSE-ConnectionGUID: QMV0mCFZQHOUbcmrwwRrVw== X-CSE-MsgGUID: iAD9roUmQbqj9Denh15ktQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="218355533" From: Vivek Kasireddy To: qemu-devel@nongnu.org Cc: Vivek Kasireddy , Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Subject: [PATCH v12 08/10] vfio/device: Add a helper to mmap a dmabuf Date: Wed, 18 Mar 2026 22:15:57 -0700 Message-ID: <20260319052023.2088685-9-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319052023.2088685-1-vivek.kasireddy@intel.com> References: <20260319052023.2088685-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: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 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_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, 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: qemu development 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: 1773897874646154100 In order to mmap a dmabuf, we first need to create a placeholder mapping that would fit the entire size of the dmabuf. This mapping would then be replaced with smaller mappings of individual dmabuf segments. Cc: Alex Williamson Cc: C=C3=A9dric Le Goater Signed-off-by: Vivek Kasireddy --- include/hw/vfio/vfio-device.h | 16 ++++++++++ hw/vfio/device.c | 59 +++++++++++++++++++++++++++++++++++ hw/vfio/dmabuf-stubs.c | 7 +++++ 3 files changed, 82 insertions(+) diff --git a/include/hw/vfio/vfio-device.h b/include/hw/vfio/vfio-device.h index d46640ff53..14909490ef 100644 --- a/include/hw/vfio/vfio-device.h +++ b/include/hw/vfio/vfio-device.h @@ -331,6 +331,22 @@ int vfio_device_get_irq_info(VFIODevice *vbasedev, int= index, */ int vfio_device_create_dmabuf_fd(struct iovec *iov, unsigned int iov_cnt, size_t total_size, Error **errp); + +/** + * Mmap a dmabuf by first translating the addresses in the iovec + * array into VFIO region offsets and then creating a placeholder + * mapping that would be replaced later with mappings that + * correspond to the dmabuf segments. + * + * @iov: array of iovec entries associated with the dmabuf + * @iov_cnt: number of entries in the iovec array + * @total_size: total size of the dmabuf + * @errp: pointer to Error*, to store an error if it happens. + * + * Returns the mapped pointer on success and NULL on error. + */ +void *vfio_device_mmap_dmabuf(struct iovec *iov, unsigned int iov_cnt, + size_t total_size, Error **errp); #endif =20 /* Returns 0 on success, or a negative errno. */ diff --git a/hw/vfio/device.c b/hw/vfio/device.c index 542c378913..43223ceacd 100644 --- a/hw/vfio/device.c +++ b/hw/vfio/device.c @@ -758,3 +758,62 @@ int vfio_device_create_dmabuf_fd(struct iovec *iov, un= signed int iov_cnt, } return ret; } + +void *vfio_device_mmap_dmabuf(struct iovec *iov, unsigned int iov_cnt, + size_t total_size, Error **errp) +{ + struct vfio_region_info *info =3D NULL; + ram_addr_t offset, len =3D 0; + VFIODevice *vbasedev; + VFIORegion *region; + RAMBlock *first_rb; + void *map, *submap; + int i; + + if (iov_size(iov, iov_cnt) !=3D total_size) { + error_setg(errp, "Total size of iov does not match dmabuf size\n"); + return NULL; + } + + if (!vfio_device_lookup(iov, &vbasedev, &first_rb, errp)) { + return NULL; + } + + /* + * We first reserve a contiguous chunk of address space for the entire + * dmabuf, then replace it with smaller mappings that correspond to the + * individual segments of the dmabuf. + */ + map =3D mmap(NULL, total_size, PROT_NONE, MAP_SHARED | MAP_ANONYMOUS, = -1, 0); + if (map =3D=3D MAP_FAILED) { + error_setg_errno(errp, errno, "Could not reserve placeholder mappi= ng"); + return NULL; + } + + for (i =3D 0; i < iov_cnt; i++) { + if (!vfio_region_lookup(iov[i].iov_base, ®ion, + first_rb, &offset, errp)) { + goto err; + } + + if (vfio_device_get_region_info(vbasedev, region->nr, &info)) { + error_setg(errp, "Cannot find region info for dmabuf segment\n= "); + goto err; + } + + submap =3D mmap(map + len, iov[i].iov_len, PROT_READ, + MAP_SHARED | MAP_FIXED, vbasedev->fd, + info->offset + offset); + if (submap =3D=3D MAP_FAILED) { + error_setg_errno(errp, errno, "Could not mmap dmabuf segment\n= "); + goto err; + } + len +=3D iov[i].iov_len; + } + return map; +err: + munmap(map, total_size); + error_prepend(errp, "VFIO dmabuf mmap failed: "); + return NULL; +} + diff --git a/hw/vfio/dmabuf-stubs.c b/hw/vfio/dmabuf-stubs.c index 374bd2a188..044d1ed058 100644 --- a/hw/vfio/dmabuf-stubs.c +++ b/hw/vfio/dmabuf-stubs.c @@ -15,3 +15,10 @@ int vfio_device_create_dmabuf_fd(struct iovec *iov, unsi= gned int iov_cnt, error_setg(errp, "VFIO dmabuf support is not enabled"); return VFIO_DMABUF_CREATE_HOST_ERROR; } + +void *vfio_device_mmap_dmabuf(struct iovec *iov, unsigned int iov_cnt, + size_t total_size, Error **errp) +{ + error_setg(errp, "VFIO mmap dmabuf support is not enabled"); + return NULL; +} --=20 2.53.0 From nobody Mon Apr 6 14:59:12 2026 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=1773897851; cv=none; d=zohomail.com; s=zohoarc; b=We+onDsNwgv+tVZ/fzZGHlj5RJfd/FWJ15KTtdvGlrs+UqYWyO069iEmMU26qD5BDTDFmzcGDZBf9jS3d4EzP6vl3mCF4WJYTqgXimCYhqaOdDpd8gXinWY//2HO1tikBbcIdZZhPKB449xvPsqmZZyDgvuFN4DDm/uWhLj8s4c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773897851; 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=+VwfR17G+FfTk5bBUTWJP1gPXsCJchvUzQdSWa3D0LA=; b=XkjleprKpGBQbxMSI/3e8GYZSxQT4+cvKaNtOwKh6itMWZYMyumgsMu+U/B8NfbEZaN3Enm9crJ8TtyDv/Kh3mjwAH29K9OiGq+jq+PBo/yWg778i4ysdNVBBaPI2qSrqmApai9O0tb9M+NQAJDKtuoSSi2bB3SNOe8xQhdDo9U= 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 17738978512910.8351094264764924; Wed, 18 Mar 2026 22:24:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w35r1-0004qL-Vy; Thu, 19 Mar 2026 01:23:32 -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 1w35qo-0004nf-N9 for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:19 -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 1w35ql-0007td-HN for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:18 -0400 Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:07 -0700 Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:04 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1773897796; x=1805433796; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Xu8cptgSU9M/dk/NCzAmToVxnO7mWUfcKHoen6T08y8=; b=Nd01dNagofb2jH2PwxI07c1+rG/UVn3QaBIAHItGsbVDe4KPjNbmkfPm uV9ch79slt42oVbmGbWfTQSIDb3Xo9ujHWLTi4s3R6f+wa3BDW8yw0Uen 9A9d1UJmXv+itQZPXdTyMgN6nInAoPusXsVtgpbxmqFl4+pMOClQIphtL Mw3SxnIOWOXmRNtLYkbfUDnkkHCJ9qP2vXtWKibYnw5OP0IltSP0cYeSE 1KiPbCvIfjdUkbcTElHVjaJJJn7zWk9ArEeI2Kj+AnFuafnQZoK+IyOk/ 9LBwvVPPaOoM/n3WNsiqlGM8mqRoho93R3LqXuOT97wrSqT03m23jroTK A==; X-CSE-ConnectionGUID: 2JsLO+lhTRqbLgyr4wN6ug== X-CSE-MsgGUID: 4oMBudBTTvuup+TAmS3RFg== X-IronPort-AV: E=McAfee;i="6800,10657,11733"; a="74660399" X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="74660399" X-CSE-ConnectionGUID: 0hI/O9/sQp6Oe9UOHlzJMg== X-CSE-MsgGUID: 6/qY0K11QeibtomrVG9JBw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="218355536" 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 , Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Subject: [PATCH v12 09/10] virtio-gpu-dmabuf: Improve error handling with 'Error **' and err enum Date: Wed, 18 Mar 2026 22:15:58 -0700 Message-ID: <20260319052023.2088685-10-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319052023.2088685-1-vivek.kasireddy@intel.com> References: <20260319052023.2088685-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: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 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_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, 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: qemu development 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: 1773897854777158500 Make the error handling more robust in virtio_gpu_init_udmabuf() by introducing 'Error **' parameter to capture errors and using an enum from VFIO to categorize different errors. This allows for better error reporting and handling of errors from virtio_gpu_create_udmabuf() and virtio_gpu_remap_dmabuf(). Cc: Marc-Andr=C3=A9 Lureau Cc: Alex Benn=C3=A9e Cc: Akihiko Odaki Cc: Dmitry Osipenko Cc: Alex Williamson Cc: C=C3=A9dric Le Goater Reviewed-by: Akihiko Odaki Signed-off-by: Vivek Kasireddy --- hw/display/virtio-gpu-dmabuf.c | 67 +++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 22 deletions(-) diff --git a/hw/display/virtio-gpu-dmabuf.c b/hw/display/virtio-gpu-dmabuf.c index e35f7714a9..89aa487654 100644 --- a/hw/display/virtio-gpu-dmabuf.c +++ b/hw/display/virtio-gpu-dmabuf.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,16 +28,18 @@ #include "standard-headers/linux/udmabuf.h" #include "standard-headers/drm/drm_fourcc.h" =20 -static void virtio_gpu_create_udmabuf(struct virtio_gpu_simple_resource *r= es) +static int virtio_gpu_create_udmabuf(struct virtio_gpu_simple_resource *re= s, + Error **errp) { g_autofree struct udmabuf_create_list *list =3D NULL; RAMBlock *rb; ram_addr_t offset; - int udmabuf, i; + int udmabuf, i, fd; =20 udmabuf =3D udmabuf_fd(); if (udmabuf < 0) { - return; + error_setg(errp, "udmabuf device not available or enabled"); + return VFIO_DMABUF_CREATE_ERR_UNSPEC; } =20 list =3D g_malloc0(sizeof(struct udmabuf_create_list) + @@ -45,7 +48,8 @@ static void virtio_gpu_create_udmabuf(struct virtio_gpu_s= imple_resource *res) for (i =3D 0; i < res->iov_cnt; i++) { rb =3D qemu_ram_block_from_host(res->iov[i].iov_base, false, &offs= et); if (!rb || rb->fd < 0) { - return; + error_setg(errp, "IOV memory address incompatible with udmabuf= "); + return VFIO_DMABUF_CREATE_ERR_INVALID_IOV; } =20 list->list[i].memfd =3D rb->fd; @@ -56,22 +60,28 @@ static void virtio_gpu_create_udmabuf(struct virtio_gpu= _simple_resource *res) list->count =3D res->iov_cnt; list->flags =3D UDMABUF_FLAGS_CLOEXEC; =20 - res->dmabuf_fd =3D ioctl(udmabuf, UDMABUF_CREATE_LIST, list); - if (res->dmabuf_fd < 0) { - warn_report("%s: UDMABUF_CREATE_LIST: %s", __func__, - strerror(errno)); + fd =3D ioctl(udmabuf, UDMABUF_CREATE_LIST, list); + if (fd < 0) { + error_setg_errno(errp, errno, "UDMABUF_CREATE_LIST: ioctl failed"); + if (errno =3D=3D EINVAL || errno =3D=3D EBADFD) { + return VFIO_DMABUF_CREATE_ERR_INVALID_IOV; + } + return VFIO_DMABUF_CREATE_ERR_UNSPEC; } + return fd; } =20 -static void virtio_gpu_remap_dmabuf(struct virtio_gpu_simple_resource *res) +static void *virtio_gpu_remap_dmabuf(struct virtio_gpu_simple_resource *re= s, + Error **errp) { - res->remapped =3D mmap(NULL, res->blob_size, PROT_READ, - MAP_SHARED, res->dmabuf_fd, 0); - if (res->remapped =3D=3D MAP_FAILED) { - warn_report("%s: dmabuf mmap failed: %s", __func__, - strerror(errno)); - res->remapped =3D NULL; + void *map; + + map =3D mmap(NULL, res->blob_size, PROT_READ, MAP_SHARED, res->dmabuf_= fd, 0); + if (map =3D=3D MAP_FAILED) { + error_setg_errno(errp, errno, "dmabuf mmap failed"); + return NULL; } + return map; } =20 static void virtio_gpu_destroy_dmabuf(struct virtio_gpu_simple_resource *r= es) @@ -125,22 +135,35 @@ bool virtio_gpu_have_udmabuf(void) =20 void virtio_gpu_init_dmabuf(struct virtio_gpu_simple_resource *res) { + Error *local_err =3D NULL; void *pdata =3D NULL; =20 - res->dmabuf_fd =3D -1; if (res->iov_cnt =3D=3D 1 && res->iov[0].iov_len < 4096) { + res->dmabuf_fd =3D -1; pdata =3D res->iov[0].iov_base; } else { - virtio_gpu_create_udmabuf(res); + res->dmabuf_fd =3D virtio_gpu_create_udmabuf(res, &local_err); + if (res->dmabuf_fd =3D=3D VFIO_DMABUF_CREATE_ERR_INVALID_IOV) { + error_free_or_abort(&local_err); + + qemu_log_mask(LOG_GUEST_ERROR, + "Cannot create dmabuf: incompatible memory\n"); + return; + } else if (res->dmabuf_fd >=3D 0) { + pdata =3D virtio_gpu_remap_dmabuf(res, &local_err); + if (!pdata) { + virtio_gpu_destroy_dmabuf(res); + } + } else { + res->dmabuf_fd =3D -1; + } + if (res->dmabuf_fd < 0) { + error_report_err(local_err); return; } - virtio_gpu_remap_dmabuf(res); - if (!res->remapped) { - return; - } - pdata =3D res->remapped; + res->remapped =3D pdata; } =20 res->blob =3D pdata; --=20 2.53.0 From nobody Mon Apr 6 14:59:12 2026 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=1773897875; cv=none; d=zohomail.com; s=zohoarc; b=VNPdg/iWlzc+oTUgl3c5mIeAVlvp2vcRY2ilExM8/W7K8QESApzUKJEGkIeGzefvizpkNMncRJXjD3feH0f1f6eaVX9YaSGUwy5ncLYde12DdjAXzKa9ru0lborcHVIoWsPsfgbppCjKRUQM8cf3BumVPDkoUax8tKJz9lPSS4Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773897875; 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=nF7jQTlJZGZWqAE83gPqdR172uR1hf8c2XHPr+CcrBU=; b=F2IDmombAYsgSlX9/6mPtSlRM9DoFRAe2nGFxhxkjXQnRDhunHR5q7nmogF2rpVZx7CkMAEIJ/onh7eKxc2wqhoibOl6o2OtSeriXwJ2B+CZCYv1e0kW13EuOgCJbPXMdGs5+jlmA2ctwo4Lqe9mwuGiYrzkmUWJuzqLKwAIXYg= 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 177389787542199.9598891155457; Wed, 18 Mar 2026 22:24:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w35r2-0004qP-Ba; Thu, 19 Mar 2026 01:23:32 -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 1w35qz-0004p6-CI for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:30 -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 1w35qx-0007uV-PC for qemu-devel@nongnu.org; Thu, 19 Mar 2026 01:23:29 -0400 Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:07 -0700 Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2026 22:23:04 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1773897808; x=1805433808; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=KCFgBlN8mCcR94ix8/h5CS5TPnxC4sjVKFQ7+WqdNrM=; b=HW6avqIuJk/DJOyhR2YByAVE4iqxR0PNER87Q/Va7XigS6TEmwPXrqF+ 2zO3EJBXMm2BBkC5idJRg6Np6mKGfgW8ezvEPniDB/zQBSsULCYINOhJM UAUFqv83qH3j+L+J/VR5kBMlkTT8w3XvO9X565BofrZ0BcXXWoIidS7KU QVpdKr7SlcsrbJU8QIvSfSXz0tAFlSI92kQv24LVqHoh1zyUuFaJNDNAE SsGkG9B94lT4P8nYjdE0fzhR3o6LbuOIP7mxNDiJaTeqiYBWJ4CDCUH/5 3Vb+5adZUvgRn5gO5rT402XoTlFRB7qEIioJNFpeNmhJbuMhKQGsS+J4R A==; X-CSE-ConnectionGUID: JKHVmEzoSP+OGxCnP3ifYg== X-CSE-MsgGUID: SDKS4TRuQ1Cxwx/6xROR2g== X-IronPort-AV: E=McAfee;i="6800,10657,11733"; a="74660402" X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="74660402" X-CSE-ConnectionGUID: WsQatj3kQDyw1ZRgc6OE6w== X-CSE-MsgGUID: 2zZ1xpVBRCS53YsBjKuoEw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,128,1770624000"; d="scan'208";a="218355539" 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 , Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Subject: [PATCH v12 10/10] virtio-gpu-dmabuf: Create dmabuf for blobs associated with VFIO devices Date: Wed, 18 Mar 2026 22:15:59 -0700 Message-ID: <20260319052023.2088685-11-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319052023.2088685-1-vivek.kasireddy@intel.com> References: <20260319052023.2088685-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: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 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_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, 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: qemu development 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: 1773897876633154100 In addition to memfd, a blob resource can also have its backing storage in a VFIO device region. Since, there is no effective way to determine where the backing storage is located, we first try to create a dmabuf assuming it is in memfd. If that fails, we try to create a dmabuf assuming it is in VFIO device region. So, we first call virtio_gpu_create_udmabuf() to check if the blob's backing storage is located in a memfd or not. If it is not, we invoke the vfio_device_create_dmabuf_fd() API which identifies the right VFIO device and eventually creates a dmabuf fd. Note that, for mmapping the dmabuf, we directly call mmap() if the dmabuf fd was created via virtio_gpu_create_udmabuf() since we know that the udmabuf driver supports mmap(). However, if the dmabuf was created via vfio_device_create_dmabuf_fd(), we use the vfio_device_mmap_dmabuf() API to get a mapping for the dmabuf. Cc: Marc-Andr=C3=A9 Lureau Cc: Alex Benn=C3=A9e Cc: Akihiko Odaki Cc: Dmitry Osipenko Cc: Alex Williamson Cc: C=C3=A9dric Le Goater Reviewed-by: Akihiko Odaki Signed-off-by: Vivek Kasireddy --- hw/display/virtio-gpu-dmabuf.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/hw/display/virtio-gpu-dmabuf.c b/hw/display/virtio-gpu-dmabuf.c index 89aa487654..f953db0fbe 100644 --- a/hw/display/virtio-gpu-dmabuf.c +++ b/hw/display/virtio-gpu-dmabuf.c @@ -147,9 +147,26 @@ void virtio_gpu_init_dmabuf(struct virtio_gpu_simple_r= esource *res) if (res->dmabuf_fd =3D=3D VFIO_DMABUF_CREATE_ERR_INVALID_IOV) { error_free_or_abort(&local_err); =20 - qemu_log_mask(LOG_GUEST_ERROR, - "Cannot create dmabuf: incompatible memory\n"); - return; + res->dmabuf_fd =3D vfio_device_create_dmabuf_fd(res->iov, + res->iov_cnt, + res->blob_size, + &local_err); + if (res->dmabuf_fd =3D=3D VFIO_DMABUF_CREATE_ERR_INVALID_IOV) { + error_free_or_abort(&local_err); + qemu_log_mask(LOG_GUEST_ERROR, + "Cannot create dmabuf: incompatible memory\n= "); + return; + } + + if (res->dmabuf_fd >=3D 0) { + pdata =3D vfio_device_mmap_dmabuf(res->iov, res->iov_cnt, + res->blob_size, &local_err= ); + if (!pdata) { + virtio_gpu_destroy_dmabuf(res); + } + } else { + res->dmabuf_fd =3D -1; + } } else if (res->dmabuf_fd >=3D 0) { pdata =3D virtio_gpu_remap_dmabuf(res, &local_err); if (!pdata) { --=20 2.53.0