Message ID | 20250110100155.506796-1-andi.shyti@linux.intel.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | drm/i915/gt: Replace kmap with its safer kmap_local_page counterpart | expand |
Hi Andi, On 2025-01-10 at 11:01:55 +0100, Andi Shyti wrote: > kmap_local_page(), unlike kmap(), performs a contextualized > mapping of pages. This means the pages are mapped locally to the > thread that created them, making them invisible outside the > thread and safer to use. > > Replace kmap() and kunmap() with kmap_local_page() and > kunmap_local() counterparts for improved safety. > > Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com> > --- > drivers/gpu/drm/i915/gt/shmem_utils.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gt/shmem_utils.c b/drivers/gpu/drm/i915/gt/shmem_utils.c > index bb696b29ee2c..365c4b8b04f4 100644 > --- a/drivers/gpu/drm/i915/gt/shmem_utils.c > +++ b/drivers/gpu/drm/i915/gt/shmem_utils.c > @@ -108,7 +108,7 @@ static int __shmem_rw(struct file *file, loff_t off, > if (IS_ERR(page)) > return PTR_ERR(page); > > - vaddr = kmap(page); > + vaddr = kmap_local_page(page); > if (write) { > memcpy(vaddr + offset_in_page(off), ptr, this); > set_page_dirty(page); > @@ -116,7 +116,7 @@ static int __shmem_rw(struct file *file, loff_t off, > memcpy(ptr, vaddr + offset_in_page(off), this); > } > mark_page_accessed(page); > - kunmap(page); > + kunmap_local(vaddr); > put_page(page); > > len -= this; > @@ -143,11 +143,11 @@ int shmem_read_to_iosys_map(struct file *file, loff_t off, > if (IS_ERR(page)) > return PTR_ERR(page); > > - vaddr = kmap(page); > + vaddr = kmap_local_page(page); > iosys_map_memcpy_to(map, map_off, vaddr + offset_in_page(off), > this); > mark_page_accessed(page); > - kunmap(page); > + kunmap_local(vaddr); > put_page(page); > > len -= this; > -- Reviewed-by: Krzysztof Karas <krzysztof.karas@intel.com> Krzysztof >
Hi Andi, > On 2025-01-10 at 11:01:55 +0100, Andi Shyti wrote: > > kmap_local_page(), unlike kmap(), performs a contextualized mapping of > > pages. This means the pages are mapped locally to the thread that > > created them, making them invisible outside the thread and safer to > > use. > > > > Replace kmap() and kunmap() with kmap_local_page() and > > kunmap_local() counterparts for improved safety. > > > > Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com> Under gt, kmap() and kunmap() is also used inside swizzle_page() of intel_ggtt_fencing.c Can you also replace it? Thanks, Nitin > > --- > > drivers/gpu/drm/i915/gt/shmem_utils.c | 8 ++++---- > > 1 file changed, 4 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/gt/shmem_utils.c > > b/drivers/gpu/drm/i915/gt/shmem_utils.c > > index bb696b29ee2c..365c4b8b04f4 100644 > > --- a/drivers/gpu/drm/i915/gt/shmem_utils.c > > +++ b/drivers/gpu/drm/i915/gt/shmem_utils.c > > @@ -108,7 +108,7 @@ static int __shmem_rw(struct file *file, loff_t off, > > if (IS_ERR(page)) > > return PTR_ERR(page); > > > > - vaddr = kmap(page); > > + vaddr = kmap_local_page(page); > > if (write) { > > memcpy(vaddr + offset_in_page(off), ptr, this); > > set_page_dirty(page); > > @@ -116,7 +116,7 @@ static int __shmem_rw(struct file *file, loff_t off, > > memcpy(ptr, vaddr + offset_in_page(off), this); > > } > > mark_page_accessed(page); > > - kunmap(page); > > + kunmap_local(vaddr); > > put_page(page); > > > > len -= this; > > @@ -143,11 +143,11 @@ int shmem_read_to_iosys_map(struct file *file, > loff_t off, > > if (IS_ERR(page)) > > return PTR_ERR(page); > > > > - vaddr = kmap(page); > > + vaddr = kmap_local_page(page); > > iosys_map_memcpy_to(map, map_off, vaddr + > offset_in_page(off), > > this); > > mark_page_accessed(page); > > - kunmap(page); > > + kunmap_local(vaddr); > > put_page(page); > > > > len -= this; > > -- > > Reviewed-by: Krzysztof Karas <krzysztof.karas@intel.com> > > Krzysztof > >
diff --git a/drivers/gpu/drm/i915/gt/shmem_utils.c b/drivers/gpu/drm/i915/gt/shmem_utils.c index bb696b29ee2c..365c4b8b04f4 100644 --- a/drivers/gpu/drm/i915/gt/shmem_utils.c +++ b/drivers/gpu/drm/i915/gt/shmem_utils.c @@ -108,7 +108,7 @@ static int __shmem_rw(struct file *file, loff_t off, if (IS_ERR(page)) return PTR_ERR(page); - vaddr = kmap(page); + vaddr = kmap_local_page(page); if (write) { memcpy(vaddr + offset_in_page(off), ptr, this); set_page_dirty(page); @@ -116,7 +116,7 @@ static int __shmem_rw(struct file *file, loff_t off, memcpy(ptr, vaddr + offset_in_page(off), this); } mark_page_accessed(page); - kunmap(page); + kunmap_local(vaddr); put_page(page); len -= this; @@ -143,11 +143,11 @@ int shmem_read_to_iosys_map(struct file *file, loff_t off, if (IS_ERR(page)) return PTR_ERR(page); - vaddr = kmap(page); + vaddr = kmap_local_page(page); iosys_map_memcpy_to(map, map_off, vaddr + offset_in_page(off), this); mark_page_accessed(page); - kunmap(page); + kunmap_local(vaddr); put_page(page); len -= this;
kmap_local_page(), unlike kmap(), performs a contextualized mapping of pages. This means the pages are mapped locally to the thread that created them, making them invisible outside the thread and safer to use. Replace kmap() and kunmap() with kmap_local_page() and kunmap_local() counterparts for improved safety. Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com> --- drivers/gpu/drm/i915/gt/shmem_utils.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)