From: liubo <liubo-fnst@cn.fujitsu.com>
To: ltp-list@lists.sf.net
Subject: [LTP] [PATCH] cpuctl of controllers: fix the bug of while loop
Date: Tue, 08 Sep 2009 14:40:34 +0800 [thread overview]
Message-ID: <4AA5FC62.2020503@cn.fujitsu.com> (raw)
When running the ltp tool by "./runltp -f controllers",
I found "while" loop cannot stop in following files of
cpuctl test.
File list:
cpuctl_def_task01.c
cpuctl_def_task02.c
cpuctl_def_task03.c
cpuctl_def_task04.c
cpuctl_test01.c
cpuctl_test02.c
cpuctl_test03.c
cpuctl_test04.c
Key code:
timer_expired=0;
while(!timer_expired)
f=sqrt(f*f);
Reason:
During the compilation of these files, gcc's O2 mechanism
causes the change of variable "timer_expired" to be omitted,
hence the loop, "while(!timer_expired) f=sqrt(f*f);" cannot
get out from itself.
Change the type of "timer_expired" from "int" to "volatile int"
to fix this bug.
By the way, it is necessary to modify the file,
ltp-full-xxxxxxxx/testcases/kernel/controllers/libcontrollers/
libcontrollers.h for compilation.
Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: Liu Bo <liubo-fnst@cn.fujitsu.com>
---
diff --git a/testcases/kernel/controllers/cpuctl/cpuctl_def_task01.c
b/testcases/kernel/controllers/cpuctl/cpuctl_def_task01.c
index 00a25bc..1fb398a 100644
--- a/testcases/kernel/controllers/cpuctl/cpuctl_def_task01.c
+++ b/testcases/kernel/controllers/cpuctl/cpuctl_def_task01.c
@@ -82,7 +82,7 @@ extern void cleanup()
kill(scriptpid, SIGUSR1);/* Inform the shell to do cleanup*/
tst_exit(); /* Report exit status*/
}
-int timer_expired = 0;
+volatile int timer_expired = 0;
int main(int argc, char *argv[])
{
diff --git a/testcases/kernel/controllers/cpuctl/cpuctl_def_task02.c
b/testcases/kernel/controllers/cpuctl/cpuctl_def_task02.c
index 1bfa187..56ddacc 100644
--- a/testcases/kernel/controllers/cpuctl/cpuctl_def_task02.c
+++ b/testcases/kernel/controllers/cpuctl/cpuctl_def_task02.c
@@ -79,7 +79,7 @@ cleanup()
tst_exit(); /* Report exit status*/
}
-int timer_expired = 0;
+volatile int timer_expired = 0;
int main(int argc, char *argv[])
{
diff --git a/testcases/kernel/controllers/cpuctl/cpuctl_def_task03.c
b/testcases/kernel/controllers/cpuctl/cpuctl_def_task03.c
index e4ce3ad..4f3ddc1 100644
--- a/testcases/kernel/controllers/cpuctl/cpuctl_def_task03.c
+++ b/testcases/kernel/controllers/cpuctl/cpuctl_def_task03.c
@@ -79,7 +79,7 @@ cleanup()
tst_exit(); /* Report exit status*/
}
-int timer_expired = 0;
+volatile int timer_expired = 0;
int main(int argc, char *argv[])
{
diff --git a/testcases/kernel/controllers/cpuctl/cpuctl_def_task04.c
b/testcases/kernel/controllers/cpuctl/cpuctl_def_task04.c
index 15e2b5f..7f184c8 100644
--- a/testcases/kernel/controllers/cpuctl/cpuctl_def_task04.c
+++ b/testcases/kernel/controllers/cpuctl/cpuctl_def_task04.c
@@ -78,7 +78,7 @@ cleanup()
tst_exit(); /* Report exit status*/
}
-int timer_expired = 0;
+volatile int timer_expired = 0;
int main(int argc, char *argv[])
{
diff --git a/testcases/kernel/controllers/cpuctl/cpuctl_test01.c
b/testcases/kernel/controllers/cpuctl/cpuctl_test01.c
index ab0a4c9..7d7cc48 100644
--- a/testcases/kernel/controllers/cpuctl/cpuctl_test01.c
+++ b/testcases/kernel/controllers/cpuctl/cpuctl_test01.c
@@ -80,7 +80,7 @@ cleanup()
kill (scriptpid, SIGUSR1);/* Inform the shell to do cleanup*/
tst_exit (); /* Report exit status*/
}
-int timer_expired = 0;
+volatile int timer_expired = 0;
int main(int argc, char* argv[])
{
diff --git a/testcases/kernel/controllers/cpuctl/cpuctl_test02.c
b/testcases/kernel/controllers/cpuctl/cpuctl_test02.c
index 801716d..153a293 100644
--- a/testcases/kernel/controllers/cpuctl/cpuctl_test02.c
+++ b/testcases/kernel/controllers/cpuctl/cpuctl_test02.c
@@ -80,7 +80,7 @@ cleanup()
}
int migrate_task ();
-int timer_expired = 0;
+volatile int timer_expired = 0;
int main(int argc, char* argv[])
{
diff --git a/testcases/kernel/controllers/cpuctl/cpuctl_test03.c
b/testcases/kernel/controllers/cpuctl/cpuctl_test03.c
index c4b9978..c21b69c 100644
--- a/testcases/kernel/controllers/cpuctl/cpuctl_test03.c
+++ b/testcases/kernel/controllers/cpuctl/cpuctl_test03.c
@@ -79,7 +79,7 @@ cleanup()
tst_exit (); /* Report exit status*/
}
-int timer_expired = 0;
+volatile int timer_expired = 0;
int main(int argc, char* argv[])
{
diff --git a/testcases/kernel/controllers/cpuctl/cpuctl_test04.c
b/testcases/kernel/controllers/cpuctl/cpuctl_test04.c
index b0a2329..ed00b0d 100644
--- a/testcases/kernel/controllers/cpuctl/cpuctl_test04.c
+++ b/testcases/kernel/controllers/cpuctl/cpuctl_test04.c
@@ -79,7 +79,7 @@ cleanup()
tst_exit (); /* Report exit status*/
}
-int timer_expired = 0;
+volatile int timer_expired = 0;
int main(int argc, char* argv[])
{
diff --git
a/testcases/kernel/controllers/libcontrollers/libcontrollers.h
b/testcases/kernel/controllers/libcontrollers/libcontrollers.h
index 777ff67..e6ab6a0 100644
--- a/testcases/kernel/controllers/libcontrollers/libcontrollers.h
+++ b/testcases/kernel/controllers/libcontrollers/libcontrollers.h
@@ -48,7 +48,8 @@ char fullpath[PATH_MAX];
char fullpath[1024]; /* Guess */
#endif
-int FLAG, timer_expired;
+int FLAG;
+volatile int timer_expired;
int retval;
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
next reply other threads:[~2009-09-08 6:40 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-08 6:40 liubo [this message]
-- strict thread matches above, loose matches on Subject: below --
2009-09-09 8:33 [LTP] [PATCH] cpuctl of controllers: fix the bug of while loop liubo
2009-09-09 17:55 ` Subrata Modak
2009-09-08 9:15 liubo
2009-09-09 6:50 ` Subrata Modak
2009-09-08 8:27 liubo
2009-09-08 6:08 liubo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4AA5FC62.2020503@cn.fujitsu.com \
--to=liubo-fnst@cn.fujitsu.com \
--cc=ltp-list@lists.sf.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox