This will resolve the test in ci when using cgroups.
odp_hello app fails to set cpu affinity to zero all ways
when cgroup doesn't include that cpu in the set.

Fixes: https://bugs.linaro.org/show_bug.cgi?id=2806

Signed-off-by: Balakrishna Garapati <balakrishna.garap...@linaro.org>
---

 since v2: Added link to bug

 example/hello/odp_hello.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/example/hello/odp_hello.c b/example/hello/odp_hello.c
index 6d114ee..59a31b2 100644
--- a/example/hello/odp_hello.c
+++ b/example/hello/odp_hello.c
@@ -60,16 +60,29 @@ int main(int argc, char *argv[])
        options_t opt;
        pid_t pid;
        cpu_set_t cpu_set;
-       int i;
+       int i, ret, first_cpu = 0, cpu;
+
+       pid = getpid();
+       ret = sched_getaffinity(pid, sizeof(cpu_set_t), &cpu_set);
+       if (ret < 0) {
+               printf("get CPU affinity failed.\n");
+               return -1;
+       }
+
+       for (cpu = 0; cpu < CPU_SETSIZE; cpu++) {
+               if (CPU_ISSET(cpu, &cpu_set)) {
+                       first_cpu = cpu;
+                       break;
+               }
+       }

        memset(&opt, 0, sizeof(opt));
-       opt.cpu = 0;
+       opt.cpu = first_cpu;
        opt.num = 1;

        if (parse_args(argc, argv, &opt))
                return -1;

-       pid = getpid();
        CPU_ZERO(&cpu_set);
        CPU_SET(opt.cpu, &cpu_set);

--
1.9.1

Reply via email to