On Wed, Aug 28, 2019 at 5:59 AM Christian Brauner <christian.brauner@xxxxxxxxxx> wrote: > > On Tue, Aug 27, 2019 at 01:41:51PM -0700, Hridya Valsaraju wrote: > > Currently, the binder transaction log files 'transaction_log' > > and 'failed_transaction_log' live in debugfs at the following locations: > > > > /sys/kernel/debug/binder/failed_transaction_log > > /sys/kernel/debug/binder/transaction_log > > > > This patch makes these files also available in a binderfs instance > > mounted with the mount option "stats=global". > > It does not affect the presence of these files in debugfs. > > If a binderfs instance is mounted at path /dev/binderfs, the location of > > these files will be as follows: > > > > /dev/binderfs/binder_logs/failed_transaction_log > > /dev/binderfs/binder_logs/transaction_log > > > > This change provides an alternate option to access these files when > > debugfs is not mounted. > > > > Signed-off-by: Hridya Valsaraju <hridya@xxxxxxxxxx> > > Acked-by: Christian Brauner <christian.brauner@xxxxxxxxxx> Acked-by: Todd Kjos <tkjos@xxxxxxxxxx> > > > --- > > drivers/android/binder.c | 34 +++++-------------------------- > > drivers/android/binder_internal.h | 30 +++++++++++++++++++++++++++ > > drivers/android/binderfs.c | 19 +++++++++++++++++ > > 3 files changed, 54 insertions(+), 29 deletions(-) > > > > diff --git a/drivers/android/binder.c b/drivers/android/binder.c > > index de795bd229c4..bed217310197 100644 > > --- a/drivers/android/binder.c > > +++ b/drivers/android/binder.c > > @@ -197,30 +197,8 @@ static inline void binder_stats_created(enum binder_stat_types type) > > atomic_inc(&binder_stats.obj_created[type]); > > } > > > > -struct binder_transaction_log_entry { > > - int debug_id; > > - int debug_id_done; > > - int call_type; > > - int from_proc; > > - int from_thread; > > - int target_handle; > > - int to_proc; > > - int to_thread; > > - int to_node; > > - int data_size; > > - int offsets_size; > > - int return_error_line; > > - uint32_t return_error; > > - uint32_t return_error_param; > > - const char *context_name; > > -}; > > -struct binder_transaction_log { > > - atomic_t cur; > > - bool full; > > - struct binder_transaction_log_entry entry[32]; > > -}; > > -static struct binder_transaction_log binder_transaction_log; > > -static struct binder_transaction_log binder_transaction_log_failed; > > +struct binder_transaction_log binder_transaction_log; > > +struct binder_transaction_log binder_transaction_log_failed; > > > > static struct binder_transaction_log_entry *binder_transaction_log_add( > > struct binder_transaction_log *log) > > @@ -6166,7 +6144,7 @@ static void print_binder_transaction_log_entry(struct seq_file *m, > > "\n" : " (incomplete)\n"); > > } > > > > -static int transaction_log_show(struct seq_file *m, void *unused) > > +int binder_transaction_log_show(struct seq_file *m, void *unused) > > { > > struct binder_transaction_log *log = m->private; > > unsigned int log_cur = atomic_read(&log->cur); > > @@ -6198,8 +6176,6 @@ const struct file_operations binder_fops = { > > .release = binder_release, > > }; > > > > -DEFINE_SHOW_ATTRIBUTE(transaction_log); > > - > > static int __init init_binder_device(const char *name) > > { > > int ret; > > @@ -6268,12 +6244,12 @@ static int __init binder_init(void) > > 0444, > > binder_debugfs_dir_entry_root, > > &binder_transaction_log, > > - &transaction_log_fops); > > + &binder_transaction_log_fops); > > debugfs_create_file("failed_transaction_log", > > 0444, > > binder_debugfs_dir_entry_root, > > &binder_transaction_log_failed, > > - &transaction_log_fops); > > + &binder_transaction_log_fops); > > } > > > > if (!IS_ENABLED(CONFIG_ANDROID_BINDERFS) && > > diff --git a/drivers/android/binder_internal.h b/drivers/android/binder_internal.h > > index 12ef96f256c6..b9be42d9464c 100644 > > --- a/drivers/android/binder_internal.h > > +++ b/drivers/android/binder_internal.h > > @@ -65,4 +65,34 @@ DEFINE_SHOW_ATTRIBUTE(binder_state); > > > > int binder_transactions_show(struct seq_file *m, void *unused); > > DEFINE_SHOW_ATTRIBUTE(binder_transactions); > > + > > +int binder_transaction_log_show(struct seq_file *m, void *unused); > > +DEFINE_SHOW_ATTRIBUTE(binder_transaction_log); > > + > > +struct binder_transaction_log_entry { > > + int debug_id; > > + int debug_id_done; > > + int call_type; > > + int from_proc; > > + int from_thread; > > + int target_handle; > > + int to_proc; > > + int to_thread; > > + int to_node; > > + int data_size; > > + int offsets_size; > > + int return_error_line; > > + uint32_t return_error; > > + uint32_t return_error_param; > > + const char *context_name; > > +}; > > + > > +struct binder_transaction_log { > > + atomic_t cur; > > + bool full; > > + struct binder_transaction_log_entry entry[32]; > > +}; > > + > > +extern struct binder_transaction_log binder_transaction_log; > > +extern struct binder_transaction_log binder_transaction_log_failed; > > #endif /* _LINUX_BINDER_INTERNAL_H */ > > diff --git a/drivers/android/binderfs.c b/drivers/android/binderfs.c > > index d542f9b8d8ab..dc25a7d759c9 100644 > > --- a/drivers/android/binderfs.c > > +++ b/drivers/android/binderfs.c > > @@ -630,8 +630,27 @@ static int init_binder_logs(struct super_block *sb) > > > > file_dentry = binderfs_create_file(binder_logs_root_dir, "transactions", > > &binder_transactions_fops, NULL); > > + if (IS_ERR(file_dentry)) { > > + ret = PTR_ERR(file_dentry); > > + goto out; > > + } > > + > > + file_dentry = binderfs_create_file(binder_logs_root_dir, > > + "transaction_log", > > + &binder_transaction_log_fops, > > + &binder_transaction_log); > > + if (IS_ERR(file_dentry)) { > > + ret = PTR_ERR(file_dentry); > > + goto out; > > + } > > + > > + file_dentry = binderfs_create_file(binder_logs_root_dir, > > + "failed_transaction_log", > > + &binder_transaction_log_fops, > > + &binder_transaction_log_failed); > > if (IS_ERR(file_dentry)) > > ret = PTR_ERR(file_dentry); > > + > > out: > > return ret; > > } > > -- > > 2.23.0.187.g17f5b7556c-goog > > _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel