diff options
| author | Takashi Iwai <tiwai@suse.de> | 2022-04-19 17:26:01 +0200 | 
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2022-04-19 17:26:01 +0200 | 
| commit | 0aea30a07ec6b50de0fc5f5b2ec34a68ead86b61 (patch) | |
| tree | ee7d7d116570f39e47399c8f691a5a7565077eeb /drivers/gpu/drm/i915/gt/shmem_utils.c | |
| parent | 4ddef9c4d70aae0c9029bdec7c3f7f1c1c51ff8c (diff) | |
| parent | 5b933c7262c5b0ea11ea3c3b3ea81add04895954 (diff) | |
Merge tag 'asoc-fix-v5.18-rc3' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Fixes for v5.18
A collection of fixes that came in since the merge window, plus one new
device ID for an x86 laptop.  Nothing that really stands out with
particularly big impact outside of the affected device.
Diffstat (limited to 'drivers/gpu/drm/i915/gt/shmem_utils.c')
| -rw-r--r-- | drivers/gpu/drm/i915/gt/shmem_utils.c | 32 | 
1 files changed, 32 insertions, 0 deletions
| diff --git a/drivers/gpu/drm/i915/gt/shmem_utils.c b/drivers/gpu/drm/i915/gt/shmem_utils.c index 0683b27a3890..402f085f3a02 100644 --- a/drivers/gpu/drm/i915/gt/shmem_utils.c +++ b/drivers/gpu/drm/i915/gt/shmem_utils.c @@ -3,6 +3,7 @@   * Copyright © 2020 Intel Corporation   */ +#include <linux/iosys-map.h>  #include <linux/mm.h>  #include <linux/pagemap.h>  #include <linux/shmem_fs.h> @@ -123,6 +124,37 @@ static int __shmem_rw(struct file *file, loff_t off,  	return 0;  } +int shmem_read_to_iosys_map(struct file *file, loff_t off, +			    struct iosys_map *map, size_t map_off, size_t len) +{ +	unsigned long pfn; + +	for (pfn = off >> PAGE_SHIFT; len; pfn++) { +		unsigned int this = +			min_t(size_t, PAGE_SIZE - offset_in_page(off), len); +		struct page *page; +		void *vaddr; + +		page = shmem_read_mapping_page_gfp(file->f_mapping, pfn, +						   GFP_KERNEL); +		if (IS_ERR(page)) +			return PTR_ERR(page); + +		vaddr = kmap(page); +		iosys_map_memcpy_to(map, map_off, vaddr + offset_in_page(off), +				    this); +		mark_page_accessed(page); +		kunmap(page); +		put_page(page); + +		len -= this; +		map_off += this; +		off = 0; +	} + +	return 0; +} +  int shmem_read(struct file *file, loff_t off, void *dst, size_t len)  {  	return __shmem_rw(file, off, dst, len, false); | 
