Messages in this thread | | | Subject | Re: [PATCH] Export shmem_file_setup and shmem_getpage for DRM-GEM | From | Keith Packard <> | Date | Mon, 04 Aug 2008 04:45:52 -0700 |
| |
On Mon, 2008-08-04 at 20:43 +1000, Nick Piggin wrote:
> True. It would make it possible for the userspace program to pass in > anonymous pages, but maybe not a big deal if you're using files and > shmem based management.
We considered using anonymous pages, but as the user-mapping is not a feature, it seemed like it wasn't the right model. Plus, many of these objects need to be shared across multiple processes, so anonymous pages would be a pain there.
> pagecache_write_begin/pagecache_write_end should be reasonable, but you > have to be careful of the semantics of it. For example, you can't really > read anything from the page inside the calls because the filesystem may > not bring it up to date.
Ok, that's useful information which isn't clear from the docs.
> read_mapping_page might help there.
That does look a lot more like what I want, as it returns an unlocked page. And, makes my code look cleaner to boot:
inode = obj->filp->f_path.dentry->d_inode; mapping = inode->i_mapping; for (i = 0; i < page_count; i++) { page = read_mapping_page(mapping, i, NULL); if (IS_ERR(page)) { ret = PTR_ERR(page); DRM_ERROR("read_mapping_page failed: %d\n", ret); i915_gem_object_free_page_list(obj); return ret; } obj_priv->page_list[i] = page; }
Does this look like it conforms to the vfs api? It appears to work when using shmem at least.
> Right, that's your specific implementation, but for some cases the > memory management can map or be implemented using generic primitives. > Using pagecache for your memory for example should work nicely. Making > it shmem specific and using internal APIs seems like a negative step > until you really have a good reason to.
Yup, I'm liking the general file mechanism, I used shmem only because that seemed like the obvious file system you'd want underneath these objects.
-- keith.packard@intel.com [unhandled content-type:application/pgp-signature] | |