From 66486e5552670f07f61962ad669a88b96f011b60 Mon Sep 17 00:00:00 2001 From: Vyacheslav Cherkashin Date: Thu, 26 Sep 2013 12:38:54 +0400 Subject: [PATCH] [IMPROVE] energy: use variable atomic for counting the number of bytes (read/write) Change-Id: If357fb67e536add18fe3454a73c122118c8b7ee0 Signed-off-by: Vyacheslav Cherkashin --- energy/energy.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/energy/energy.c b/energy/energy.c index 29d1d8d..83d4d9b 100644 --- a/energy/energy.c +++ b/energy/energy.c @@ -34,6 +34,7 @@ #include #include #include +#include struct energy_data { @@ -42,12 +43,11 @@ struct energy_data { u64 time_tmp[NR_CPUS]; /* for sys_read */ - u64 sys_read_byte; - spinlock_t sys_read_lock; + atomic64_t sys_read_byte; /*for sys_write */ - u64 sys_write_byte; - spinlock_t sys_write_lock; + atomic64_t sys_write_byte; + }; static sspt_feature_id_t feature_id = SSPT_FEATURE_ID_BAD; @@ -59,8 +59,8 @@ static void *create_ed(void) ed = kmalloc(sizeof(*ed), GFP_ATOMIC); if (ed) { memset(ed, 0, sizeof(*ed)); - spin_lock_init(&ed->sys_read_lock); - spin_lock_init(&ed->sys_write_lock); + atomic64_set(&ed->sys_read_byte, 0); + atomic64_set(&ed->sys_write_byte, 0); } return (void *)ed; @@ -245,11 +245,8 @@ static int ret_handler_sys_read(struct kretprobe_instance *ri, srd = (struct sys_read_data *)ri->data; ed = get_and_check_energy_data(srd->fd); - if (ed) { - spin_lock(&ed->sys_read_lock); - ed->sys_read_byte += ret; - spin_unlock(&ed->sys_read_lock); - } + if (ed) + atomic64_add(ret, &ed->sys_read_byte); } return 0; @@ -288,11 +285,8 @@ static int ret_handler_sys_write(struct kretprobe_instance *ri, struct pt_regs * srd = (struct sys_read_data *)ri->data; ed = get_and_check_energy_data(srd->fd); - if (ed) { - spin_lock(&ed->sys_write_lock); - ed->sys_write_byte += ret; - spin_unlock(&ed->sys_write_lock); - } + if (ed) + atomic64_add(ret, &ed->sys_write_byte); } return 0; -- 2.7.4