These patches were generated from: https://github.com/raspberrypi/linux/commits/rpi-6.12.y With the following command: git format-patch -N v6.12.27..HEAD (HEAD -> 8d3206ee456a5ecdf9ddbfd8e5e231e4f0cd716e) Exceptions: - (def)configs patches - github workflows patches - applied & reverted patches - readme patches - wireless patches Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
101 lines
3.7 KiB
Diff
101 lines
3.7 KiB
Diff
From e63bfca26dee77f0ddaa674ff9d4338c771d98c5 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Ma=C3=ADra=20Canal?= <mcanal@igalia.com>
|
|
Date: Mon, 23 Sep 2024 10:55:10 -0300
|
|
Subject: [PATCH] drm/gem: Create shmem GEM object in a given mountpoint
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Commit be431dfec976e553a08883e26d0d0cc2598a8dfa upstream
|
|
|
|
Create a function `drm_gem_shmem_create_with_mnt()`, similar to
|
|
`drm_gem_shmem_create()`, that has a mountpoint as a argument. This
|
|
function will create a shmem GEM object in a given tmpfs mountpoint.
|
|
|
|
This function will be useful for drivers that have a special mountpoint
|
|
with flags enabled.
|
|
|
|
Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
|
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
|
|
Link: https://patchwork.freedesktop.org/patch/msgid/20240923141348.2422499-7-mcanal@igalia.com
|
|
---
|
|
drivers/gpu/drm/drm_gem_shmem_helper.c | 30 ++++++++++++++++++++++----
|
|
include/drm/drm_gem_shmem_helper.h | 3 +++
|
|
2 files changed, 29 insertions(+), 4 deletions(-)
|
|
|
|
--- a/drivers/gpu/drm/drm_gem_shmem_helper.c
|
|
+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c
|
|
@@ -49,7 +49,8 @@ static const struct drm_gem_object_funcs
|
|
};
|
|
|
|
static struct drm_gem_shmem_object *
|
|
-__drm_gem_shmem_create(struct drm_device *dev, size_t size, bool private)
|
|
+__drm_gem_shmem_create(struct drm_device *dev, size_t size, bool private,
|
|
+ struct vfsmount *gemfs)
|
|
{
|
|
struct drm_gem_shmem_object *shmem;
|
|
struct drm_gem_object *obj;
|
|
@@ -76,7 +77,7 @@ __drm_gem_shmem_create(struct drm_device
|
|
drm_gem_private_object_init(dev, obj, size);
|
|
shmem->map_wc = false; /* dma-buf mappings use always writecombine */
|
|
} else {
|
|
- ret = drm_gem_object_init(dev, obj, size);
|
|
+ ret = drm_gem_object_init_with_mnt(dev, obj, size, gemfs);
|
|
}
|
|
if (ret) {
|
|
drm_gem_private_object_fini(obj);
|
|
@@ -123,11 +124,32 @@ err_free:
|
|
*/
|
|
struct drm_gem_shmem_object *drm_gem_shmem_create(struct drm_device *dev, size_t size)
|
|
{
|
|
- return __drm_gem_shmem_create(dev, size, false);
|
|
+ return __drm_gem_shmem_create(dev, size, false, NULL);
|
|
}
|
|
EXPORT_SYMBOL_GPL(drm_gem_shmem_create);
|
|
|
|
/**
|
|
+ * drm_gem_shmem_create_with_mnt - Allocate an object with the given size in a
|
|
+ * given mountpoint
|
|
+ * @dev: DRM device
|
|
+ * @size: Size of the object to allocate
|
|
+ * @gemfs: tmpfs mount where the GEM object will be created
|
|
+ *
|
|
+ * This function creates a shmem GEM object in a given tmpfs mountpoint.
|
|
+ *
|
|
+ * Returns:
|
|
+ * A struct drm_gem_shmem_object * on success or an ERR_PTR()-encoded negative
|
|
+ * error code on failure.
|
|
+ */
|
|
+struct drm_gem_shmem_object *drm_gem_shmem_create_with_mnt(struct drm_device *dev,
|
|
+ size_t size,
|
|
+ struct vfsmount *gemfs)
|
|
+{
|
|
+ return __drm_gem_shmem_create(dev, size, false, gemfs);
|
|
+}
|
|
+EXPORT_SYMBOL_GPL(drm_gem_shmem_create_with_mnt);
|
|
+
|
|
+/**
|
|
* drm_gem_shmem_free - Free resources associated with a shmem GEM object
|
|
* @shmem: shmem GEM object to free
|
|
*
|
|
@@ -765,7 +787,7 @@ drm_gem_shmem_prime_import_sg_table(stru
|
|
size_t size = PAGE_ALIGN(attach->dmabuf->size);
|
|
struct drm_gem_shmem_object *shmem;
|
|
|
|
- shmem = __drm_gem_shmem_create(dev, size, true);
|
|
+ shmem = __drm_gem_shmem_create(dev, size, true, NULL);
|
|
if (IS_ERR(shmem))
|
|
return ERR_CAST(shmem);
|
|
|
|
--- a/include/drm/drm_gem_shmem_helper.h
|
|
+++ b/include/drm/drm_gem_shmem_helper.h
|
|
@@ -97,6 +97,9 @@ struct drm_gem_shmem_object {
|
|
container_of(obj, struct drm_gem_shmem_object, base)
|
|
|
|
struct drm_gem_shmem_object *drm_gem_shmem_create(struct drm_device *dev, size_t size);
|
|
+struct drm_gem_shmem_object *drm_gem_shmem_create_with_mnt(struct drm_device *dev,
|
|
+ size_t size,
|
|
+ struct vfsmount *gemfs);
|
|
void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem);
|
|
|
|
void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem);
|