]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
binder: relocate binder_alloc_clear_buf()
authorCarlos Llamas <cmllamas@google.com>
Fri, 1 Dec 2023 17:21:44 +0000 (17:21 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 5 Dec 2023 00:23:39 +0000 (09:23 +0900)
Move this function up along with binder_alloc_get_page() so that their
prototypes aren't necessary.

No functional change in this patch.

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

index 167ee6f871dc15c985cb9b3b5173173bcd576abc..99eacd8782b8ab80a4559452161840b84cf5d075 100644 (file)
@@ -704,8 +704,68 @@ static void binder_free_buf_locked(struct binder_alloc *alloc,
        binder_insert_free_buffer(alloc, buffer);
 }
 
+/**
+ * binder_alloc_get_page() - get kernel pointer for given buffer offset
+ * @alloc: binder_alloc for this proc
+ * @buffer: binder buffer to be accessed
+ * @buffer_offset: offset into @buffer data
+ * @pgoffp: address to copy final page offset to
+ *
+ * Lookup the struct page corresponding to the address
+ * at @buffer_offset into @buffer->user_data. If @pgoffp is not
+ * NULL, the byte-offset into the page is written there.
+ *
+ * The caller is responsible to ensure that the offset points
+ * to a valid address within the @buffer and that @buffer is
+ * not freeable by the user. Since it can't be freed, we are
+ * guaranteed that the corresponding elements of @alloc->pages[]
+ * cannot change.
+ *
+ * Return: struct page
+ */
+static struct page *binder_alloc_get_page(struct binder_alloc *alloc,
+                                         struct binder_buffer *buffer,
+                                         binder_size_t buffer_offset,
+                                         pgoff_t *pgoffp)
+{
+       binder_size_t buffer_space_offset = buffer_offset +
+               (buffer->user_data - alloc->buffer);
+       pgoff_t pgoff = buffer_space_offset & ~PAGE_MASK;
+       size_t index = buffer_space_offset >> PAGE_SHIFT;
+       struct binder_lru_page *lru_page;
+
+       lru_page = &alloc->pages[index];
+       *pgoffp = pgoff;
+       return lru_page->page_ptr;
+}
+
+/**
+ * binder_alloc_clear_buf() - zero out buffer
+ * @alloc: binder_alloc for this proc
+ * @buffer: binder buffer to be cleared
+ *
+ * memset the given buffer to 0
+ */
 static void binder_alloc_clear_buf(struct binder_alloc *alloc,
-                                  struct binder_buffer *buffer);
+                                  struct binder_buffer *buffer)
+{
+       size_t bytes = binder_alloc_buffer_size(alloc, buffer);
+       binder_size_t buffer_offset = 0;
+
+       while (bytes) {
+               unsigned long size;
+               struct page *page;
+               pgoff_t pgoff;
+
+               page = binder_alloc_get_page(alloc, buffer,
+                                            buffer_offset, &pgoff);
+               size = min_t(size_t, bytes, PAGE_SIZE - pgoff);
+               memset_page(page, pgoff, 0, size);
+               bytes -= size;
+               buffer_offset += size;
+       }
+}
+
 /**
  * binder_alloc_free_buf() - free a binder buffer
  * @alloc:     binder_alloc for this proc
@@ -1148,68 +1208,6 @@ static inline bool check_buffer(struct binder_alloc *alloc,
                (!buffer->allow_user_free || !buffer->transaction);
 }
 
-/**
- * binder_alloc_get_page() - get kernel pointer for given buffer offset
- * @alloc: binder_alloc for this proc
- * @buffer: binder buffer to be accessed
- * @buffer_offset: offset into @buffer data
- * @pgoffp: address to copy final page offset to
- *
- * Lookup the struct page corresponding to the address
- * at @buffer_offset into @buffer->user_data. If @pgoffp is not
- * NULL, the byte-offset into the page is written there.
- *
- * The caller is responsible to ensure that the offset points
- * to a valid address within the @buffer and that @buffer is
- * not freeable by the user. Since it can't be freed, we are
- * guaranteed that the corresponding elements of @alloc->pages[]
- * cannot change.
- *
- * Return: struct page
- */
-static struct page *binder_alloc_get_page(struct binder_alloc *alloc,
-                                         struct binder_buffer *buffer,
-                                         binder_size_t buffer_offset,
-                                         pgoff_t *pgoffp)
-{
-       binder_size_t buffer_space_offset = buffer_offset +
-               (buffer->user_data - alloc->buffer);
-       pgoff_t pgoff = buffer_space_offset & ~PAGE_MASK;
-       size_t index = buffer_space_offset >> PAGE_SHIFT;
-       struct binder_lru_page *lru_page;
-
-       lru_page = &alloc->pages[index];
-       *pgoffp = pgoff;
-       return lru_page->page_ptr;
-}
-
-/**
- * binder_alloc_clear_buf() - zero out buffer
- * @alloc: binder_alloc for this proc
- * @buffer: binder buffer to be cleared
- *
- * memset the given buffer to 0
- */
-static void binder_alloc_clear_buf(struct binder_alloc *alloc,
-                                  struct binder_buffer *buffer)
-{
-       size_t bytes = binder_alloc_buffer_size(alloc, buffer);
-       binder_size_t buffer_offset = 0;
-
-       while (bytes) {
-               unsigned long size;
-               struct page *page;
-               pgoff_t pgoff;
-
-               page = binder_alloc_get_page(alloc, buffer,
-                                            buffer_offset, &pgoff);
-               size = min_t(size_t, bytes, PAGE_SIZE - pgoff);
-               memset_page(page, pgoff, 0, size);
-               bytes -= size;
-               buffer_offset += size;
-       }
-}
-
 /**
  * binder_alloc_copy_user_to_buffer() - copy src user to tgt user
  * @alloc: binder_alloc for this proc