Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/i915: use shmem_read_mapping_page

Soon tmpfs will stop supporting ->readpage and read_cache_page_gfp(): once
"tmpfs: add shmem_read_mapping_page_gfp" has been applied, this patch can
be applied to ease the transition.

Make i915_gem_object_get_pages_gtt() use shmem_read_mapping_page_gfp() in
the one place it's needed; elsewhere use shmem_read_mapping_page(), with
the mapping's gfp_mask properly initialized.

Forget about __GFP_COLD: since tmpfs initializes its pages with memset,
asking for a cold page is counter-productive.

Include linux/shmem_fs.h also in drm_gem.c: with shmem_file_setup() now
declared there too, we shall remove the prototype from linux/mm.h later.

Signed-off-by: Hugh Dickins <hughd@google.com>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Keith Packard <keithp@keithp.com>
Cc: Dave Airlie <airlied@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Hugh Dickins and committed by
Linus Torvalds
5949eac4 3142b651

+15 -17
+1
drivers/gpu/drm/drm_gem.c
··· 34 34 #include <linux/module.h> 35 35 #include <linux/mman.h> 36 36 #include <linux/pagemap.h> 37 + #include <linux/shmem_fs.h> 37 38 #include "drmP.h" 38 39 39 40 /** @file drm_gem.c
+14 -17
drivers/gpu/drm/i915/i915_gem.c
··· 31 31 #include "i915_drv.h" 32 32 #include "i915_trace.h" 33 33 #include "intel_drv.h" 34 + #include <linux/shmem_fs.h> 34 35 #include <linux/slab.h> 35 36 #include <linux/swap.h> 36 37 #include <linux/pci.h> ··· 360 359 if ((page_offset + remain) > PAGE_SIZE) 361 360 page_length = PAGE_SIZE - page_offset; 362 361 363 - page = read_cache_page_gfp(mapping, offset >> PAGE_SHIFT, 364 - GFP_HIGHUSER | __GFP_RECLAIMABLE); 362 + page = shmem_read_mapping_page(mapping, offset >> PAGE_SHIFT); 365 363 if (IS_ERR(page)) 366 364 return PTR_ERR(page); 367 365 ··· 463 463 if ((data_page_offset + page_length) > PAGE_SIZE) 464 464 page_length = PAGE_SIZE - data_page_offset; 465 465 466 - page = read_cache_page_gfp(mapping, offset >> PAGE_SHIFT, 467 - GFP_HIGHUSER | __GFP_RECLAIMABLE); 466 + page = shmem_read_mapping_page(mapping, offset >> PAGE_SHIFT); 468 467 if (IS_ERR(page)) { 469 468 ret = PTR_ERR(page); 470 469 goto out; ··· 796 797 if ((page_offset + remain) > PAGE_SIZE) 797 798 page_length = PAGE_SIZE - page_offset; 798 799 799 - page = read_cache_page_gfp(mapping, offset >> PAGE_SHIFT, 800 - GFP_HIGHUSER | __GFP_RECLAIMABLE); 800 + page = shmem_read_mapping_page(mapping, offset >> PAGE_SHIFT); 801 801 if (IS_ERR(page)) 802 802 return PTR_ERR(page); 803 803 ··· 905 907 if ((data_page_offset + page_length) > PAGE_SIZE) 906 908 page_length = PAGE_SIZE - data_page_offset; 907 909 908 - page = read_cache_page_gfp(mapping, offset >> PAGE_SHIFT, 909 - GFP_HIGHUSER | __GFP_RECLAIMABLE); 910 + page = shmem_read_mapping_page(mapping, offset >> PAGE_SHIFT); 910 911 if (IS_ERR(page)) { 911 912 ret = PTR_ERR(page); 912 913 goto out; ··· 1555 1558 1556 1559 inode = obj->base.filp->f_path.dentry->d_inode; 1557 1560 mapping = inode->i_mapping; 1561 + gfpmask |= mapping_gfp_mask(mapping); 1562 + 1558 1563 for (i = 0; i < page_count; i++) { 1559 - page = read_cache_page_gfp(mapping, i, 1560 - GFP_HIGHUSER | 1561 - __GFP_COLD | 1562 - __GFP_RECLAIMABLE | 1563 - gfpmask); 1564 + page = shmem_read_mapping_page_gfp(mapping, i, gfpmask); 1564 1565 if (IS_ERR(page)) 1565 1566 goto err_pages; 1566 1567 ··· 3560 3565 { 3561 3566 struct drm_i915_private *dev_priv = dev->dev_private; 3562 3567 struct drm_i915_gem_object *obj; 3568 + struct address_space *mapping; 3563 3569 3564 3570 obj = kzalloc(sizeof(*obj), GFP_KERNEL); 3565 3571 if (obj == NULL) ··· 3570 3574 kfree(obj); 3571 3575 return NULL; 3572 3576 } 3577 + 3578 + mapping = obj->base.filp->f_path.dentry->d_inode->i_mapping; 3579 + mapping_set_gfp_mask(mapping, GFP_HIGHUSER | __GFP_RECLAIMABLE); 3573 3580 3574 3581 i915_gem_info_add_obj(dev_priv, size); 3575 3582 ··· 3949 3950 3950 3951 page_count = obj->base.size / PAGE_SIZE; 3951 3952 for (i = 0; i < page_count; i++) { 3952 - struct page *page = read_cache_page_gfp(mapping, i, 3953 - GFP_HIGHUSER | __GFP_RECLAIMABLE); 3953 + struct page *page = shmem_read_mapping_page(mapping, i); 3954 3954 if (!IS_ERR(page)) { 3955 3955 char *dst = kmap_atomic(page); 3956 3956 memcpy(dst, vaddr + i*PAGE_SIZE, PAGE_SIZE); ··· 4010 4012 struct page *page; 4011 4013 char *dst, *src; 4012 4014 4013 - page = read_cache_page_gfp(mapping, i, 4014 - GFP_HIGHUSER | __GFP_RECLAIMABLE); 4015 + page = shmem_read_mapping_page(mapping, i); 4015 4016 if (IS_ERR(page)) 4016 4017 return PTR_ERR(page); 4017 4018