FAILED: patch "[PATCH] Revert "binder_alloc: add missing mmap_lock calls when using" failed to apply to 5.15-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkout FETCH_HEAD
git cherry-pick -x b15655b12ddca7ade09807f790bafb6fab61b50a
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023052842-ability-badness-50c6@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..
Possible dependencies:
b15655b12ddc ("Revert "binder_alloc: add missing mmap_lock calls when using the VMA"") e66b77e50522 ("binder: rename alloc->vma_vm_mm to alloc->mm") 50e177c5bfd9 ("Merge 6.0-rc4 into char-misc-next")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From b15655b12ddca7ade09807f790bafb6fab61b50a Mon Sep 17 00:00:00 2001
From: Carlos Llamas <[email protected]>
Date: Tue, 2 May 2023 20:12:17 +0000
Subject: [PATCH] Revert "binder_alloc: add missing mmap_lock calls when using
the VMA"
This reverts commit 44e602b4e52f70f04620bbbf4fe46ecb40170bde.
This caused a performance regression particularly when pages are getting reclaimed. We don't need to acquire the mmap_lock to determine when the binder buffer has been fully initialized. A subsequent patch will bring back the lockless approach for this.
[cmllamas: resolved trivial conflicts with renaming of alloc->mm]
drivers/android/binder_alloc.c +10 -21
@@ -380,15 +380,12 @@ static struct binder_buffer *binder_alloc_new_buf_locked(size_t size, data_offsets_size;int ret; -mmap_read_lock (alloc->mm);if (!binder_alloc_get_vma (alloc)) { -mmap_read_unlock (alloc->mm);binder_alloc_debug (BINDER_DEBUG_USER_ERROR ,"%d: binder_alloc_buf, no vma\n" , alloc->pid);return ERR_PTR (-ESRCH ); } -mmap_read_unlock (alloc->mm); data_offsets_size =ALIGN (data_size,sizeof (void *)) +ALIGN (offsets_size,sizeof (void *));
@@ -916,25 +913,17 @@ void binder_alloc_print_pages(struct seq_file *m,* Make sure the binder_alloc is fully initialized, otherwise we might * read inconsistent state. */ - -mmap_read_lock (alloc->mm); -if (binder_alloc_get_vma (alloc) ==NULL ) { -mmap_read_unlock (alloc->mm); - goto uninitialized; - } - -mmap_read_unlock (alloc->mm); -for (i =0 ; i < alloc->buffer_size /PAGE_SIZE ; i++) { - page = &alloc->pages[i]; -if (!page->page_ptr) - free++; -else if (list_empty (&page->lru)) - active++; -else - lru++; +if (binder_alloc_get_vma (alloc) !=NULL ) { +for (i =0 ; i < alloc->buffer_size /PAGE_SIZE ; i++) { + page = &alloc->pages[i]; +if (!page->page_ptr) + free++; +else if (list_empty (&page->lru)) + active++; +else + lru++; + } } - -uninitialized:mutex_unlock (&alloc->mutex);seq_printf (m," pages: %d:%d:%d\n" , active, lru, free);seq_printf (m," pages high watermark: %zu\n" , alloc->pages_high);