From: LiSong <[email protected]>

There is no guarantee that the LOOP of the child proecess
can be certainly big enough on any device at any time.
So if set_affinity function is available,
use it to bind the test processes to a single CPU
rather than using the LOOP.

Signed-off-by: Song.Li <[email protected]>
---
 .../conformance/interfaces/sched_setparam/2-1.c    |   26 +++++++++++++++----
 .../conformance/interfaces/sched_setparam/2-2.c    |   26 +++++++++++++++----
 2 files changed, 40 insertions(+), 12 deletions(-)

diff --git 
a/testcases/open_posix_testsuite/conformance/interfaces/sched_setparam/2-1.c 
b/testcases/open_posix_testsuite/conformance/interfaces/sched_setparam/2-1.c
index c548dd4..93f6443 100644
--- a/testcases/open_posix_testsuite/conformance/interfaces/sched_setparam/2-1.c
+++ b/testcases/open_posix_testsuite/conformance/interfaces/sched_setparam/2-1.c
@@ -29,6 +29,7 @@
  *
  */
 
+#define _GNU_SOURCE
 #include <sched.h>
 #include <stdio.h>
 #include <signal.h>
@@ -48,6 +49,8 @@
 # include <sys/pstat.h>
 #endif
 
+#include <affinity.h>
+
 #define NB_LOOP         20000000
 #define NB_LOOP_CHILD  200000000 /* shall be much greater than NB_LOOP */
 
@@ -119,11 +122,22 @@ int main() {
        int *child_pid;
        float ratio;
 
-       nb_child = get_ncpu();
-       if (nb_child == -1) {
-               printf("Can not get the number of CPUs of your machine.\n");
-               return PTS_UNRESOLVED;
-       }
+        /* Only use a single CPU and one child process when set_affinity is 
availaible
+           It's because no matter what value of the counter is set to, 
+           There is no guarantee that the LOOP of the child can be certainly 
big enough on any device at any time.
+        */
+        int rc = set_affinity(0);
+        if (rc) {
+               nb_child = get_ncpu();
+               if (nb_child == -1) {
+                       printf("Can not get the number of CPUs of your 
machine.\n");
+                       return PTS_UNRESOLVED;
+               }
+        }
+        else {
+               nb_child = 1;
+        }
+
        child_pid = malloc(nb_child);
 
        param.sched_priority = (sched_get_priority_min(SCHED_FIFO) +
@@ -208,4 +222,4 @@ int main() {
                return PTS_UNRESOLVED;
        }
 
-}
\ No newline at end of file
+}
diff --git 
a/testcases/open_posix_testsuite/conformance/interfaces/sched_setparam/2-2.c 
b/testcases/open_posix_testsuite/conformance/interfaces/sched_setparam/2-2.c
index 2b71893..c17c5b6 100644
--- a/testcases/open_posix_testsuite/conformance/interfaces/sched_setparam/2-2.c
+++ b/testcases/open_posix_testsuite/conformance/interfaces/sched_setparam/2-2.c
@@ -29,6 +29,7 @@
  *
  */
 
+#define _GNU_SOURCE
 #include <sched.h>
 #include <stdio.h>
 #include <signal.h>
@@ -48,6 +49,8 @@
 # include <sys/pstat.h>
 #endif
 
+#include <affinity.h>
+
 #define NB_LOOP         20000000
 #define NB_LOOP_CHILD  200000000 /* shall be much greater than NB_LOOP */
 
@@ -119,16 +122,27 @@ int main() {
        int *child_pid;
        float ratio;
 
-       nb_child = get_ncpu();
-       if (nb_child == -1) {
-               printf("Can not get the number of CPUs of your machine.\n");
-               return PTS_UNRESOLVED;
-       }
+        /* Only use a single CPU and one child process when set_affinity is 
availaible
+           It's because no matter what value of the counter is set to, 
+           There is no guarantee that the LOOP of the child can be certainly 
big enough on any device at any time.
+        */
+        int rc = set_affinity(0);
+        if (rc) {
+               nb_child = get_ncpu();
+               if (nb_child == -1) {
+                       printf("Can not get the number of CPUs of your 
machine.\n");
+                       return PTS_UNRESOLVED;
+               }
+        }
+        else {
+               nb_child = 1;
+        }
        child_pid = malloc(nb_child);
        if (child_pid == NULL) {
                printf("malloc failed\n");
                return PTS_UNRESOLVED;
        }
+
        param.sched_priority = (sched_get_priority_min(SCHED_RR) +
                                 sched_get_priority_max(SCHED_RR)) / 2;
 
@@ -211,4 +225,4 @@ int main() {
                return PTS_UNRESOLVED;
        }
 
-}
\ No newline at end of file
+}
-- 
1.7.5.4


------------------------------------------------------------------------------
Write once. Port to many.
Get the SDK and tools to simplify cross-platform app development. Create 
new or port existing apps to sell to consumers worldwide. Explore the 
Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join
http://p.sf.net/sfu/intel-appdev
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to