diff options
author | Badhri Jagan Sridharan <Badhri@google.com> | 2017-06-29 15:01:44 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-07-17 08:47:29 -0400 |
commit | 0953c7976c36ce06a4e92b9a23cfb8f1bbe2321f (patch) | |
tree | e73393908dfe054216ca6cbe87a96b21a8773734 /drivers/android/binder.c | |
parent | c44b1231ff1170971c1f27fc33a8cc3188de99cb (diff) |
binder: change binder_stats to atomics
Use atomics for stats to avoid needing to lock for
increments/decrements
Signed-off-by: Todd Kjos <tkjos@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/android/binder.c')
-rw-r--r-- | drivers/android/binder.c | 48 |
1 files changed, 28 insertions, 20 deletions
diff --git a/drivers/android/binder.c b/drivers/android/binder.c index fb484c6acd3e..cd4191d027e1 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c | |||
@@ -167,22 +167,22 @@ enum binder_stat_types { | |||
167 | }; | 167 | }; |
168 | 168 | ||
169 | struct binder_stats { | 169 | struct binder_stats { |
170 | int br[_IOC_NR(BR_FAILED_REPLY) + 1]; | 170 | atomic_t br[_IOC_NR(BR_FAILED_REPLY) + 1]; |
171 | int bc[_IOC_NR(BC_REPLY_SG) + 1]; | 171 | atomic_t bc[_IOC_NR(BC_REPLY_SG) + 1]; |
172 | int obj_created[BINDER_STAT_COUNT]; | 172 | atomic_t obj_created[BINDER_STAT_COUNT]; |
173 | int obj_deleted[BINDER_STAT_COUNT]; | 173 | atomic_t obj_deleted[BINDER_STAT_COUNT]; |
174 | }; | 174 | }; |
175 | 175 | ||
176 | static struct binder_stats binder_stats; | 176 | static struct binder_stats binder_stats; |
177 | 177 | ||
178 | static inline void binder_stats_deleted(enum binder_stat_types type) | 178 | static inline void binder_stats_deleted(enum binder_stat_types type) |
179 | { | 179 | { |
180 | binder_stats.obj_deleted[type]++; | 180 | atomic_inc(&binder_stats.obj_deleted[type]); |
181 | } | 181 | } |
182 | 182 | ||
183 | static inline void binder_stats_created(enum binder_stat_types type) | 183 | static inline void binder_stats_created(enum binder_stat_types type) |
184 | { | 184 | { |
185 | binder_stats.obj_created[type]++; | 185 | atomic_inc(&binder_stats.obj_created[type]); |
186 | } | 186 | } |
187 | 187 | ||
188 | struct binder_transaction_log_entry { | 188 | struct binder_transaction_log_entry { |
@@ -1825,9 +1825,9 @@ static int binder_thread_write(struct binder_proc *proc, | |||
1825 | ptr += sizeof(uint32_t); | 1825 | ptr += sizeof(uint32_t); |
1826 | trace_binder_command(cmd); | 1826 | trace_binder_command(cmd); |
1827 | if (_IOC_NR(cmd) < ARRAY_SIZE(binder_stats.bc)) { | 1827 | if (_IOC_NR(cmd) < ARRAY_SIZE(binder_stats.bc)) { |
1828 | binder_stats.bc[_IOC_NR(cmd)]++; | 1828 | atomic_inc(&binder_stats.bc[_IOC_NR(cmd)]); |
1829 | proc->stats.bc[_IOC_NR(cmd)]++; | 1829 | atomic_inc(&proc->stats.bc[_IOC_NR(cmd)]); |
1830 | thread->stats.bc[_IOC_NR(cmd)]++; | 1830 | atomic_inc(&thread->stats.bc[_IOC_NR(cmd)]); |
1831 | } | 1831 | } |
1832 | switch (cmd) { | 1832 | switch (cmd) { |
1833 | case BC_INCREFS: | 1833 | case BC_INCREFS: |
@@ -2201,9 +2201,9 @@ static void binder_stat_br(struct binder_proc *proc, | |||
2201 | { | 2201 | { |
2202 | trace_binder_return(cmd); | 2202 | trace_binder_return(cmd); |
2203 | if (_IOC_NR(cmd) < ARRAY_SIZE(binder_stats.br)) { | 2203 | if (_IOC_NR(cmd) < ARRAY_SIZE(binder_stats.br)) { |
2204 | binder_stats.br[_IOC_NR(cmd)]++; | 2204 | atomic_inc(&binder_stats.br[_IOC_NR(cmd)]); |
2205 | proc->stats.br[_IOC_NR(cmd)]++; | 2205 | atomic_inc(&proc->stats.br[_IOC_NR(cmd)]); |
2206 | thread->stats.br[_IOC_NR(cmd)]++; | 2206 | atomic_inc(&thread->stats.br[_IOC_NR(cmd)]); |
2207 | } | 2207 | } |
2208 | } | 2208 | } |
2209 | 2209 | ||
@@ -3453,17 +3453,21 @@ static void print_binder_stats(struct seq_file *m, const char *prefix, | |||
3453 | BUILD_BUG_ON(ARRAY_SIZE(stats->bc) != | 3453 | BUILD_BUG_ON(ARRAY_SIZE(stats->bc) != |
3454 | ARRAY_SIZE(binder_command_strings)); | 3454 | ARRAY_SIZE(binder_command_strings)); |
3455 | for (i = 0; i < ARRAY_SIZE(stats->bc); i++) { | 3455 | for (i = 0; i < ARRAY_SIZE(stats->bc); i++) { |
3456 | if (stats->bc[i]) | 3456 | int temp = atomic_read(&stats->bc[i]); |
3457 | |||
3458 | if (temp) | ||
3457 | seq_printf(m, "%s%s: %d\n", prefix, | 3459 | seq_printf(m, "%s%s: %d\n", prefix, |
3458 | binder_command_strings[i], stats->bc[i]); | 3460 | binder_command_strings[i], temp); |
3459 | } | 3461 | } |
3460 | 3462 | ||
3461 | BUILD_BUG_ON(ARRAY_SIZE(stats->br) != | 3463 | BUILD_BUG_ON(ARRAY_SIZE(stats->br) != |
3462 | ARRAY_SIZE(binder_return_strings)); | 3464 | ARRAY_SIZE(binder_return_strings)); |
3463 | for (i = 0; i < ARRAY_SIZE(stats->br); i++) { | 3465 | for (i = 0; i < ARRAY_SIZE(stats->br); i++) { |
3464 | if (stats->br[i]) | 3466 | int temp = atomic_read(&stats->br[i]); |
3467 | |||
3468 | if (temp) | ||
3465 | seq_printf(m, "%s%s: %d\n", prefix, | 3469 | seq_printf(m, "%s%s: %d\n", prefix, |
3466 | binder_return_strings[i], stats->br[i]); | 3470 | binder_return_strings[i], temp); |
3467 | } | 3471 | } |
3468 | 3472 | ||
3469 | BUILD_BUG_ON(ARRAY_SIZE(stats->obj_created) != | 3473 | BUILD_BUG_ON(ARRAY_SIZE(stats->obj_created) != |
@@ -3471,11 +3475,15 @@ static void print_binder_stats(struct seq_file *m, const char *prefix, | |||
3471 | BUILD_BUG_ON(ARRAY_SIZE(stats->obj_created) != | 3475 | BUILD_BUG_ON(ARRAY_SIZE(stats->obj_created) != |
3472 | ARRAY_SIZE(stats->obj_deleted)); | 3476 | ARRAY_SIZE(stats->obj_deleted)); |
3473 | for (i = 0; i < ARRAY_SIZE(stats->obj_created); i++) { | 3477 | for (i = 0; i < ARRAY_SIZE(stats->obj_created); i++) { |
3474 | if (stats->obj_created[i] || stats->obj_deleted[i]) | 3478 | int created = atomic_read(&stats->obj_created[i]); |
3475 | seq_printf(m, "%s%s: active %d total %d\n", prefix, | 3479 | int deleted = atomic_read(&stats->obj_deleted[i]); |
3480 | |||
3481 | if (created || deleted) | ||
3482 | seq_printf(m, "%s%s: active %d total %d\n", | ||
3483 | prefix, | ||
3476 | binder_objstat_strings[i], | 3484 | binder_objstat_strings[i], |
3477 | stats->obj_created[i] - stats->obj_deleted[i], | 3485 | created - deleted, |
3478 | stats->obj_created[i]); | 3486 | created); |
3479 | } | 3487 | } |
3480 | } | 3488 | } |
3481 | 3489 | ||