From ba731194f07f3ddf4d1577076775f5c48c9960b9 Mon Sep 17 00:00:00 2001 From: Vyacheslav Cherkashin Date: Wed, 23 Oct 2013 21:47:08 +0400 Subject: [PATCH] [IMPROVE] add blocking function read US instrumentation status Change-Id: Ia1f91211627f600e4cf8ca37d3a30731b947d27a Signed-off-by: Vyacheslav Cherkashin --- us_manager/us_manager.c | 43 +++++++++++++++++++++++++++---------------- us_manager/us_manager.h | 8 ++++++++ 2 files changed, 35 insertions(+), 16 deletions(-) diff --git a/us_manager/us_manager.c b/us_manager/us_manager.c index 9495e8c..a59a05c 100644 --- a/us_manager/us_manager.c +++ b/us_manager/us_manager.c @@ -36,7 +36,7 @@ static DEFINE_MUTEX(mutex_inst); -static int flag_inst = 0; +static enum status_type status = ST_OFF; static void do_usm_stop(void) @@ -59,22 +59,34 @@ static int do_usm_start(void) return 0; } +enum status_type usm_get_status(void) +{ + mutex_lock(&mutex_inst); + return status; +} +EXPORT_SYMBOL_GPL(usm_get_status); + +void usm_put_status(enum status_type st) +{ + status = st; + mutex_unlock(&mutex_inst); +} +EXPORT_SYMBOL_GPL(usm_put_status); + int usm_stop(void) { int ret = 0; - mutex_lock(&mutex_inst); - if (flag_inst == 0) { + if (usm_get_status() == ST_OFF) { printk("US instrumentation is not running!\n"); ret = -EINVAL; - goto unlock; + goto put; } do_usm_stop(); - flag_inst = 0; -unlock: - mutex_unlock(&mutex_inst); +put: + usm_put_status(ST_OFF); return ret; } @@ -83,19 +95,20 @@ EXPORT_SYMBOL_GPL(usm_stop); int usm_start(void) { int ret = -EINVAL; + enum status_type st; - mutex_lock(&mutex_inst); - if (flag_inst) { + st = usm_get_status(); + if (st == ST_ON) { printk("US instrumentation is already run!\n"); - goto unlock; + goto put; } ret = do_usm_start(); if (ret == 0) - flag_inst = 1; + st = ST_ON; -unlock: - mutex_unlock(&mutex_inst); +put: + usm_put_status(st); return ret; } @@ -180,10 +193,8 @@ static int __init init_us_manager(void) static void __exit exit_us_manager(void) { - mutex_lock(&mutex_inst); - if (flag_inst) + if (status == ST_ON) do_usm_stop(); - mutex_unlock(&mutex_inst); uninit_msg(); uninit_helper(); diff --git a/us_manager/us_manager.h b/us_manager/us_manager.h index 3ef2ffd..4218234 100644 --- a/us_manager/us_manager.h +++ b/us_manager/us_manager.h @@ -31,9 +31,17 @@ enum quiet_type { QT_OFF }; +enum status_type { + ST_OFF, + ST_ON +}; + void set_quiet(enum quiet_type q); enum quiet_type get_quiet(void); +enum status_type usm_get_status(void); +void usm_put_status(enum status_type st); + int usm_start(void); int usm_stop(void); -- 2.7.4