summaryrefslogtreecommitdiff
path: root/drivers/gpu/ion
AgeCommit message (Collapse)Author
2013-11-07ion: move into stagingColin Cross
Move ion from drivers/gpu/ion to drivers/android/staging/ion. Change-Id: Id6e996aa3954cbb8e1a8abc9578a56204f5eb211 Signed-off-by: Colin Cross <ccross@android.com>
2013-11-07gpu: ion: delete ion_system_mapper.cColin Cross
The mapper abstraction layer was removed before the initial ion commit, but a stray ion_system_mapper.c file was left in. Delete it. Change-Id: I0001d1ea1b866ebd7ec1306e94472c67a094855f Signed-off-by: Colin Cross <ccross@android.com>
2013-10-24ion: add compat_ioctlRom Lemarchand
Add a compat_ioctl to the ion driver Change-Id: I43da387e22ff9c4a29f0159dfe9e898efc500553 Signed-off-by: Rom Lemarchand <romlem@google.com>
2013-10-24ion: change ion_user_handle_t definition to intRom Lemarchand
Turn ion_user_handle_t to int. This change reflects the underlying type returned by the ion driver. Change-Id: I40390dae8138327769510525bf62e55877a4b37d Signed-off-by: Rom Lemarchand <romlem@google.com>
2013-10-24ion: add new ion_user_handle_t type for the user-space tokenRom Lemarchand
Declare new ion_user_handle_t type to contain the token returned to user-space. This allows a 2-step migration of the user-space code to a new kernel header first, then will allow us to change the definition of the ion_user_handle_type_t to int without breaking the API. Change-Id: I4200b6600df8e56fe98cf1580a13a65cb25ec646 Signed-off-by: Rom Lemarchand <romlem@google.com> (cherry picked from commit ebb8269bbb05b06ecedca3e21b3e65f23d48eadd)
2013-09-19ion: don't use id 0 for handle cookieColin Cross
ion userspace clients think that the cookie is a pointer, so they use NULL to check if the handle has been initialized. Set the first id number to 1. Change-Id: Ifb9af6029a8b08f57e41bc6160cc11e11001a2a9 Signed-off-by: Colin Cross <ccross@android.com>
2013-09-19ion: index client->handles rbtree by bufferColin Cross
The only remaining users of the client->handles rbtree are iterating through it like a list. Keep the rbtree, but change its index to be the buffer address instead of the handle address, which makes ion_handle_lookup a fast rbtree search. Change-Id: Ie7d974b3a5d9831c0d664de85ddae8db3c3abdf9 Signed-off-by: Colin Cross <ccross@android.com>
2013-09-19ion: replace userspace handle cookies with idrColin Cross
Userspace handles should not leak kernel virtual addresses to userspace. They have to be validated by looking them up in an rbtree anyways, so replace them with an idr and validate them by using idr_find to convert the id number to the struct ion_handle pointer. Change-Id: Iab5667ba6f3a73256fec3949b23a9a6f8e14a283 Signed-off-by: Colin Cross <ccross@android.com>
2013-09-19ion: remove IS_ERR_OR_NULLColin Cross
IS_ERR_OR_NULL is often part of a bad pattern that can accidentally return 0 on error: if (IS_ERR_OR_NULL(ptr)) return PTR_ERR(ptr); It also usually means that the errors of a function are not well defined. Replace all uses in ion.c by ensure that the return type of any function in ion is an ERR_PTR. Specify that the expected return value from map_kernel or map_dma heap ops is ERR_PTR, and warn if a heap returns NULL. Change-Id: I6e7ea0d2e62fa08d4e372a7ef6da649f7a62289c Signed-off-by: Colin Cross <ccross@android.com>
2013-09-19ion: convert map_kernel to return ERR_PTRColin Cross
ion is going to stop accepting NULL as an error value, use ERR_PTR. Change-Id: I030e8b72138904e38a4a5d225beaaa98427651fb Signed-off-by: Colin Cross <ccross@android.com>
2013-09-19ion: add free list size to heap debug filesColin Cross
Change-Id: I3c6309afdbd661a2f870fd1ba3fea9543e229882 Signed-off-by: Colin Cross <ccross@android.com>
2013-09-19ion: chunk_heap: fix leak in allocated counterColin Cross
buffer->size is controlled by the outer ion layer, don't modify it inside the heap. Instead, compute the rounded up allocated size on demand. Change-Id: I288ffc1221ce96cfe2591468502ac3279065bde4 Signed-off-by: Colin Cross <ccross@android.com>
2013-09-19gpu: ion: Fix performance issue in faulting codeRebecca Schultz Zavin
Previously the code to fault ion buffers in one page at a time had a performance problem caused by the requirement to traverse the sg list looking for the right page to load in (a result of the fact that the items in the list may not be of uniform size). To fix the problem, for buffers that will be faulted in, also keep a flat array of all the pages in the buffer to use from the fault handler. To recover some of the additional memory footprint this creates per buffer, dirty bits used to indicate which pages have been faulted in to the cpu are now stored in the low bit of each page struct pointer in the page array. Change-Id: I891b077dc0c88ed6d416b256626d8778fd67be84 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-09-19gpu: ion: add CMA heapBenjamin Gaignard
New heap type ION_HEAP_TYPE_DMA where allocation is done with dma_alloc_coherent API. device coherent_dma_mask must be set to DMA_BIT_MASK(32). ion_platform_heap private field is used to retrieve the device linked to CMA, if NULL the default CMA area is used. ion_cma_get_sgtable is a copy of dma_common_get_sgtable function which should be in kernel 3.5 Change-Id: If4b1a3f9c8a6bd72053226208832f4971e44372f Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
2013-07-01ion: Add Kconfig dependency to ARMJohn Stultz
The ion code has some very specific arm-isms which keeps it from building on other architectures. These should probably be resolved, but in the mean time, add a dependency on CONFIG_ARM to avoid build failures. v2: Fix earlier flub, sending out an early untested version of the patch. Change-Id: I5979af1ad59d1eeddd9e08763b1cbc946cf82339 Cc: Arve Hjønnevåg <arve@android.com> Cc: Rebecca Schultz Zavin <rebecca@android.com> Cc: Android Kernel Team <kernel-team@android.com> Signed-off-by: John Stultz <john.stultz@linaro.org>
2013-07-01gpu: ion: Remove __GFP_NO_KSWAPDArve Hjønnevåg
It no longer exists. Signed-off-by: Arve Hjønnevåg <arve@android.com>
2013-07-01gpu: ion: __dma_page_cpu_to_dev -> arm_dma_ops.sync_single_for_device hackArve Hjønnevåg
Signed-off-by: Arve Hjønnevåg <arve@android.com>
2013-07-01gpu: ion: Also shrink memory cached in the deferred free listRebecca Schultz Zavin
When the system is low on memory, we want to shrink any cached system memory ion is holding. Previously we were shrinking memory in the page pools, but not in the deferred free list. This patch makes it possible to shrink both. It also moves the shrinker code into the heaps so they can correctly manage any caches they might contain. Change-Id: I177f587f999a5220eddbf7af94745aae736cac75 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Fix bug in ion shrinkerRebecca Schultz Zavin
The high variable was sometimes used uninitialized Change-Id: I2f51413fd2d063fdff325047e824dc8c749d9e0a Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: ion_chunk_heap: Zero chunk heap memory at creation timeRebecca Schultz Zavin
Allocations from the ion heap need to be zeroed to protect userspace from seeing memory belonging to other processes. First allocations from this heap were not zero'd allowing users to see memory from other processes on a warm reset. Change-Id: I524a7b79cb76c390c870fcf8b30d213185fc85a0 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: fix kfree/list_del orderJP Abgrall
With CONFIG_SLUB_DEBUG_ON it would panic during ion_alloc() ion_buffer_create() io_heap_drain_freelist() Signed-off-by: JP Abgrall <jpa@google.com>
2013-07-01gpu: ion: Make ion_free asynchronousRebecca Schultz Zavin
Add the ability for a heap to free buffers asynchrounously. Freed buffers are placed on a free list and freed from a low priority background thread. If allocations from a particular heap fail, the free list is drained. This patch also enable asynchronous frees from the chunk heap. Change-Id: Idfdbc8608b6cbd9e27d2e31ea4fd84fea9f69f7d Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Add support for sharing buffers with dma buf kernel handlesJohan Mossberg
Currently ion can only share buffers with dma buf fd's. Fd's can not be used inside the kernel as they are process specific so support for sharing buffers with dma buf kernel handles is needed to support kernel only use cases. An example use case could be a GPU driver using ion that wants to share its output buffers with a 3d party display controller driver supporting dma buf. Change-Id: If1b3753ddbd5b44c5a3e622055d5473e16fc1c48 Signed-off-by: Johan Mossberg <johan.mossberg@stericsson.com>
2013-07-01gpu: ion: Only flush buffers in the chunk heap if they were used cachedRebecca Schultz Zavin
Change-Id: I4ffcf81a6be09e968310bbd882fb017415d61b48 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Refactor the code to zero buffersRebecca Schultz Zavin
Refactor the code in the system heap used to map and zero the buffers into a seperate utility so it can be called from other heaps. Use it from the chunk heap. Change-Id: I706341ae42b80bc4aae8a8614b4f73435bbf05d9 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Modify zeroing code so it only allocates address space onceRebecca Schultz Zavin
vmap/vunmap spend a significant amount of time allocating the address space to map into. Rather than allocating address space for each page, instead allocate once for the entire allocation and then just map and unmap each page into that address space. Change-Id: I4a5c850717c80f75506a36b7ec2bcd55857b8dea Signed-off-by: Rebecca Schultz Zavin <rschultz@google.com>
2013-07-01gpu: ion: Remove heapmask from clientRebecca Schultz Zavin
The heapmask in the client generally wasn't being used. This patch removes it. Change-Id: I3526723fbf8f2e81c28c0733deb583ea14bdd837 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Export ion_client_createJohan Mossberg
Will enable modules to allocate memory with ion. Signed-off-by: Johan Mossberg <johan.mossberg@stericsson.com>
2013-07-01gpu: ion: Clarify variable names and comments around heap ids v typesRebecca Schultz Zavin
There is some confusion between when to use the heap type and when the id. This patch clarifies this by using clearer variable names and describing the intention in the comments. Also fixes the client debug code to print heaps by id instead of type. Change-Id: Ie8b3dadded52e18590fcb2ca94001f6ed46ef07d Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Add chunk heapRebecca Schultz Zavin
This patch adds support for a chunk heap that allows for buffers that are made up of a list of fixed size chunks taken from a carveout. Chunk sizes are configured when the heaps are created by passing the chunk size in the priv field of the heap platform data. Change-Id: Ia9e003f727b553a92804264debe119dcf78b14e0 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Refactor common mapping functions out of system heapRebecca Schultz Zavin
The system heap contained several general purpose functions to map buffers to the kernel and userspace. This patch refactors those into ion_heap.c so they can be used by other heaps. Change-Id: If64591798bdc2c248bf9064ace2c927909d7adb8 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Switch heap rbtree to a prio listRebecca Schultz Zavin
Switches the rbtree tree of heaps for a plist. This significantly simplifies the code and the list is small and is modified only at first boot so the rbtree is unnecessary. This also switches the traversal of the heap list to traverse from highest to lowest id's. This allows allocations to pass a heap mask that falls back on the system heap -- typically id 0, which is the common case. Change-Id: I715be6f4cf020a84ca4f1947c30ee3d2559fb523 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Fix bug where MAP ioctl was no longer supportedRebecca Schultz Zavin
Change-Id: Idbe628ed7dbd6a14469194120b94934d6e99d367 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Modify reserve function for carveouts with no start addressRebecca Schultz Zavin
This patch allows you to specify a heap that requires carveout memory but that doesn't specify a start address. Memblock_alloc will be called to find a location for these heaps. Change-Id: I9c79b30e3105e796060fc74b058f04093ee5e96e Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: fix compilation warningBenjamin Gaignard
use atomic_read to get the refcount value to avoid compilation warning Change-Id: I9bf0a07c787af8f87ac19314f996a78142f72f6b Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
2013-07-01gpu: ion: fix carveout opsBenjamin Gaignard
when using carveout heap ion_buffer_create function failed because map_dma and unmap_dma operations aren't set by carveout heap. Change-Id: I817bfad742abfab10b01d9b3d2e18bdf812a1307 Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
2013-07-01gpu: ion: Fix bug in zeroing pages in system heapRebecca Schultz Zavin
Pages are zeroed for security purposes when returned to the ion heap. There was a bug in this code preventing this from happening. Bug: 7573871 Change-Id: I79c22ee1da98f306199f3a192eaec4e81d5fd059 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Fix bug in ion_system_heap map_userRebecca Schultz Zavin
When the requested mmap length was not an integer number of chunks or the buffer, or if an offset was provided, a bug would cause extra or incorrect pages of the buffer to be mapped. Change-Id: I2766763d86048f026eeef0e0388b7de0e25c2093 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Don't flush allocatoins that come from the page poolsRebecca Schultz Zavin
Change-Id: Ib08cb2cea3b6ea4b1ebf5a1b28abe6b9374fd2bd Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Clear GFP_WAIT flag on high order allocationsRebecca Schultz Zavin
This will prevent the kernel from kicking off compaction when higher order allocations are made. Instead we will get these high order allocations only if they are readily available. Change-Id: I5c038781ef4028c1c0a1a52b6cb549d26550a124 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Refactor lockingRebecca Schultz Zavin
Removes contention for lock between allocate and free by reducing the length of time the lock is held for. Split out a seperate lock to protect the list of heaps and replace it with a rwsem since the list will most likely only be updated during initialization. Change-Id: I3017ccaa2126c7a24ab22b18e1ee553983977c37 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Switch to using a single shrink functionRebecca Schultz Zavin
The single shrink function will free lower order pages first. This enables compaction to work properly. Change-Id: Icbeefa9e84c2eacf6962d9536ab66a8b059cc941
2013-07-01gpu: ion: Fix lockdep issue in ion_page_poolRebecca Schultz Zavin
Currently the mutex is held while kmalloc is called, under a low memory condition this might trigger the shrinker which also takes this mutex. Refactor so the mutex is not held during allocation. Change-Id: Ic1d3b2f69e61209191bac84724ba56f6b98e2bc4 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Fix several issues with page poolRebecca Schultz Zavin
Split out low and high mem pages so they are correctly reported when the shrinker is called. Fix potential deadlock caused by holding the page pool lock while allocationg and also needing that lock from the shrink function Change-Id: I6def3a3111f59914ef6b5b59d81a6fde37cb60c5 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Modify gfp flags in ion_system_heapRebecca Schultz Zavin
When allocations larger than order 4 are made, use _GFP_NORETRY and __GFP_NO_KSWAPD so kswapd doesn't get kicked off to reclaim these larger chunks. For smaller allocaitons, these are unnecessary, as the system should be able to reclaim these. Change-Id: I6b45cd1a595d25cc39622e3dbcc04d84fa1b7db8 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Use the ion_page_pool from the system heapRebecca Schultz Zavin
With this change the system heap will use pagepools to avoid having to invalidate memory when it is allocated, a significant performance improvement on some systems. Change-Id: I96ab778d67c4b19805883dcfa44d750811cdff48 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Add ion_page_pool.Rebecca Schultz Zavin
This patch adds a new utility heaps can use to manage memory. In the past we have found it can be very expensive to manage the caches when allocating memory, but it is imposible to know whether a previous user of a given memory allocation had a cached mapping. This patch adds the ability to store a pool of pages that were previously used uncached so that cache maintenance only need be done when growing this pool. The pool also contains a shrinker so memory from the pool can be recovered in low memory conditions. Change-Id: I686fd7d192060fd32d34ef66471f62b7829006ee Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: use vmalloc to allocate page array to map kernelRebecca Schultz Zavin
When ion_map_kernel is execute the system must allocate an array large enough to hold a pointer to each page in the buffer. If the buffer is very large and the system memory has become very fragmented, there may not be sufficient high order allocations available from kmalloc. Use vmalloc instead. Change-Id: I5fabf79be6cfd158f7805bfca6267a60c4708582 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: ion_system_heap: Fix bug preventing compilationRebecca Schultz Zavin
Change-Id: I91d77492b99d09c7abdfaa09df280a20ee83f428 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2013-07-01gpu: ion: Stop trying to allocate from an order on first failureRebecca Schultz Zavin
With this patch the system heap will only try to allocate from each order as long as allocations succeed. If it failes to obtain a higher order allocation, it doesn't retry that order. Change-Id: I0d9144b4c30cc0e427acdcad2f1f12ae7f37f827 Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>