From nobody Tue Apr 7 11:17:14 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9E86B38D012 for ; Fri, 13 Mar 2026 15:11:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414672; cv=pass; b=WsCbDShmjG425vOk0f/f4OQP3V5QNyOW3JJsfeCqUURKdGflwJPVogsa4mdhfLay2BQXsnHj9L+cHLRpzwOXPFCLJ207JKfgfmxBDpoHoh+uJFaqu0YHge3C7XJykAY/AF5TXKpbToYog9QiYa0sSrog6sfFMXeyIRrxQh7c18U= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414672; c=relaxed/simple; bh=y0lLUHkcdjMnkJn1W863Qh90TfM23sl9VuRulV57n6o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=foBqRZVt9HXQWIm6GKh1uR/8rvCY4MG/pDyCRurlaCiccNnHQ/C1/bzsZSPlwvLqbkthyFrdjdOIIV29aYuk9mlUj2Cn8oDBahOhb9HFLxkz4brM0JrsX9R7dCuvPlOQGsYu/uir5wBkZkTqAdbRzppnbritooJi+OMiHMPeSK0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=UC+F7jcZ; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="UC+F7jcZ" ARC-Seal: i=1; a=rsa-sha256; t=1773414652; cv=none; d=zohomail.com; s=zohoarc; b=N8GDxeLdozI8r7o6tSrlvtLncL8WK2yBdaWcuNz2vE5G8Xq62vyokYJ9SNtRoVcs//MIrMlJOvMtWHN266XQhecEuFKIdFVf1lYrODCMp/3z+PG5VFAXDigcg+rdAW/5s45A1snAQT4Q27rbwyj0L/RuuVGgqtZFq42G0NecU88= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773414652; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=RjYJ3DizTjJtzRhYbQxll0gdIM44uF70YvnjwEwWoNQ=; b=mu96UbKcztdIgle9aAl2f4196DLgLTi+Y7TNUyWaN6gXYWmvss7Blb7V6XVud3h1P8VmJpnvzy735x+L/3UpmqmymB8ayNs1tKvNRC4VJ4RXigRuWVB4xu4fPwNReJiTqR29sOYJFYDft/XKo2fE8J8j0T7IeW9MMlqKSetO5kM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1773414652; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=RjYJ3DizTjJtzRhYbQxll0gdIM44uF70YvnjwEwWoNQ=; b=UC+F7jcZ1VHRPjwq7uUW5j7oUXDL7jSx9PJQd8PjpHmeXvN1Vn9jn7IxNiCbC2FV hF4Epv4+7Gg+Z5cZtiBY74bYCV6FB5nMCLUlBtpT+XtoJqphcUaXWmq/Ycu524lEjmj +PeUIdolJZgrmmsnM5/a3E4AwAApz1X0oWl/kxgQ= Received: by mx.zohomail.com with SMTPS id 1773414649676281.58412724129994; Fri, 13 Mar 2026 08:10:49 -0700 (PDT) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Steven Price , Boris Brezillon , Janne Grunau , kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Daniel Almeida , Alice Ryhl Subject: [PATCH v5 01/11] drm/panthor: Expose GPU page sizes to UM Date: Fri, 13 Mar 2026 15:09:38 +0000 Message-ID: <20260313150956.1618635-2-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260313150956.1618635-1-adrian.larumbe@collabora.com> References: <20260313150956.1618635-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable In future commits that will implement repeated mappings, only repeat values multiple of GPU page sizes will be tolerated. That means these values must be made known to UM. Do it through a queriable GPU info value. Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panthor/panthor_device.h | 3 +++ drivers/gpu/drm/panthor/panthor_drv.c | 8 ++++++++ drivers/gpu/drm/panthor/panthor_mmu.c | 9 ++++++++- include/uapi/drm/panthor_drm.h | 13 +++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/panthor/panthor_device.h b/drivers/gpu/drm/pan= thor/panthor_device.h index b6696f73a536..91bfba9018cf 100644 --- a/drivers/gpu/drm/panthor/panthor_device.h +++ b/drivers/gpu/drm/panthor/panthor_device.h @@ -157,6 +157,9 @@ struct panthor_device { /** @csif_info: Command stream interface information. */ struct drm_panthor_csif_info csif_info; =20 + /** @mmu_info: MMU info */ + struct drm_panthor_mmu_info mmu_info; + /** @hw: GPU-specific data. */ struct panthor_hw *hw; =20 diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/pantho= r/panthor_drv.c index 165dddfde6ca..8a901e06a9c9 100644 --- a/drivers/gpu/drm/panthor/panthor_drv.c +++ b/drivers/gpu/drm/panthor/panthor_drv.c @@ -172,6 +172,7 @@ panthor_get_uobj_array(const struct drm_panthor_obj_arr= ay *in, u32 min_stride, _Generic(_obj_name, \ PANTHOR_UOBJ_DECL(struct drm_panthor_gpu_info, tiler_present), \ PANTHOR_UOBJ_DECL(struct drm_panthor_csif_info, pad), \ + PANTHOR_UOBJ_DECL(struct drm_panthor_mmu_info, page_size_bitmap), \ PANTHOR_UOBJ_DECL(struct drm_panthor_timestamp_info, current_timestamp)= , \ PANTHOR_UOBJ_DECL(struct drm_panthor_group_priorities_info, pad), \ PANTHOR_UOBJ_DECL(struct drm_panthor_sync_op, timeline_value), \ @@ -830,6 +831,10 @@ static int panthor_ioctl_dev_query(struct drm_device *= ddev, void *data, struct d args->size =3D sizeof(ptdev->csif_info); return 0; =20 + case DRM_PANTHOR_DEV_QUERY_MMU_INFO: + args->size =3D sizeof(ptdev->mmu_info); + return 0; + case DRM_PANTHOR_DEV_QUERY_TIMESTAMP_INFO: args->size =3D sizeof(timestamp_info); return 0; @@ -850,6 +855,9 @@ static int panthor_ioctl_dev_query(struct drm_device *d= dev, void *data, struct d case DRM_PANTHOR_DEV_QUERY_CSIF_INFO: return PANTHOR_UOBJ_SET(args->pointer, args->size, ptdev->csif_info); =20 + case DRM_PANTHOR_DEV_QUERY_MMU_INFO: + return PANTHOR_UOBJ_SET(args->pointer, args->size, ptdev->mmu_info); + case DRM_PANTHOR_DEV_QUERY_TIMESTAMP_INFO: ret =3D panthor_query_timestamp_info(ptdev, ×tamp_info); =20 diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/pantho= r/panthor_mmu.c index ba3b7c93303c..07c520475f14 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -2463,7 +2463,7 @@ panthor_vm_create(struct panthor_device *ptdev, bool = for_mcu, refcount_set(&vm->as.active_cnt, 0); =20 pgtbl_cfg =3D (struct io_pgtable_cfg) { - .pgsize_bitmap =3D SZ_4K | SZ_2M, + .pgsize_bitmap =3D ptdev->mmu_info.page_size_bitmap, .ias =3D va_bits, .oas =3D pa_bits, .coherent_walk =3D ptdev->coherent, @@ -2837,6 +2837,11 @@ static void panthor_mmu_release_wq(struct drm_device= *ddev, void *res) destroy_workqueue(res); } =20 +static void panthor_mmu_info_init(struct panthor_device *ptdev) +{ + ptdev->mmu_info.page_size_bitmap =3D SZ_4K | SZ_2M; +} + /** * panthor_mmu_init() - Initialize the MMU logic. * @ptdev: Device. @@ -2849,6 +2854,8 @@ int panthor_mmu_init(struct panthor_device *ptdev) struct panthor_mmu *mmu; int ret, irq; =20 + panthor_mmu_info_init(ptdev); + mmu =3D drmm_kzalloc(&ptdev->base, sizeof(*mmu), GFP_KERNEL); if (!mmu) return -ENOMEM; diff --git a/include/uapi/drm/panthor_drm.h b/include/uapi/drm/panthor_drm.h index b401ac585d6a..4089271f3d36 100644 --- a/include/uapi/drm/panthor_drm.h +++ b/include/uapi/drm/panthor_drm.h @@ -246,6 +246,9 @@ enum drm_panthor_dev_query_type { /** @DRM_PANTHOR_DEV_QUERY_CSIF_INFO: Query command-stream interface info= rmation. */ DRM_PANTHOR_DEV_QUERY_CSIF_INFO, =20 + /** @DRM_PANTHOR_DEV_QUERY_MMU_INFO: Query MMU information. */ + DRM_PANTHOR_DEV_QUERY_MMU_INFO, + /** @DRM_PANTHOR_DEV_QUERY_TIMESTAMP_INFO: Query timestamp information. */ DRM_PANTHOR_DEV_QUERY_TIMESTAMP_INFO, =20 @@ -409,6 +412,16 @@ struct drm_panthor_csif_info { __u32 pad; }; =20 +/** + * struct drm_panthor_mmu_info - MMU information + * + * Structure grouping all queryable information relating to the MMU. + */ +struct drm_panthor_mmu_info { + /** @page_size_bitmap: Allowed page sizes */ + __u64 page_size_bitmap; +}; + /** * struct drm_panthor_timestamp_info - Timestamp information * --=20 2.53.0 From nobody Tue Apr 7 11:17:14 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4D4D93AE1B3 for ; Fri, 13 Mar 2026 15:11:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414674; cv=pass; b=bKKn5YegRAhrePIUmVEkcKuDw3PZcHxDHBXYY56dsRjJQ5HG9D9QTwFuofJGSNLjRTgMjl8E0fA1J+2zf+wiQ10fattuli0IJLSdD6EXCVEyUhSZL+KHUcU5x/nX1knvtO8r9BknCxKHlcX3w+oaoZZE7qqt6F2Ym/trB7tNcBA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414674; c=relaxed/simple; bh=sTT7MkNkZPpMA4TlEwNeJSm07MUFhXPGTQf0HcEeDy0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=A9HhGw/t2LMguQrIuxFRKRuAjNl5Q5PNkxDQbuA+Eed5Iv23uQkDpHEnzESBHVP9TjL/7JZ7OVHC5c7QoL7q4fg7a7jy68KZwcDeOWrBFbmw/x5j03HBY0L2Fyuz7BPxAhQXkUcLIwjGH9SSqV5g1aW/7g1kV7cOPgtXvxh4Ehw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=duBzJwq5; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="duBzJwq5" ARC-Seal: i=1; a=rsa-sha256; t=1773414656; cv=none; d=zohomail.com; s=zohoarc; b=frNDPhuU3go+5oGwCGyL3tIa7ZqYelwVOnM8go7alV0RCYNihZNoziceaZF/FOao0+v6sJvlAi10C2opbvDB0haN3TSM3L83PPDdfajkysoUIVzw2rZdPgC5vOlxHRq/lOIsXB/MPJ0cB0BpUSZDAN/DydNA76/WJlXqI7kD7Lk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773414656; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=rvo8v0kzuARx/tL36EjoGulUvklp2HYMwX094Y3tEzo=; b=mmW1XsT3AqBr036yUHVk4PNUhrzBuAwJBTB8xxPRJ0M+zkJLjgs4rJHLzRkgfsRyyuPOd0tfzGzvZ9pM4SRGXrfyeN8Jnsx3RP3Q5gkC5S32yUicn+o4hfhlH53xfcQfutmVUkbeRxHnQcFwg+Z74h5INU1H/CMr0w1A50jtjSE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1773414656; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=rvo8v0kzuARx/tL36EjoGulUvklp2HYMwX094Y3tEzo=; b=duBzJwq50bDQ8XldTRdx8573mxqH8xXRs80BfFWnEOcn7htOS1M+DdpVjTqJWe7R 0iAPCXhwoDaXCuE3SPd2z+M+wg7hxhHbKJDM4pQJPnqIH9r5rKqAQMGpRnC2B9Bx8Oq O6X6/1kgA1dRudf7oNqmvyTDj9FE1G8U8CNEbMQA= Received: by mx.zohomail.com with SMTPS id 17734146534651007.4634642976198; Fri, 13 Mar 2026 08:10:53 -0700 (PDT) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Steven Price , Boris Brezillon , Janne Grunau , kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , Danilo Krummrich , Matthew Brost , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , Alice Ryhl , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Subject: [PATCH v5 02/11] drm/gpuvm: Remove dead code Date: Fri, 13 Mar 2026 15:09:39 +0000 Message-ID: <20260313150956.1618635-3-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260313150956.1618635-1-adrian.larumbe@collabora.com> References: <20260313150956.1618635-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable drm_gpuva_find_next() has no consumers. Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/drm_gpuvm.c | 22 ---------------------- include/drm/drm_gpuvm.h | 1 - 2 files changed, 23 deletions(-) diff --git a/drivers/gpu/drm/drm_gpuvm.c b/drivers/gpu/drm/drm_gpuvm.c index 14469765a780..3c2b6102e818 100644 --- a/drivers/gpu/drm/drm_gpuvm.c +++ b/drivers/gpu/drm/drm_gpuvm.c @@ -2245,28 +2245,6 @@ drm_gpuva_find_prev(struct drm_gpuvm *gpuvm, u64 sta= rt) } EXPORT_SYMBOL_GPL(drm_gpuva_find_prev); =20 -/** - * drm_gpuva_find_next() - find the &drm_gpuva after the given address - * @gpuvm: the &drm_gpuvm to search in - * @end: the given GPU VA's end address - * - * Find the adjacent &drm_gpuva after the GPU VA with given &end address. - * - * Note that if there is any free space between the GPU VA mappings no map= ping - * is returned. - * - * Returns: a pointer to the found &drm_gpuva or NULL if none was found - */ -struct drm_gpuva * -drm_gpuva_find_next(struct drm_gpuvm *gpuvm, u64 end) -{ - if (!drm_gpuvm_range_valid(gpuvm, end, 1)) - return NULL; - - return drm_gpuva_it_iter_first(&gpuvm->rb.tree, end, end + 1); -} -EXPORT_SYMBOL_GPL(drm_gpuva_find_next); - /** * drm_gpuvm_interval_empty() - indicate whether a given interval of the V= A space * is empty diff --git a/include/drm/drm_gpuvm.h b/include/drm/drm_gpuvm.h index 655bd9104ffb..625958fce7fd 100644 --- a/include/drm/drm_gpuvm.h +++ b/include/drm/drm_gpuvm.h @@ -160,7 +160,6 @@ struct drm_gpuva *drm_gpuva_find(struct drm_gpuvm *gpuv= m, struct drm_gpuva *drm_gpuva_find_first(struct drm_gpuvm *gpuvm, u64 addr, u64 range); struct drm_gpuva *drm_gpuva_find_prev(struct drm_gpuvm *gpuvm, u64 start); -struct drm_gpuva *drm_gpuva_find_next(struct drm_gpuvm *gpuvm, u64 end); =20 /** * drm_gpuva_invalidate() - sets whether the backing GEM of this &drm_gpuv= a is --=20 2.53.0 From nobody Tue Apr 7 11:17:14 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8E7333AE1B3 for ; Fri, 13 Mar 2026 15:11:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414678; cv=pass; b=kxvDwn3l8k3duIQbJf/H6WzXqLX2UtBr1JtORm79AyP5Q5P0TxnreKA9wFLA1n10AKH7oY6YAmMeLSLcX1o4ksG8Sz8jPaZDij6Pjw25zm00iBuftUDIc2z7BEi2OdBGafwrE5hAjHGwJBgeiSJJQJjY0VoldRsnnZRq00dos6A= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414678; c=relaxed/simple; bh=JmMXAE/t5d/94I6J5i/msAdjSFP6WWwUtnn+GbO6kuU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=VfMCX702nC5FkfP4cU0ZCEKj5p7aduyR3+5e6QTlYWcpVE0K4b+FhSg73Wmhz0Quap1eXkbAfRVXhG9x00Cx/b4NfPDw56VcEVsj8k4ItYNtshuBJR/SHctMaSck9RmB/Myp7nSi10qCJ871wCgH0wr8PVwveh/W14+NOYy22WU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=Bk3IWUMz; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="Bk3IWUMz" ARC-Seal: i=1; a=rsa-sha256; t=1773414658; cv=none; d=zohomail.com; s=zohoarc; b=S+4slY15TeJiumMclXVJVYXm+YQ5FxkzEJTqC/AYYxoXGxegJZA/YGiQDKj8iR5qtonryY5Pt9ime6mDIbbPf+EYaJsTVTPtTZunvJjHSg+tRwFEDhBHT1wlmFXPaCfeCUH5JDxhFMLK+GmoMdbkoWboHrj2i5pd2ePKnC2ll4Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773414658; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=ZKtUQFvAxLD2hZTa5LPl00p/Z3EKh1SexwtdHAhYr+c=; b=loGAJEZGn5iABzLNieOvtZd9bBo6PD1trpJ95urjBjQx2WTCbTXOhZ4+dYcZY5CZ1Gs69NRQIt81GKg+P/9AmaQnSiCq3l+0t8bQ5Yjd3Uyzg5/XjjpfpohxjHX1YZLIb56VxRsyTWrz3lSPrL2NkCNbmCHNzaRx6qKRa/R6RdE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1773414658; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=ZKtUQFvAxLD2hZTa5LPl00p/Z3EKh1SexwtdHAhYr+c=; b=Bk3IWUMzULsgmGyTMKAkb/cxyPtuJbon3nU3TSkxwips5wzTUeGiEWCQxyrQsjyP rx68ht/oeFyeaYdYUg7QSpauoUGxinvkieBHqUYlsjSSgOQTcXI2aSP8ltbb1yrjfhe P1JYYdz7M+HvrJB0Dll6cgoDwtvA6Mvz9jckOqRU= Received: by mx.zohomail.com with SMTPS id 1773414656949399.2089361119673; Fri, 13 Mar 2026 08:10:56 -0700 (PDT) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Steven Price , Boris Brezillon , Janne Grunau , kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , Danilo Krummrich , Matthew Brost , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , Alice Ryhl , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Subject: [PATCH v5 03/11] drm/gpuvm: Fix comment to reflect remap operation operand status Date: Fri, 13 Mar 2026 15:09:40 +0000 Message-ID: <20260313150956.1618635-4-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260313150956.1618635-1-adrian.larumbe@collabora.com> References: <20260313150956.1618635-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable When a new mapping intersects with an existing GPU VA, but either end lies before or beyond the existing VA's edges, then the prev and next mapping operations part of a remap will reflect this condition by being set to NULL. Signed-off-by: Adri=C3=A1n Larumbe --- include/drm/drm_gpuvm.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/drm/drm_gpuvm.h b/include/drm/drm_gpuvm.h index 625958fce7fd..6a6e64cd2cce 100644 --- a/include/drm/drm_gpuvm.h +++ b/include/drm/drm_gpuvm.h @@ -929,6 +929,8 @@ struct drm_gpuva_op_unmap { * If either a new mapping's start address is aligned with the start addre= ss * of the old mapping or the new mapping's end address is aligned with the * end address of the old mapping, either @prev or @next is NULL. + * This might also be the case when the requested mapping extends over the + * lower and upper boundaries of the intersecting GPU VA. * * Note, the reason for a dedicated remap operation, rather than arbitrary * unmap and map operations, is to give drivers the chance of extracting d= river --=20 2.53.0 From nobody Tue Apr 7 11:17:14 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3FD9139D6F9 for ; Fri, 13 Mar 2026 15:11:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414679; cv=pass; b=hbJ+Y7anqmxdIyZADnTxC6FGfjNGQNbtVADuwKcxXB1MSVD6Qm6t/0C4C+EZ80xmybV2tLqsDGZWIxXO41ItTQHUY55549ouFeyxy+RGV0P8HfEW8elozOGHz6rl0ygLkiKGOyMyuLnsZjwnKzqsAq/Mf/FIquFotr0MGS6B+iU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414679; c=relaxed/simple; bh=ZzMlV8pu3VT2c+3yuV46DtFuKECGS8oVPcadeEgas74=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ClBITyG5A7twBvPxmnA4PH0kz8+sQb1hzd0yflbJeMHtjvr4rVA89MWeI7I8X5hr8EW2ylh9VjbGdxQ0RDYDRNKf1P6CLDpM9K+aBkYCJkZEwGwIt6OHYEe9DpZpbslvXoFj6iWMMgd6VBX32pfflC7Fh4Oji9Lt0TJkyzeS72A= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=iC9QR2v4; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="iC9QR2v4" ARC-Seal: i=1; a=rsa-sha256; t=1773414662; cv=none; d=zohomail.com; s=zohoarc; b=jJsKd0Za7cKVGDYgfssDVwiuAw1FvAgfCGnwce48ejgDaje8MIhYqx5ITI1PlzaiuCiSefhXMGuWXhYHMtIPLSnC8pFqT7I4MVFhOWo9QKI9zwuAXQHgsaJkoHvBmOrryDSvzWl3lFcmIKKAhI8icj4x2ntRNCQF7wfpk5qOoS0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773414662; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=NLgkhCEcGm8XnL5NKaz5gxvh9IYzBqsDM7CURVbgAc4=; b=YaZI+zloirCQe+1qrLy8zQg9Q9QSt/Ubhxd+ChLRCLY40M3+7YTZXng7ajJ7I3Y/3UdZHwgy5OuhfqhfBVjRhAk5esj6wBAjqBCwYhYSALTSy/NQ2w99NOMoQCCh7lVgQ1Cbi8RJ8oESCRdgwYzHI5eZpzRNeycuWhcSCfy88Gs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1773414662; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Message-Id:Reply-To; bh=NLgkhCEcGm8XnL5NKaz5gxvh9IYzBqsDM7CURVbgAc4=; b=iC9QR2v4pv6RQNB6LevA7HE5y7LyIBLfne9HP7xeCjnRgZPLuAOoU3PSiieqYlpO 12PN0MHYfkHCLjBRI45bkmr6GHin6xzRFRjB/LfBcNcIy4zWrH1soH04wMdrS9CZMMO 6mTIxzAxzTl6lzv1MhRvI8vnbZKJ/1OAMwAfAEvs= Received: by mx.zohomail.com with SMTPS id 1773414660569482.8627229381509; Fri, 13 Mar 2026 08:11:00 -0700 (PDT) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Steven Price , Boris Brezillon , Janne Grunau , kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , Caterina Shablia , Danilo Krummrich , Matthew Brost , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , Alice Ryhl , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Subject: [PATCH v5 04/11] drm/gpuvm: Add a helper to check if two VA can be merged Date: Fri, 13 Mar 2026 15:09:41 +0000 Message-ID: <20260313150956.1618635-5-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260313150956.1618635-1-adrian.larumbe@collabora.com> References: <20260313150956.1618635-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Boris Brezillon We are going to add flags/properties that will impact the VA merging ability. Instead of sprinkling tests all over the place in __drm_gpuvm_sm_map(), let's add a helper aggregating all these checks can call it for every existing VA we walk through in the __drm_gpuvm_sm_map() loop. Signed-off-by: Boris Brezillon Signed-off-by: Caterina Shablia --- drivers/gpu/drm/drm_gpuvm.c | 46 +++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/drm_gpuvm.c b/drivers/gpu/drm/drm_gpuvm.c index 3c2b6102e818..4af7b71abcb4 100644 --- a/drivers/gpu/drm/drm_gpuvm.c +++ b/drivers/gpu/drm/drm_gpuvm.c @@ -2378,16 +2378,47 @@ op_unmap_cb(const struct drm_gpuvm_ops *fn, void *p= riv, return fn->sm_step_unmap(&op, priv); } =20 +static bool can_merge(struct drm_gpuvm *gpuvm, const struct drm_gpuva *va, + const struct drm_gpuva_op_map *new_map) +{ + struct drm_gpuva_op_map existing_map =3D { + .va.addr =3D va->va.addr, + .va.range =3D va->va.range, + .gem.offset =3D va->gem.offset, + .gem.obj =3D va->gem.obj, + }; + const struct drm_gpuva_op_map *a =3D new_map, *b =3D &existing_map; + + /* Only GEM-based mappings can be merged, and they must point to + * the same GEM object. + */ + if (a->gem.obj !=3D b->gem.obj || !a->gem.obj) + return false; + + /* Order VAs for the rest of the checks. */ + if (a->va.addr > b->va.addr) + swap(a, b); + + /* We assume the caller already checked that VAs overlap or are + * contiguous. + */ + if (drm_WARN_ON(gpuvm->drm, b->va.addr > a->va.addr + a->va.range)) + return false; + + /* We intentionally ignore u64 underflows because all we care about + * here is whether the VA diff matches the GEM offset diff. + */ + return b->va.addr - a->va.addr =3D=3D b->gem.offset - a->gem.offset; +} + static int __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, const struct drm_gpuvm_ops *ops, void *priv, const struct drm_gpuvm_map_req *req, bool madvise) { - struct drm_gem_object *req_obj =3D req->map.gem.obj; const struct drm_gpuvm_map_req *op_map =3D madvise ? NULL : req; struct drm_gpuva *va, *next; - u64 req_offset =3D req->map.gem.offset; u64 req_range =3D req->map.va.range; u64 req_addr =3D req->map.va.addr; u64 req_end =3D req_addr + req_range; @@ -2402,15 +2433,12 @@ __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, u64 addr =3D va->va.addr; u64 range =3D va->va.range; u64 end =3D addr + range; - bool merge =3D !!va->gem.obj; + bool merge =3D can_merge(gpuvm, va, &req->map); =20 if (madvise && obj) continue; =20 if (addr =3D=3D req_addr) { - merge &=3D obj =3D=3D req_obj && - offset =3D=3D req_offset; - if (end =3D=3D req_end) { ret =3D op_unmap_cb(ops, priv, va, merge, madvise); if (ret) @@ -2455,8 +2483,6 @@ __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, }; struct drm_gpuva_op_unmap u =3D { .va =3D va }; =20 - merge &=3D obj =3D=3D req_obj && - offset + ls_range =3D=3D req_offset; u.keep =3D merge; =20 if (end =3D=3D req_end) { @@ -2506,10 +2532,6 @@ __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, break; } } else if (addr > req_addr) { - merge &=3D obj =3D=3D req_obj && - offset =3D=3D req_offset + - (addr - req_addr); - if (end =3D=3D req_end) { ret =3D op_unmap_cb(ops, priv, va, merge, madvise); if (ret) --=20 2.53.0 From nobody Tue Apr 7 11:17:14 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 167CB3B3C17 for ; Fri, 13 Mar 2026 15:11:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414685; cv=pass; b=Y2pR3DLUQ17P+aIqAJ3Hu/aHHSOZBodV7Rpb+WYVQ0dXL75OEQkzD1ijJDx/E2X0qdgLXst9QHdkFoprThFR913iVTNr1YVNtArPSew+Q65+YdOoFT5RMIfm6YW35dP4IZ8rDXXnwjLITg1Fxb1WMCxd1BfbJrFbXJHlxOTn2Io= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414685; c=relaxed/simple; bh=ZIXX15zjFvtdz0ZWSFY5zdVPWZdP01eT/c33+pCMT2c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TkaFDUmhso39H3BqPFSPyjXplyz0Vmr+vsllbzHYKqWgWuGBW/hiHsi1Ss23GsPSh7p+BUhfv8pQ+sDP6zFp2k+JMiK4dGLWaxL7F1oaIUeQMLLFm1mPG/FncWD99TIO0ZTfqzSMwn/+bLnLWU06yosKw3BFm3aN8IqRzZ7UGq4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=K6pUvDLz; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="K6pUvDLz" ARC-Seal: i=1; a=rsa-sha256; t=1773414666; cv=none; d=zohomail.com; s=zohoarc; b=DJvPtfjswVG2CYQgaZONb7ubOV0Xkv1ny937G6Jv6getoTQgSUCXP9MFiB31XdVR1eYGDLJZxi+wcAbgMO8ajINFTQV94aNBBwxTQUR976S7Q5EyXyC9da7BDnugWuClXFdMRYPkb+TqG4iYrBKOgH31QSxes66vUEbg+/FwtlU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773414666; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=ZRQU21SydWlGn3SLbet8XcWT6vkQMy9G/ENgtuG/wQo=; b=Vxmde0Ju4S8GFpLK3w9dadXZLtHyjz7Q3ryifLCQkFFNLqDfnmxBVSLwSSdWiSSawdre5n1o2Pe9+7DGAK0e45ZnUc18OSmgHVTkDCw/XaZGeY/5vrDazo9wZmXGimwP7G5SY6YYS7br4u5c9WiXqi3Eko/V9L+Fg+ZRkxuKZ6w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1773414666; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Message-Id:Reply-To; bh=ZRQU21SydWlGn3SLbet8XcWT6vkQMy9G/ENgtuG/wQo=; b=K6pUvDLzzK4Qetf5hGVTZzE9Xnj9wCRBaSIHTYPeT6hK3uNm6KfRWBjheZZBfC9J MNhYGpaku1lu2VR/22zmsjUZltnDyDUncvKmhPX/tvK7d9xC+3abQfaHtZ8pjoq42K3 cQWisRigbTSAapO5fUdREQ604OB4KK5ENQoU67pg= Received: by mx.zohomail.com with SMTPS id 1773414664754963.8852629735313; Fri, 13 Mar 2026 08:11:04 -0700 (PDT) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Steven Price , Boris Brezillon , Janne Grunau , kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , Asahi Lina , Caterina Shablia , Danilo Krummrich , Matthew Brost , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , Alice Ryhl , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Subject: [PATCH v5 05/11] drm/gpuvm: Add a flags field to drm_gpuva_op_map Date: Fri, 13 Mar 2026 15:09:42 +0000 Message-ID: <20260313150956.1618635-6-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260313150956.1618635-1-adrian.larumbe@collabora.com> References: <20260313150956.1618635-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Asahi Lina drm_gpuva objects have a flags field. Currently, this can be managed by drivers out-of-band, without any special handling in drm_gpuvm. To be able to introduce flags that do affect the logic in the drm_gpuvm core, we need to plumb it through the map calls. This will allow the core to check the flags on map and alter the merge/split logic depending on the requested flags and the flags of the existing drm_gpuva ranges that are being split. Signed-off-by: Asahi Lina Signed-off-by: Caterina Shablia --- drivers/gpu/drm/drm_gpuvm.c | 14 ++++++++++++-- include/drm/drm_gpuvm.h | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_gpuvm.c b/drivers/gpu/drm/drm_gpuvm.c index 4af7b71abcb4..0d9c821d1b34 100644 --- a/drivers/gpu/drm/drm_gpuvm.c +++ b/drivers/gpu/drm/drm_gpuvm.c @@ -2386,6 +2386,7 @@ static bool can_merge(struct drm_gpuvm *gpuvm, const = struct drm_gpuva *va, .va.range =3D va->va.range, .gem.offset =3D va->gem.offset, .gem.obj =3D va->gem.obj, + .flags =3D va->flags, }; const struct drm_gpuva_op_map *a =3D new_map, *b =3D &existing_map; =20 @@ -2395,6 +2396,10 @@ static bool can_merge(struct drm_gpuvm *gpuvm, const= struct drm_gpuva *va, if (a->gem.obj !=3D b->gem.obj || !a->gem.obj) return false; =20 + /* For two VAs to be merged, their flags must be compatible */ + if ((a->flags & VA_MERGE_MUST_MATCH_FLAGS) !=3D (b->flags & VA_MERGE_MUST= _MATCH_FLAGS)) + return false; + /* Order VAs for the rest of the checks. */ if (a->va.addr > b->va.addr) swap(a, b); @@ -2459,6 +2464,7 @@ __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, .va.range =3D range - req_range, .gem.obj =3D obj, .gem.offset =3D offset + req_range, + .flags =3D va->flags, }; struct drm_gpuva_op_unmap u =3D { .va =3D va, @@ -2480,6 +2486,7 @@ __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, .va.range =3D ls_range, .gem.obj =3D obj, .gem.offset =3D offset, + .flags =3D va->flags, }; struct drm_gpuva_op_unmap u =3D { .va =3D va }; =20 @@ -2519,8 +2526,8 @@ __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, .va.addr =3D req_end, .va.range =3D end - req_end, .gem.obj =3D obj, - .gem.offset =3D offset + ls_range + - req_range, + .gem.offset =3D offset + ls_range + req_range, + .flags =3D va->flags, }; =20 ret =3D op_remap_cb(ops, priv, &p, &n, &u); @@ -2554,6 +2561,7 @@ __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, .va.range =3D end - req_end, .gem.obj =3D obj, .gem.offset =3D offset + req_end - addr, + .flags =3D va->flags, }; struct drm_gpuva_op_unmap u =3D { .va =3D va, @@ -2605,6 +2613,7 @@ __drm_gpuvm_sm_unmap(struct drm_gpuvm *gpuvm, prev.va.range =3D req_addr - addr; prev.gem.obj =3D obj; prev.gem.offset =3D offset; + prev.flags =3D va->flags; =20 prev_split =3D true; } @@ -2614,6 +2623,7 @@ __drm_gpuvm_sm_unmap(struct drm_gpuvm *gpuvm, next.va.range =3D end - req_end; next.gem.obj =3D obj; next.gem.offset =3D offset + (req_end - addr); + next.flags =3D va->flags; =20 next_split =3D true; } diff --git a/include/drm/drm_gpuvm.h b/include/drm/drm_gpuvm.h index 6a6e64cd2cce..5bf37deb282d 100644 --- a/include/drm/drm_gpuvm.h +++ b/include/drm/drm_gpuvm.h @@ -63,6 +63,8 @@ enum drm_gpuva_flags { DRM_GPUVA_USERBITS =3D (1 << 2), }; =20 +#define VA_MERGE_MUST_MATCH_FLAGS (DRM_GPUVA_SPARSE) + /** * struct drm_gpuva - structure to track a GPU VA mapping * @@ -886,6 +888,11 @@ struct drm_gpuva_op_map { */ struct drm_gem_object *obj; } gem; + + /** + * @flags: requested flags for the &drm_gpuva for this mapping + */ + enum drm_gpuva_flags flags; }; =20 /** @@ -1124,6 +1131,7 @@ void drm_gpuva_ops_free(struct drm_gpuvm *gpuvm, static inline void drm_gpuva_init_from_op(struct drm_gpuva *va, const struct drm_gpuva_op_map *op) { + va->flags =3D op->flags; va->va.addr =3D op->va.addr; va->va.range =3D op->va.range; va->gem.obj =3D op->gem.obj; @@ -1249,6 +1257,16 @@ struct drm_gpuvm_ops { * used. */ int (*sm_step_unmap)(struct drm_gpuva_op *op, void *priv); + + /** + * @sm_can_merge_flags: called during &drm_gpuvm_sm_map + * + * This callback is called to determine whether two va ranges can be merg= ed, + * based on their flags. + * + * If NULL, va ranges can only be merged if their flags are equal. + */ + bool (*sm_can_merge_flags)(enum drm_gpuva_flags a, enum drm_gpuva_flags b= ); }; =20 int drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, void *priv, --=20 2.53.0 From nobody Tue Apr 7 11:17:14 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 218563B7B73 for ; Fri, 13 Mar 2026 15:11:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414689; cv=pass; b=GCaoFB/9mJZr3ccMUlylvC0c7FiN30AcQUgrmQeHO5yXmTv+WFLp8CMVtkOwGu4jwe2YGeZ7L88NYEyBoEhXJOBMXxqlnwXYYBeCFNCofmAK8UTd8DFmmKQWxSQztkL7F0MwYeSA4/wCQUo1YwK6O87Re8F8gS+cGUSLJsTAzw4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414689; c=relaxed/simple; bh=fID7dprJeP19XS6GkUR/PNuTP7NpZtqsVvhFrCPtkHE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SYRncZnYOXJrhq7O/9T243FFhaJ0f+QgeIDiEGTfJ9xgO2L5LuZEV4E+VeAK23s8pRDV2LDDiDhE4sCb+ISQILU0LsWpUoswUXp+KVh0q5+X3kzwpCzLj98rNoCnLqjqGTlx1nzUOYOKwP8VIj81RL2f2yIwF+f9iOlm+ZTLNNs= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=Jxz98mVH; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="Jxz98mVH" ARC-Seal: i=1; a=rsa-sha256; t=1773414670; cv=none; d=zohomail.com; s=zohoarc; b=OZ3UDp3ta/xBN/7ZS9cb24wivCzqQ35kOPOrg/uvTN1zET9MP2RQ8Z18m3puOqbKK2NjAhw0N2HTIcTNYvQEsQchW2QgKd0h9MqiAbxHUQ4e8Sc9VN2qZkz+IrrBeCKJ7hZfP31pccCGxlK7FnVTLl841guWi8UtyNEv375Unio= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773414670; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=qvk09IecOrbewxeKSJE5mX77yqFCG/p3pQX91Tx/WqQ=; b=Hlq9Z7UTwaTijzpBbLD37zCRekKFgVXPLqLOXTlCSjgqlQwbCS6bd3N9f3EV+O7bvyxCG457xfoRgP6c5kf8sen/OMzRmz7FQdcvzcNMfXAQChs/OZJogAQHlfY5Izqr8WsRM/ZY2wDfuzznOOFvecSBsu5u6kuTsx5AOluDy+Y= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1773414670; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Message-Id:Reply-To; bh=qvk09IecOrbewxeKSJE5mX77yqFCG/p3pQX91Tx/WqQ=; b=Jxz98mVHVfMTnYBi9W7j7iTeWsOYwcH4Jg9IxIWVdeltDu17azGLs6eOkypkA47d T+FFsh2HNHKHCQd9K55nTPrM6M6hrBg5L7ITCaPgw0DqbCKmxqPz+CPB4QgtIC8Kbg7 SEL9sh60g/Jh4v0fN+oPWxCSNVjmq/gkVf9vd/Q8= Received: by mx.zohomail.com with SMTPS id 17734146689121012.9497793163894; Fri, 13 Mar 2026 08:11:08 -0700 (PDT) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Steven Price , Boris Brezillon , Janne Grunau , kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , Asahi Lina , Caterina Shablia , Danilo Krummrich , Matthew Brost , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , Alice Ryhl , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Subject: [PATCH v5 06/11] drm/gpuvm: Add DRM_GPUVA_REPEAT flag and logic Date: Fri, 13 Mar 2026 15:09:43 +0000 Message-ID: <20260313150956.1618635-7-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260313150956.1618635-1-adrian.larumbe@collabora.com> References: <20260313150956.1618635-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Asahi Lina To be able to support "fake sparse" mappings without relying on GPU page fault handling, drivers may need to create large (e.g. 4GiB) mappings of the same page repeatedly (or same range of pages). Doing this through individual mappings would be very wasteful. This can be handled better by using a flag on map creation, but to do it safely, drm_gpuvm needs to be aware of this special case. Add a flag that signals that a given mapping is a page mapping, which is repeated all over the entire requested VA range. This tweaks the sm_map() logic to treat the GEM offsets differently when mappings are a repeated ones so they are not incremented as they would be with regular mappings. The size of the GEM portion to repeat is passed through drm_gpuva::gem::range. Most of the time it will be a page size, but it can be bigger as long as it's less than drm_gpuva::va::range, and drm_gpuva::va::range is a multiple of drm_gpuva::gem::range. Signed-off-by: Asahi Lina Signed-off-by: Caterina Shablia --- drivers/gpu/drm/drm_gpuvm.c | 67 ++++++++++++++++++++++++++++++++++--- include/drm/drm_gpuvm.h | 35 ++++++++++++++++++- 2 files changed, 96 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/drm_gpuvm.c b/drivers/gpu/drm/drm_gpuvm.c index 0d9c821d1b34..ca7445f767fc 100644 --- a/drivers/gpu/drm/drm_gpuvm.c +++ b/drivers/gpu/drm/drm_gpuvm.c @@ -2340,6 +2340,8 @@ op_map_cb(const struct drm_gpuvm_ops *fn, void *priv, op.map.va.range =3D req->map.va.range; op.map.gem.obj =3D req->map.gem.obj; op.map.gem.offset =3D req->map.gem.offset; + op.map.gem.repeat_range =3D req->map.gem.repeat_range; + op.map.flags =3D req->map.flags; =20 return fn->sm_step_map(&op, priv); } @@ -2410,12 +2412,56 @@ static bool can_merge(struct drm_gpuvm *gpuvm, cons= t struct drm_gpuva *va, if (drm_WARN_ON(gpuvm->drm, b->va.addr > a->va.addr + a->va.range)) return false; =20 + if (a->flags & DRM_GPUVA_REPEAT) { + u64 va_diff =3D b->va.addr - a->va.addr; + + /* If this is a repeated mapping, both the GEM range + * and offset must match. + */ + if (a->gem.repeat_range !=3D b->gem.repeat_range || + a->gem.offset !=3D b->gem.offset) + return false; + + /* The difference between the VA addresses must be a + * multiple of the repeated range, otherwise there's + * a shift. + */ + if (do_div(va_diff, a->gem.repeat_range)) + return false; + + return true; + } + /* We intentionally ignore u64 underflows because all we care about * here is whether the VA diff matches the GEM offset diff. */ return b->va.addr - a->va.addr =3D=3D b->gem.offset - a->gem.offset; } =20 +static int validate_map_request(struct drm_gpuvm *gpuvm, + const struct drm_gpuva_op_map *op) +{ + if (unlikely(!drm_gpuvm_range_valid(gpuvm, op->va.addr, op->va.range))) + return -EINVAL; + + if (op->flags & DRM_GPUVA_REPEAT) { + u64 va_range =3D op->va.range; + + /* For a repeated mapping, GEM range must be > 0 + * and a multiple of the VA range. + */ + if (unlikely(!op->gem.repeat_range || + va_range < op->gem.repeat_range || + do_div(va_range, op->gem.repeat_range))) + return -EINVAL; + } + + if (op->flags & DRM_GPUVA_INVALIDATED) + return -EINVAL; + + return 0; +} + static int __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, const struct drm_gpuvm_ops *ops, void *priv, @@ -2429,7 +2475,8 @@ __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, u64 req_end =3D req_addr + req_range; int ret; =20 - if (unlikely(!drm_gpuvm_range_valid(gpuvm, req_addr, req_range))) + ret =3D validate_map_request(gpuvm, &req->map); + if (unlikely(ret)) return -EINVAL; =20 drm_gpuvm_for_each_va_range_safe(va, next, gpuvm, req_addr, req_end) { @@ -2463,7 +2510,9 @@ __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, .va.addr =3D req_end, .va.range =3D range - req_range, .gem.obj =3D obj, - .gem.offset =3D offset + req_range, + .gem.repeat_range =3D va->gem.repeat_range, + .gem.offset =3D offset + + (va->flags & DRM_GPUVA_REPEAT ? 0 : req_range), .flags =3D va->flags, }; struct drm_gpuva_op_unmap u =3D { @@ -2485,6 +2534,7 @@ __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, .va.addr =3D addr, .va.range =3D ls_range, .gem.obj =3D obj, + .gem.repeat_range =3D va->gem.repeat_range, .gem.offset =3D offset, .flags =3D va->flags, }; @@ -2526,7 +2576,9 @@ __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, .va.addr =3D req_end, .va.range =3D end - req_end, .gem.obj =3D obj, - .gem.offset =3D offset + ls_range + req_range, + .gem.repeat_range =3D va->gem.repeat_range, + .gem.offset =3D offset + (va->flags & DRM_GPUVA_REPEAT ? + 0 : ls_range + req_range), .flags =3D va->flags, }; =20 @@ -2560,7 +2612,9 @@ __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, .va.addr =3D req_end, .va.range =3D end - req_end, .gem.obj =3D obj, - .gem.offset =3D offset + req_end - addr, + .gem.repeat_range =3D va->gem.repeat_range, + .gem.offset =3D offset + + (va->flags & DRM_GPUVA_REPEAT ? 0 : req_end - addr), .flags =3D va->flags, }; struct drm_gpuva_op_unmap u =3D { @@ -2612,6 +2666,7 @@ __drm_gpuvm_sm_unmap(struct drm_gpuvm *gpuvm, prev.va.addr =3D addr; prev.va.range =3D req_addr - addr; prev.gem.obj =3D obj; + prev.gem.repeat_range =3D va->gem.repeat_range; prev.gem.offset =3D offset; prev.flags =3D va->flags; =20 @@ -2622,7 +2677,9 @@ __drm_gpuvm_sm_unmap(struct drm_gpuvm *gpuvm, next.va.addr =3D req_end; next.va.range =3D end - req_end; next.gem.obj =3D obj; - next.gem.offset =3D offset + (req_end - addr); + next.gem.repeat_range =3D va->gem.repeat_range; + next.gem.offset =3D offset + + (va->flags & DRM_GPUVA_REPEAT ? 0 : req_end - addr); next.flags =3D va->flags; =20 next_split =3D true; diff --git a/include/drm/drm_gpuvm.h b/include/drm/drm_gpuvm.h index 5bf37deb282d..cd2f55bc1707 100644 --- a/include/drm/drm_gpuvm.h +++ b/include/drm/drm_gpuvm.h @@ -57,10 +57,19 @@ enum drm_gpuva_flags { */ DRM_GPUVA_SPARSE =3D (1 << 1), =20 + /** + * @DRM_GPUVA_REPEAT: + * + * Flag indicating that the &drm_gpuva is a mapping of a GEM + * object with a certain range that is repeated multiple times to + * fill the virtual address range. + */ + DRM_GPUVA_REPEAT =3D (1 << 2), + /** * @DRM_GPUVA_USERBITS: user defined bits */ - DRM_GPUVA_USERBITS =3D (1 << 2), + DRM_GPUVA_USERBITS =3D (1 << 3), }; =20 #define VA_MERGE_MUST_MATCH_FLAGS (DRM_GPUVA_SPARSE) @@ -114,6 +123,18 @@ struct drm_gpuva { */ u64 offset; =20 + /** + * @gem.repeat_range: the range of the GEM that is mapped + * + * When dealing with normal mappings, this must be zero. + * When flags has DRM_GPUVA_REPEAT set, this field must be + * smaller than va.range and va.range must be a multiple of + * gem.repeat_range. + * This is a u32 not a u64 because we expect repeated mappings + * to be pointing to relatively small portions of a GEM object. + */ + u32 repeat_range; + /** * @gem.obj: the mapped &drm_gem_object */ @@ -883,6 +904,17 @@ struct drm_gpuva_op_map { */ u64 offset; =20 + /** + * @gem.repeat_range: the range of the GEM that is mapped + * + * When dealing with normal mappings, this must be zero. + * When flags has DRM_GPUVA_REPEAT set, va.range must be + * a multiple of gem.repeat_range. This is a u32 not a u64 + * because we expect repeated mappings to be pointing to + * a relatively small portion of a GEM object. + */ + u32 repeat_range; + /** * @gem.obj: the &drm_gem_object to map */ @@ -1136,6 +1168,7 @@ static inline void drm_gpuva_init_from_op(struct drm_= gpuva *va, va->va.range =3D op->va.range; va->gem.obj =3D op->gem.obj; va->gem.offset =3D op->gem.offset; + va->gem.repeat_range =3D op->gem.repeat_range; } =20 /** --=20 2.53.0 From nobody Tue Apr 7 11:17:14 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EA1E43A5E61 for ; Fri, 13 Mar 2026 15:11:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414693; cv=pass; b=L5eLfswKKclDGbkvBpg4ZdtEMJdxQY6/AHaFFD1SCrzNNUCc79B7JYklBg1pVz/p0X5EvM1cwBuBJg2TuICUYNeEuPSAumhQ796EE6iGtJtyVx6uCmA5iDGi77Wb/V4NZxUXM233LN9g+Y+ujuJXyiZ5w2pL4chyrmp4Ux+At/o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414693; c=relaxed/simple; bh=EY2m/AUbAxz3QBo89EsL7Zx4fPRTkfN5Z0VILx06QjA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=BlU/MoYYJdM5mLwCtMBvYXJj5xM9OtuSiBSxxspZyPSTCVoShkkOE2bOLOxM9SiZ8QdzcJmnHyTlo6WahDyoHMXlz2P/emcpwRKXMc/nHsXznTdwWp8IKZfyLBy8K6u5d9BhKJ3avbWK6RQnGQBS0bL+OPXK0mN+JIplC74Kklo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=UYw6stbk; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="UYw6stbk" ARC-Seal: i=1; a=rsa-sha256; t=1773414674; cv=none; d=zohomail.com; s=zohoarc; b=V4vsuUaofgd8lt0XzGwpkWlQjfq6Y1PPNiDJ8nJj8sWL3pKOO45mnZfUhrYUyX4hCvuW/+cx27tj0Z954sudKteCpxJfAsfVu8nWk49OWs3QVRyspY3vgKQJswp12vg+6NFoYBhUbIhTpGEXci70jG0v3NntbRlHytCAEC9nTM0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773414674; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=ddH5Yc4c0IevX3wa5L4ZVOfMqtq9xMzu+E7rLqoDebY=; b=jkGOZvMQJuaOpmJPHZJPGhVJK6zJ5YZiUm38lGsuKhoitL4a/asT+rt0XxciYfcNtj1VNfzJIw66sWU4Teodf1+dp9LuuS6d4uav4fEjvoOrkJpqWag2jeEt6QUx25dp70DLPuCtl5Hsp7I9fGJQVmyNSlxvvKi0wR8H1WTXgP4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1773414674; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=ddH5Yc4c0IevX3wa5L4ZVOfMqtq9xMzu+E7rLqoDebY=; b=UYw6stbki7TROzm+DDJQDDTYJqAZp6x3idB/5ISLL/J5v92952so0i6Mt5uMbQiL IUvQ8BICjBXA0GcCwt69MhTjckB/UYxUgmZZsiieIzRnaiulZDcUxhFf7/QT5PfTFLT KDlRoTZ4Gl+8JT6ui8t2O92OpVhBXYfoLLainFl0= Received: by mx.zohomail.com with SMTPS id 1773414672194873.5209431416926; Fri, 13 Mar 2026 08:11:12 -0700 (PDT) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Steven Price , Boris Brezillon , Janne Grunau , kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , Danilo Krummrich , Matthew Brost , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , Alice Ryhl , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Subject: [PATCH v5 07/11] drm/gpuvm: Ensure correctness of unmap/remaps of repeated regions Date: Fri, 13 Mar 2026 15:09:44 +0000 Message-ID: <20260313150956.1618635-8-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260313150956.1618635-1-adrian.larumbe@collabora.com> References: <20260313150956.1618635-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable When an unmap or map operation that leads to a remap intersects with a GPU VA that spans over a repeated range, the newly spawned VAs must preserve the repeated property, ie, VA's range must be a multiple of gem.range, and also the VA's start address must be on a gem.range boundary. When this doesn't hold, disallow such operations and notify UM with an invalid argument error. Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/drm_gpuvm.c | 67 +++++++++++++++++++++++++++++++++++++ include/drm/drm_gpuvm.h | 7 +++- 2 files changed, 73 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_gpuvm.c b/drivers/gpu/drm/drm_gpuvm.c index ca7445f767fc..80750119221d 100644 --- a/drivers/gpu/drm/drm_gpuvm.c +++ b/drivers/gpu/drm/drm_gpuvm.c @@ -2462,6 +2462,65 @@ static int validate_map_request(struct drm_gpuvm *gp= uvm, return 0; } =20 +static int +validate_repeated_unmap_request(struct drm_gpuvm *gpuvm, + u64 req_addr, u64 req_end) +{ + struct drm_gpuva *first, *last, *va; + u64 multiple; + + if (!(gpuvm->flags & DRM_GPUVM_HAS_REPEAT_MAPS)) + return 0; + + /* Find the first and last VAs the map request intersects with */ + first =3D last =3D NULL; + drm_gpuvm_for_each_va_range(va, gpuvm, req_addr, req_end) { + if (!first) + first =3D va; + last =3D va; + } + + if (!first) + return 0; + + if (first->flags & DRM_GPUVA_REPEAT) { + u64 addr =3D first->va.addr; + u64 range =3D first->va.range; + u64 end =3D addr + range; + + drm_WARN_ON(gpuvm->drm, first->gem.repeat_range =3D=3D 0); + + if (addr < req_addr) { + multiple =3D req_addr; + if (do_div(multiple, first->gem.repeat_range)) + return -EINVAL; + } + + if (end > req_end) { + multiple =3D req_end; + if (do_div(multiple, first->gem.repeat_range)) + return -EINVAL; + return 0; + } + } + + if ((first !=3D last) && (last->flags & DRM_GPUVA_REPEAT)) { + u64 addr =3D last->va.addr; + u64 range =3D last->va.range; + u64 end =3D addr + range; + + drm_WARN_ON(last->vm->drm, last->gem.repeat_range =3D=3D 0); + + if (end > req_end) { + multiple =3D req_end; + if (do_div(multiple, last->gem.repeat_range)) + return -EINVAL; + } + } + + return 0; +} + static int __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, const struct drm_gpuvm_ops *ops, void *priv, @@ -2479,6 +2538,10 @@ __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, if (unlikely(ret)) return -EINVAL; =20 + ret =3D validate_repeated_unmap_request(gpuvm, req_addr, req_end); + if (ret) + return ret; + drm_gpuvm_for_each_va_range_safe(va, next, gpuvm, req_addr, req_end) { struct drm_gem_object *obj =3D va->gem.obj; u64 offset =3D va->gem.offset; @@ -2653,6 +2716,10 @@ __drm_gpuvm_sm_unmap(struct drm_gpuvm *gpuvm, if (unlikely(!drm_gpuvm_range_valid(gpuvm, req_addr, req_range))) return -EINVAL; =20 + ret =3D validate_repeated_unmap_request(gpuvm, req_addr, req_end); + if (ret) + return ret; + drm_gpuvm_for_each_va_range_safe(va, next, gpuvm, req_addr, req_end) { struct drm_gpuva_op_map prev =3D {}, next =3D {}; bool prev_split =3D false, next_split =3D false; diff --git a/include/drm/drm_gpuvm.h b/include/drm/drm_gpuvm.h index cd2f55bc1707..61f66dfe4ed7 100644 --- a/include/drm/drm_gpuvm.h +++ b/include/drm/drm_gpuvm.h @@ -230,10 +230,15 @@ enum drm_gpuvm_flags { */ DRM_GPUVM_IMMEDIATE_MODE =3D BIT(1), =20 + /** + * @DRM_GPUVM_HAS_REPEAT_MAPS: There are repeated VAs in the GPUVM + */ + DRM_GPUVM_HAS_REPEAT_MAPS =3D BIT(2), + /** * @DRM_GPUVM_USERBITS: user defined bits */ - DRM_GPUVM_USERBITS =3D BIT(2), + DRM_GPUVM_USERBITS =3D BIT(3), }; =20 /** --=20 2.53.0 From nobody Tue Apr 7 11:17:14 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CD7693B8927 for ; Fri, 13 Mar 2026 15:11:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414697; cv=pass; b=i5V3HJrBXBQ2x9x2PRdqipcyP7D6VpDJefnlizOfc1ZqumpjmhYOk8qSD61o+C17DHCpETLExeAofJJiHVszQUaIweG7bscqeATR7VDySKHfvN3Pfam2rxI40p0q6+hERwjz7tkfk0VBIbJa1T6EcK5zMPYNve4tPLYPrf6SaOw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414697; c=relaxed/simple; bh=1Uf4Gx79xvX2XX2aoMgjcl0BDY33Lp0etpTVMbnipK8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=n97AD98byhLryIf1+w6IKhYdYAnBrcmjAMmWx74JqgbWpAN83ajAco03+xc9GmYRRR1x/Vd9BGx53Rz2kd910iNn3gRtqZFqnR5jtrawktYcATgTqPAfpa6LHqJfg2fLvamZQvqrklrjLX3J55gDL7YAuPDGm+UpWGrkaQCY7EI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=XeE91emf; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="XeE91emf" ARC-Seal: i=1; a=rsa-sha256; t=1773414678; cv=none; d=zohomail.com; s=zohoarc; b=Bh6c7GmVpy04A+MYlCnYgCx2DOmQ4gXk9ueRwhwDSnAvWdECq4+nPCyLrstMyIA23jezmrSQEDxOXjcV/RkBvc2slFS4hj/DhJ5bPNKBbgzyvZSSN1f84dZUevLc7mvWApHD0M013XKOEk1kwZe6pj07k2SJJHC5fYcOq51FK9M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773414678; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=Y2E0wsyv9RRhn9eDVmJKT3KYQMgMU8DrKRtF/d1Ct/8=; b=g1Y+Bu6/QpcgoRlO+oFoo0nONyutojn/+W5KgjZh6mVLSLmRGotjkqB7IFylfyr/ddON7G7Xm2WdZkFHmAP3CJ8tXjZaQ29StElJjuAGnsW4s5m3Z+ccLLGUPaFUR6CLKnL6VmfruHM3o/2hWHTQhT4bqU/2Qe8PeWLgKb8NavU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1773414678; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Message-Id:Reply-To; bh=Y2E0wsyv9RRhn9eDVmJKT3KYQMgMU8DrKRtF/d1Ct/8=; b=XeE91emfI/hvotxiF1t1ln9rmjv3ac8J/Y3NxdYpfU3fhn5qw8S66HpMJRIhAq+r 8sZ8eMfPIKdoCkEKvs2fHlwKIWBBrVSHFEufTNqzxRK70PI4j/fld2Fd44Hp6UXFzVO LPEp6PyK5R/jv8KXvisTsWEH/txw/5bDKG4VvXS8= Received: by mx.zohomail.com with SMTPS id 177341467546464.77577555718221; Fri, 13 Mar 2026 08:11:15 -0700 (PDT) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Steven Price , Boris Brezillon , Janne Grunau , kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , Caterina Shablia , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Daniel Almeida , Alice Ryhl Subject: [PATCH v5 08/11] drm/panthor: Add support for repeated mappings Date: Fri, 13 Mar 2026 15:09:45 +0000 Message-ID: <20260313150956.1618635-9-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260313150956.1618635-1-adrian.larumbe@collabora.com> References: <20260313150956.1618635-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Boris Brezillon This allows us to optimize mapping of a relatively small portion of a BO over and over in a large VA range, which is useful to support Vulkan sparse bindings in an efficient way. Signed-off-by: Boris Brezillon Co-developed-by: Caterina Shablia Signed-off-by: Caterina Shablia --- drivers/gpu/drm/panthor/panthor_mmu.c | 109 +++++++++++++++++++++++--- include/uapi/drm/panthor_drm.h | 20 +++++ 2 files changed, 120 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/pantho= r/panthor_mmu.c index 07c520475f14..a357063bb9f6 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -190,6 +190,9 @@ struct panthor_vm_op_ctx { /** @map.bo_offset: Offset in the buffer object. */ u64 bo_offset; =20 + /** @map.bo_repeat_range: Repeated BO range. */ + u32 bo_repeat_range; + /** * @map.sgt: sg-table pointing to pages backing the GEM object. * @@ -1003,6 +1006,29 @@ panthor_vm_map_pages(struct panthor_vm *vm, u64 iova= , int prot, return 0; } =20 +static int +panthor_vm_repeated_map_pages(struct panthor_vm *vm, u64 iova, int prot, + struct sg_table *sgt, u64 offset, u64 size, + u64 count) +{ + int ret; + u64 i; + + /* FIXME: we really need to optimize this at the io_pgtable level. */ + for (i =3D 0; i < count; i++) { + ret =3D panthor_vm_map_pages(vm, iova + (size * i), prot, + sgt, offset, size); + if (ret) + goto err_unmap; + } + + return 0; + +err_unmap: + panthor_vm_unmap_pages(vm, iova, size * (i - 1)); + return ret; +} + static int flags_to_prot(u32 flags) { int prot =3D 0; @@ -1184,12 +1210,14 @@ panthor_vm_op_ctx_prealloc_vmas(struct panthor_vm_o= p_ctx *op_ctx) (DRM_PANTHOR_VM_BIND_OP_MAP_READONLY | \ DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC | \ DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED | \ + DRM_PANTHOR_VM_BIND_OP_MAP_REPEAT | \ DRM_PANTHOR_VM_BIND_OP_TYPE_MASK) =20 static int panthor_vm_prepare_map_op_ctx(struct panthor_vm_op_ctx *op_ctx, struct panthor_vm *vm, struct panthor_gem_object *bo, u64 offset, + u64 repeat_range, u64 size, u64 va, u32 flags) { @@ -1205,9 +1233,28 @@ static int panthor_vm_prepare_map_op_ctx(struct pant= hor_vm_op_ctx *op_ctx, (flags & DRM_PANTHOR_VM_BIND_OP_TYPE_MASK) !=3D DRM_PANTHOR_VM_BIND_O= P_TYPE_MAP) return -EINVAL; =20 - /* Make sure the VA and size are in-bounds. */ - if (size > bo->base.base.size || offset > bo->base.base.size - size) - return -EINVAL; + if (!(flags & DRM_PANTHOR_VM_BIND_OP_MAP_REPEAT)) { + /* Make sure the VA and size are in-bounds. */ + if (size > bo->base.base.size || offset > bo->base.base.size - size) + return -EINVAL; + } else { + /* Current drm api uses 32-bit for repeat range, */ + if (repeat_range > U32_MAX) + return -EINVAL; + + /* Make sure the repeat_range is in-bounds. */ + if (repeat_range > bo->base.base.size || offset > bo->base.base.size - r= epeat_range) + return -EINVAL; + + /* Repeat range must a multiple of the minimum GPU page size */ + if (repeat_range & ((1u << (ffs(vm->ptdev->mmu_info.page_size_bitmap) - = 1)) - 1)) + return -EINVAL; + + u64 repeat_count =3D size; + + if (do_div(repeat_count, repeat_range)) + return -EINVAL; + } =20 /* If the BO has an exclusive VM attached, it can't be mapped to other VM= s. */ if (bo->exclusive_vm_root_gem && @@ -1257,6 +1304,7 @@ static int panthor_vm_prepare_map_op_ctx(struct panth= or_vm_op_ctx *op_ctx, op_ctx->map.vm_bo =3D drm_gpuvm_bo_obtain_prealloc(preallocated_vm_bo); =20 op_ctx->map.bo_offset =3D offset; + op_ctx->map.bo_repeat_range =3D repeat_range; =20 /* L1, L2 and L3 page tables. * We could optimize L3 allocation by iterating over the sgt and merging @@ -2088,9 +2136,29 @@ static int panthor_gpuva_sm_step_map(struct drm_gpuv= a_op *op, void *priv) =20 panthor_vma_init(vma, op_ctx->flags & PANTHOR_VM_MAP_FLAGS); =20 - ret =3D panthor_vm_map_pages(vm, op->map.va.addr, flags_to_prot(vma->flag= s), - op_ctx->map.sgt, op->map.gem.offset, - op->map.va.range); + if (op_ctx->flags & DRM_PANTHOR_VM_BIND_OP_MAP_REPEAT) { + u64 repeat_count =3D op->map.va.range; + + do_div(repeat_count, op->map.gem.repeat_range); + + if (drm_WARN_ON(&vm->ptdev->base, !repeat_count)) + return -EINVAL; + + ret =3D panthor_vm_repeated_map_pages(vm, op->map.va.addr, + flags_to_prot(vma->flags), + op_ctx->map.sgt, + op->map.gem.offset, + op->map.gem.repeat_range, + repeat_count); + if (!ret) + vm->base.flags |=3D DRM_GPUVM_HAS_REPEAT_MAPS; + } else { + ret =3D panthor_vm_map_pages(vm, op->map.va.addr, + flags_to_prot(vma->flags), + op_ctx->map.sgt, op->map.gem.offset, + op->map.va.range); + } + if (ret) { panthor_vm_op_ctx_return_vma(op_ctx, vma); return ret; @@ -2165,8 +2233,22 @@ static int panthor_gpuva_sm_step_remap(struct drm_gp= uva_op *op, * page and then remap the difference between the huge page minus the req= uested * unmap region. Calculating the right start address and range for the ex= panded * unmap operation is the responsibility of the following function. + * However, we never allow partial unmaps of repeated regions. */ - unmap_hugepage_align(&op->remap, &unmap_start, &unmap_range); + if (op->remap.next && op->remap.prev) { + if (drm_WARN_ON(&vm->ptdev->base, + (op->remap.next->flags & DRM_GPUVA_REPEAT) !=3D + (op->remap.prev->flags & DRM_GPUVA_REPEAT))) + return -EINVAL; + if (drm_WARN_ON(&vm->ptdev->base, + op->remap.next->gem.repeat_range !=3D + op->remap.prev->gem.repeat_range)) + return -EINVAL; + } + + if (!(op->remap.next && (op->remap.next->flags & DRM_GPUVA_REPEAT)) && + !(op->remap.prev && (op->remap.prev->flags & DRM_GPUVA_REPEAT))) + unmap_hugepage_align(&op->remap, &unmap_start, &unmap_range); =20 /* If the range changed, we might have to lock a wider region to guarantee * atomicity. panthor_vm_lock_region() bails out early if the new region @@ -2283,7 +2365,7 @@ panthor_vm_exec_op(struct panthor_vm *vm, struct pant= hor_vm_op_ctx *op, =20 switch (op_type) { case DRM_PANTHOR_VM_BIND_OP_TYPE_MAP: { - const struct drm_gpuvm_map_req map_req =3D { + struct drm_gpuvm_map_req map_req =3D { .map.va.addr =3D op->va.addr, .map.va.range =3D op->va.range, .map.gem.obj =3D op->map.vm_bo->obj, @@ -2295,6 +2377,11 @@ panthor_vm_exec_op(struct panthor_vm *vm, struct pan= thor_vm_op_ctx *op, break; } =20 + if (op->flags & DRM_PANTHOR_VM_BIND_OP_MAP_REPEAT) { + map_req.map.flags |=3D DRM_GPUVA_REPEAT; + map_req.map.gem.repeat_range =3D op->map.bo_repeat_range; + } + ret =3D drm_gpuvm_sm_map(&vm->base, vm, &map_req); break; } @@ -2544,6 +2631,7 @@ panthor_vm_bind_prepare_op_ctx(struct drm_file *file, ret =3D panthor_vm_prepare_map_op_ctx(op_ctx, vm, gem ? to_panthor_bo(gem) : NULL, op->bo_offset, + op->bo_repeat_range, op->size, op->va, op->flags); @@ -2745,7 +2833,10 @@ int panthor_vm_map_bo_range(struct panthor_vm *vm, s= truct panthor_gem_object *bo struct panthor_vm_op_ctx op_ctx; int ret; =20 - ret =3D panthor_vm_prepare_map_op_ctx(&op_ctx, vm, bo, offset, size, va, = flags); + if (drm_WARN_ON(&vm->ptdev->base, flags & DRM_PANTHOR_VM_BIND_OP_MAP_REPE= AT)) + return -EINVAL; + + ret =3D panthor_vm_prepare_map_op_ctx(&op_ctx, vm, bo, offset, 0, size, v= a, flags); if (ret) return ret; =20 diff --git a/include/uapi/drm/panthor_drm.h b/include/uapi/drm/panthor_drm.h index 4089271f3d36..46217ce2c0f5 100644 --- a/include/uapi/drm/panthor_drm.h +++ b/include/uapi/drm/panthor_drm.h @@ -555,6 +555,17 @@ enum drm_panthor_vm_bind_op_flags { */ DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED =3D 1 << 2, =20 + /** + * @DRM_PANTHOR_VM_BIND_OP_MAP_REPEAT: Repeat a BO range + * + * Only valid with DRM_PANTHOR_VM_BIND_OP_TYPE_MAP. + * + * When this is set, a BO range is repeated over the VA range. + * drm_panthor_vm_bind_op::bo_repeat_range defines the size of the + * BO range to repeat. + */ + DRM_PANTHOR_VM_BIND_OP_MAP_REPEAT =3D 1 << 3, + /** * @DRM_PANTHOR_VM_BIND_OP_TYPE_MASK: Mask used to determine the type of = operation. */ @@ -619,6 +630,15 @@ struct drm_panthor_vm_bind_op { */ struct drm_panthor_obj_array syncs; =20 + /** + * @bo_repeat_range: The size of the range to be repeated. + * + * Must be zero if DRM_PANTHOR_VM_BIND_OP_MAP_REPEAT is not set in + * flags. + * + * Size must be a multiple of bo_repeat_range. + */ + __u64 bo_repeat_range; }; =20 /** --=20 2.53.0 From nobody Tue Apr 7 11:17:14 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BBB8D3B8926 for ; Fri, 13 Mar 2026 15:11:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414696; cv=pass; b=s0hr9QJHkejQMVsF7UBYHBsK6ISo1umT/Uuf/gqE4oJvNFdHSOEtied0NEQFSyDPWafXBYZABVuWZWfdqX0bGSfJiwnQu2zbylKnoz0Muh71wO4M+yb1vZhpZctfsGIOIct+aNZhCl0mP+Ntk5Q2TDbVuKuXsbO36I6kuDshST8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414696; c=relaxed/simple; bh=pjpTEjGtPplEo+D4i8ene5pq8OSkVvPBu77xoyw5QQA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Ed+zxhJkOvV5ZiaSibodVkGgUz3Y1j77PQ3oDt16vGIzq89j5TQnm+RbD+/GZRXDlszQm8TFMNlPUMv8ctCjU/ievCfYTBAcmLUrtCDsDxgWPEbiVrgtvbuUgJuTfc2cf8/KwDKJOY+kMoYRCYe71WuG36z3ItA0q6qC70+nGqY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=Mv7vOoaE; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="Mv7vOoaE" ARC-Seal: i=1; a=rsa-sha256; t=1773414680; cv=none; d=zohomail.com; s=zohoarc; b=UV3yL518arnR0/TjctHYyB0rzN/vQblVHEmQ1s1j0n09hdcsqPhORPAr43cFUZ4DSusB6EiWv14VRqh4ErSwmU6ZHqUTogoUEWCtjgkTmOYbjhTNttojjgqECb73QNwZtMJh20LsfE2RhUI2egmr4d3A9ZwtMyUMsQZ8SCTGuX4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773414680; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=SdVZB9xAx6kDE71K2UbMTmPRTxksVaVSVA3Iu9cKNPk=; b=QaH/pWzQskk9ajUlqyjqrz36awrtv3pmNqIYIo/owLPHN7+pnbTAAgIlbh2FooLV5Nr8KnCSFKm3CwfD7fIrn2l9ixKzF8ysghPtDeNnTAPpgHxmiyyYIevieV6BYXRr+UxERbW6Cbh7VuYo1rutZynhAnrgVHWvARTSRwJKvyQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1773414680; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=SdVZB9xAx6kDE71K2UbMTmPRTxksVaVSVA3Iu9cKNPk=; b=Mv7vOoaEkTKPFo6XUHzvZnHNHqjfnpUX8ErMTabRCH/TTGSCDE8IfYTKnx76+24P u/QzDS7GtpEOrSk3JQSDn2JWVXTi/V2ON/4CQ5szdxPTUuWkv4E8w2QNAgSJBmpf/Jk El5gup6wYr2yPgOLxvmFHbh4xhzwv1bcpiz5cHAs= Received: by mx.zohomail.com with SMTPS id 1773414678777968.1023471391474; Fri, 13 Mar 2026 08:11:18 -0700 (PDT) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Steven Price , Boris Brezillon , Janne Grunau , kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Subject: [PATCH v5 09/11] drm/panthor: Handle remap case for repeated mappings Date: Fri, 13 Mar 2026 15:09:46 +0000 Message-ID: <20260313150956.1618635-10-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260313150956.1618635-1-adrian.larumbe@collabora.com> References: <20260313150956.1618635-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable When a GPUVA remap is triggered as a consequence of a VM operation insersecting with existing VAs, when mapping the split VAs one must take into account whether they were repeat-mapped. Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panthor/panthor_mmu.c | 63 +++++++++++++++++---------- 1 file changed, 39 insertions(+), 24 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/pantho= r/panthor_mmu.c index a357063bb9f6..ba322e2029b9 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -2124,41 +2124,52 @@ static void panthor_vma_init(struct panthor_vma *vm= a, u32 flags) DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC | \ DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED) =20 -static int panthor_gpuva_sm_step_map(struct drm_gpuva_op *op, void *priv) +static int +panthor_vm_map_range(struct panthor_vm *vm, bool repeat, struct sg_table *= sgt, + u64 addr, u64 offset, u64 size, u32 repeat_range, int prot) { - struct panthor_vm *vm =3D priv; - struct panthor_vm_op_ctx *op_ctx =3D vm->op_ctx; - struct panthor_vma *vma =3D panthor_vm_op_ctx_get_vma(op_ctx); int ret; =20 - if (!vma) - return -EINVAL; - - panthor_vma_init(vma, op_ctx->flags & PANTHOR_VM_MAP_FLAGS); + if (!size) + return 0; =20 - if (op_ctx->flags & DRM_PANTHOR_VM_BIND_OP_MAP_REPEAT) { - u64 repeat_count =3D op->map.va.range; + if (repeat) { + u64 repeat_count =3D size; =20 - do_div(repeat_count, op->map.gem.repeat_range); + do_div(repeat_count, repeat_range); =20 if (drm_WARN_ON(&vm->ptdev->base, !repeat_count)) return -EINVAL; =20 - ret =3D panthor_vm_repeated_map_pages(vm, op->map.va.addr, - flags_to_prot(vma->flags), - op_ctx->map.sgt, - op->map.gem.offset, - op->map.gem.repeat_range, + ret =3D panthor_vm_repeated_map_pages(vm, addr, prot, sgt, + offset, repeat_range, repeat_count); if (!ret) vm->base.flags |=3D DRM_GPUVM_HAS_REPEAT_MAPS; } else { - ret =3D panthor_vm_map_pages(vm, op->map.va.addr, - flags_to_prot(vma->flags), - op_ctx->map.sgt, op->map.gem.offset, - op->map.va.range); + ret =3D panthor_vm_map_pages(vm, addr, prot, sgt, + offset, size); } =20 + return ret; +} + +static int panthor_gpuva_sm_step_map(struct drm_gpuva_op *op, void *priv) +{ + struct panthor_vm *vm =3D priv; + struct panthor_vm_op_ctx *op_ctx =3D vm->op_ctx; + struct panthor_vma *vma =3D panthor_vm_op_ctx_get_vma(op_ctx); + int ret; + + if (!vma) + return -EINVAL; + + panthor_vma_init(vma, op_ctx->flags & PANTHOR_VM_MAP_FLAGS); + + ret =3D panthor_vm_map_range(vm, op_ctx->flags & DRM_PANTHOR_VM_BIND_OP_M= AP_REPEAT, + op_ctx->map.sgt, op->map.va.addr, op->map.gem.offset, + op->map.va.range, op->map.gem.repeat_range, + flags_to_prot(vma->flags)); if (ret) { panthor_vm_op_ctx_return_vma(op_ctx, vma); return ret; @@ -2262,8 +2273,10 @@ static int panthor_gpuva_sm_step_remap(struct drm_gp= uva_op *op, u64 offset =3D op->remap.prev->gem.offset + unmap_start - op->remap.prev= ->va.addr; u64 size =3D op->remap.prev->va.addr + op->remap.prev->va.range - unmap_= start; =20 - ret =3D panthor_vm_map_pages(vm, unmap_start, flags_to_prot(unmap_vma->f= lags), - bo->base.sgt, offset, size); + ret =3D panthor_vm_map_range(vm, op->remap.prev->flags & DRM_GPUVA_REPEA= T, + bo->base.sgt, op->remap.prev->va.addr, offset, + size, op->remap.prev->gem.repeat_range, + flags_to_prot(unmap_vma->flags)); if (ret) return ret; =20 @@ -2276,8 +2289,10 @@ static int panthor_gpuva_sm_step_remap(struct drm_gp= uva_op *op, u64 addr =3D op->remap.next->va.addr; u64 size =3D unmap_start + unmap_range - op->remap.next->va.addr; =20 - ret =3D panthor_vm_map_pages(vm, addr, flags_to_prot(unmap_vma->flags), - bo->base.sgt, op->remap.next->gem.offset, size); + ret =3D panthor_vm_map_range(vm, op->remap.next->flags & DRM_GPUVA_REPEA= T, + bo->base.sgt, addr, op->remap.next->gem.offset, + size, op->remap.next->gem.repeat_range, + flags_to_prot(unmap_vma->flags)); if (ret) return ret; =20 --=20 2.53.0 From nobody Tue Apr 7 11:17:14 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E2DD83B8BA8 for ; Fri, 13 Mar 2026 15:11:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414701; cv=pass; b=GdTBLLh8GCBCh+gtQ+8FfdY44X1Vrs3Cla5jBfCM5ZqG1rDTpycrxgrxS4O06ZL2TM0EhG9ZHfi2Qfi3OzvsYP9wYTQg00RHqjqr9Gti8KNn0mnGHBsB8R663yYsklOPkNMTrI5Hq/M9sMhzbHelM/9A3Yp9zvF4pt78TOGVfa4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414701; c=relaxed/simple; bh=tKXBvRo7j4V1+n7ysE6L5FJAAOj86Lak913jwMwVZW8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=K1qUcdOxiayOe8KaEyv2AOCqe5RSK6ps9nuFDaytHk3bu3zMW9XeKb4qc8Vo5JbtfpJQqrQf7Qf8EHhDEfsdbJNcIsa8pwhODav/LOQ9+YoOFIri6pBQXQ+lpw/ZAkmf3sv5UlFFex3ig/e2TXDxqzbpRkkkDEHbxILXmN2J5pE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=Z4KUCYpi; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="Z4KUCYpi" ARC-Seal: i=1; a=rsa-sha256; t=1773414684; cv=none; d=zohomail.com; s=zohoarc; b=izjpo6W6RF0UMwnOVS96ZTBAu3nCxWPmEyB5CriytlChhQvrMpiQchIa2BiYfcKrVWxgQzwvWCpAN8MKXkMwSrfBCwWMLqupaa8sqbttL5meJQsnHLvu2q9H/ey2kpJSzRIXoDdbHtV/T9UywntpGqfCM37jYwgkm5v/yItEXgM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773414684; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=qnDjhJwB7YQsAc4SJP4zeR66d3AGj+viwzL0mvH3ZSw=; b=ibMDVZDyo0qt7YHB/Kloox15PgpgZYyB94m+HtxHwSCkQ24EBrTjOsPeYSf3wwxeIk4Zz1pyObjpqBL9rT8IIBXrG3TKdq7duYwQzSG2CMcdE9f7JNtDDUBteo0gzS5iGX1YCFB5VhvRonOEOkhjwm2J2LQUxR2eP03pRSUvlqM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1773414684; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=qnDjhJwB7YQsAc4SJP4zeR66d3AGj+viwzL0mvH3ZSw=; b=Z4KUCYpi0BK3Q6ed/qDpnkSqp6XWSbvpKVXWO7PlhrUiad2ckrbgU9e2X9joXTVl RPg6giPrqq3hGsi0cRf7RSq2QxmV4xKvBovJEPlloWYEx5jwQZ17NArWKwjxwU3dJMm FbuSn+tMMSYQ5AHnYb0CHrXtgwpFim8CRHOGToqs= Received: by mx.zohomail.com with SMTPS id 1773414681811353.32437567271097; Fri, 13 Mar 2026 08:11:21 -0700 (PDT) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Steven Price , Boris Brezillon , Janne Grunau , kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Subject: [PATCH v5 10/11] drm/panthor: Pass vm_bind_op to vm_prepare_map_op_ctx Date: Fri, 13 Mar 2026 15:09:47 +0000 Message-ID: <20260313150956.1618635-11-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260313150956.1618635-1-adrian.larumbe@collabora.com> References: <20260313150956.1618635-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Instead of passing its constituent elements, pass the whole struct to simplify the function prototype. Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panthor/panthor_mmu.c | 57 ++++++++++++++------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/pantho= r/panthor_mmu.c index ba322e2029b9..a62ac715265b 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -1216,10 +1216,7 @@ panthor_vm_op_ctx_prealloc_vmas(struct panthor_vm_op= _ctx *op_ctx) static int panthor_vm_prepare_map_op_ctx(struct panthor_vm_op_ctx *op_ctx, struct panthor_vm *vm, struct panthor_gem_object *bo, - u64 offset, - u64 repeat_range, - u64 size, u64 va, - u32 flags) + const struct drm_panthor_vm_bind_op *op) { struct drm_gpuvm_bo *preallocated_vm_bo; struct sg_table *sgt =3D NULL; @@ -1229,30 +1226,32 @@ static int panthor_vm_prepare_map_op_ctx(struct pan= thor_vm_op_ctx *op_ctx, if (!bo) return -EINVAL; =20 - if ((flags & ~PANTHOR_VM_BIND_OP_MAP_FLAGS) || - (flags & DRM_PANTHOR_VM_BIND_OP_TYPE_MASK) !=3D DRM_PANTHOR_VM_BIND_O= P_TYPE_MAP) + if ((op->flags & ~PANTHOR_VM_BIND_OP_MAP_FLAGS) || + (op->flags & DRM_PANTHOR_VM_BIND_OP_TYPE_MASK) !=3D DRM_PANTHOR_VM_BI= ND_OP_TYPE_MAP) return -EINVAL; =20 - if (!(flags & DRM_PANTHOR_VM_BIND_OP_MAP_REPEAT)) { + if (!(op->flags & DRM_PANTHOR_VM_BIND_OP_MAP_REPEAT)) { /* Make sure the VA and size are in-bounds. */ - if (size > bo->base.base.size || offset > bo->base.base.size - size) + if (op->size > bo->base.base.size || op->bo_offset > bo->base.base.size = - op->size) return -EINVAL; } else { /* Current drm api uses 32-bit for repeat range, */ - if (repeat_range > U32_MAX) + if (op->bo_repeat_range > U32_MAX) return -EINVAL; =20 /* Make sure the repeat_range is in-bounds. */ - if (repeat_range > bo->base.base.size || offset > bo->base.base.size - r= epeat_range) + if (op->bo_repeat_range > bo->base.base.size || + op->bo_offset > bo->base.base.size - op->bo_repeat_range) return -EINVAL; =20 /* Repeat range must a multiple of the minimum GPU page size */ - if (repeat_range & ((1u << (ffs(vm->ptdev->mmu_info.page_size_bitmap) - = 1)) - 1)) + if (op->bo_repeat_range & + ((1u << (ffs(vm->ptdev->mmu_info.page_size_bitmap) - 1)) - 1)) return -EINVAL; =20 - u64 repeat_count =3D size; + u64 repeat_count =3D op->size; =20 - if (do_div(repeat_count, repeat_range)) + if (do_div(repeat_count, op->bo_repeat_range)) return -EINVAL; } =20 @@ -1262,9 +1261,9 @@ static int panthor_vm_prepare_map_op_ctx(struct panth= or_vm_op_ctx *op_ctx, return -EINVAL; =20 memset(op_ctx, 0, sizeof(*op_ctx)); - op_ctx->flags =3D flags; - op_ctx->va.range =3D size; - op_ctx->va.addr =3D va; + op_ctx->flags =3D op->flags; + op_ctx->va.range =3D op->size; + op_ctx->va.addr =3D op->va; =20 ret =3D panthor_vm_op_ctx_prealloc_vmas(op_ctx); if (ret) @@ -1303,17 +1302,17 @@ static int panthor_vm_prepare_map_op_ctx(struct pan= thor_vm_op_ctx *op_ctx, =20 op_ctx->map.vm_bo =3D drm_gpuvm_bo_obtain_prealloc(preallocated_vm_bo); =20 - op_ctx->map.bo_offset =3D offset; - op_ctx->map.bo_repeat_range =3D repeat_range; + op_ctx->map.bo_offset =3D op->bo_offset; + op_ctx->map.bo_repeat_range =3D op->bo_repeat_range; =20 /* L1, L2 and L3 page tables. * We could optimize L3 allocation by iterating over the sgt and merging * 2M contiguous blocks, but it's simpler to over-provision and return * the pages if they're not used. */ - pt_count =3D ((ALIGN(va + size, 1ull << 39) - ALIGN_DOWN(va, 1ull << 39))= >> 39) + - ((ALIGN(va + size, 1ull << 30) - ALIGN_DOWN(va, 1ull << 30)) >> 30) + - ((ALIGN(va + size, 1ull << 21) - ALIGN_DOWN(va, 1ull << 21)) >> 21); + pt_count =3D ((ALIGN(op->va + op->size, 1ull << 39) - ALIGN_DOWN(op->va, = 1ull << 39)) >> 39) + + ((ALIGN(op->va + op->size, 1ull << 30) - ALIGN_DOWN(op->va, 1ull << 3= 0)) >> 30) + + ((ALIGN(op->va + op->size, 1ull << 21) - ALIGN_DOWN(op->va, 1ull << 2= 1)) >> 21); =20 op_ctx->rsvd_page_tables.pages =3D kcalloc(pt_count, sizeof(*op_ctx->rsvd_page_tables.pages), @@ -2645,11 +2644,7 @@ panthor_vm_bind_prepare_op_ctx(struct drm_file *file, gem =3D drm_gem_object_lookup(file, op->bo_handle); ret =3D panthor_vm_prepare_map_op_ctx(op_ctx, vm, gem ? to_panthor_bo(gem) : NULL, - op->bo_offset, - op->bo_repeat_range, - op->size, - op->va, - op->flags); + op); drm_gem_object_put(gem); return ret; =20 @@ -2845,13 +2840,21 @@ int panthor_vm_bind_exec_sync_op(struct drm_file *f= ile, int panthor_vm_map_bo_range(struct panthor_vm *vm, struct panthor_gem_obje= ct *bo, u64 offset, u64 size, u64 va, u32 flags) { + struct drm_panthor_vm_bind_op op =3D {0}; struct panthor_vm_op_ctx op_ctx; int ret; =20 if (drm_WARN_ON(&vm->ptdev->base, flags & DRM_PANTHOR_VM_BIND_OP_MAP_REPE= AT)) return -EINVAL; =20 - ret =3D panthor_vm_prepare_map_op_ctx(&op_ctx, vm, bo, offset, 0, size, v= a, flags); + op =3D (struct drm_panthor_vm_bind_op){ + .bo_offset =3D offset, + .size =3D size, + .va =3D va, + .flags =3D flags, + }; + + ret =3D panthor_vm_prepare_map_op_ctx(&op_ctx, vm, bo, &op); if (ret) return ret; =20 --=20 2.53.0 From nobody Tue Apr 7 11:17:14 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CF0943B8BD7 for ; Fri, 13 Mar 2026 15:11:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414702; cv=pass; b=lzEwJVI1xHK2cTSDVzEC9k3Dr3EhT4wkHlTKvdfrnSqpqxUr82oQQ755jPz1AdGQ7Iq6QCLtqgIZzZxRhzU4em+xV4pFsLFuttpHar6h6JXhGkHHTLUIq9oQKFh9Zm2/R/OvgiM/KWB5ClniYfnMj2jj+M4JpgKqOQYnLHwri8o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414702; c=relaxed/simple; bh=D1qKaOf8IolS4zRfJRNCYCsuNO68llALzYS9u/ejf1g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=OplVEkScXByClT78Kpot9O6LMG+EIpVa5pKoaAdSgIpLHEvRCSjL7HXolSe4uyzg76/0qJ+PjOBvtUv/IwexDjRPfa90+gj7MbEdhYsByTiFFHbneCsFAlNMZBCY3u12pwOcQDUW79NNKKnvcY/siOQg8AphpEQzW3z5eA5lwEY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=WbNx98AX; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="WbNx98AX" ARC-Seal: i=1; a=rsa-sha256; t=1773414686; cv=none; d=zohomail.com; s=zohoarc; b=fZm5YLkePVD6p6ZgU4aKEa43BumSfIr27Jjh7FjzIE9cHPhLOAMXQckma3Ur7h3DJ5/gk7quk37c1rzQ5dh1vRk9WdACeKQVbnjFdVQVgEieVgKQnpoQXiR1qetkQh5lgV6mFifWWIZ4DJdqCF+fWdal0PropzZzxlpCEUXRf0c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773414686; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=ge+3jZ5QBvUzD4tZrYrmX9/hapqDN8fljqN3IzCz7Q0=; b=UMebwzEvMaLmm8nErLz23bpurBlp7fF/SG5Y5njnK0nLiKXUW+VCihxFX6idgbfwxjbPriIACgqQX8SrVj8WKKMI3Q7CYfAyyDEreitc5+mpDmfSwO9a9FdZI4NzcZEijOjzwDuUZD0O3BUZjco5u/40z3LgJHP6TgsQjiW6XYM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1773414686; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=ge+3jZ5QBvUzD4tZrYrmX9/hapqDN8fljqN3IzCz7Q0=; b=WbNx98AXGmu5Gn4r5XAlkqWV3l5yeuv18xLW89fempUghAIxSUhMJot+/QGa4a8C bc724hFPhWBvIkukV+e0TcsUBOS/5e2cx8RwAYp4KrgOd+oYd1BAqRGyTqZ0UE5X5lk JY2qkiQrS4C6xSDbvHnVkr72GdRj/Ei7qPjcXvbY= Received: by mx.zohomail.com with SMTPS id 177341468484416.0749273637565; Fri, 13 Mar 2026 08:11:24 -0700 (PDT) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Steven Price , Boris Brezillon , Janne Grunau , kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Subject: [PATCH v5 11/11] drm/panthor: Bump the driver version to 1.8 Date: Fri, 13 Mar 2026 15:09:48 +0000 Message-ID: <20260313150956.1618635-12-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260313150956.1618635-1-adrian.larumbe@collabora.com> References: <20260313150956.1618635-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Bump the driver version to reflect the new MMU info query ioctl parameter and the VM_BIND repeat flag. Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panthor/panthor_drv.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/pantho= r/panthor_drv.c index 8a901e06a9c9..c965d58a05cb 100644 --- a/drivers/gpu/drm/panthor/panthor_drv.c +++ b/drivers/gpu/drm/panthor/panthor_drv.c @@ -1688,6 +1688,8 @@ static void panthor_debugfs_init(struct drm_minor *mi= nor) * - adds DRM_IOCTL_PANTHOR_BO_SYNC ioctl * - adds DRM_IOCTL_PANTHOR_BO_QUERY_INFO ioctl * - adds drm_panthor_gpu_info::selected_coherency + * - 1.8 - adds DRM_PANTHOR_DEV_QUERY_MMU_INFO query + * - adds DRM_PANTHOR_VM_BIND_OP_MAP_REPEAT flag */ static const struct drm_driver panthor_drm_driver =3D { .driver_features =3D DRIVER_RENDER | DRIVER_GEM | DRIVER_SYNCOBJ | @@ -1701,7 +1703,7 @@ static const struct drm_driver panthor_drm_driver =3D= { .name =3D "panthor", .desc =3D "Panthor DRM driver", .major =3D 1, - .minor =3D 7, + .minor =3D 8, =20 .gem_create_object =3D panthor_gem_create_object, .gem_prime_import_sg_table =3D drm_gem_shmem_prime_import_sg_table, --=20 2.53.0