VM_IOREMAP is used to access hardware through a mechanism called
I/O mapped memory. Android binder is a IPC machanism which will
not access I/O memory.
Also VM_IOREMAP has alignment requiement which may not needed in
binder.
__get_vm_area_node()
{
...
if (flags & VM_IOREMAP)
align = 1ul << clamp_t(int, fls_long(size),
PAGE_SHIFT, IOREMAP_MAX_ORDER);
...
}
This patch use VM_ALLOC to get vm area.
Below is the throughput test result:
# ./binderThroughputTest -w 100
I run this command 10 times:
before after
average iterations per sec: 11199.9 11886.9
No performance regression found throgh binder test.
Signed-off-by: Ganesh Mahendran <[email protected]>
---
drivers/android/binder.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/android/binder.c b/drivers/android/binder.c
index 3c71b98..b5908ec 100644
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -2901,7 +2901,7 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma)
goto err_already_mapped;
}
- area = get_vm_area(vma->vm_end - vma->vm_start, VM_IOREMAP);
+ area = get_vm_area(vma->vm_end - vma->vm_start, VM_ALLOC);
if (area == NULL) {
ret = -ENOMEM;
failure_string = "get_vm_area";
--
1.9.1
On Tue, Nov 15, 2016 at 05:55:39PM +0800, Ganesh Mahendran wrote:
> VM_IOREMAP is used to access hardware through a mechanism called
> I/O mapped memory. Android binder is a IPC machanism which will
> not access I/O memory.
>
> Also VM_IOREMAP has alignment requiement which may not needed in
> binder.
> __get_vm_area_node()
> {
> ...
> if (flags & VM_IOREMAP)
> align = 1ul << clamp_t(int, fls_long(size),
> PAGE_SHIFT, IOREMAP_MAX_ORDER);
> ...
> }
>
> This patch use VM_ALLOC to get vm area.
>
> Below is the throughput test result:
>
> # ./binderThroughputTest -w 100
> I run this command 10 times:
> before after
> average iterations per sec: 11199.9 11886.9
>
> No performance regression found throgh binder test.
>
> Signed-off-by: Ganesh Mahendran <[email protected]>
> ---
> drivers/android/binder.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
What changed from v1?
Always list that below the --- line.
thanks,
greg k-h
Hi, Greg
2016-11-15 18:18 GMT+08:00 Greg KH <[email protected]>:
> On Tue, Nov 15, 2016 at 05:55:39PM +0800, Ganesh Mahendran wrote:
>> VM_IOREMAP is used to access hardware through a mechanism called
>> I/O mapped memory. Android binder is a IPC machanism which will
>> not access I/O memory.
>>
>> Also VM_IOREMAP has alignment requiement which may not needed in
>> binder.
>> __get_vm_area_node()
>> {
>> ...
>> if (flags & VM_IOREMAP)
>> align = 1ul << clamp_t(int, fls_long(size),
>> PAGE_SHIFT, IOREMAP_MAX_ORDER);
>> ...
>> }
>>
>> This patch use VM_ALLOC to get vm area.
>>
>> Below is the throughput test result:
>>
>> # ./binderThroughputTest -w 100
>> I run this command 10 times:
>> before after
>> average iterations per sec: 11199.9 11886.9
>>
>> No performance regression found throgh binder test.
>>
>> Signed-off-by: Ganesh Mahendran <[email protected]>
>> ---
>> drivers/android/binder.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> What changed from v1?
Sorry for missing the change information.
In V2, I run the binder test. And there is no side effect with this
patch.
>
> Always list that below the --- line.
Thanks for reminder.
>
> thanks,
>
> greg k-h