--- Gilles Carry <[EMAIL PROTECTED]> wrote:
> From: gilles.carry <[EMAIL PROTECTED]>
>
> Syscall sched_setaffinity fails if choosen cpu is not online.
> In set_affinity, thread_id value is used as cpuid when calling
> sched_setaffinity. This fails when disabling cpus because threads ids
> and online cpu ids don't necessarly match.
>
> This patch simply increments cpuid (max. 8192) until it finds an online cpu.
> This guaranties that no more than one thread is assigned to one cpu.
> If set_affinity is called more times than there are online cpus
> then matrix_mult.c fails.
> ---
> testcases/realtime/func/matrix_mult/matrix_mult.c | 30
> ++++++++++++++-------
> 1 files changed, 20 insertions(+), 10 deletions(-)
>
> diff --git a/testcases/realtime/func/matrix_mult/matrix_mult.c
> b/testcases/realtime/func/matrix_mult/matrix_mult.c
> index 21fded8..55c1086 100644
> --- a/testcases/realtime/func/matrix_mult/matrix_mult.c
> +++ b/testcases/realtime/func/matrix_mult/matrix_mult.c
> @@ -44,6 +44,7 @@
> #include <libjvmsim.h>
> #include <libstats.h>
>
> +#define MAX_CPUS 8192
> #define PRIO 43
> #define MATRIX_SIZE 100
> #define DEF_OPS 8 /* the higher the number, the
> more CPU intensive */
> @@ -70,6 +71,7 @@ static int *flags;
> stats_container_t sdat, cdat, *curdat;
> stats_container_t shist, chist;
> static pthread_barrier_t mult_start;
> +static pthread_mutex_t mutex_cpu;
>
> int gettid(void)
> {
> @@ -148,20 +150,28 @@ void matrix_mult_record(int m_size, int index)
> curdat->records[index].y = delta;
> }
>
> -int set_affinity(int cpuid)
> +int set_affinity(int thread_id)
> {
> int tid = gettid();
> cpu_set_t mask;
> + static int cpuid = 0;
> +
> + pthread_mutex_lock(&mutex_cpu);
> + do {
> + CPU_ZERO(&mask);
> + CPU_SET(cpuid, &mask);
> +
> + if (!sched_setaffinity(0, sizeof(mask), &mask)) {
> + printf ("Thread %d affinity set to
> cpu%d\n",thread_id,cpuid);
> + cpuid++;
> + pthread_mutex_unlock(&mutex_cpu);
> + return 0;
> + }
> + } while (++cpuid < MAX_CPUS);
> + pthread_mutex_unlock(&mutex_cpu);
>
> - CPU_ZERO(&mask);
> - CPU_SET(cpuid, &mask);
> -
> - if (sched_setaffinity(0, sizeof(mask), &mask) < 0) {
> - printf("Thread %d: Can't set affinity: %s\n", tid,
> strerror(errno));
> - exit(1);
> - }
> -
> - return 0;
> + printf("Thread %d: Can't set affinity: %s\n", tid, strerror(errno));
> + exit(1);
> }
>
> void *concurrent_thread(void *thread)
Ack.
> --
> 1.5.5.GIT
>
>
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
> Build the coolest Linux based applications with Moblin SDK & win great prizes
> Grand prize is a trip for two to an Open Source event anywhere in the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________
> Ltp-list mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ltp-list
>
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list