Loading drivers/gpu/drm/udl/udl_gem.c +6 −38 Original line number Diff line number Diff line Loading @@ -117,55 +117,23 @@ int udl_gem_init_object(struct drm_gem_object *obj) static int udl_gem_get_pages(struct udl_gem_object *obj, gfp_t gfpmask) { int page_count, i; struct page *page; struct inode *inode; struct address_space *mapping; struct page **pages; if (obj->pages) return 0; page_count = obj->base.size / PAGE_SIZE; BUG_ON(obj->pages != NULL); obj->pages = drm_malloc_ab(page_count, sizeof(struct page *)); if (obj->pages == NULL) return -ENOMEM; inode = file_inode(obj->base.filp); mapping = inode->i_mapping; gfpmask |= mapping_gfp_mask(mapping); pages = drm_gem_get_pages(&obj->base, gfpmask); if (IS_ERR(pages)) return PTR_ERR(pages); for (i = 0; i < page_count; i++) { page = shmem_read_mapping_page_gfp(mapping, i, gfpmask); if (IS_ERR(page)) goto err_pages; obj->pages[i] = page; } obj->pages = pages; return 0; err_pages: while (i--) page_cache_release(obj->pages[i]); drm_free_large(obj->pages); obj->pages = NULL; return PTR_ERR(page); } static void udl_gem_put_pages(struct udl_gem_object *obj) { int page_count = obj->base.size / PAGE_SIZE; int i; if (obj->base.import_attach) { drm_free_large(obj->pages); obj->pages = NULL; return; } for (i = 0; i < page_count; i++) page_cache_release(obj->pages[i]); drm_free_large(obj->pages); drm_gem_put_pages(&obj->base, obj->pages, false, false); obj->pages = NULL; } Loading Loading
drivers/gpu/drm/udl/udl_gem.c +6 −38 Original line number Diff line number Diff line Loading @@ -117,55 +117,23 @@ int udl_gem_init_object(struct drm_gem_object *obj) static int udl_gem_get_pages(struct udl_gem_object *obj, gfp_t gfpmask) { int page_count, i; struct page *page; struct inode *inode; struct address_space *mapping; struct page **pages; if (obj->pages) return 0; page_count = obj->base.size / PAGE_SIZE; BUG_ON(obj->pages != NULL); obj->pages = drm_malloc_ab(page_count, sizeof(struct page *)); if (obj->pages == NULL) return -ENOMEM; inode = file_inode(obj->base.filp); mapping = inode->i_mapping; gfpmask |= mapping_gfp_mask(mapping); pages = drm_gem_get_pages(&obj->base, gfpmask); if (IS_ERR(pages)) return PTR_ERR(pages); for (i = 0; i < page_count; i++) { page = shmem_read_mapping_page_gfp(mapping, i, gfpmask); if (IS_ERR(page)) goto err_pages; obj->pages[i] = page; } obj->pages = pages; return 0; err_pages: while (i--) page_cache_release(obj->pages[i]); drm_free_large(obj->pages); obj->pages = NULL; return PTR_ERR(page); } static void udl_gem_put_pages(struct udl_gem_object *obj) { int page_count = obj->base.size / PAGE_SIZE; int i; if (obj->base.import_attach) { drm_free_large(obj->pages); obj->pages = NULL; return; } for (i = 0; i < page_count; i++) page_cache_release(obj->pages[i]); drm_free_large(obj->pages); drm_gem_put_pages(&obj->base, obj->pages, false, false); obj->pages = NULL; } Loading