aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/android/binder_alloc.h
diff options
context:
space:
mode:
authorTodd Kjos <tkjos@android.com>2019-02-08 13:35:14 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-02-12 04:43:57 -0500
commit1a7c3d9bb7a926e88d5f57643e75ad1abfc55013 (patch)
treea64c869735ee00eded6f495cb250afefd96e1bba /drivers/android/binder_alloc.h
parent6cffd79504ce040f460831030d3069fa1c99bb71 (diff)
binder: create userspace-to-binder-buffer copy function
The binder driver uses a vm_area to map the per-process binder buffer space. For 32-bit android devices, this is now taking too much vmalloc space. This patch removes the use of vm_area when copying the transaction data from the sender to the buffer space. Instead of using copy_from_user() for multi-page copies, it now uses binder_alloc_copy_user_to_buffer() which uses kmap() and kunmap() to map each page, and uses copy_from_user() for copying to that page. Signed-off-by: Todd Kjos <tkjos@google.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/android/binder_alloc.h')
-rw-r--r--drivers/android/binder_alloc.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/android/binder_alloc.h b/drivers/android/binder_alloc.h
index c0aadbbf7f19..995155f31dbd 100644
--- a/drivers/android/binder_alloc.h
+++ b/drivers/android/binder_alloc.h
@@ -22,6 +22,7 @@
22#include <linux/vmalloc.h> 22#include <linux/vmalloc.h>
23#include <linux/slab.h> 23#include <linux/slab.h>
24#include <linux/list_lru.h> 24#include <linux/list_lru.h>
25#include <uapi/linux/android/binder.h>
25 26
26extern struct list_lru binder_alloc_lru; 27extern struct list_lru binder_alloc_lru;
27struct binder_transaction; 28struct binder_transaction;
@@ -183,5 +184,12 @@ binder_alloc_get_user_buffer_offset(struct binder_alloc *alloc)
183 return alloc->user_buffer_offset; 184 return alloc->user_buffer_offset;
184} 185}
185 186
187unsigned long
188binder_alloc_copy_user_to_buffer(struct binder_alloc *alloc,
189 struct binder_buffer *buffer,
190 binder_size_t buffer_offset,
191 const void __user *from,
192 size_t bytes);
193
186#endif /* _LINUX_BINDER_ALLOC_H */ 194#endif /* _LINUX_BINDER_ALLOC_H */
187 195