Skip to content

Commit 63c466e

Browse files
mairacanalpopcornmix
authored andcommitted
drm/gem: Create shmem GEM object in a given mountpoint
Commit be431df 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
1 parent 1995a0e commit 63c466e

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

drivers/gpu/drm/drm_gem_shmem_helper.c

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ static const struct drm_gem_object_funcs drm_gem_shmem_funcs = {
4949
};
5050

5151
static struct drm_gem_shmem_object *
52-
__drm_gem_shmem_create(struct drm_device *dev, size_t size, bool private)
52+
__drm_gem_shmem_create(struct drm_device *dev, size_t size, bool private,
53+
struct vfsmount *gemfs)
5354
{
5455
struct drm_gem_shmem_object *shmem;
5556
struct drm_gem_object *obj;
@@ -76,7 +77,7 @@ __drm_gem_shmem_create(struct drm_device *dev, size_t size, bool private)
7677
drm_gem_private_object_init(dev, obj, size);
7778
shmem->map_wc = false; /* dma-buf mappings use always writecombine */
7879
} else {
79-
ret = drm_gem_object_init(dev, obj, size);
80+
ret = drm_gem_object_init_with_mnt(dev, obj, size, gemfs);
8081
}
8182
if (ret) {
8283
drm_gem_private_object_fini(obj);
@@ -123,10 +124,31 @@ __drm_gem_shmem_create(struct drm_device *dev, size_t size, bool private)
123124
*/
124125
struct drm_gem_shmem_object *drm_gem_shmem_create(struct drm_device *dev, size_t size)
125126
{
126-
return __drm_gem_shmem_create(dev, size, false);
127+
return __drm_gem_shmem_create(dev, size, false, NULL);
127128
}
128129
EXPORT_SYMBOL_GPL(drm_gem_shmem_create);
129130

131+
/**
132+
* drm_gem_shmem_create_with_mnt - Allocate an object with the given size in a
133+
* given mountpoint
134+
* @dev: DRM device
135+
* @size: Size of the object to allocate
136+
* @gemfs: tmpfs mount where the GEM object will be created
137+
*
138+
* This function creates a shmem GEM object in a given tmpfs mountpoint.
139+
*
140+
* Returns:
141+
* A struct drm_gem_shmem_object * on success or an ERR_PTR()-encoded negative
142+
* error code on failure.
143+
*/
144+
struct drm_gem_shmem_object *drm_gem_shmem_create_with_mnt(struct drm_device *dev,
145+
size_t size,
146+
struct vfsmount *gemfs)
147+
{
148+
return __drm_gem_shmem_create(dev, size, false, gemfs);
149+
}
150+
EXPORT_SYMBOL_GPL(drm_gem_shmem_create_with_mnt);
151+
130152
/**
131153
* drm_gem_shmem_free - Free resources associated with a shmem GEM object
132154
* @shmem: shmem GEM object to free
@@ -765,7 +787,7 @@ drm_gem_shmem_prime_import_sg_table(struct drm_device *dev,
765787
size_t size = PAGE_ALIGN(attach->dmabuf->size);
766788
struct drm_gem_shmem_object *shmem;
767789

768-
shmem = __drm_gem_shmem_create(dev, size, true);
790+
shmem = __drm_gem_shmem_create(dev, size, true, NULL);
769791
if (IS_ERR(shmem))
770792
return ERR_CAST(shmem);
771793

include/drm/drm_gem_shmem_helper.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ struct drm_gem_shmem_object {
9797
container_of(obj, struct drm_gem_shmem_object, base)
9898

9999
struct drm_gem_shmem_object *drm_gem_shmem_create(struct drm_device *dev, size_t size);
100+
struct drm_gem_shmem_object *drm_gem_shmem_create_with_mnt(struct drm_device *dev,
101+
size_t size,
102+
struct vfsmount *gemfs);
100103
void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem);
101104

102105
void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem);

0 commit comments

Comments
 (0)