diff options
Diffstat (limited to 'drivers/android/binder_alloc.c')
| -rw-r--r-- | drivers/android/binder_alloc.c | 53 | 
1 files changed, 31 insertions, 22 deletions
diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c index fcfaf1b899c8..979c96b74cad 100644 --- a/drivers/android/binder_alloc.c +++ b/drivers/android/binder_alloc.c @@ -23,10 +23,11 @@  #include <linux/uaccess.h>  #include <linux/highmem.h>  #include <linux/sizes.h> +#include <kunit/visibility.h>  #include "binder_alloc.h"  #include "binder_trace.h" -struct list_lru binder_freelist; +static struct list_lru binder_freelist;  static DEFINE_MUTEX(binder_alloc_mmap_lock); @@ -57,13 +58,14 @@ static struct binder_buffer *binder_buffer_prev(struct binder_buffer *buffer)  	return list_entry(buffer->entry.prev, struct binder_buffer, entry);  } -static size_t binder_alloc_buffer_size(struct binder_alloc *alloc, -				       struct binder_buffer *buffer) +VISIBLE_IF_KUNIT size_t binder_alloc_buffer_size(struct binder_alloc *alloc, +						 struct binder_buffer *buffer)  {  	if (list_is_last(&buffer->entry, &alloc->buffers))  		return alloc->vm_start + alloc->buffer_size - buffer->user_data;  	return binder_buffer_next(buffer)->user_data - buffer->user_data;  } +EXPORT_SYMBOL_IF_KUNIT(binder_alloc_buffer_size);  static void binder_insert_free_buffer(struct binder_alloc *alloc,  				      struct binder_buffer *new_buffer) @@ -167,12 +169,8 @@ static struct binder_buffer *binder_alloc_prepare_to_free_locked(  struct binder_buffer *binder_alloc_prepare_to_free(struct binder_alloc *alloc,  						   unsigned long user_ptr)  { -	struct binder_buffer *buffer; - -	mutex_lock(&alloc->mutex); -	buffer = binder_alloc_prepare_to_free_locked(alloc, user_ptr); -	mutex_unlock(&alloc->mutex); -	return buffer; +	guard(mutex)(&alloc->mutex); +	return binder_alloc_prepare_to_free_locked(alloc, user_ptr);  }  static inline void @@ -210,7 +208,7 @@ static void binder_lru_freelist_add(struct binder_alloc *alloc,  		trace_binder_free_lru_start(alloc, index); -		ret = list_lru_add(&binder_freelist, +		ret = list_lru_add(alloc->freelist,  				   page_to_lru(page),  				   page_to_nid(page),  				   NULL); @@ -409,7 +407,7 @@ static void binder_lru_freelist_del(struct binder_alloc *alloc,  		if (page) {  			trace_binder_alloc_lru_start(alloc, index); -			on_lru = list_lru_del(&binder_freelist, +			on_lru = list_lru_del(alloc->freelist,  					      page_to_lru(page),  					      page_to_nid(page),  					      NULL); @@ -699,6 +697,7 @@ struct binder_buffer *binder_alloc_new_buf(struct binder_alloc *alloc,  out:  	return buffer;  } +EXPORT_SYMBOL_IF_KUNIT(binder_alloc_new_buf);  static unsigned long buffer_start_page(struct binder_buffer *buffer)  { @@ -877,6 +876,7 @@ void binder_alloc_free_buf(struct binder_alloc *alloc,  	binder_free_buf_locked(alloc, buffer);  	mutex_unlock(&alloc->mutex);  } +EXPORT_SYMBOL_IF_KUNIT(binder_alloc_free_buf);  /**   * binder_alloc_mmap_handler() - map virtual address space for proc @@ -959,7 +959,7 @@ err_invalid_mm:  			   failure_string, ret);  	return ret;  } - +EXPORT_SYMBOL_IF_KUNIT(binder_alloc_mmap_handler);  void binder_alloc_deferred_release(struct binder_alloc *alloc)  { @@ -1007,7 +1007,7 @@ void binder_alloc_deferred_release(struct binder_alloc *alloc)  			if (!page)  				continue; -			on_lru = list_lru_del(&binder_freelist, +			on_lru = list_lru_del(alloc->freelist,  					      page_to_lru(page),  					      page_to_nid(page),  					      NULL); @@ -1028,6 +1028,7 @@ void binder_alloc_deferred_release(struct binder_alloc *alloc)  		     "%s: %d buffers %d, pages %d\n",  		     __func__, alloc->pid, buffers, page_count);  } +EXPORT_SYMBOL_IF_KUNIT(binder_alloc_deferred_release);  /**   * binder_alloc_print_allocated() - print buffer info @@ -1043,7 +1044,7 @@ void binder_alloc_print_allocated(struct seq_file *m,  	struct binder_buffer *buffer;  	struct rb_node *n; -	mutex_lock(&alloc->mutex); +	guard(mutex)(&alloc->mutex);  	for (n = rb_first(&alloc->allocated_buffers); n; n = rb_next(n)) {  		buffer = rb_entry(n, struct binder_buffer, rb_node);  		seq_printf(m, "  buffer %d: %lx size %zd:%zd:%zd %s\n", @@ -1053,7 +1054,6 @@ void binder_alloc_print_allocated(struct seq_file *m,  			   buffer->extra_buffers_size,  			   buffer->transaction ? "active" : "delivered");  	} -	mutex_unlock(&alloc->mutex);  }  /** @@ -1102,10 +1102,9 @@ int binder_alloc_get_allocated_count(struct binder_alloc *alloc)  	struct rb_node *n;  	int count = 0; -	mutex_lock(&alloc->mutex); +	guard(mutex)(&alloc->mutex);  	for (n = rb_first(&alloc->allocated_buffers); n != NULL; n = rb_next(n))  		count++; -	mutex_unlock(&alloc->mutex);  	return count;  } @@ -1122,6 +1121,7 @@ void binder_alloc_vma_close(struct binder_alloc *alloc)  {  	binder_alloc_set_mapped(alloc, false);  } +EXPORT_SYMBOL_IF_KUNIT(binder_alloc_vma_close);  /**   * binder_alloc_free_page() - shrinker callback to free pages @@ -1213,6 +1213,7 @@ err_mmap_read_lock_failed:  err_mmget:  	return LRU_SKIP;  } +EXPORT_SYMBOL_IF_KUNIT(binder_alloc_free_page);  static unsigned long  binder_shrink_count(struct shrinker *shrink, struct shrink_control *sc) @@ -1229,6 +1230,18 @@ binder_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)  static struct shrinker *binder_shrinker; +VISIBLE_IF_KUNIT void __binder_alloc_init(struct binder_alloc *alloc, +					  struct list_lru *freelist) +{ +	alloc->pid = current->group_leader->pid; +	alloc->mm = current->mm; +	mmgrab(alloc->mm); +	mutex_init(&alloc->mutex); +	INIT_LIST_HEAD(&alloc->buffers); +	alloc->freelist = freelist; +} +EXPORT_SYMBOL_IF_KUNIT(__binder_alloc_init); +  /**   * binder_alloc_init() - called by binder_open() for per-proc initialization   * @alloc: binder_alloc for this proc @@ -1238,11 +1251,7 @@ static struct shrinker *binder_shrinker;   */  void binder_alloc_init(struct binder_alloc *alloc)  { -	alloc->pid = current->group_leader->pid; -	alloc->mm = current->mm; -	mmgrab(alloc->mm); -	mutex_init(&alloc->mutex); -	INIT_LIST_HEAD(&alloc->buffers); +	__binder_alloc_init(alloc, &binder_freelist);  }  int binder_alloc_shrinker_init(void)  | 
