binder: initialize lru pages in mmap callback
authorCarlos Llamas <cmllamas@google.com>
Fri, 1 Dec 2023 17:21:47 +0000 (17:21 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 5 Dec 2023 00:23:40 +0000 (09:23 +0900)
Rather than repeatedly initializing some of the binder_lru_page members
during binder_alloc_new_buf(), perform this initialization just once in
binder_alloc_mmap_handler(), after the pages have been created.

Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Signed-off-by: Carlos Llamas <cmllamas@google.com>
Link: https://lore.kernel.org/r/20231201172212.1813387-19-cmllamas@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/android/binder_alloc.c

index 86f4929a55d58df7524f9be73a38757864348931..25efdbb2ad5d27f0cc028174119e10ca42147dcc 100644 (file)
@@ -274,9 +274,6 @@ static int binder_allocate_page_range(struct binder_alloc *alloc,
 
                trace_binder_alloc_page_start(alloc, index);
 
-               page->alloc = alloc;
-               INIT_LIST_HEAD(&page->lru);
-
                ret = binder_install_single_page(alloc, page, page_addr);
                if (ret) {
                        binder_free_page_range(alloc, start, page_addr);
@@ -798,9 +795,9 @@ void binder_alloc_free_buf(struct binder_alloc *alloc,
 int binder_alloc_mmap_handler(struct binder_alloc *alloc,
                              struct vm_area_struct *vma)
 {
-       int ret;
-       const char *failure_string;
        struct binder_buffer *buffer;
+       const char *failure_string;
+       int ret, i;
 
        if (unlikely(vma->vm_mm != alloc->mm)) {
                ret = -EINVAL;
@@ -829,6 +826,11 @@ int binder_alloc_mmap_handler(struct binder_alloc *alloc,
                goto err_alloc_pages_failed;
        }
 
+       for (i = 0; i < alloc->buffer_size / PAGE_SIZE; i++) {
+               alloc->pages[i].alloc = alloc;
+               INIT_LIST_HEAD(&alloc->pages[i].lru);
+       }
+
        buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
        if (!buffer) {
                ret = -ENOMEM;