binder: convert logging macros into functions

Converting binder_debug() and binder_user_error() macros into functions
reduces the overall object size by 16936 bytes when cross-compiled with
aarch64-linux-gnu-gcc 11.2.0:

$ size drivers/android/binder.o.{old,new}
   text	   data	    bss	    dec	    hex	filename
  77935	   6168	  20264	 104367	  197af	drivers/android/binder.o.old
  65551	   1616	  20264	  87431	  15587	drivers/android/binder.o.new

This is particularly beneficial to functions binder_transaction() and
binder_thread_write() which repeatedly use these macros and are both
part of the critical path for all binder transactions.

$ nm --size vmlinux.{old,new} |grep ' binder_transaction$'
0000000000002f60 t binder_transaction
0000000000002358 t binder_transaction

$ nm --size vmlinux.{old,new} |grep binder_thread_write
0000000000001c54 t binder_thread_write
00000000000014a8 t binder_thread_write

Acked-by: Christian Brauner (Microsoft) <brauner@kernel.org>
Acked-by: Todd Kjos <tkjos@google.com>
Signed-off-by: Carlos Llamas <cmllamas@google.com>
Link: https://lore.kernel.org/r/20220429235644.697372-5-cmllamas@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Carlos Llamas 2022-04-29 23:56:43 +00:00 committed by Greg Kroah-Hartman
parent d23386ed70
commit 06a3494ef6

View File

@ -133,19 +133,36 @@ static int binder_set_stop_on_user_error(const char *val,
module_param_call(stop_on_user_error, binder_set_stop_on_user_error, module_param_call(stop_on_user_error, binder_set_stop_on_user_error,
param_get_int, &binder_stop_on_user_error, 0644); param_get_int, &binder_stop_on_user_error, 0644);
#define binder_debug(mask, x...) \ static __printf(2, 3) void binder_debug(int mask, const char *format, ...)
do { \ {
if (binder_debug_mask & mask) \ struct va_format vaf;
pr_info_ratelimited(x); \ va_list args;
} while (0)
#define binder_user_error(x...) \ if (binder_debug_mask & mask) {
do { \ va_start(args, format);
if (binder_debug_mask & BINDER_DEBUG_USER_ERROR) \ vaf.va = &args;
pr_info_ratelimited(x); \ vaf.fmt = format;
if (binder_stop_on_user_error) \ pr_info_ratelimited("%pV", &vaf);
binder_stop_on_user_error = 2; \ va_end(args);
} while (0) }
}
static __printf(1, 2) void binder_user_error(const char *format, ...)
{
struct va_format vaf;
va_list args;
if (binder_debug_mask & BINDER_DEBUG_USER_ERROR) {
va_start(args, format);
vaf.va = &args;
vaf.fmt = format;
pr_info_ratelimited("%pV", &vaf);
va_end(args);
}
if (binder_stop_on_user_error)
binder_stop_on_user_error = 2;
}
#define binder_set_extended_error(ee, _id, _command, _param) \ #define binder_set_extended_error(ee, _id, _command, _param) \
do { \ do { \