atomic_inc(&binder_stats.obj_created[type]);
 }
 
-struct binder_transaction_log binder_transaction_log;
-struct binder_transaction_log binder_transaction_log_failed;
+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;
+       char context_name[BINDERFS_MAX_NAME + 1];
+};
+
+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;
 
 static struct binder_transaction_log_entry *binder_transaction_log_add(
        struct binder_transaction_log *log)
        print_binder_stats(m, "  ", &proc->stats);
 }
 
-
-int binder_state_show(struct seq_file *m, void *unused)
+static int state_show(struct seq_file *m, void *unused)
 {
        struct binder_proc *proc;
        struct binder_node *node;
        return 0;
 }
 
-int binder_stats_show(struct seq_file *m, void *unused)
+static int stats_show(struct seq_file *m, void *unused)
 {
        struct binder_proc *proc;
 
        return 0;
 }
 
-int binder_transactions_show(struct seq_file *m, void *unused)
+static int transactions_show(struct seq_file *m, void *unused)
 {
        struct binder_proc *proc;
 
                        "\n" : " (incomplete)\n");
 }
 
-int binder_transaction_log_show(struct seq_file *m, void *unused)
+static int transaction_log_show(struct seq_file *m, void *unused)
 {
        struct binder_transaction_log *log = m->private;
        unsigned int log_cur = atomic_read(&log->cur);
        .release = binder_release,
 };
 
+DEFINE_SHOW_ATTRIBUTE(state);
+DEFINE_SHOW_ATTRIBUTE(stats);
+DEFINE_SHOW_ATTRIBUTE(transactions);
+DEFINE_SHOW_ATTRIBUTE(transaction_log);
+
+const struct binder_debugfs_entry binder_debugfs_entries[] = {
+       {
+               .name = "state",
+               .mode = 0444,
+               .fops = &state_fops,
+               .data = NULL,
+       },
+       {
+               .name = "stats",
+               .mode = 0444,
+               .fops = &stats_fops,
+               .data = NULL,
+       },
+       {
+               .name = "transactions",
+               .mode = 0444,
+               .fops = &transactions_fops,
+               .data = NULL,
+       },
+       {
+               .name = "transaction_log",
+               .mode = 0444,
+               .fops = &transaction_log_fops,
+               .data = &binder_transaction_log,
+       },
+       {
+               .name = "failed_transaction_log",
+               .mode = 0444,
+               .fops = &transaction_log_fops,
+               .data = &binder_transaction_log_failed,
+       },
+       {} /* terminator */
+};
+
 static int __init init_binder_device(const char *name)
 {
        int ret;
        atomic_set(&binder_transaction_log_failed.cur, ~0U);
 
        binder_debugfs_dir_entry_root = debugfs_create_dir("binder", NULL);
-       if (binder_debugfs_dir_entry_root)
+       if (binder_debugfs_dir_entry_root) {
+               const struct binder_debugfs_entry *db_entry;
+
+               binder_for_each_debugfs_entry(db_entry)
+                       debugfs_create_file(db_entry->name,
+                                           db_entry->mode,
+                                           binder_debugfs_dir_entry_root,
+                                           db_entry->data,
+                                           db_entry->fops);
+
                binder_debugfs_dir_entry_proc = debugfs_create_dir("proc",
                                                 binder_debugfs_dir_entry_root);
-
-       if (binder_debugfs_dir_entry_root) {
-               debugfs_create_file("state",
-                                   0444,
-                                   binder_debugfs_dir_entry_root,
-                                   NULL,
-                                   &binder_state_fops);
-               debugfs_create_file("stats",
-                                   0444,
-                                   binder_debugfs_dir_entry_root,
-                                   NULL,
-                                   &binder_stats_fops);
-               debugfs_create_file("transactions",
-                                   0444,
-                                   binder_debugfs_dir_entry_root,
-                                   NULL,
-                                   &binder_transactions_fops);
-               debugfs_create_file("transaction_log",
-                                   0444,
-                                   binder_debugfs_dir_entry_root,
-                                   &binder_transaction_log,
-                                   &binder_transaction_log_fops);
-               debugfs_create_file("failed_transaction_log",
-                                   0444,
-                                   binder_debugfs_dir_entry_root,
-                                   &binder_transaction_log_failed,
-                                   &binder_transaction_log_fops);
        }
 
        if (!IS_ENABLED(CONFIG_ANDROID_BINDERFS) &&
 
 }
 #endif
 
-int binder_stats_show(struct seq_file *m, void *unused);
-DEFINE_SHOW_ATTRIBUTE(binder_stats);
-
-int binder_state_show(struct seq_file *m, void *unused);
-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;
-       char context_name[BINDERFS_MAX_NAME + 1];
+struct binder_debugfs_entry {
+       const char *name;
+       umode_t mode;
+       const struct file_operations *fops;
+       void *data;
 };
 
-struct binder_transaction_log {
-       atomic_t cur;
-       bool full;
-       struct binder_transaction_log_entry entry[32];
-};
+extern const struct binder_debugfs_entry binder_debugfs_entries[];
+
+#define binder_for_each_debugfs_entry(entry)   \
+       for ((entry) = binder_debugfs_entries;  \
+            (entry)->name;                     \
+            (entry)++)
 
 enum binder_stat_types {
        BINDER_STAT_PROC,
        };
 };
 
-extern struct binder_transaction_log binder_transaction_log;
-extern struct binder_transaction_log binder_transaction_log_failed;
 #endif /* _LINUX_BINDER_INTERNAL_H */
 
 static int init_binder_logs(struct super_block *sb)
 {
        struct dentry *binder_logs_root_dir, *dentry, *proc_log_dir;
+       const struct binder_debugfs_entry *db_entry;
        struct binderfs_info *info;
        int ret = 0;
 
                goto out;
        }
 
-       dentry = binderfs_create_file(binder_logs_root_dir, "stats",
-                                     &binder_stats_fops, NULL);
-       if (IS_ERR(dentry)) {
-               ret = PTR_ERR(dentry);
-               goto out;
-       }
-
-       dentry = binderfs_create_file(binder_logs_root_dir, "state",
-                                     &binder_state_fops, NULL);
-       if (IS_ERR(dentry)) {
-               ret = PTR_ERR(dentry);
-               goto out;
-       }
-
-       dentry = binderfs_create_file(binder_logs_root_dir, "transactions",
-                                     &binder_transactions_fops, NULL);
-       if (IS_ERR(dentry)) {
-               ret = PTR_ERR(dentry);
-               goto out;
-       }
-
-       dentry = binderfs_create_file(binder_logs_root_dir,
-                                     "transaction_log",
-                                     &binder_transaction_log_fops,
-                                     &binder_transaction_log);
-       if (IS_ERR(dentry)) {
-               ret = PTR_ERR(dentry);
-               goto out;
-       }
-
-       dentry = binderfs_create_file(binder_logs_root_dir,
-                                     "failed_transaction_log",
-                                     &binder_transaction_log_fops,
-                                     &binder_transaction_log_failed);
-       if (IS_ERR(dentry)) {
-               ret = PTR_ERR(dentry);
-               goto out;
+       binder_for_each_debugfs_entry(db_entry) {
+               dentry = binderfs_create_file(binder_logs_root_dir,
+                                             db_entry->name,
+                                             db_entry->fops,
+                                             db_entry->data);
+               if (IS_ERR(dentry)) {
+                       ret = PTR_ERR(dentry);
+                       goto out;
+               }
        }
 
        proc_log_dir = binderfs_create_dir(binder_logs_root_dir, "proc");