From 156cb91355da8cb6255b0a0f754bd561cc7f03b0 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Wed, 14 May 2014 09:23:26 -0500 Subject: shell/shared: Add task get/set affinity --- schedsim/shell/shared/Makefile.am | 4 ++ schedsim/shell/shared/commands.c | 8 +++ schedsim/shell/shared/main_taskgetaffinity.c | 80 ++++++++++++++++++++++++++ schedsim/shell/shared/main_tasksetaffinity.c | 85 ++++++++++++++++++++++++++++ 4 files changed, 177 insertions(+) create mode 100644 schedsim/shell/shared/main_taskgetaffinity.c create mode 100644 schedsim/shell/shared/main_tasksetaffinity.c diff --git a/schedsim/shell/shared/Makefile.am b/schedsim/shell/shared/Makefile.am index 5b80e65..85b58af 100644 --- a/schedsim/shell/shared/Makefile.am +++ b/schedsim/shell/shared/Makefile.am @@ -49,6 +49,10 @@ libschedsim_a_SOURCES += main_taskwakeafter.c libschedsim_a_SOURCES += schedsim_disable_dispatch.c libschedsim_a_SOURCES += shell_cmdset.c libschedsim_a_SOURCES += shell_makeargs.c +if HAS_SMP +libschedsim_a_SOURCES += main_taskgetaffinity.c +libschedsim_a_SOURCES += main_tasksetaffinity.c +endif schedsim_shell_includedir = $(includedir)/schedsim schedsim_newlib_includedir = $(includedir)/schedsim/newlib diff --git a/schedsim/shell/shared/commands.c b/schedsim/shell/shared/commands.c index af15638..e79cd0b 100644 --- a/schedsim/shell/shared/commands.c +++ b/schedsim/shell/shared/commands.c @@ -23,6 +23,10 @@ extern rtems_shell_cmd_t rtems_shell_TASK_PRIORITY_Command; extern rtems_shell_cmd_t rtems_shell_TASK_SUSPEND_Command; extern rtems_shell_cmd_t rtems_shell_TASK_RESUME_Command; extern rtems_shell_cmd_t rtems_shell_TASK_WAKE_AFTER_Command; +#if RTEMS_SMP + extern rtems_shell_cmd_t rtems_shell_TASK_GET_AFFINITY_Command; + extern rtems_shell_cmd_t rtems_shell_TASK_SET_AFFINITY_Command; +#endif extern rtems_shell_cmd_t rtems_shell_CLOCK_TICK_Command; @@ -50,6 +54,10 @@ rtems_shell_cmd_t *rtems_shell_Initial_commands[] = { &rtems_shell_TASK_SUSPEND_Command, &rtems_shell_TASK_RESUME_Command, &rtems_shell_TASK_WAKE_AFTER_Command, + #if RTEMS_SMP + &rtems_shell_TASK_GET_AFFINITY_Command, + &rtems_shell_TASK_SET_AFFINITY_Command, + #endif &rtems_shell_CLOCK_TICK_Command, diff --git a/schedsim/shell/shared/main_taskgetaffinity.c b/schedsim/shell/shared/main_taskgetaffinity.c new file mode 100644 index 0000000..3052600 --- /dev/null +++ b/schedsim/shell/shared/main_taskgetaffinity.c @@ -0,0 +1,80 @@ +/** + * @file + * + * Task Get Affinity Shell Command Implmentation + */ + +/* + * COPYRIGHT (c) 1989-2014. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define _GNU_SOURCE +#include + +#include + +#include +#include "shell.h" +#include +#include +#include + +int rtems_shell_main_task_get_affinity( + int argc, + char *argv[] +) +{ + rtems_id id; + rtems_status_code status; + unsigned long tmp; + cpu_set_t cpuset; + + CHECK_RTEMS_IS_UP(); + + if (argc != 2) { + fprintf( stderr, "%s: Usage [name|id]\n", argv[0] ); + return -1; + } + + if ( lookup_task( argv[1], &id ) ) + return -1; + + CPU_ZERO( &cpuset ); + cpuset.__bits[0] = tmp; + + /* + * Now obtain the affinity the task + */ + status = rtems_task_get_affinity( id, sizeof(cpuset), &cpuset ); + if ( status != RTEMS_SUCCESSFUL ) { + fprintf( + stderr, + "Task Get Affinity(%s) returned %s\n", + argv[1], + rtems_status_text( status ) + ); + return -1; + } + + printf("Task (0x%08x) Get affinity=0x%08x\n", id, cpuset.__bits[0] ); + + return 0; +} + +rtems_shell_cmd_t rtems_shell_TASK_GET_AFFINITY_Command = { + "task_get_affinity", /* name */ + "task_get_affinity name ", /* usage */ + "rtems", /* topic */ + rtems_shell_main_task_get_affinity, /* command */ + NULL, /* alias */ + NULL /* next */ +}; diff --git a/schedsim/shell/shared/main_tasksetaffinity.c b/schedsim/shell/shared/main_tasksetaffinity.c new file mode 100644 index 0000000..5d4eb41 --- /dev/null +++ b/schedsim/shell/shared/main_tasksetaffinity.c @@ -0,0 +1,85 @@ +/** + * @file + * + * Task Set Affinity Shell Command Implmentation + */ + +/* + * COPYRIGHT (c) 1989-2014. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define _GNU_SOURCE +#include + +#include + +#include +#include "shell.h" +#include +#include +#include + +int rtems_shell_main_task_set_affinity( + int argc, + char *argv[] +) +{ + rtems_id id; + rtems_status_code status; + unsigned long tmp; + cpu_set_t cpuset; + + CHECK_RTEMS_IS_UP(); + + if (argc != 3) { + fprintf( stderr, "%s: Usage [name|id] affinity\n", argv[0] ); + return -1; + } + + if ( lookup_task( argv[1], &id ) ) + return -1; + + if ( rtems_string_to_unsigned_long( argv[2], &tmp, NULL, 0) ) { + fprintf( stderr, "Argument (%s) is not a number\n", argv[2] ); + return 1; + } + + CPU_ZERO( &cpuset ); + cpuset.__bits[0] = tmp; + + /* + * Now change the affinity of the task + */ + status = rtems_task_set_affinity( id, sizeof(cpuset), &cpuset ); + if ( status != RTEMS_SUCCESSFUL ) { + fprintf( + stderr, + "Task Set Affinity(%s) returned %s\n", + argv[1], + rtems_status_text( status ) + ); + return -1; + } + + printf("Task (0x%08x) Set affinity=0x%08x\n", id, cpuset.__bits[0] ); + + return 0; +} + +rtems_shell_cmd_t rtems_shell_TASK_SET_AFFINITY_Command = { + "task_set_affinity", /* name */ + "task_set_affinity name ", /* usage */ + "rtems", /* topic */ + rtems_shell_main_task_set_affinity, /* command */ + NULL, /* alias */ + NULL /* next */ +}; -- cgit v1.2.3