[FIX] workaround of hangs on multicores 18/43518/2
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Thu, 9 Jul 2015 23:46:59 +0000 (02:46 +0300)
committerVyacheslav Cherkashin <v.cherkashin@samsung.com>
Thu, 9 Jul 2015 23:54:24 +0000 (02:54 +0300)
Change-Id: I97ac2f2bcd1878786aecf066f1a2da02853979c6
Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
parser/swap_msg_parser.c

index bed50d0..a60d1ad 100644 (file)
@@ -110,17 +110,10 @@ static int msg_handler(void __user *msg)
                print_parse_debug("MSG_START. size=%d\n", size);
                ret = msg_start(&mb);
                break;
-       case MSG_STOP: {
-               struct cpumask mask;
-
+       case MSG_STOP:
                print_parse_debug("MSG_STOP. size=%d\n", size);
-
-               swap_disable_nonboot_cpus_lock(&mask);
                ret = msg_stop(&mb);
-               swap_enable_nonboot_cpus_unlock(&mask);
-
                break;
-       }
        case MSG_CONFIG:
                print_parse_debug("MSG_CONFIG. size=%d\n", size);
                ret = msg_config(&mb);
@@ -156,16 +149,22 @@ uninit:
        return ret;
 }
 
-static int reg_msg_handler(void)
+
+static struct cpumask cpumask;
+
+static int parset_init(void)
 {
+       swap_disable_nonboot_cpus_lock(&cpumask);
+
        set_msg_handler(msg_handler);
        return 0;
 }
 
-static void unreg_msg_handler(void)
+static void parser_exit(void)
 {
        set_msg_handler(NULL);
        pfg_put_all();
+       swap_enable_nonboot_cpus_unlock(&cpumask);
 }
 
 static int once(void)
@@ -185,6 +184,6 @@ static int once(void)
        return ret;
 }
 
-SWAP_LIGHT_INIT_MODULE(once, reg_msg_handler, unreg_msg_handler, NULL, NULL);
+SWAP_LIGHT_INIT_MODULE(once, parset_init, parser_exit, NULL, NULL);
 
 MODULE_LICENSE("GPL");