Skip to content

Commit e7b840f

Browse files
Taotao Chenbrauner
authored andcommitted
drm/i915: Use kernel_write() in shmem object create
Replace the write_begin/write_end loop in i915_gem_object_create_shmem_from_data() with call to kernel_write(). This function initializes shmem-backed GEM objects. kernel_write() simplifies the code by removing manual folio handling. Part of a series refactoring address_space_operations write_begin and write_end callbacks to use struct kiocb for passing write context and flags. Signed-off-by: Taotao Chen <chentaotao@didiglobal.com> Link: https://lore.kernel.org/20250716093559.217344-2-chentaotao@didiglobal.com Signed-off-by: Christian Brauner <brauner@kernel.org>
1 parent f2e467a commit e7b840f

1 file changed

Lines changed: 9 additions & 24 deletions

File tree

drivers/gpu/drm/i915/gem/i915_gem_shmem.c

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -637,9 +637,8 @@ i915_gem_object_create_shmem_from_data(struct drm_i915_private *i915,
637637
{
638638
struct drm_i915_gem_object *obj;
639639
struct file *file;
640-
const struct address_space_operations *aops;
641-
loff_t pos;
642-
int err;
640+
loff_t pos = 0;
641+
ssize_t err;
643642

644643
GEM_WARN_ON(IS_DGFX(i915));
645644
obj = i915_gem_object_create_shmem(i915, round_up(size, PAGE_SIZE));
@@ -649,29 +648,15 @@ i915_gem_object_create_shmem_from_data(struct drm_i915_private *i915,
649648
GEM_BUG_ON(obj->write_domain != I915_GEM_DOMAIN_CPU);
650649

651650
file = obj->base.filp;
652-
aops = file->f_mapping->a_ops;
653-
pos = 0;
654-
do {
655-
unsigned int len = min_t(typeof(size), size, PAGE_SIZE);
656-
struct folio *folio;
657-
void *fsdata;
658-
659-
err = aops->write_begin(file, file->f_mapping, pos, len,
660-
&folio, &fsdata);
661-
if (err < 0)
662-
goto fail;
651+
err = kernel_write(file, data, size, &pos);
663652

664-
memcpy_to_folio(folio, offset_in_folio(folio, pos), data, len);
653+
if (err < 0)
654+
goto fail;
665655

666-
err = aops->write_end(file, file->f_mapping, pos, len, len,
667-
folio, fsdata);
668-
if (err < 0)
669-
goto fail;
670-
671-
size -= len;
672-
data += len;
673-
pos += len;
674-
} while (size);
656+
if (err != size) {
657+
err = -EIO;
658+
goto fail;
659+
}
675660

676661
return obj;
677662

0 commit comments

Comments
 (0)