From nobody Tue Feb 10 02:58:45 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 8118722A81F for ; Sat, 22 Mar 2025 21:29:32 +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=1742678974; cv=pass; b=XMvau8/VZkKM23f01VuQj5N5BLlqZL/LcR5ejgsXHlwnXayOtlueveJvq8wRW4ryc5ivm5jqYDZu7Y4B/TIBIEGQ04Hy3vbxNpLxQ25GnGqIGin284jTYD1q1BPhhcvu+qPVk0JxVtJSFVGa9gSCkxlF34/H2oEI5t4nVDVa2gw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742678974; c=relaxed/simple; bh=QmuP65u4nb3I9JiKOxacK6Bp3L3f8SeYyuwIGPsz8sE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PIj1VNp/tJL82V1QtxBpzw2Sr/y4a5oyoEF437cuye92d3Q9qnQKmIKcRg3/M/pVWhJLV/RSF3+MtmaHvuuaWXqOSPYnG2s4uQFLJW/Y6H/L1bRqGP05b4R3s4WIhH3CQbs3JgeSD7DV9Qc3CZEGmZy1ZfEm6N5bK3f9NoB+FJ8= 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=dmitry.osipenko@collabora.com header.b=hT9MwIsz; 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=dmitry.osipenko@collabora.com header.b="hT9MwIsz" ARC-Seal: i=1; a=rsa-sha256; t=1742678949; cv=none; d=zohomail.com; s=zohoarc; b=ZQEjg65LHK6Hyre+clODy/kFVAnhUEUtGGSwtd+zeP9DbhjsjlqeKfWgIwG1woLtAcOh2bu1Qz94hoktsRcPf0MhvOsf1LJmOBP6n9D3Ylvil8oOi0fXHI6wA8ihwEAFk2HPh8xjCB+u3vwAWGHTAYOZ6/84GB7TK3LqmMZnEk0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1742678949; 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=LjVCx4HPPPjAEOEwlwwb+wxeXy1KGr2YaLHwamK6ixM=; b=QSk7u5w9KdDHv8TW3fWo6g/xnHBea5Z3Y3eSz4/1GMMZxDSRZZNHeEkLDflBg19LxPyE8Piinq0OL3amC3pw4p/ZES3RE65Ea/i8gOXYV/KL+XJYBcYFkPfT9NKcp+WfHyYmzgcCFmJ179NH7uXk7SHVCVMHbus7ktqTUktVXFQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=dmitry.osipenko@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1742678949; s=zohomail; d=collabora.com; i=dmitry.osipenko@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=LjVCx4HPPPjAEOEwlwwb+wxeXy1KGr2YaLHwamK6ixM=; b=hT9MwIszhr4rCxxqak3lNcpOYbqE58R0IkHOlXOFSB9SZ1z3GKFt6J7qLSIM0scH JxNZ+Qtng4EfxDxPPb/OJ9sKBPA40hF0YDuUenvbLtRVDLVu6B9F4KrGMY8iUS6oUfu kZGlj/gF2SM6oSkeKIA9rDmL2kGqk8gRIIyFtkWw= Received: by mx.zohomail.com with SMTPS id 1742678949231263.8352177897817; Sat, 22 Mar 2025 14:29:09 -0700 (PDT) From: Dmitry Osipenko To: David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , =?UTF-8?q?Christian=20K=C3=B6nig?= , Gerd Hoffmann , Qiang Yu , Steven Price , Boris Brezillon , Frank Binns , Matt Coster Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, kernel@collabora.com Subject: [PATCH v20 01/10] drm/gem: Change locked/unlocked postfix of drm_gem_v/unmap() function names Date: Sun, 23 Mar 2025 00:25:59 +0300 Message-ID: <20250322212608.40511-2-dmitry.osipenko@collabora.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250322212608.40511-1-dmitry.osipenko@collabora.com> References: <20250322212608.40511-1-dmitry.osipenko@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 X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" Make drm/gem API function names consistent by having locked function use the _locked postfix in the name, while the unlocked variants don't use the _unlocked postfix. Rename drm_gem_v/unmap() function names to make them consistent with the rest of the API functions. Acked-by: Maxime Ripard Reviewed-by: Boris Brezillon Suggested-by: Boris Brezillon Signed-off-by: Dmitry Osipenko Acked-by: Thomas Zimmermann --- drivers/gpu/drm/drm_client.c | 10 +++++----- drivers/gpu/drm/drm_gem.c | 20 ++++++++++---------- drivers/gpu/drm/drm_gem_framebuffer_helper.c | 6 +++--- drivers/gpu/drm/drm_internal.h | 4 ++-- drivers/gpu/drm/drm_prime.c | 4 ++-- drivers/gpu/drm/lima/lima_sched.c | 4 ++-- drivers/gpu/drm/panfrost/panfrost_dump.c | 4 ++-- drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 6 +++--- drivers/gpu/drm/panthor/panthor_gem.h | 4 ++-- drivers/gpu/drm/panthor/panthor_sched.c | 4 ++-- include/drm/drm_gem.h | 4 ++-- 11 files changed, 35 insertions(+), 35 deletions(-) diff --git a/drivers/gpu/drm/drm_client.c b/drivers/gpu/drm/drm_client.c index 549b28a5918c..f1de7faf9fb4 100644 --- a/drivers/gpu/drm/drm_client.c +++ b/drivers/gpu/drm/drm_client.c @@ -174,7 +174,7 @@ EXPORT_SYMBOL(drm_client_release); static void drm_client_buffer_delete(struct drm_client_buffer *buffer) { if (buffer->gem) { - drm_gem_vunmap_unlocked(buffer->gem, &buffer->map); + drm_gem_vunmap(buffer->gem, &buffer->map); drm_gem_object_put(buffer->gem); } =20 @@ -252,7 +252,7 @@ int drm_client_buffer_vmap_local(struct drm_client_buff= er *buffer, =20 drm_gem_lock(gem); =20 - ret =3D drm_gem_vmap(gem, map); + ret =3D drm_gem_vmap_locked(gem, map); if (ret) goto err_drm_gem_vmap_unlocked; *map_copy =3D *map; @@ -278,7 +278,7 @@ void drm_client_buffer_vunmap_local(struct drm_client_b= uffer *buffer) struct drm_gem_object *gem =3D buffer->gem; struct iosys_map *map =3D &buffer->map; =20 - drm_gem_vunmap(gem, map); + drm_gem_vunmap_locked(gem, map); drm_gem_unlock(gem); } EXPORT_SYMBOL(drm_client_buffer_vunmap_local); @@ -316,7 +316,7 @@ drm_client_buffer_vmap(struct drm_client_buffer *buffer, ret =3D drm_gem_pin_locked(gem); if (ret) goto err_drm_gem_pin_locked; - ret =3D drm_gem_vmap(gem, map); + ret =3D drm_gem_vmap_locked(gem, map); if (ret) goto err_drm_gem_vmap; =20 @@ -348,7 +348,7 @@ void drm_client_buffer_vunmap(struct drm_client_buffer = *buffer) struct iosys_map *map =3D &buffer->map; =20 drm_gem_lock(gem); - drm_gem_vunmap(gem, map); + drm_gem_vunmap_locked(gem, map); drm_gem_unpin_locked(gem); drm_gem_unlock(gem); } diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c index c6240bab3fa5..27778e5ce0c0 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c @@ -1216,7 +1216,7 @@ void drm_gem_unpin(struct drm_gem_object *obj) dma_resv_unlock(obj->resv); } =20 -int drm_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map) +int drm_gem_vmap_locked(struct drm_gem_object *obj, struct iosys_map *map) { int ret; =20 @@ -1233,9 +1233,9 @@ int drm_gem_vmap(struct drm_gem_object *obj, struct i= osys_map *map) =20 return 0; } -EXPORT_SYMBOL(drm_gem_vmap); +EXPORT_SYMBOL(drm_gem_vmap_locked); =20 -void drm_gem_vunmap(struct drm_gem_object *obj, struct iosys_map *map) +void drm_gem_vunmap_locked(struct drm_gem_object *obj, struct iosys_map *m= ap) { dma_resv_assert_held(obj->resv); =20 @@ -1248,7 +1248,7 @@ void drm_gem_vunmap(struct drm_gem_object *obj, struc= t iosys_map *map) /* Always set the mapping to NULL. Callers may rely on this. */ iosys_map_clear(map); } -EXPORT_SYMBOL(drm_gem_vunmap); +EXPORT_SYMBOL(drm_gem_vunmap_locked); =20 void drm_gem_lock(struct drm_gem_object *obj) { @@ -1262,25 +1262,25 @@ void drm_gem_unlock(struct drm_gem_object *obj) } EXPORT_SYMBOL(drm_gem_unlock); =20 -int drm_gem_vmap_unlocked(struct drm_gem_object *obj, struct iosys_map *ma= p) +int drm_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map) { int ret; =20 dma_resv_lock(obj->resv, NULL); - ret =3D drm_gem_vmap(obj, map); + ret =3D drm_gem_vmap_locked(obj, map); dma_resv_unlock(obj->resv); =20 return ret; } -EXPORT_SYMBOL(drm_gem_vmap_unlocked); +EXPORT_SYMBOL(drm_gem_vmap); =20 -void drm_gem_vunmap_unlocked(struct drm_gem_object *obj, struct iosys_map = *map) +void drm_gem_vunmap(struct drm_gem_object *obj, struct iosys_map *map) { dma_resv_lock(obj->resv, NULL); - drm_gem_vunmap(obj, map); + drm_gem_vunmap_locked(obj, map); dma_resv_unlock(obj->resv); } -EXPORT_SYMBOL(drm_gem_vunmap_unlocked); +EXPORT_SYMBOL(drm_gem_vunmap); =20 /** * drm_gem_lock_reservations - Sets up the ww context and acquires diff --git a/drivers/gpu/drm/drm_gem_framebuffer_helper.c b/drivers/gpu/drm= /drm_gem_framebuffer_helper.c index 0fbeb686e561..6f72e7a0f427 100644 --- a/drivers/gpu/drm/drm_gem_framebuffer_helper.c +++ b/drivers/gpu/drm/drm_gem_framebuffer_helper.c @@ -362,7 +362,7 @@ int drm_gem_fb_vmap(struct drm_framebuffer *fb, struct = iosys_map *map, ret =3D -EINVAL; goto err_drm_gem_vunmap; } - ret =3D drm_gem_vmap_unlocked(obj, &map[i]); + ret =3D drm_gem_vmap(obj, &map[i]); if (ret) goto err_drm_gem_vunmap; } @@ -384,7 +384,7 @@ int drm_gem_fb_vmap(struct drm_framebuffer *fb, struct = iosys_map *map, obj =3D drm_gem_fb_get_obj(fb, i); if (!obj) continue; - drm_gem_vunmap_unlocked(obj, &map[i]); + drm_gem_vunmap(obj, &map[i]); } return ret; } @@ -411,7 +411,7 @@ void drm_gem_fb_vunmap(struct drm_framebuffer *fb, stru= ct iosys_map *map) continue; if (iosys_map_is_null(&map[i])) continue; - drm_gem_vunmap_unlocked(obj, &map[i]); + drm_gem_vunmap(obj, &map[i]); } } EXPORT_SYMBOL(drm_gem_fb_vunmap); diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h index b2b6a8e49dda..e44f28fd81d3 100644 --- a/drivers/gpu/drm/drm_internal.h +++ b/drivers/gpu/drm/drm_internal.h @@ -179,8 +179,8 @@ int drm_gem_pin_locked(struct drm_gem_object *obj); void drm_gem_unpin_locked(struct drm_gem_object *obj); int drm_gem_pin(struct drm_gem_object *obj); void drm_gem_unpin(struct drm_gem_object *obj); -int drm_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map); -void drm_gem_vunmap(struct drm_gem_object *obj, struct iosys_map *map); +int drm_gem_vmap_locked(struct drm_gem_object *obj, struct iosys_map *map); +void drm_gem_vunmap_locked(struct drm_gem_object *obj, struct iosys_map *m= ap); =20 /* drm_debugfs.c drm_debugfs_crc.c */ #if defined(CONFIG_DEBUG_FS) diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c index 4b8c6075e46a..d828502268b8 100644 --- a/drivers/gpu/drm/drm_prime.c +++ b/drivers/gpu/drm/drm_prime.c @@ -707,7 +707,7 @@ int drm_gem_dmabuf_vmap(struct dma_buf *dma_buf, struct= iosys_map *map) { struct drm_gem_object *obj =3D dma_buf->priv; =20 - return drm_gem_vmap(obj, map); + return drm_gem_vmap_locked(obj, map); } EXPORT_SYMBOL(drm_gem_dmabuf_vmap); =20 @@ -723,7 +723,7 @@ void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, str= uct iosys_map *map) { struct drm_gem_object *obj =3D dma_buf->priv; =20 - drm_gem_vunmap(obj, map); + drm_gem_vunmap_locked(obj, map); } EXPORT_SYMBOL(drm_gem_dmabuf_vunmap); =20 diff --git a/drivers/gpu/drm/lima/lima_sched.c b/drivers/gpu/drm/lima/lima_= sched.c index 825135a26aa4..7934098e651b 100644 --- a/drivers/gpu/drm/lima/lima_sched.c +++ b/drivers/gpu/drm/lima/lima_sched.c @@ -371,7 +371,7 @@ static void lima_sched_build_error_task_list(struct lim= a_sched_task *task) } else { buffer_chunk->size =3D lima_bo_size(bo); =20 - ret =3D drm_gem_vmap_unlocked(&bo->base.base, &map); + ret =3D drm_gem_vmap(&bo->base.base, &map); if (ret) { kvfree(et); goto out; @@ -379,7 +379,7 @@ static void lima_sched_build_error_task_list(struct lim= a_sched_task *task) =20 memcpy(buffer_chunk + 1, map.vaddr, buffer_chunk->size); =20 - drm_gem_vunmap_unlocked(&bo->base.base, &map); + drm_gem_vunmap(&bo->base.base, &map); } =20 buffer_chunk =3D (void *)(buffer_chunk + 1) + buffer_chunk->size; diff --git a/drivers/gpu/drm/panfrost/panfrost_dump.c b/drivers/gpu/drm/pan= frost/panfrost_dump.c index 47751302f1bc..4042afe2fbf4 100644 --- a/drivers/gpu/drm/panfrost/panfrost_dump.c +++ b/drivers/gpu/drm/panfrost/panfrost_dump.c @@ -209,7 +209,7 @@ void panfrost_core_dump(struct panfrost_job *job) goto dump_header; } =20 - ret =3D drm_gem_vmap_unlocked(&bo->base.base, &map); + ret =3D drm_gem_vmap(&bo->base.base, &map); if (ret) { dev_err(pfdev->dev, "Panfrost Dump: couldn't map Buffer Object\n"); iter.hdr->bomap.valid =3D 0; @@ -228,7 +228,7 @@ void panfrost_core_dump(struct panfrost_job *job) vaddr =3D map.vaddr; memcpy(iter.data, vaddr, bo->base.base.size); =20 - drm_gem_vunmap_unlocked(&bo->base.base, &map); + drm_gem_vunmap(&bo->base.base, &map); =20 iter.hdr->bomap.valid =3D 1; =20 diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c b/drivers/gpu/drm/= panfrost/panfrost_perfcnt.c index ba9b6e2b2636..52befead08c6 100644 --- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c +++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c @@ -106,7 +106,7 @@ static int panfrost_perfcnt_enable_locked(struct panfro= st_device *pfdev, goto err_close_bo; } =20 - ret =3D drm_gem_vmap_unlocked(&bo->base, &map); + ret =3D drm_gem_vmap(&bo->base, &map); if (ret) goto err_put_mapping; perfcnt->buf =3D map.vaddr; @@ -165,7 +165,7 @@ static int panfrost_perfcnt_enable_locked(struct panfro= st_device *pfdev, return 0; =20 err_vunmap: - drm_gem_vunmap_unlocked(&bo->base, &map); + drm_gem_vunmap(&bo->base, &map); err_put_mapping: panfrost_gem_mapping_put(perfcnt->mapping); err_close_bo: @@ -195,7 +195,7 @@ static int panfrost_perfcnt_disable_locked(struct panfr= ost_device *pfdev, GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_OFF)); =20 perfcnt->user =3D NULL; - drm_gem_vunmap_unlocked(&perfcnt->mapping->obj->base.base, &map); + drm_gem_vunmap(&perfcnt->mapping->obj->base.base, &map); perfcnt->buf =3D NULL; panfrost_gem_close(&perfcnt->mapping->obj->base.base, file_priv); panfrost_mmu_as_put(pfdev, perfcnt->mapping->mmu); diff --git a/drivers/gpu/drm/panthor/panthor_gem.h b/drivers/gpu/drm/pantho= r/panthor_gem.h index 5749ef2ebe03..1a363bb814f4 100644 --- a/drivers/gpu/drm/panthor/panthor_gem.h +++ b/drivers/gpu/drm/panthor/panthor_gem.h @@ -112,7 +112,7 @@ panthor_kernel_bo_vmap(struct panthor_kernel_bo *bo) if (bo->kmap) return 0; =20 - ret =3D drm_gem_vmap_unlocked(bo->obj, &map); + ret =3D drm_gem_vmap(bo->obj, &map); if (ret) return ret; =20 @@ -126,7 +126,7 @@ panthor_kernel_bo_vunmap(struct panthor_kernel_bo *bo) if (bo->kmap) { struct iosys_map map =3D IOSYS_MAP_INIT_VADDR(bo->kmap); =20 - drm_gem_vunmap_unlocked(bo->obj, &map); + drm_gem_vunmap(bo->obj, &map); bo->kmap =3D NULL; } } diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/pant= hor/panthor_sched.c index 4d31d1967716..446ec780eb4a 100644 --- a/drivers/gpu/drm/panthor/panthor_sched.c +++ b/drivers/gpu/drm/panthor/panthor_sched.c @@ -840,7 +840,7 @@ panthor_queue_put_syncwait_obj(struct panthor_queue *qu= eue) if (queue->syncwait.kmap) { struct iosys_map map =3D IOSYS_MAP_INIT_VADDR(queue->syncwait.kmap); =20 - drm_gem_vunmap_unlocked(queue->syncwait.obj, &map); + drm_gem_vunmap(queue->syncwait.obj, &map); queue->syncwait.kmap =3D NULL; } =20 @@ -866,7 +866,7 @@ panthor_queue_get_syncwait_obj(struct panthor_group *gr= oup, struct panthor_queue goto err_put_syncwait_obj; =20 queue->syncwait.obj =3D &bo->base.base; - ret =3D drm_gem_vmap_unlocked(queue->syncwait.obj, &map); + ret =3D drm_gem_vmap(queue->syncwait.obj, &map); if (drm_WARN_ON(&ptdev->base, ret)) goto err_put_syncwait_obj; =20 diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h index 2bf893eabb4b..13c312ca07ae 100644 --- a/include/drm/drm_gem.h +++ b/include/drm/drm_gem.h @@ -537,8 +537,8 @@ void drm_gem_put_pages(struct drm_gem_object *obj, stru= ct page **pages, void drm_gem_lock(struct drm_gem_object *obj); void drm_gem_unlock(struct drm_gem_object *obj); =20 -int drm_gem_vmap_unlocked(struct drm_gem_object *obj, struct iosys_map *ma= p); -void drm_gem_vunmap_unlocked(struct drm_gem_object *obj, struct iosys_map = *map); +int drm_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map); +void drm_gem_vunmap(struct drm_gem_object *obj, struct iosys_map *map); =20 int drm_gem_objects_lookup(struct drm_file *filp, void __user *bo_handles, int count, struct drm_gem_object ***objs_out); --=20 2.49.0 From nobody Tue Feb 10 02:58:45 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 7447F235340 for ; Sat, 22 Mar 2025 21:29:34 +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=1742678979; cv=pass; b=oF7LI7YlkBGaEy11qtHNNR90omSk9VYdUv1psU1pitXsbfR0UDBQ7X+1YKAoNAD2BA+rzZjQtFyd6dtDa/jagVzMuF7fNtbDaO5fobE1jL+la5/H1C2nAvWcM7cF9vq0PZaHYgTkwHbCHmYJBHVOrpCyYlvlD2ewyZw10HiUP6w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742678979; c=relaxed/simple; bh=C5mh2blTq89it3k/qfDOOnCSPYBFosnK+Kzh2mMEpao=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HyPSGPdr5qVM1rTv+lXPleRzoTa9GRyU2EZ5jmIivGdtCHtDnRBXBl6XJG5FR820qSupAwa2gX2ddLKPf9mh5jDWfJIl8IPhm5wht6TiD2/QwyNAP1xmINMJC+c+0k0tKaT+DS+P+W72U9ZlcP0an+Gyd9Vqej/H54vZrBeXZOU= 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=dmitry.osipenko@collabora.com header.b=Z3LtJmV1; 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=dmitry.osipenko@collabora.com header.b="Z3LtJmV1" ARC-Seal: i=1; a=rsa-sha256; t=1742678955; cv=none; d=zohomail.com; s=zohoarc; b=juaxAJCrvrgSeb48itlacxngBqXwLrekvexnPpvTbbu7R8QTqwhtr5zawhmjfbKxWTyykbx6oKcHxDuHdjWE+04cg5krCppUy1RHUM7Htf4C9gm8SRn+8ATNq2Zk+VGnKRfE3snUVU/M9sVVxP4Sa8Er0ijoHSiGbMK9nBa8NmM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1742678955; 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=D8skzeqwalBI3wYRwszZe+VNe6TDcBK3mAxl50TBKew=; b=grsGYVO2TEDWJLi+expl4QKgARf+MdWS5heR+R8nnvPo6Pe/NOaQ42E/ey4eRWMnChVQ4OuF+ap4hLGMJsfSGLri6CDdKgg5oODmhmna/+FO8ZB6r9TpmIdAS7lbSXadSWKJH/uiL7OcTEyjMgZ81ozF/uRgRHLbrqxput21j64= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=dmitry.osipenko@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1742678955; s=zohomail; d=collabora.com; i=dmitry.osipenko@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=D8skzeqwalBI3wYRwszZe+VNe6TDcBK3mAxl50TBKew=; b=Z3LtJmV1Duqg51kpfxHWZuqIMGJnLXbhss9hp6cHm7HfwA1OC/JJ0kagavWCG97g oe0LY9LxI9fnBL4EURSRotfVdVeE077avC2FGSrjzZYjkGv44xj+Z+D7GSRToTPWmLV unPbTZwBzR5Atrb6z1FkAjs8foxjWcDSRMzEPeHA= Received: by mx.zohomail.com with SMTPS id 1742678953019135.32721424030217; Sat, 22 Mar 2025 14:29:13 -0700 (PDT) From: Dmitry Osipenko To: David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , =?UTF-8?q?Christian=20K=C3=B6nig?= , Gerd Hoffmann , Qiang Yu , Steven Price , Boris Brezillon , Frank Binns , Matt Coster Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, kernel@collabora.com Subject: [PATCH v20 02/10] drm/gem: Add _locked postfix to functions that have unlocked counterpart Date: Sun, 23 Mar 2025 00:26:00 +0300 Message-ID: <20250322212608.40511-3-dmitry.osipenko@collabora.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250322212608.40511-1-dmitry.osipenko@collabora.com> References: <20250322212608.40511-1-dmitry.osipenko@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 X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" Add _locked postfix to drm_gem functions that have unlocked counterpart functions to make GEM functions naming more consistent and intuitive in regards to the locking requirements. Acked-by: Maxime Ripard Reviewed-by: Boris Brezillon Suggested-by: Boris Brezillon Signed-off-by: Dmitry Osipenko Acked-by: Thomas Zimmermann --- drivers/gpu/drm/drm_gem.c | 6 +++--- include/drm/drm_gem.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c index 27778e5ce0c0..1e659d2660f7 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c @@ -1543,10 +1543,10 @@ drm_gem_lru_scan(struct drm_gem_lru *lru, EXPORT_SYMBOL(drm_gem_lru_scan); =20 /** - * drm_gem_evict - helper to evict backing pages for a GEM object + * drm_gem_evict_locked - helper to evict backing pages for a GEM object * @obj: obj in question */ -int drm_gem_evict(struct drm_gem_object *obj) +int drm_gem_evict_locked(struct drm_gem_object *obj) { dma_resv_assert_held(obj->resv); =20 @@ -1558,4 +1558,4 @@ int drm_gem_evict(struct drm_gem_object *obj) =20 return 0; } -EXPORT_SYMBOL(drm_gem_evict); +EXPORT_SYMBOL(drm_gem_evict_locked); diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h index 13c312ca07ae..43cf3c2c7ca0 100644 --- a/include/drm/drm_gem.h +++ b/include/drm/drm_gem.h @@ -561,7 +561,7 @@ unsigned long drm_gem_lru_scan(struct drm_gem_lru *lru, unsigned long *remaining, bool (*shrink)(struct drm_gem_object *obj)); =20 -int drm_gem_evict(struct drm_gem_object *obj); +int drm_gem_evict_locked(struct drm_gem_object *obj); =20 /** * drm_gem_object_is_shared_for_memory_stats - helper for shared memory st= ats --=20 2.49.0 From nobody Tue Feb 10 02:58:45 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 CDD2B23535E for ; Sat, 22 Mar 2025 21:29:34 +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=1742678976; cv=pass; b=VFHNdNXpZaHVbGan+a89rtxjrbnkOgew2IwGytQ6ku5gT1s8LObYNpQJBKIjydgUvq/PaK8/nz8r9T1KtzaCl0zSVYrNJRgHrKiX4gg44s2XAyM13wIO+yTitskEMV5tTaq60A5W5KaHaGKjmjbk4stCTAERmCZbjJejugt1a0c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742678976; c=relaxed/simple; bh=Uh9RPQ87tYeVB1bi8SmQ5YEdI3HjH7dnQ/k0r4MKxtg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RHAavyqKhpfAQSRGVttddDfmlgj66KaSyWE7qomlfLfpE73/KEdiGNRw8zZjXDSJk8RHeaugtV4qqRpQoXPWt1FJktcZ7L3Kou6CHzSTreXH2Pmh5omuXjPFXxD+S+3ii7AcSOrh+tSJtJ4dg4e6oel23YIuFuScfTedDMjWOrI= 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=dmitry.osipenko@collabora.com header.b=cJX8QWM2; 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=dmitry.osipenko@collabora.com header.b="cJX8QWM2" ARC-Seal: i=1; a=rsa-sha256; t=1742678957; cv=none; d=zohomail.com; s=zohoarc; b=PxmBOtoUQ1rdT24uVCjGSSfEHPsdKqi2aGZFFk1fnQgmup2R5/mxjL6vNn7+k76Jbt8pp8o9FfTIaNnzRYWDQ4I+Wbavqy89VryRuy7Nn9d+yD32ovpQ4rOtBzJO6jf4oYMvH/BfKzUpLVTIwBILrnmdTeOcuJHF7WoivAlgmOE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1742678957; 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=fdyz8/DZzJvpb8TDk4Fb/UsrzBg8Xohwoz871V+3KR4=; b=Kk5f9XbQFmuC3CW3fnM9xE0uUf5+J6hG8u3S7S+8PzLxKvWmxpQQJ5/VUDn2e5orJmz1sLYkSoDDxlg2DBLxbsX+jmVe+drLWSp0F2KocFPPIwdP8hIDzKJvWAx7OC5BsbeedEW/gmC0RJEEaXEzP2/nPOqbwkF/rPZEt85vc9E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=dmitry.osipenko@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1742678957; s=zohomail; d=collabora.com; i=dmitry.osipenko@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=fdyz8/DZzJvpb8TDk4Fb/UsrzBg8Xohwoz871V+3KR4=; b=cJX8QWM2khneIW0/ZGr/a4js75Fvi903tqM5LrGDKlxr+MEiVS3y11bGLoBJu6JQ O6PsfQnHges5OnWNeuCpoUwoBu2lUyVYFzjzRgxXBRczC8+MPcXUbE9S45nmpnHhL82 DKN1pIORw7EXgp1hFlYVAqKnsMutSwRUM8gvW558= Received: by mx.zohomail.com with SMTPS id 1742678957017363.1392509416396; Sat, 22 Mar 2025 14:29:17 -0700 (PDT) From: Dmitry Osipenko To: David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , =?UTF-8?q?Christian=20K=C3=B6nig?= , Gerd Hoffmann , Qiang Yu , Steven Price , Boris Brezillon , Frank Binns , Matt Coster Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, kernel@collabora.com Subject: [PATCH v20 03/10] drm/gem: Document locking rule of vmap and evict callbacks Date: Sun, 23 Mar 2025 00:26:01 +0300 Message-ID: <20250322212608.40511-4-dmitry.osipenko@collabora.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250322212608.40511-1-dmitry.osipenko@collabora.com> References: <20250322212608.40511-1-dmitry.osipenko@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 X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" The vmap/vunmap/evict GEM callbacks are always invoked with a held GEM's reservation lock. Document this locking rule for clarity. Reviewed-by: Boris Brezillon Signed-off-by: Dmitry Osipenko Acked-by: Thomas Zimmermann --- include/drm/drm_gem.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h index 43cf3c2c7ca0..9b71f7a9f3f8 100644 --- a/include/drm/drm_gem.h +++ b/include/drm/drm_gem.h @@ -159,7 +159,8 @@ struct drm_gem_object_funcs { * @vmap: * * Returns a virtual address for the buffer. Used by the - * drm_gem_dmabuf_vmap() helper. + * drm_gem_dmabuf_vmap() helper. Called with a held GEM reservation + * lock. * * This callback is optional. */ @@ -169,7 +170,8 @@ struct drm_gem_object_funcs { * @vunmap: * * Releases the address previously returned by @vmap. Used by the - * drm_gem_dmabuf_vunmap() helper. + * drm_gem_dmabuf_vunmap() helper. Called with a held GEM reservation + * lock. * * This callback is optional. */ @@ -192,7 +194,8 @@ struct drm_gem_object_funcs { * @evict: * * Evicts gem object out from memory. Used by the drm_gem_object_evict() - * helper. Returns 0 on success, -errno otherwise. + * helper. Returns 0 on success, -errno otherwise. Called with a held + * GEM reservation lock. * * This callback is optional. */ --=20 2.49.0 From nobody Tue Feb 10 02:58:45 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 281A1236445 for ; Sat, 22 Mar 2025 21:29: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=1742678983; cv=pass; b=V9/x4bUnTt9/l8JaRTfeVJpVAOWXLtTzg4S0cQC+QZRdRQdj7zdFXm2YdlyBKsVaA0qvY3rrUxz5RqGatJO/Fr3ie0Vascv2LlwjrYb8rM8JcR7Esf3rKgoP35A9IFGua17tzCCorcBh6XAy23hk711RgEq5i26SuaUsKHRefAQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742678983; c=relaxed/simple; bh=wJUw8CEwCBpd8/n5oMSDfVTJeI//ksdz1lICtY3Qxk0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fQB0GkMoa17J5dLn9BTeNtd6o6Wr55hjUoSbH3B5ov9XXfO6jB00nWvygUESkOeyxs3rLnnpy96Dkd9Ls3GN6c3BsCpIDKBy4LxxiIgQpuG/kLoZ1rduZsuErXibHSg4QHwwizMHWAb6jBW4yLWQZis6V/5b/4ySi411MTRCzkM= 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=dmitry.osipenko@collabora.com header.b=XX1OXok4; 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=dmitry.osipenko@collabora.com header.b="XX1OXok4" ARC-Seal: i=1; a=rsa-sha256; t=1742678961; cv=none; d=zohomail.com; s=zohoarc; b=OpEbS8G9gvCiSuf6FMNzU1NhcNS67IfkUCfl8COpJRyE1LFPl2VGyAIFnAo+F8uqVUcW6fSvltqO5cBGPuDssV2wI0z6AT3x5kZ5wdyIUDtLSjCFFYaaGwLn+Sfpi3GaWYGJrTTLjbXvwG2h+sF/4KvqFbB6LNBzmIwqabVW7Jw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1742678961; 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=eEUouV2acFUuLu+TzNveWrlkZ7fzrOon+eQdIQR+dqo=; b=eArLIXI3dJgdZU4IdcfeIH0CKBFAP6wXiXPYJZTVqs3D1CdQs2IV6h1eb22x1hc7c44gzmPiU/kzUQ1s5Kzv59gXj+vCwhrSqVJH4ntlx4r60LwKBx3ASsK+RJwWqRCIvaURZWsIv/rwRdBEQ7IR03Zao2+IxFUsEg5E5JYC0EU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=dmitry.osipenko@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1742678961; s=zohomail; d=collabora.com; i=dmitry.osipenko@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=eEUouV2acFUuLu+TzNveWrlkZ7fzrOon+eQdIQR+dqo=; b=XX1OXok44GcbZ+ZUwiZt84HVWMqXcsbG5MuTW4OBatIYYDzZCDKB2EpqALFqn654 rFoxmNZ5stRMnn5I0wxqpHqrF35M+Zhssky4BKn8s7p6No+ZOoarWh/igIAjWmPSCT7 /PiNhBu3+2eKwwCtYpt0CQC+oJUbArH0MkaUo8gQ= Received: by mx.zohomail.com with SMTPS id 1742678960850190.5623409219578; Sat, 22 Mar 2025 14:29:20 -0700 (PDT) From: Dmitry Osipenko To: David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , =?UTF-8?q?Christian=20K=C3=B6nig?= , Gerd Hoffmann , Qiang Yu , Steven Price , Boris Brezillon , Frank Binns , Matt Coster Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, kernel@collabora.com Subject: [PATCH v20 04/10] drm/shmem-helper: Make all exported symbols GPL Date: Sun, 23 Mar 2025 00:26:02 +0300 Message-ID: <20250322212608.40511-5-dmitry.osipenko@collabora.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250322212608.40511-1-dmitry.osipenko@collabora.com> References: <20250322212608.40511-1-dmitry.osipenko@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 X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" Make all drm-shmem exported symbols GPL to make them consistent with the rest of drm-shmem symbols. Acked-by: Maxime Ripard Reviewed-by: Boris Brezillon Signed-off-by: Dmitry Osipenko Acked-by: Thomas Zimmermann --- drivers/gpu/drm/drm_gem_shmem_helper.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_g= em_shmem_helper.c index d99dee67353a..98c68999d61a 100644 --- a/drivers/gpu/drm/drm_gem_shmem_helper.c +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c @@ -247,7 +247,7 @@ void drm_gem_shmem_put_pages(struct drm_gem_shmem_objec= t *shmem) shmem->pages_mark_accessed_on_put); shmem->pages =3D NULL; } -EXPORT_SYMBOL(drm_gem_shmem_put_pages); +EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages); =20 int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) { @@ -296,7 +296,7 @@ int drm_gem_shmem_pin(struct drm_gem_shmem_object *shme= m) =20 return ret; } -EXPORT_SYMBOL(drm_gem_shmem_pin); +EXPORT_SYMBOL_GPL(drm_gem_shmem_pin); =20 /** * drm_gem_shmem_unpin - Unpin backing pages for a shmem GEM object @@ -315,7 +315,7 @@ void drm_gem_shmem_unpin(struct drm_gem_shmem_object *s= hmem) drm_gem_shmem_unpin_locked(shmem); dma_resv_unlock(shmem->base.resv); } -EXPORT_SYMBOL(drm_gem_shmem_unpin); +EXPORT_SYMBOL_GPL(drm_gem_shmem_unpin); =20 /* * drm_gem_shmem_vmap - Create a virtual mapping for a shmem GEM object @@ -385,7 +385,7 @@ int drm_gem_shmem_vmap(struct drm_gem_shmem_object *shm= em, =20 return ret; } -EXPORT_SYMBOL(drm_gem_shmem_vmap); +EXPORT_SYMBOL_GPL(drm_gem_shmem_vmap); =20 /* * drm_gem_shmem_vunmap - Unmap a virtual mapping for a shmem GEM object @@ -421,7 +421,7 @@ void drm_gem_shmem_vunmap(struct drm_gem_shmem_object *= shmem, =20 shmem->vaddr =3D NULL; } -EXPORT_SYMBOL(drm_gem_shmem_vunmap); +EXPORT_SYMBOL_GPL(drm_gem_shmem_vunmap); =20 static int drm_gem_shmem_create_with_handle(struct drm_file *file_priv, @@ -460,7 +460,7 @@ int drm_gem_shmem_madvise(struct drm_gem_shmem_object *= shmem, int madv) =20 return (madv >=3D 0); } -EXPORT_SYMBOL(drm_gem_shmem_madvise); +EXPORT_SYMBOL_GPL(drm_gem_shmem_madvise); =20 void drm_gem_shmem_purge(struct drm_gem_shmem_object *shmem) { @@ -492,7 +492,7 @@ void drm_gem_shmem_purge(struct drm_gem_shmem_object *s= hmem) =20 invalidate_mapping_pages(file_inode(obj->filp)->i_mapping, 0, (loff_t)-1); } -EXPORT_SYMBOL(drm_gem_shmem_purge); +EXPORT_SYMBOL_GPL(drm_gem_shmem_purge); =20 /** * drm_gem_shmem_dumb_create - Create a dumb shmem buffer object @@ -670,7 +670,7 @@ void drm_gem_shmem_print_info(const struct drm_gem_shme= m_object *shmem, drm_printf_indent(p, indent, "vmap_use_count=3D%u\n", shmem->vmap_use_cou= nt); drm_printf_indent(p, indent, "vaddr=3D%p\n", shmem->vaddr); } -EXPORT_SYMBOL(drm_gem_shmem_print_info); +EXPORT_SYMBOL_GPL(drm_gem_shmem_print_info); =20 /** * drm_gem_shmem_get_sg_table - Provide a scatter/gather table of pinned --=20 2.49.0 From nobody Tue Feb 10 02:58:45 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 EAFCA235358 for ; Sat, 22 Mar 2025 21:29:50 +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=1742678993; cv=pass; b=Q6da5eUVcqdfeys0GEmC0SWMqigxd0LmlGk1gDxV67RmlPysvuQqlWVurxV7dIo/Ksc0nRDiIidkyHBOfJ0l7bg8Rcdgc4E51ED73/UXmZfhM9TcGlD44N6GNUV4YcBcfYVzlH3QPL6Fwp4WQLWEBMPc/zXwCqjiYJQZqtSsrvg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742678993; c=relaxed/simple; bh=wUcYnZ09mlXPomCaTJWBL0iqmv5dlLlp9CNQWefkZbA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hsdphWLGoAb5lGHgSdyr1pasKMjgMnqI1X2768f4gm1CkKwtljZrqJRGxgwmW3cpF/rDZQBtDwLD3ZJwETsKZMSxwJNFa7DOWzTIGYIZqOfi2W1CbqVPGzODTQVlSCsrKQilmQ/ifJtRHxLUr8hvOIi1YCARPJKsb3141hK6hPg= 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=dmitry.osipenko@collabora.com header.b=dvyh1YQB; 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=dmitry.osipenko@collabora.com header.b="dvyh1YQB" ARC-Seal: i=1; a=rsa-sha256; t=1742678968; cv=none; d=zohomail.com; s=zohoarc; b=VvCKR6ciA4Kx+jxfDPMFlLbTgE0Z1RV9du3vRnc+DlQcdsTXhvSIq/LnzV7tFxWwIiS6GTDxv0z9A5nsw3REz+u3H47td/wMVGBf+o9E3iMuaD2dRiIjD8+COLcIMOJZsooQxPQt0HZ2PZlnYSY7CYKGJA6i8NM5GUUFQPWy5J4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1742678968; 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=M0sBkkz3lYBoSysx65pr3fN2Xu4CsiH/ZoSHchjqjY8=; b=cGAPmwfGZ8snVwIEzj73IDKkzsjHutO/Ff6yFMxNcmvAuhdhdHYHMqwua3zbl+9CDHxZfihJcd5f0QM/PTjz95GFUn3ZEbgWkpegx8+SdtAe1OwH1ldJUrMvraYwMMeh0zYUxLFB0ZfxFDVhKn7ZjkBmVaxO5EcIk4M24Fl+hIc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=dmitry.osipenko@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1742678968; s=zohomail; d=collabora.com; i=dmitry.osipenko@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=M0sBkkz3lYBoSysx65pr3fN2Xu4CsiH/ZoSHchjqjY8=; b=dvyh1YQBRhZ9ZDm1F5jJjEFgA5KvmU8NtNvf5sRalY4nM0h1+202CL1LN3sOXOA0 3/bmLn0/AbsVj2bX8FeJ6St4cboF4hvAzRJG0BcxZz4fcXBG3VNHn0uw2VeDmUSE0nD Vf2eUDPN+li2TEViZGXKf2Uj6I9zUGmtnYizyvtw= Received: by mx.zohomail.com with SMTPS id 1742678964683431.752259690738; Sat, 22 Mar 2025 14:29:24 -0700 (PDT) From: Dmitry Osipenko To: David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , =?UTF-8?q?Christian=20K=C3=B6nig?= , Gerd Hoffmann , Qiang Yu , Steven Price , Boris Brezillon , Frank Binns , Matt Coster Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, kernel@collabora.com Subject: [PATCH v20 05/10] drm/shmem-helper: Refactor locked/unlocked functions Date: Sun, 23 Mar 2025 00:26:03 +0300 Message-ID: <20250322212608.40511-6-dmitry.osipenko@collabora.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250322212608.40511-1-dmitry.osipenko@collabora.com> References: <20250322212608.40511-1-dmitry.osipenko@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 X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" Add locked and remove unlocked postfixes from drm-shmem function names, making names consistent with the drm/gem core code. Reviewed-by: Boris Brezillon Suggested-by: Boris Brezillon Signed-off-by: Dmitry Osipenko Acked-by: Thomas Zimmermann --- drivers/gpu/drm/drm_gem_shmem_helper.c | 60 +++++++++---------- drivers/gpu/drm/imagination/pvr_gem.c | 4 +- drivers/gpu/drm/lima/lima_gem.c | 2 +- drivers/gpu/drm/panfrost/panfrost_drv.c | 2 +- .../gpu/drm/panfrost/panfrost_gem_shrinker.c | 2 +- drivers/gpu/drm/tests/drm_gem_shmem_test.c | 14 ++--- include/drm/drm_gem_shmem_helper.h | 28 ++++----- 7 files changed, 56 insertions(+), 56 deletions(-) diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_g= em_shmem_helper.c index 98c68999d61a..a9e35a46e72b 100644 --- a/drivers/gpu/drm/drm_gem_shmem_helper.c +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c @@ -174,7 +174,7 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *sh= mem) kfree(shmem->sgt); } if (shmem->pages) - drm_gem_shmem_put_pages(shmem); + drm_gem_shmem_put_pages_locked(shmem); =20 drm_WARN_ON(obj->dev, shmem->pages_use_count); =20 @@ -186,7 +186,7 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *sh= mem) } EXPORT_SYMBOL_GPL(drm_gem_shmem_free); =20 -static int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem) +static int drm_gem_shmem_get_pages_locked(struct drm_gem_shmem_object *shm= em) { struct drm_gem_object *obj =3D &shmem->base; struct page **pages; @@ -220,12 +220,12 @@ static int drm_gem_shmem_get_pages(struct drm_gem_shm= em_object *shmem) } =20 /* - * drm_gem_shmem_put_pages - Decrease use count on the backing pages for a= shmem GEM object + * drm_gem_shmem_put_pages_locked - Decrease use count on the backing page= s for a shmem GEM object * @shmem: shmem GEM object * * This function decreases the use count and puts the backing pages when u= se drops to zero. */ -void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem) +void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem) { struct drm_gem_object *obj =3D &shmem->base; =20 @@ -247,7 +247,7 @@ void drm_gem_shmem_put_pages(struct drm_gem_shmem_objec= t *shmem) shmem->pages_mark_accessed_on_put); shmem->pages =3D NULL; } -EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages); +EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages_locked); =20 int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) { @@ -257,7 +257,7 @@ int drm_gem_shmem_pin_locked(struct drm_gem_shmem_objec= t *shmem) =20 drm_WARN_ON(shmem->base.dev, drm_gem_is_imported(&shmem->base)); =20 - ret =3D drm_gem_shmem_get_pages(shmem); + ret =3D drm_gem_shmem_get_pages_locked(shmem); =20 return ret; } @@ -267,7 +267,7 @@ void drm_gem_shmem_unpin_locked(struct drm_gem_shmem_ob= ject *shmem) { dma_resv_assert_held(shmem->base.resv); =20 - drm_gem_shmem_put_pages(shmem); + drm_gem_shmem_put_pages_locked(shmem); } EXPORT_SYMBOL(drm_gem_shmem_unpin_locked); =20 @@ -318,7 +318,7 @@ void drm_gem_shmem_unpin(struct drm_gem_shmem_object *s= hmem) EXPORT_SYMBOL_GPL(drm_gem_shmem_unpin); =20 /* - * drm_gem_shmem_vmap - Create a virtual mapping for a shmem GEM object + * drm_gem_shmem_vmap_locked - Create a virtual mapping for a shmem GEM ob= ject * @shmem: shmem GEM object * @map: Returns the kernel virtual address of the SHMEM GEM object's back= ing * store. @@ -327,13 +327,13 @@ EXPORT_SYMBOL_GPL(drm_gem_shmem_unpin); * exists for the buffer backing the shmem GEM object. It hides the differ= ences * between dma-buf imported and natively allocated objects. * - * Acquired mappings should be cleaned up by calling drm_gem_shmem_vunmap(= ). + * Acquired mappings should be cleaned up by calling drm_gem_shmem_vunmap_= locked(). * * Returns: * 0 on success or a negative error code on failure. */ -int drm_gem_shmem_vmap(struct drm_gem_shmem_object *shmem, - struct iosys_map *map) +int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, + struct iosys_map *map) { struct drm_gem_object *obj =3D &shmem->base; int ret =3D 0; @@ -356,7 +356,7 @@ int drm_gem_shmem_vmap(struct drm_gem_shmem_object *shm= em, return 0; } =20 - ret =3D drm_gem_shmem_get_pages(shmem); + ret =3D drm_gem_shmem_get_pages_locked(shmem); if (ret) goto err_zero_use; =20 @@ -379,28 +379,28 @@ int drm_gem_shmem_vmap(struct drm_gem_shmem_object *s= hmem, =20 err_put_pages: if (!drm_gem_is_imported(obj)) - drm_gem_shmem_put_pages(shmem); + drm_gem_shmem_put_pages_locked(shmem); err_zero_use: shmem->vmap_use_count =3D 0; =20 return ret; } -EXPORT_SYMBOL_GPL(drm_gem_shmem_vmap); +EXPORT_SYMBOL_GPL(drm_gem_shmem_vmap_locked); =20 /* - * drm_gem_shmem_vunmap - Unmap a virtual mapping for a shmem GEM object + * drm_gem_shmem_vunmap_locked - Unmap a virtual mapping for a shmem GEM o= bject * @shmem: shmem GEM object * @map: Kernel virtual address where the SHMEM GEM object was mapped * * This function cleans up a kernel virtual address mapping acquired by - * drm_gem_shmem_vmap(). The mapping is only removed when the use count dr= ops to - * zero. + * drm_gem_shmem_vmap_locked(). The mapping is only removed when the use c= ount + * drops to zero. * * This function hides the differences between dma-buf imported and native= ly * allocated objects. */ -void drm_gem_shmem_vunmap(struct drm_gem_shmem_object *shmem, - struct iosys_map *map) +void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem, + struct iosys_map *map) { struct drm_gem_object *obj =3D &shmem->base; =20 @@ -416,12 +416,12 @@ void drm_gem_shmem_vunmap(struct drm_gem_shmem_object= *shmem, return; =20 vunmap(shmem->vaddr); - drm_gem_shmem_put_pages(shmem); + drm_gem_shmem_put_pages_locked(shmem); } =20 shmem->vaddr =3D NULL; } -EXPORT_SYMBOL_GPL(drm_gem_shmem_vunmap); +EXPORT_SYMBOL_GPL(drm_gem_shmem_vunmap_locked); =20 static int drm_gem_shmem_create_with_handle(struct drm_file *file_priv, @@ -449,7 +449,7 @@ drm_gem_shmem_create_with_handle(struct drm_file *file_= priv, /* Update madvise status, returns true if not purged, else * false or -errno. */ -int drm_gem_shmem_madvise(struct drm_gem_shmem_object *shmem, int madv) +int drm_gem_shmem_madvise_locked(struct drm_gem_shmem_object *shmem, int m= adv) { dma_resv_assert_held(shmem->base.resv); =20 @@ -460,9 +460,9 @@ int drm_gem_shmem_madvise(struct drm_gem_shmem_object *= shmem, int madv) =20 return (madv >=3D 0); } -EXPORT_SYMBOL_GPL(drm_gem_shmem_madvise); +EXPORT_SYMBOL_GPL(drm_gem_shmem_madvise_locked); =20 -void drm_gem_shmem_purge(struct drm_gem_shmem_object *shmem) +void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem) { struct drm_gem_object *obj =3D &shmem->base; struct drm_device *dev =3D obj->dev; @@ -476,7 +476,7 @@ void drm_gem_shmem_purge(struct drm_gem_shmem_object *s= hmem) kfree(shmem->sgt); shmem->sgt =3D NULL; =20 - drm_gem_shmem_put_pages(shmem); + drm_gem_shmem_put_pages_locked(shmem); =20 shmem->madv =3D -1; =20 @@ -492,7 +492,7 @@ void drm_gem_shmem_purge(struct drm_gem_shmem_object *s= hmem) =20 invalidate_mapping_pages(file_inode(obj->filp)->i_mapping, 0, (loff_t)-1); } -EXPORT_SYMBOL_GPL(drm_gem_shmem_purge); +EXPORT_SYMBOL_GPL(drm_gem_shmem_purge_locked); =20 /** * drm_gem_shmem_dumb_create - Create a dumb shmem buffer object @@ -589,7 +589,7 @@ static void drm_gem_shmem_vm_close(struct vm_area_struc= t *vma) struct drm_gem_shmem_object *shmem =3D to_drm_gem_shmem_obj(obj); =20 dma_resv_lock(shmem->base.resv, NULL); - drm_gem_shmem_put_pages(shmem); + drm_gem_shmem_put_pages_locked(shmem); dma_resv_unlock(shmem->base.resv); =20 drm_gem_vm_close(vma); @@ -639,7 +639,7 @@ int drm_gem_shmem_mmap(struct drm_gem_shmem_object *shm= em, struct vm_area_struct return -EINVAL; =20 dma_resv_lock(shmem->base.resv, NULL); - ret =3D drm_gem_shmem_get_pages(shmem); + ret =3D drm_gem_shmem_get_pages_locked(shmem); dma_resv_unlock(shmem->base.resv); =20 if (ret) @@ -707,7 +707,7 @@ static struct sg_table *drm_gem_shmem_get_pages_sgt_loc= ked(struct drm_gem_shmem_ =20 drm_WARN_ON(obj->dev, drm_gem_is_imported(obj)); =20 - ret =3D drm_gem_shmem_get_pages(shmem); + ret =3D drm_gem_shmem_get_pages_locked(shmem); if (ret) return ERR_PTR(ret); =20 @@ -729,7 +729,7 @@ static struct sg_table *drm_gem_shmem_get_pages_sgt_loc= ked(struct drm_gem_shmem_ sg_free_table(sgt); kfree(sgt); err_put_pages: - drm_gem_shmem_put_pages(shmem); + drm_gem_shmem_put_pages_locked(shmem); return ERR_PTR(ret); } =20 diff --git a/drivers/gpu/drm/imagination/pvr_gem.c b/drivers/gpu/drm/imagin= ation/pvr_gem.c index 6a8c81fe8c1e..d9d7c6d1a138 100644 --- a/drivers/gpu/drm/imagination/pvr_gem.c +++ b/drivers/gpu/drm/imagination/pvr_gem.c @@ -203,7 +203,7 @@ pvr_gem_object_vmap(struct pvr_gem_object *pvr_obj) =20 dma_resv_lock(obj->resv, NULL); =20 - err =3D drm_gem_shmem_vmap(shmem_obj, &map); + err =3D drm_gem_shmem_vmap_locked(shmem_obj, &map); if (err) goto err_unlock; =20 @@ -257,7 +257,7 @@ pvr_gem_object_vunmap(struct pvr_gem_object *pvr_obj) dma_sync_sgtable_for_device(dev, shmem_obj->sgt, DMA_BIDIRECTIONAL); } =20 - drm_gem_shmem_vunmap(shmem_obj, &map); + drm_gem_shmem_vunmap_locked(shmem_obj, &map); =20 dma_resv_unlock(obj->resv); } diff --git a/drivers/gpu/drm/lima/lima_gem.c b/drivers/gpu/drm/lima/lima_ge= m.c index 9bb997dbb4b9..609221351cde 100644 --- a/drivers/gpu/drm/lima/lima_gem.c +++ b/drivers/gpu/drm/lima/lima_gem.c @@ -195,7 +195,7 @@ static int lima_gem_vmap(struct drm_gem_object *obj, st= ruct iosys_map *map) if (bo->heap_size) return -EINVAL; =20 - return drm_gem_shmem_vmap(&bo->base, map); + return drm_gem_shmem_vmap_locked(&bo->base, map); } =20 static int lima_gem_mmap(struct drm_gem_object *obj, struct vm_area_struct= *vma) diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index 0f3935556ac7..a731f6b59a42 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -476,7 +476,7 @@ static int panfrost_ioctl_madvise(struct drm_device *de= v, void *data, } } =20 - args->retained =3D drm_gem_shmem_madvise(&bo->base, args->madv); + args->retained =3D drm_gem_shmem_madvise_locked(&bo->base, args->madv); =20 if (args->retained) { if (args->madv =3D=3D PANFROST_MADV_DONTNEED) diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu= /drm/panfrost/panfrost_gem_shrinker.c index 3d9f51bd48b6..02b60ea1433a 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c @@ -51,7 +51,7 @@ static bool panfrost_gem_purge(struct drm_gem_object *obj) goto unlock_mappings; =20 panfrost_gem_teardown_mappings_locked(bo); - drm_gem_shmem_purge(&bo->base); + drm_gem_shmem_purge_locked(&bo->base); ret =3D true; =20 dma_resv_unlock(shmem->base.resv); diff --git a/drivers/gpu/drm/tests/drm_gem_shmem_test.c b/drivers/gpu/drm/t= ests/drm_gem_shmem_test.c index fd4215e2f982..98884966bb92 100644 --- a/drivers/gpu/drm/tests/drm_gem_shmem_test.c +++ b/drivers/gpu/drm/tests/drm_gem_shmem_test.c @@ -173,7 +173,7 @@ static void drm_gem_shmem_test_vmap(struct kunit *test) ret =3D kunit_add_action_or_reset(test, drm_gem_shmem_free_wrapper, shmem= ); KUNIT_ASSERT_EQ(test, ret, 0); =20 - ret =3D drm_gem_shmem_vmap(shmem, &map); + ret =3D drm_gem_shmem_vmap_locked(shmem, &map); KUNIT_ASSERT_EQ(test, ret, 0); KUNIT_ASSERT_NOT_NULL(test, shmem->vaddr); KUNIT_ASSERT_FALSE(test, iosys_map_is_null(&map)); @@ -183,7 +183,7 @@ static void drm_gem_shmem_test_vmap(struct kunit *test) for (i =3D 0; i < TEST_SIZE; i++) KUNIT_EXPECT_EQ(test, iosys_map_rd(&map, i, u8), TEST_BYTE); =20 - drm_gem_shmem_vunmap(shmem, &map); + drm_gem_shmem_vunmap_locked(shmem, &map); KUNIT_EXPECT_NULL(test, shmem->vaddr); KUNIT_EXPECT_EQ(test, shmem->vmap_use_count, 0); } @@ -281,17 +281,17 @@ static void drm_gem_shmem_test_madvise(struct kunit *= test) ret =3D kunit_add_action_or_reset(test, drm_gem_shmem_free_wrapper, shmem= ); KUNIT_ASSERT_EQ(test, ret, 0); =20 - ret =3D drm_gem_shmem_madvise(shmem, 1); + ret =3D drm_gem_shmem_madvise_locked(shmem, 1); KUNIT_EXPECT_TRUE(test, ret); KUNIT_ASSERT_EQ(test, shmem->madv, 1); =20 /* Set madv to a negative value */ - ret =3D drm_gem_shmem_madvise(shmem, -1); + ret =3D drm_gem_shmem_madvise_locked(shmem, -1); KUNIT_EXPECT_FALSE(test, ret); KUNIT_ASSERT_EQ(test, shmem->madv, -1); =20 /* Check that madv cannot be set back to a positive value */ - ret =3D drm_gem_shmem_madvise(shmem, 0); + ret =3D drm_gem_shmem_madvise_locked(shmem, 0); KUNIT_EXPECT_FALSE(test, ret); KUNIT_ASSERT_EQ(test, shmem->madv, -1); } @@ -319,7 +319,7 @@ static void drm_gem_shmem_test_purge(struct kunit *test) ret =3D drm_gem_shmem_is_purgeable(shmem); KUNIT_EXPECT_FALSE(test, ret); =20 - ret =3D drm_gem_shmem_madvise(shmem, 1); + ret =3D drm_gem_shmem_madvise_locked(shmem, 1); KUNIT_EXPECT_TRUE(test, ret); =20 /* The scatter/gather table will be freed by drm_gem_shmem_free */ @@ -329,7 +329,7 @@ static void drm_gem_shmem_test_purge(struct kunit *test) ret =3D drm_gem_shmem_is_purgeable(shmem); KUNIT_EXPECT_TRUE(test, ret); =20 - drm_gem_shmem_purge(shmem); + drm_gem_shmem_purge_locked(shmem); KUNIT_EXPECT_NULL(test, shmem->pages); KUNIT_EXPECT_NULL(test, shmem->sgt); KUNIT_EXPECT_EQ(test, shmem->madv, -1); diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem= _helper.h index cef5a6b5a4d6..0609e336479d 100644 --- a/include/drm/drm_gem_shmem_helper.h +++ b/include/drm/drm_gem_shmem_helper.h @@ -102,19 +102,19 @@ struct drm_gem_shmem_object *drm_gem_shmem_create_wit= h_mnt(struct drm_device *de struct vfsmount *gemfs); void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem); =20 -void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem); +void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem); int drm_gem_shmem_pin(struct drm_gem_shmem_object *shmem); void drm_gem_shmem_unpin(struct drm_gem_shmem_object *shmem); -int drm_gem_shmem_vmap(struct drm_gem_shmem_object *shmem, - struct iosys_map *map); -void drm_gem_shmem_vunmap(struct drm_gem_shmem_object *shmem, - struct iosys_map *map); +int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, + struct iosys_map *map); +void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem, + struct iosys_map *map); int drm_gem_shmem_mmap(struct drm_gem_shmem_object *shmem, struct vm_area_= struct *vma); =20 int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem); void drm_gem_shmem_unpin_locked(struct drm_gem_shmem_object *shmem); =20 -int drm_gem_shmem_madvise(struct drm_gem_shmem_object *shmem, int madv); +int drm_gem_shmem_madvise_locked(struct drm_gem_shmem_object *shmem, int m= adv); =20 static inline bool drm_gem_shmem_is_purgeable(struct drm_gem_shmem_object = *shmem) { @@ -123,7 +123,7 @@ static inline bool drm_gem_shmem_is_purgeable(struct dr= m_gem_shmem_object *shmem !shmem->base.dma_buf && !drm_gem_is_imported(&shmem->base); } =20 -void drm_gem_shmem_purge(struct drm_gem_shmem_object *shmem); +void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem); =20 struct sg_table *drm_gem_shmem_get_sg_table(struct drm_gem_shmem_object *s= hmem); struct sg_table *drm_gem_shmem_get_pages_sgt(struct drm_gem_shmem_object *= shmem); @@ -214,12 +214,12 @@ static inline struct sg_table *drm_gem_shmem_object_g= et_sg_table(struct drm_gem_ } =20 /* - * drm_gem_shmem_object_vmap - GEM object function for drm_gem_shmem_vmap() + * drm_gem_shmem_object_vmap - GEM object function for drm_gem_shmem_vmap_= locked() * @obj: GEM object * @map: Returns the kernel virtual address of the SHMEM GEM object's back= ing store. * - * This function wraps drm_gem_shmem_vmap(). Drivers that employ the shmem= helpers should - * use it as their &drm_gem_object_funcs.vmap handler. + * This function wraps drm_gem_shmem_vmap_locked(). Drivers that employ th= e shmem + * helpers should use it as their &drm_gem_object_funcs.vmap handler. * * Returns: * 0 on success or a negative error code on failure. @@ -229,7 +229,7 @@ static inline int drm_gem_shmem_object_vmap(struct drm_= gem_object *obj, { struct drm_gem_shmem_object *shmem =3D to_drm_gem_shmem_obj(obj); =20 - return drm_gem_shmem_vmap(shmem, map); + return drm_gem_shmem_vmap_locked(shmem, map); } =20 /* @@ -237,15 +237,15 @@ static inline int drm_gem_shmem_object_vmap(struct dr= m_gem_object *obj, * @obj: GEM object * @map: Kernel virtual address where the SHMEM GEM object was mapped * - * This function wraps drm_gem_shmem_vunmap(). Drivers that employ the shm= em helpers should - * use it as their &drm_gem_object_funcs.vunmap handler. + * This function wraps drm_gem_shmem_vunmap_locked(). Drivers that employ = the shmem + * helpers should use it as their &drm_gem_object_funcs.vunmap handler. */ static inline void drm_gem_shmem_object_vunmap(struct drm_gem_object *obj, struct iosys_map *map) { struct drm_gem_shmem_object *shmem =3D to_drm_gem_shmem_obj(obj); =20 - drm_gem_shmem_vunmap(shmem, map); + drm_gem_shmem_vunmap_locked(shmem, map); } =20 /** --=20 2.49.0 From nobody Tue Feb 10 02:58:45 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 CE05723536B for ; Sat, 22 Mar 2025 21:29:47 +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=1742678989; cv=pass; b=Vtg9gfaKQMA8b9ThLfv13V4xxVUjYNxLfX3WvRnpRbUJm4zjUXOcK3LDcyObOZ3CEdtqcraG+F1022I80wuVjnPS1QilPsHBf/sHIc4v9Zsj4LCQqvldrgPWQ9a4hPClDRtCseJVaulqBRUinUZ6e1Nk8JNiBmYe20iJVIad0/o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742678989; c=relaxed/simple; bh=tNIVmmqvdn0BbSGupXXauZbKEV8m5jRAzxUwA3qwYTg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SH6eq9F0wBZhgP020gNfXG1r5y2JTvR9w7P3Tv0Z3U8Br4Kvj6UGjRWKp5wCFsHe4mFahRciyGuPIPgrRiD9tYDCUnxwykfSpTMKl776ywb384wPWbPEk4oSoHYDcEDBauGR62jqsSA37ZMlDdLESqX/q1AxMPpO5rZjlY+1hyU= 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=dmitry.osipenko@collabora.com header.b=Bzb8p2WH; 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=dmitry.osipenko@collabora.com header.b="Bzb8p2WH" ARC-Seal: i=1; a=rsa-sha256; t=1742678969; cv=none; d=zohomail.com; s=zohoarc; b=MObpe1hBvD+xE6c61j/lE28XU2aNW9N1v/0/JqDaqcjfWfigMH378voLegXJqNuBtPI2F2ezXa+JuKSTMF6bl6Q9mJ1rx6GHyAa5YSfr8o6B7fzVw2vZjoBv9ZAK2tAFAWdMVawjXZOtDJ6KsD4riUmraHl0/v3bx6TN56OUdK4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1742678969; 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=q83oIT0cBFEw1AlNTa7hMxOMQ+6roqL+ZBBn36G+JnQ=; b=g1dF3qzKNjywQ+iM3zPIuCRb+f/RYcGa7lTQFPEs6b6WB7VvgJXAXqM7qgx1l9frZhq+FZbONIj5EKMfJEHqYxAtuBczs0qkpXfJZl34OnTdjlSQJCOIYLFmXboi+34FNS6eyq4YxR1k9/OVunoqHjgt0OBbN7YQXcr4f7zUnbE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=dmitry.osipenko@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1742678969; s=zohomail; d=collabora.com; i=dmitry.osipenko@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=q83oIT0cBFEw1AlNTa7hMxOMQ+6roqL+ZBBn36G+JnQ=; b=Bzb8p2WHAc+9CedgTOqFDrYVwzoVr+pRI9CPz1FFyxdDEN7jsqbhgYaqeQLU0QQr A/G+Tk1I2Mr5SD9I1k4sl3Cdncq9VwFeNfhIHCp61qlzRMBkHRTDiLQdA9ICKcYm/Ok lZLpbHvbPjB8NUQe1Yw7jwwk6Q7NIv/n+rnS3EZA= Received: by mx.zohomail.com with SMTPS id 1742678968659230.70139866836757; Sat, 22 Mar 2025 14:29:28 -0700 (PDT) From: Dmitry Osipenko To: David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , =?UTF-8?q?Christian=20K=C3=B6nig?= , Gerd Hoffmann , Qiang Yu , Steven Price , Boris Brezillon , Frank Binns , Matt Coster Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, kernel@collabora.com Subject: [PATCH v20 06/10] drm/shmem-helper: Remove obsoleted is_iomem test Date: Sun, 23 Mar 2025 00:26:04 +0300 Message-ID: <20250322212608.40511-7-dmitry.osipenko@collabora.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250322212608.40511-1-dmitry.osipenko@collabora.com> References: <20250322212608.40511-1-dmitry.osipenko@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 X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" Everything that uses the mapped buffer should be agnostic to is_iomem. The only reason for the is_iomem test is that we're setting shmem->vaddr to the returned map->vaddr. Now that the shmem->vaddr code is gone, remove the obsoleted is_iomem test to clean up the code. Acked-by: Maxime Ripard Suggested-by: Thomas Zimmermann Reviewed-by: Boris Brezillon Signed-off-by: Dmitry Osipenko Acked-by: Thomas Zimmermann --- drivers/gpu/drm/drm_gem_shmem_helper.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_g= em_shmem_helper.c index a9e35a46e72b..277e792a0c5c 100644 --- a/drivers/gpu/drm/drm_gem_shmem_helper.c +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c @@ -340,12 +340,6 @@ int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_obj= ect *shmem, =20 if (drm_gem_is_imported(obj)) { ret =3D dma_buf_vmap(obj->dma_buf, map); - if (!ret) { - if (drm_WARN_ON(obj->dev, map->is_iomem)) { - dma_buf_vunmap(obj->dma_buf, map); - return -EIO; - } - } } else { pgprot_t prot =3D PAGE_KERNEL; =20 --=20 2.49.0 From nobody Tue Feb 10 02:58:45 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 3B03F235358 for ; Sat, 22 Mar 2025 21:29:59 +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=1742679000; cv=pass; b=L35RPWrjXHC3GpdaWL15ec2PRkAY7GtEVtOC/9m6+8SedivtbbKFgqvMhK0si3R3hGTb/ktQ9u4Qr3y1Mw4hkyWfj3WvJJBkTuhehzleSAgTOt7Xdtj7Av56foavkGJsV5rgEpUO4yykUHKaT+PsOKgoeN1kRrEqx6BCDICRiOQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742679000; c=relaxed/simple; bh=GS67kKBf634hmTGJ8ztFY9umk+N2v9dsFfywBljebJA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=a9TOLVKjNIo8h7TlEf4JxchhLtjeboQbzDwe4kTxUEZtVZ3bxyMVPjAvwf6+r/MzLor2TQBLzMgaOGoAsKbO7+K/2A7g3YMRz5w+0PGytDRxF8d1mJ3ekrm8eRPj1m8sYXRTzXcVYEIespcO7RRCKyNFfgBMPTqcU+n4f+8GCdg= 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=dmitry.osipenko@collabora.com header.b=LUe+QSKk; 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=dmitry.osipenko@collabora.com header.b="LUe+QSKk" ARC-Seal: i=1; a=rsa-sha256; t=1742678973; cv=none; d=zohomail.com; s=zohoarc; b=edhGsgPmgntLYCFaQiqxGvBfQx7WnUBG2hldBgS3YznZI31TszLQzqEcfsecU6rVae+ppjhzsntO6MS4TscJhmB1aZlYsm0OH6UDYU49iFu2KypgVDAJ51Yn7bkbgKedq1LMsrASPdr3MK8vNnr2h5IB0l3DqWeoBrOdokETwbA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1742678973; 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=1dcY8k5g4fF0UWLqOc8Uf+7VkNlVV5V21QJxksyUkCk=; b=HPWbDWGZAGu0hMs6wjzV9EboKn6rdj/FBZ6zLGvfo6IO7VBWxXdzaNDcn2n6DER7LGkw0IsTLgBMW7gDPa7g2J6D8dKIBEjdnsTJ4Ugg57/SIS+g0acRhIupO/AaEzV5tUlew2fr2uFJGSlcoK8gAOBl35FoOopYKKuHGnywzyk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=dmitry.osipenko@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1742678973; s=zohomail; d=collabora.com; i=dmitry.osipenko@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=1dcY8k5g4fF0UWLqOc8Uf+7VkNlVV5V21QJxksyUkCk=; b=LUe+QSKk2nUd75NePop6N2yuJp2ThVLy5PNQ9afWa+727iFm7A0Usxw1bgFKR/vY rdrLIiOMhc6CTqaWJTBWEGRk8GhEZ2rI6q0b1n2M6yDOzxFbkbOf2GlHx/6j3Vr4MZo 9bncoUC5FOvuMdQ3nY4b5ShhAsT1frnW1MP8tIys= Received: by mx.zohomail.com with SMTPS id 1742678972553562.2070710536797; Sat, 22 Mar 2025 14:29:32 -0700 (PDT) From: Dmitry Osipenko To: David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , =?UTF-8?q?Christian=20K=C3=B6nig?= , Gerd Hoffmann , Qiang Yu , Steven Price , Boris Brezillon , Frank Binns , Matt Coster Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, kernel@collabora.com Subject: [PATCH v20 07/10] drm/shmem-helper: Add and use pages_pin_count Date: Sun, 23 Mar 2025 00:26:05 +0300 Message-ID: <20250322212608.40511-8-dmitry.osipenko@collabora.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250322212608.40511-1-dmitry.osipenko@collabora.com> References: <20250322212608.40511-1-dmitry.osipenko@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 X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" Add separate pages_pin_count for tracking of whether drm-shmem pages are moveable or not. With the addition of memory shrinker support to drm-shmem, the pages_use_count will no longer determine whether pages are hard-pinned in memory, but whether pages exist and are soft-pinned (and could be swapped out). The pages_pin_count > 1 will hard-pin pages in memory. Acked-by: Maxime Ripard Reviewed-by: Boris Brezillon Suggested-by: Boris Brezillon Signed-off-by: Dmitry Osipenko Acked-by: Thomas Zimmermann --- drivers/gpu/drm/drm_gem_shmem_helper.c | 16 +++++++++++++++- include/drm/drm_gem_shmem_helper.h | 11 +++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_g= em_shmem_helper.c index 277e792a0c5c..d338b36f4eaa 100644 --- a/drivers/gpu/drm/drm_gem_shmem_helper.c +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c @@ -177,6 +177,7 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *sh= mem) drm_gem_shmem_put_pages_locked(shmem); =20 drm_WARN_ON(obj->dev, shmem->pages_use_count); + drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_pin_count)); =20 dma_resv_unlock(shmem->base.resv); } @@ -257,7 +258,12 @@ int drm_gem_shmem_pin_locked(struct drm_gem_shmem_obje= ct *shmem) =20 drm_WARN_ON(shmem->base.dev, drm_gem_is_imported(&shmem->base)); =20 + if (refcount_inc_not_zero(&shmem->pages_pin_count)) + return 0; + ret =3D drm_gem_shmem_get_pages_locked(shmem); + if (!ret) + refcount_set(&shmem->pages_pin_count, 1); =20 return ret; } @@ -267,7 +273,8 @@ void drm_gem_shmem_unpin_locked(struct drm_gem_shmem_ob= ject *shmem) { dma_resv_assert_held(shmem->base.resv); =20 - drm_gem_shmem_put_pages_locked(shmem); + if (refcount_dec_and_test(&shmem->pages_pin_count)) + drm_gem_shmem_put_pages_locked(shmem); } EXPORT_SYMBOL(drm_gem_shmem_unpin_locked); =20 @@ -288,6 +295,9 @@ int drm_gem_shmem_pin(struct drm_gem_shmem_object *shme= m) =20 drm_WARN_ON(obj->dev, drm_gem_is_imported(obj)); =20 + if (refcount_inc_not_zero(&shmem->pages_pin_count)) + return 0; + ret =3D dma_resv_lock_interruptible(shmem->base.resv, NULL); if (ret) return ret; @@ -311,6 +321,9 @@ void drm_gem_shmem_unpin(struct drm_gem_shmem_object *s= hmem) =20 drm_WARN_ON(obj->dev, drm_gem_is_imported(obj)); =20 + if (refcount_dec_not_one(&shmem->pages_pin_count)) + return; + dma_resv_lock(shmem->base.resv, NULL); drm_gem_shmem_unpin_locked(shmem); dma_resv_unlock(shmem->base.resv); @@ -660,6 +673,7 @@ void drm_gem_shmem_print_info(const struct drm_gem_shme= m_object *shmem, if (drm_gem_is_imported(&shmem->base)) return; =20 + drm_printf_indent(p, indent, "pages_pin_count=3D%u\n", refcount_read(&shm= em->pages_pin_count)); drm_printf_indent(p, indent, "pages_use_count=3D%u\n", shmem->pages_use_c= ount); drm_printf_indent(p, indent, "vmap_use_count=3D%u\n", shmem->vmap_use_cou= nt); drm_printf_indent(p, indent, "vaddr=3D%p\n", shmem->vaddr); diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem= _helper.h index 0609e336479d..d411215fe494 100644 --- a/include/drm/drm_gem_shmem_helper.h +++ b/include/drm/drm_gem_shmem_helper.h @@ -39,6 +39,17 @@ struct drm_gem_shmem_object { */ unsigned int pages_use_count; =20 + /** + * @pages_pin_count: + * + * Reference count on the pinned pages table. + * + * Pages are hard-pinned and reside in memory if count + * greater than zero. Otherwise, when count is zero, the pages are + * allowed to be evicted and purged by memory shrinker. + */ + refcount_t pages_pin_count; + /** * @madv: State for madvise * --=20 2.49.0 From nobody Tue Feb 10 02:58:45 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 1A1192356BE for ; Sat, 22 Mar 2025 21:30:00 +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=1742679002; cv=pass; b=eaaS674WBFnVKJjYT4N9l2GXe9q/xEQH6gI1L9rcds4TcEQXrFsgDyI4crH/vxgWI17HzJZ+9i0tOoes+OxYjtkZYK9sr1icNPFm1HNREuYYE4QsGdwlKyVIUS2TQ20ZU+hTSMlh6WNybY4PPB99rdjOSyZ+MzrC5xgA0/PL7G4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742679002; c=relaxed/simple; bh=f92HpNzAZbbH0b8kvkrBR3i1x0/zZ7pmWaJXJSF1wEo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bAaRM2abA5xyzMDQwD1fO5fWbt0ftZH9mv3WCR4WKOQ2MgLGuc4y5yZat3Y8PyBE1Hz/E+tOeHhAt3yqqyJ/1ThL8KvEtThvaQLN5icHeBAi5ssU0QNEIo8s+3Ouu11yF4ikI8huFjrsRjWnUzR3/5ffIQFG8Xlos31+P2q1Sb4= 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=dmitry.osipenko@collabora.com header.b=NDoVCoHa; 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=dmitry.osipenko@collabora.com header.b="NDoVCoHa" ARC-Seal: i=1; a=rsa-sha256; t=1742678978; cv=none; d=zohomail.com; s=zohoarc; b=dgdmVAtdxzpYIaicsL4pVTDcc6K9J04nUZsoCHGPLhwsbafXonwDI6XUXvSOoFUx35/bE1RdIR9G+OhoBJph9M1bKyTYRaJ/MBntJOhC/+q9ZztzGW4ti2HedzxlUcnUbO3kBtqbt0qg6JqCq91XfWK7aeEnr7gvVBL646uFt/0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1742678978; 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=MML9D8wdRcQXvopNsGy9CrKhkITUugHvf3JIuAXSRC4=; b=b6wAzpgVDBRzdmElj1u9PY25Ln7GoPOq5p1qRJ67tXfudjOrFq8wnuIS4mH/4hnwEJe5xPKGoPnE+sZCdY5GMS4YaEiYaSmq9FYZureYfYQ15x7LYZaJ0vYry/DyerTqW76KiDsHniAczh4fM1wb1hSVUawc+rpgvpX54uWS7ew= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=dmitry.osipenko@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1742678978; s=zohomail; d=collabora.com; i=dmitry.osipenko@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=MML9D8wdRcQXvopNsGy9CrKhkITUugHvf3JIuAXSRC4=; b=NDoVCoHakEMQkKKO84yiJG/HIc37gxKWvQZhBaHv4Kj0W2TPLSSLiihAjYK7juHr bFZNcrXBIv+volUSQSVS5QHM4+rjT5qM4fDRbV9US17SBf0g68mNXdv4FH0Bld8TOva dD89J5J8zmWko9ngeAsej6W6Q2ChGW4JufpQRMX0= Received: by mx.zohomail.com with SMTPS id 1742678976540282.669899349429; Sat, 22 Mar 2025 14:29:36 -0700 (PDT) From: Dmitry Osipenko To: David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , =?UTF-8?q?Christian=20K=C3=B6nig?= , Gerd Hoffmann , Qiang Yu , Steven Price , Boris Brezillon , Frank Binns , Matt Coster Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, kernel@collabora.com Subject: [PATCH v20 08/10] drm/shmem-helper: Use refcount_t for pages_use_count Date: Sun, 23 Mar 2025 00:26:06 +0300 Message-ID: <20250322212608.40511-9-dmitry.osipenko@collabora.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250322212608.40511-1-dmitry.osipenko@collabora.com> References: <20250322212608.40511-1-dmitry.osipenko@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 X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" Use atomic refcount_t helper for pages_use_count to optimize pin/unpin functions by skipping reservation locking while GEM's pin refcount > 1. Acked-by: Maxime Ripard Reviewed-by: Boris Brezillon Suggested-by: Boris Brezillon Signed-off-by: Dmitry Osipenko Acked-by: Thomas Zimmermann --- drivers/gpu/drm/drm_gem_shmem_helper.c | 33 ++++++++++------------ drivers/gpu/drm/lima/lima_gem.c | 2 +- drivers/gpu/drm/panfrost/panfrost_mmu.c | 2 +- drivers/gpu/drm/tests/drm_gem_shmem_test.c | 8 +++--- include/drm/drm_gem_shmem_helper.h | 2 +- 5 files changed, 22 insertions(+), 25 deletions(-) diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_g= em_shmem_helper.c index d338b36f4eaa..6fb96e790abd 100644 --- a/drivers/gpu/drm/drm_gem_shmem_helper.c +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c @@ -176,7 +176,7 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *sh= mem) if (shmem->pages) drm_gem_shmem_put_pages_locked(shmem); =20 - drm_WARN_ON(obj->dev, shmem->pages_use_count); + drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_use_count)); drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_pin_count)); =20 dma_resv_unlock(shmem->base.resv); @@ -194,14 +194,13 @@ static int drm_gem_shmem_get_pages_locked(struct drm_= gem_shmem_object *shmem) =20 dma_resv_assert_held(shmem->base.resv); =20 - if (shmem->pages_use_count++ > 0) + if (refcount_inc_not_zero(&shmem->pages_use_count)) return 0; =20 pages =3D drm_gem_get_pages(obj); if (IS_ERR(pages)) { drm_dbg_kms(obj->dev, "Failed to get pages (%ld)\n", PTR_ERR(pages)); - shmem->pages_use_count =3D 0; return PTR_ERR(pages); } =20 @@ -217,6 +216,8 @@ static int drm_gem_shmem_get_pages_locked(struct drm_ge= m_shmem_object *shmem) =20 shmem->pages =3D pages; =20 + refcount_set(&shmem->pages_use_count, 1); + return 0; } =20 @@ -232,21 +233,17 @@ void drm_gem_shmem_put_pages_locked(struct drm_gem_sh= mem_object *shmem) =20 dma_resv_assert_held(shmem->base.resv); =20 - if (drm_WARN_ON_ONCE(obj->dev, !shmem->pages_use_count)) - return; - - if (--shmem->pages_use_count > 0) - return; - + if (refcount_dec_and_test(&shmem->pages_use_count)) { #ifdef CONFIG_X86 - if (shmem->map_wc) - set_pages_array_wb(shmem->pages, obj->size >> PAGE_SHIFT); + if (shmem->map_wc) + set_pages_array_wb(shmem->pages, obj->size >> PAGE_SHIFT); #endif =20 - drm_gem_put_pages(obj, shmem->pages, - shmem->pages_mark_dirty_on_put, - shmem->pages_mark_accessed_on_put); - shmem->pages =3D NULL; + drm_gem_put_pages(obj, shmem->pages, + shmem->pages_mark_dirty_on_put, + shmem->pages_mark_accessed_on_put); + shmem->pages =3D NULL; + } } EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages_locked); =20 @@ -582,8 +579,8 @@ static void drm_gem_shmem_vm_open(struct vm_area_struct= *vma) * mmap'd, vm_open() just grabs an additional reference for the new * mm the vma is getting copied into (ie. on fork()). */ - if (!drm_WARN_ON_ONCE(obj->dev, !shmem->pages_use_count)) - shmem->pages_use_count++; + drm_WARN_ON_ONCE(obj->dev, + !refcount_inc_not_zero(&shmem->pages_use_count)); =20 dma_resv_unlock(shmem->base.resv); =20 @@ -674,7 +671,7 @@ void drm_gem_shmem_print_info(const struct drm_gem_shme= m_object *shmem, return; =20 drm_printf_indent(p, indent, "pages_pin_count=3D%u\n", refcount_read(&shm= em->pages_pin_count)); - drm_printf_indent(p, indent, "pages_use_count=3D%u\n", shmem->pages_use_c= ount); + drm_printf_indent(p, indent, "pages_use_count=3D%u\n", refcount_read(&shm= em->pages_use_count)); drm_printf_indent(p, indent, "vmap_use_count=3D%u\n", shmem->vmap_use_cou= nt); drm_printf_indent(p, indent, "vaddr=3D%p\n", shmem->vaddr); } diff --git a/drivers/gpu/drm/lima/lima_gem.c b/drivers/gpu/drm/lima/lima_ge= m.c index 609221351cde..5deec673c11e 100644 --- a/drivers/gpu/drm/lima/lima_gem.c +++ b/drivers/gpu/drm/lima/lima_gem.c @@ -47,7 +47,7 @@ int lima_heap_alloc(struct lima_bo *bo, struct lima_vm *v= m) } =20 bo->base.pages =3D pages; - bo->base.pages_use_count =3D 1; + refcount_set(&bo->base.pages_use_count, 1); =20 mapping_set_unevictable(mapping); } diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panf= rost/panfrost_mmu.c index b91019cd5acb..4a0b4bf03f1a 100644 --- a/drivers/gpu/drm/panfrost/panfrost_mmu.c +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c @@ -489,7 +489,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_= device *pfdev, int as, goto err_unlock; } bo->base.pages =3D pages; - bo->base.pages_use_count =3D 1; + refcount_set(&bo->base.pages_use_count, 1); } else { pages =3D bo->base.pages; if (pages[page_offset]) { diff --git a/drivers/gpu/drm/tests/drm_gem_shmem_test.c b/drivers/gpu/drm/t= ests/drm_gem_shmem_test.c index 98884966bb92..1459cdb0c413 100644 --- a/drivers/gpu/drm/tests/drm_gem_shmem_test.c +++ b/drivers/gpu/drm/tests/drm_gem_shmem_test.c @@ -134,7 +134,7 @@ static void drm_gem_shmem_test_pin_pages(struct kunit *= test) shmem =3D drm_gem_shmem_create(drm_dev, TEST_SIZE); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, shmem); KUNIT_EXPECT_NULL(test, shmem->pages); - KUNIT_EXPECT_EQ(test, shmem->pages_use_count, 0); + KUNIT_EXPECT_EQ(test, refcount_read(&shmem->pages_use_count), 0); =20 ret =3D kunit_add_action_or_reset(test, drm_gem_shmem_free_wrapper, shmem= ); KUNIT_ASSERT_EQ(test, ret, 0); @@ -142,14 +142,14 @@ static void drm_gem_shmem_test_pin_pages(struct kunit= *test) ret =3D drm_gem_shmem_pin(shmem); KUNIT_ASSERT_EQ(test, ret, 0); KUNIT_ASSERT_NOT_NULL(test, shmem->pages); - KUNIT_EXPECT_EQ(test, shmem->pages_use_count, 1); + KUNIT_EXPECT_EQ(test, refcount_read(&shmem->pages_use_count), 1); =20 for (i =3D 0; i < (shmem->base.size >> PAGE_SHIFT); i++) KUNIT_ASSERT_NOT_NULL(test, shmem->pages[i]); =20 drm_gem_shmem_unpin(shmem); KUNIT_EXPECT_NULL(test, shmem->pages); - KUNIT_EXPECT_EQ(test, shmem->pages_use_count, 0); + KUNIT_EXPECT_EQ(test, refcount_read(&shmem->pages_use_count), 0); } =20 /* @@ -251,7 +251,7 @@ static void drm_gem_shmem_test_get_sg_table(struct kuni= t *test) sgt =3D drm_gem_shmem_get_pages_sgt(shmem); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, sgt); KUNIT_ASSERT_NOT_NULL(test, shmem->pages); - KUNIT_EXPECT_EQ(test, shmem->pages_use_count, 1); + KUNIT_EXPECT_EQ(test, refcount_read(&shmem->pages_use_count), 1); KUNIT_EXPECT_PTR_EQ(test, sgt, shmem->sgt); =20 for_each_sgtable_sg(sgt, sg, si) { diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem= _helper.h index d411215fe494..3a4be433d5f0 100644 --- a/include/drm/drm_gem_shmem_helper.h +++ b/include/drm/drm_gem_shmem_helper.h @@ -37,7 +37,7 @@ struct drm_gem_shmem_object { * Reference count on the pages table. * The pages are put when the count reaches zero. */ - unsigned int pages_use_count; + refcount_t pages_use_count; =20 /** * @pages_pin_count: --=20 2.49.0 From nobody Tue Feb 10 02:58:45 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 80385481A3 for ; Sat, 22 Mar 2025 21:30:03 +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=1742679005; cv=pass; b=o+RAYdBbyCGrIG8vjAdXxIkd1iMHVUVfKDwbwUtlEVy1YGUvHWoYiWe57lwiIybx4sL2r6zY/ovF2inuUopVMDKAN1AsD8QfnV4FvRa+h5iFlMpEO0uh5MfOu6K3/pM7iW56suUGQvkEPmAFbHIXjqXuAkOONPKBL1uIVmA6afM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742679005; c=relaxed/simple; bh=IU+2xeAyIoWfDNw1+gmyJoWuDUbWBOrnfPEj/xjdAwA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SVAkSaWDLS6t1aV3FL/c6MHiIvCVqbhrMWC85I18HXKIFdkR986Hj+xfeTHgo3TUEhF/ejlDicv/4IF+k+QXQ+W1OcSyE80/Hw54JvVCdqzROw1aU6Zcc3Aw4N8CQI5nlSqKls84w1abJP+n26I4sg7MNCP1Zk35ax8cyUeTdPg= 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=dmitry.osipenko@collabora.com header.b=XZytbpnY; 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=dmitry.osipenko@collabora.com header.b="XZytbpnY" ARC-Seal: i=1; a=rsa-sha256; t=1742678984; cv=none; d=zohomail.com; s=zohoarc; b=SSq54ZSfhyVl0NZa6xQbAOU/zjdSvJkBbCCjNiNw888T3tBI1aIkDgu5gbb+PCGrYfwqh7b7w9/wFBjvCHNHWDBaG89Xv9BfVztEX4tR8WUNlm8Joy1iL30E0uq0T+DIz+Z0x5y0Fm0gVCTzVD4C0wCxRQGiUxxx/Yjgt3KGeCE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1742678984; 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=LZhuSt1JyOcqupf4blKAAjBgaNXocdvNqctALCAsuBY=; b=EyomSBCuSAbzn0ze5ycGEcm8tqGYzCnxOV6A+a+ZuFkexIbwSmVKrPZkF58Ur4SfTB1IBRTrFtrTd+oMWtvRe8P3pOj8fsvQHKfi+qBFLPyohPv6dt1a6vzG22IhnwM5nqbMPO/cMawjQt47AWVkHSYosOKcIMlRhO5hOgt2l0Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=dmitry.osipenko@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1742678984; s=zohomail; d=collabora.com; i=dmitry.osipenko@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=LZhuSt1JyOcqupf4blKAAjBgaNXocdvNqctALCAsuBY=; b=XZytbpnYRD9qONDRZrySEHeLnDdAdOWzgiGkX5Aj1Wzst5Q46dGa7UNjwMWcJI84 i2IyAz1/eA39Q4tSZsP/7huUFIUaqx3zTrx5fgs+/wRLoZcRszkFcTECR0pOxxsNjk0 95u8XDeTiNObK5griP2mfYQSbBI0a6ojrDx0GXWc= Received: by mx.zohomail.com with SMTPS id 1742678980476164.7530987685443; Sat, 22 Mar 2025 14:29:40 -0700 (PDT) From: Dmitry Osipenko To: David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , =?UTF-8?q?Christian=20K=C3=B6nig?= , Gerd Hoffmann , Qiang Yu , Steven Price , Boris Brezillon , Frank Binns , Matt Coster Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, kernel@collabora.com Subject: [PATCH v20 09/10] drm/shmem-helper: Switch drm_gem_shmem_vmap/vunmap to use pin/unpin Date: Sun, 23 Mar 2025 00:26:07 +0300 Message-ID: <20250322212608.40511-10-dmitry.osipenko@collabora.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250322212608.40511-1-dmitry.osipenko@collabora.com> References: <20250322212608.40511-1-dmitry.osipenko@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 X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" The vmapped pages shall be pinned in memory and previously get/put_pages() were implicitly hard-pinning/unpinning the pages. This will no longer be the case with addition of memory shrinker because pages_use_count > 0 won't determine anymore whether pages are hard-pinned (they will be soft-pinned), while the new pages_pin_count will do the hard-pinning. Switch the vmap/vunmap() to use pin/unpin() functions in a preparation of addition of the memory shrinker support to drm-shmem. Acked-by: Maxime Ripard Reviewed-by: Boris Brezillon Signed-off-by: Dmitry Osipenko Acked-by: Thomas Zimmermann --- drivers/gpu/drm/drm_gem_shmem_helper.c | 6 +++--- include/drm/drm_gem_shmem_helper.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_g= em_shmem_helper.c index 6fb96e790abd..84a196bbe44f 100644 --- a/drivers/gpu/drm/drm_gem_shmem_helper.c +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c @@ -360,7 +360,7 @@ int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_obje= ct *shmem, return 0; } =20 - ret =3D drm_gem_shmem_get_pages_locked(shmem); + ret =3D drm_gem_shmem_pin_locked(shmem); if (ret) goto err_zero_use; =20 @@ -383,7 +383,7 @@ int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_obje= ct *shmem, =20 err_put_pages: if (!drm_gem_is_imported(obj)) - drm_gem_shmem_put_pages_locked(shmem); + drm_gem_shmem_unpin_locked(shmem); err_zero_use: shmem->vmap_use_count =3D 0; =20 @@ -420,7 +420,7 @@ void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_o= bject *shmem, return; =20 vunmap(shmem->vaddr); - drm_gem_shmem_put_pages_locked(shmem); + drm_gem_shmem_unpin_locked(shmem); } =20 shmem->vaddr =3D NULL; diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem= _helper.h index 3a4be433d5f0..8b9bba87ae63 100644 --- a/include/drm/drm_gem_shmem_helper.h +++ b/include/drm/drm_gem_shmem_helper.h @@ -130,7 +130,7 @@ int drm_gem_shmem_madvise_locked(struct drm_gem_shmem_o= bject *shmem, int madv); static inline bool drm_gem_shmem_is_purgeable(struct drm_gem_shmem_object = *shmem) { return (shmem->madv > 0) && - !shmem->vmap_use_count && shmem->sgt && + !refcount_read(&shmem->pages_pin_count) && shmem->sgt && !shmem->base.dma_buf && !drm_gem_is_imported(&shmem->base); } =20 --=20 2.49.0 From nobody Tue Feb 10 02:58:45 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 BECD61BDCF for ; Sat, 22 Mar 2025 21:30:03 +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=1742679005; cv=pass; b=Jw8RszpgdhpeJ3tpTAh2XLu0yMjIFYi6NHfGawAFrk8oSq0T3nGztuUZcmoOQspYGm9OHd/+nDJSZAsIXxqfzTXB/RLDv8iVZdgscDxd/sFHaeO5rt0O/A3URgcYM2RVptvfIVgwvLfiwOQ+rEtXDhqw3kbezy+/6BC+zgI1HsE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742679005; c=relaxed/simple; bh=5sL5JhRTwA5zkil10rVngMTpdoFtwEQs5zgqi4b6ndk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HtxCO13c6hxByY1hbCobX0l+kO/Aa4ynlxFOXtd8Sc+N/o5KAI4LBvkBTTp+ef9SNFrkp7nfbD1MDjlytlJyQC+uAIPTYPPb7SgRqbYe/j85O8ePy1ZKHggGI8hksx5CdOwNCAckMKVY+jd6m1JjDvsPOHt8okPMS5FzlgtfY4E= 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=dmitry.osipenko@collabora.com header.b=cKpXo8eB; 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=dmitry.osipenko@collabora.com header.b="cKpXo8eB" ARC-Seal: i=1; a=rsa-sha256; t=1742678986; cv=none; d=zohomail.com; s=zohoarc; b=WaJyEL9xZeU5zR4pgHILJlFQFZmUTtzc4hg6lx/PXbWT4I9jrv7pM40vpdVr+pZgLAeUb/nB62lQLYFm06BYCzmulIxWoEsITQ9BXeRLHrmjN62d9KhroTI6K5WGtANV8rjdxJLd3gSyarEUprS8jJvzOIXmIRtGjoT+sEyC0pU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1742678986; 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=jI2A6McB5nUab55GDN4/MJXKSOUMSiNkiu8ByBqPMPM=; b=eGtiThTAXaS4Rt47A4xIkV/+OVQYNyNC1cPlUQXjV5rsweVi4unRJrNTs4M6jHhTVawtNVJZyxHAVudC4kFFs4ENk29Imx6SqzfeY8byrhCY2yG1X34Y40jLqVl3C1w+tnMV1HvdUc+7oz1EWKC/ufjvo+iEm2IQeAWFhJVYMW8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=dmitry.osipenko@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1742678986; s=zohomail; d=collabora.com; i=dmitry.osipenko@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=jI2A6McB5nUab55GDN4/MJXKSOUMSiNkiu8ByBqPMPM=; b=cKpXo8eBxoYzi7gEo4QhSot4SporbIAkd8H4e2AB5UtPtPnHLRFt11XciaDf12DI qdT0AZl9NSF1oM+KQutMmO/4V/DptjOAsYd9Nbk8r6SpucaDhT41BO7ylAIVRm8K7Li I7181BxmAsVXSBo/4VeWRjFbKunvKd2E/7znELSU= Received: by mx.zohomail.com with SMTPS id 1742678984353357.2761177607125; Sat, 22 Mar 2025 14:29:44 -0700 (PDT) From: Dmitry Osipenko To: David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , =?UTF-8?q?Christian=20K=C3=B6nig?= , Gerd Hoffmann , Qiang Yu , Steven Price , Boris Brezillon , Frank Binns , Matt Coster Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, kernel@collabora.com Subject: [PATCH v20 10/10] drm/shmem-helper: Use refcount_t for vmap_use_count Date: Sun, 23 Mar 2025 00:26:08 +0300 Message-ID: <20250322212608.40511-11-dmitry.osipenko@collabora.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250322212608.40511-1-dmitry.osipenko@collabora.com> References: <20250322212608.40511-1-dmitry.osipenko@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 X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" Use refcount_t helper for vmap_use_count to make refcounting consistent with pages_use_count and pages_pin_count that use refcount_t. This also makes vmapping to benefit from the refcount_t's overflow checks. Acked-by: Maxime Ripard Reviewed-by: Boris Brezillon Suggested-by: Boris Brezillon Signed-off-by: Dmitry Osipenko Acked-by: Thomas Zimmermann --- drivers/gpu/drm/drm_gem_shmem_helper.c | 28 ++++++++++------------ drivers/gpu/drm/tests/drm_gem_shmem_test.c | 6 ++--- include/drm/drm_gem_shmem_helper.h | 2 +- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_g= em_shmem_helper.c index 84a196bbe44f..2d924d547a51 100644 --- a/drivers/gpu/drm/drm_gem_shmem_helper.c +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c @@ -165,7 +165,7 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *sh= mem) } else { dma_resv_lock(shmem->base.resv, NULL); =20 - drm_WARN_ON(obj->dev, shmem->vmap_use_count); + drm_WARN_ON(obj->dev, refcount_read(&shmem->vmap_use_count)); =20 if (shmem->sgt) { dma_unmap_sgtable(obj->dev->dev, shmem->sgt, @@ -355,23 +355,25 @@ int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_ob= ject *shmem, =20 dma_resv_assert_held(shmem->base.resv); =20 - if (shmem->vmap_use_count++ > 0) { + if (refcount_inc_not_zero(&shmem->vmap_use_count)) { iosys_map_set_vaddr(map, shmem->vaddr); return 0; } =20 ret =3D drm_gem_shmem_pin_locked(shmem); if (ret) - goto err_zero_use; + return ret; =20 if (shmem->map_wc) prot =3D pgprot_writecombine(prot); shmem->vaddr =3D vmap(shmem->pages, obj->size >> PAGE_SHIFT, VM_MAP, prot); - if (!shmem->vaddr) + if (!shmem->vaddr) { ret =3D -ENOMEM; - else + } else { iosys_map_set_vaddr(map, shmem->vaddr); + refcount_set(&shmem->vmap_use_count, 1); + } } =20 if (ret) { @@ -384,8 +386,6 @@ int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_obje= ct *shmem, err_put_pages: if (!drm_gem_is_imported(obj)) drm_gem_shmem_unpin_locked(shmem); -err_zero_use: - shmem->vmap_use_count =3D 0; =20 return ret; } @@ -413,14 +413,10 @@ void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem= _object *shmem, } else { dma_resv_assert_held(shmem->base.resv); =20 - if (drm_WARN_ON_ONCE(obj->dev, !shmem->vmap_use_count)) - return; - - if (--shmem->vmap_use_count > 0) - return; - - vunmap(shmem->vaddr); - drm_gem_shmem_unpin_locked(shmem); + if (refcount_dec_and_test(&shmem->vmap_use_count)) { + vunmap(shmem->vaddr); + drm_gem_shmem_unpin_locked(shmem); + } } =20 shmem->vaddr =3D NULL; @@ -672,7 +668,7 @@ void drm_gem_shmem_print_info(const struct drm_gem_shme= m_object *shmem, =20 drm_printf_indent(p, indent, "pages_pin_count=3D%u\n", refcount_read(&shm= em->pages_pin_count)); drm_printf_indent(p, indent, "pages_use_count=3D%u\n", refcount_read(&shm= em->pages_use_count)); - drm_printf_indent(p, indent, "vmap_use_count=3D%u\n", shmem->vmap_use_cou= nt); + drm_printf_indent(p, indent, "vmap_use_count=3D%u\n", refcount_read(&shme= m->vmap_use_count)); drm_printf_indent(p, indent, "vaddr=3D%p\n", shmem->vaddr); } EXPORT_SYMBOL_GPL(drm_gem_shmem_print_info); diff --git a/drivers/gpu/drm/tests/drm_gem_shmem_test.c b/drivers/gpu/drm/t= ests/drm_gem_shmem_test.c index 1459cdb0c413..81cadaecdd4f 100644 --- a/drivers/gpu/drm/tests/drm_gem_shmem_test.c +++ b/drivers/gpu/drm/tests/drm_gem_shmem_test.c @@ -168,7 +168,7 @@ static void drm_gem_shmem_test_vmap(struct kunit *test) shmem =3D drm_gem_shmem_create(drm_dev, TEST_SIZE); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, shmem); KUNIT_EXPECT_NULL(test, shmem->vaddr); - KUNIT_EXPECT_EQ(test, shmem->vmap_use_count, 0); + KUNIT_EXPECT_EQ(test, refcount_read(&shmem->vmap_use_count), 0); =20 ret =3D kunit_add_action_or_reset(test, drm_gem_shmem_free_wrapper, shmem= ); KUNIT_ASSERT_EQ(test, ret, 0); @@ -177,7 +177,7 @@ static void drm_gem_shmem_test_vmap(struct kunit *test) KUNIT_ASSERT_EQ(test, ret, 0); KUNIT_ASSERT_NOT_NULL(test, shmem->vaddr); KUNIT_ASSERT_FALSE(test, iosys_map_is_null(&map)); - KUNIT_EXPECT_EQ(test, shmem->vmap_use_count, 1); + KUNIT_EXPECT_EQ(test, refcount_read(&shmem->vmap_use_count), 1); =20 iosys_map_memset(&map, 0, TEST_BYTE, TEST_SIZE); for (i =3D 0; i < TEST_SIZE; i++) @@ -185,7 +185,7 @@ static void drm_gem_shmem_test_vmap(struct kunit *test) =20 drm_gem_shmem_vunmap_locked(shmem, &map); KUNIT_EXPECT_NULL(test, shmem->vaddr); - KUNIT_EXPECT_EQ(test, shmem->vmap_use_count, 0); + KUNIT_EXPECT_EQ(test, refcount_read(&shmem->vmap_use_count), 0); } =20 /* diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem= _helper.h index 8b9bba87ae63..b4f993da3cae 100644 --- a/include/drm/drm_gem_shmem_helper.h +++ b/include/drm/drm_gem_shmem_helper.h @@ -82,7 +82,7 @@ struct drm_gem_shmem_object { * Reference count on the virtual address. * The address are un-mapped when the count reaches zero. */ - unsigned int vmap_use_count; + refcount_t vmap_use_count; =20 /** * @pages_mark_dirty_on_put: --=20 2.49.0