From 6f6948d54b1c58d18885a7a7e7ce4be83141f0ca Mon Sep 17 00:00:00 2001 From: Petr Benes Date: Sat, 3 Sep 2011 15:33:27 +0200 Subject: [PATCH] RTEMS CPU resource fixed to communicate with similar API as in Linux --- src/frsh/resources/cpu_rtems/Makefile.omk | 4 +- .../cpu_rtems/lib/rtemscpu_contract.h | 4 +- .../resources/cpu_rtems/lib/rtemscpu_fra.c | 153 +++++++++--------- .../resources/cpu_rtems/mngr/frm_rtemscpu.c | 2 +- 4 files changed, 82 insertions(+), 81 deletions(-) diff --git a/src/frsh/resources/cpu_rtems/Makefile.omk b/src/frsh/resources/cpu_rtems/Makefile.omk index 384f6631..acc6e1bb 100644 --- a/src/frsh/resources/cpu_rtems/Makefile.omk +++ b/src/frsh/resources/cpu_rtems/Makefile.omk @@ -1,6 +1,6 @@ -default_CONFIG = CONFIG_RTEMS=x +default_CONFIG = CONFIG_RESOURCE_RTEMS_CPU=x -ifeq ($(CONFIG_RTEMS),y) +ifeq ($(CONFIG_RESOURCE_RTEMS_CPU),y) SUBDIRS = lib mngr CFLAGS+= -Wall -Wextra -D_REENTRANT endif diff --git a/src/frsh/resources/cpu_rtems/lib/rtemscpu_contract.h b/src/frsh/resources/cpu_rtems/lib/rtemscpu_contract.h index 24737537..ca963dee 100644 --- a/src/frsh/resources/cpu_rtems/lib/rtemscpu_contract.h +++ b/src/frsh/resources/cpu_rtems/lib/rtemscpu_contract.h @@ -57,9 +57,9 @@ #ifndef RTEMSCPU_CONTRACT_H #include -#include +#include -typedef reps_params_t rtemscpu_params_t; +typedef qres_params_t rtemscpu_params_t; int get_rtemscpu_params(fres_vres_t *vres, rtemscpu_params_t *params); diff --git a/src/frsh/resources/cpu_rtems/lib/rtemscpu_fra.c b/src/frsh/resources/cpu_rtems/lib/rtemscpu_fra.c index 754e1114..9b57cbcd 100644 --- a/src/frsh/resources/cpu_rtems/lib/rtemscpu_fra.c +++ b/src/frsh/resources/cpu_rtems/lib/rtemscpu_fra.c @@ -50,7 +50,6 @@ * @date Wed Feb 18 16:21:01 2009 * * @brief - * @TODO IMPLEMENT THIS! So far it is AQuoSA copy-paste * */ @@ -60,7 +59,7 @@ #include #include -#include +#include #include "rtemscpu_contract.h" @@ -83,8 +82,8 @@ static inline int rtemscpu_is_initialized() static int rtemscpu_create_vres(fres_vres_t *vres, void *priv) { rtemscpu_params_t cpu_params; - reps_sid_t sid; - reps_rv rv; + qres_sid_t sid; + qos_rv rv; if (vres->priv) { errno = -EINVAL; @@ -94,15 +93,15 @@ static int rtemscpu_create_vres(fres_vres_t *vres, void *priv) /* get aqcpu params from contract */ get_rtemscpu_params(vres, &cpu_params); /* create cpu vres */ - rv = reps_create_server(&cpu_params, &sid); - if (rv != REPS_OK) { + rv = rtems_qres_create_server(&cpu_params, &sid); + if (rv != QOS_OK) { return (int)(rv); } - ul_logdeb("Created RTEMSCPU VRES(sid=%d period=%lld us, budget=%lld us)\n", + ul_logdeb("Created RTEMSCPU VRES(sid=%d period=%d us, budget=%d us)\n", sid, cpu_params.P, cpu_params.Q); - if ((vres->priv = malloc(sizeof(reps_sid_t)))) { - memcpy(vres->priv, &sid, sizeof(reps_sid_t)); + if ((vres->priv = malloc(sizeof(qres_sid_t)))) { + memcpy(vres->priv, &sid, sizeof(qres_sid_t)); } return 0; @@ -118,17 +117,17 @@ static int rtemscpu_create_vres(fres_vres_t *vres, void *priv) */ static int rtemscpu_cancel_vres(fres_vres_t *vres, void *priv) { - reps_sid_t sid; - reps_rv qrv; + qres_sid_t sid; + qos_rv qrv; if (!vres->priv) { errno = -EINVAL; return -1; } - memcpy(&sid, vres->priv, sizeof(reps_sid_t)); + memcpy(&sid, vres->priv, sizeof(qres_sid_t)); - qrv = reps_destroy_server(sid); - if (qrv != REPS_OK) { + qrv = rtems_qres_destroy_server(sid); + if (qrv != QOS_OK) { return (int)(qrv); } ul_logdeb("Canceled RTEMSCPU VRES(sid=%d)\n",sid); @@ -145,32 +144,32 @@ static int rtemscpu_change_vres(fres_vres_t *vres, void *priv) { rtemscpu_params_t cpu_params; - reps_sid_t sid; - reps_rv qrv; + qres_sid_t sid; + qos_rv qrv; if (!vres->priv) { errno = -EINVAL; return -1; } - memcpy(&sid, vres->priv, sizeof(reps_sid_t)); + memcpy(&sid, vres->priv, sizeof(qres_sid_t)); /* get aqcpu params from contract */ get_rtemscpu_params(vres, &cpu_params); /* set cpu params */ - qrv = reps_set_params(sid, &cpu_params); + qrv = rtems_qres_set_params(sid, &cpu_params); vres->perceived = vres->new; - ul_logmsg("RTEMSCPU VRES(sid=%d) params changed(period=%lld us," - "budget=%lld us)\n",sid, cpu_params.P,cpu_params.Q); + ul_logmsg("RTEMSCPU VRES(sid=%d) params changed(period=%d us," + "budget=%d us)\n",sid, cpu_params.P,cpu_params.Q); return 0; } static inline void rtemscpu_cleanup_wrapper() { - reps_cleanup(); + rtems_qres_cleanup(); } // #if 0 @@ -189,10 +188,10 @@ int fra_CPU_bind_thread (fres_vres_t *vres, const fosa_thread_id_t thread) { - reps_rv qrv; - reps_sid_t sid = *((reps_sid_t*)vres->priv); + qos_rv qrv; + qres_sid_t sid = *((qres_sid_t*)vres->priv); - if ((qrv = reps_attach_thread(sid, thread.rtems_tid)) != REPS_OK) + if ((qrv = rtems_qres_attach_thread((pid_t)0, sid, thread.rtems_tid)) != QOS_OK) goto err; return 0; @@ -203,13 +202,13 @@ err: static int fra_CPU_unbind_thread(const fosa_thread_id_t thread) { - reps_rv qrv; - reps_sid_t sid; + qos_rv qrv; + qres_sid_t sid; - if (reps_get_sid(thread.rtems_tid, &sid) != REPS_OK) + if (rtems_qres_get_sid((pid_t)0, thread.rtems_tid, &sid) != QOS_OK) goto err; - if ((qrv = reps_detach_thread(sid, thread.rtems_tid)) != REPS_OK) + if ((qrv = rtems_qres_detach_thread(sid, (pid_t)0, thread.rtems_tid)) != QOS_OK) goto err; return 0; @@ -222,15 +221,16 @@ int fra_CPU_get_usage (const fres_vres_t *vres, fosa_rel_time_t *spent) { - reps_sid_t sid = *((reps_sid_t*)vres->priv); - reps_time_t exec_budget; - reps_rv rv; + qres_sid_t sid = *((qres_sid_t*)vres->priv); + qres_time_t exec_budget; + qres_atime_t abs_budget; + qos_rv rv; if (!spent) return FRSH_ERR_BAD_ARGUMENT; - rv = reps_get_exec_time(sid, &exec_budget); - if (rv != REPS_OK) return EINVAL; + rv = rtems_qres_get_exec_time(sid, &exec_budget, &abs_budget); + if (rv != QOS_OK) return EINVAL; *spent = fosa_usec_to_rel_time(exec_budget); @@ -242,18 +242,18 @@ int fra_CPU_get_job_usage (const fres_vres_t *vres, fosa_rel_time_t *spent) { - reps_sid_t sid = *((reps_sid_t*)vres->priv); + qres_sid_t sid = *((qres_sid_t*)vres->priv); rtemscpu_params_t q_params; - reps_time_t curr_budget; - reps_rv rv; + qres_time_t curr_budget; + qos_rv rv; if (!spent) return FRSH_ERR_BAD_ARGUMENT; - rv = reps_get_params(sid, &q_params); - if (rv != REPS_OK) return EINVAL; - rv = reps_get_curr_budget(sid, &curr_budget); - if (rv != REPS_OK) return EINVAL; + rv = rtems_qres_get_params(sid, &q_params); + if (rv != QOS_OK) return EINVAL; + rv = rtems_qres_get_curr_budget(sid, &curr_budget); + if (rv != QOS_OK) return EINVAL; *spent = fosa_usec_to_rel_time(q_params.Q - curr_budget); @@ -265,15 +265,15 @@ int fra_CPU_get_remaining_budget (const fres_vres_t *vres, fosa_rel_time_t *budget) { - reps_sid_t sid = *((reps_sid_t*)vres->priv); - reps_time_t curr_budget; - reps_rv rv; + qres_sid_t sid = *((qres_sid_t*)vres->priv); + qres_time_t curr_budget; + qos_rv rv; if (!budget) return FRSH_ERR_BAD_ARGUMENT; - rv = reps_get_curr_budget(sid, &curr_budget); - if (rv != REPS_OK) return EINVAL; + rv = rtems_qres_get_curr_budget(sid, &curr_budget); + if (rv != QOS_OK) return EINVAL; *budget = fosa_usec_to_rel_time(curr_budget); @@ -283,25 +283,26 @@ int fra_CPU_get_remaining_budget static int fra_CPU_set_spare_bandwidth(fres_vres_t *vres) { - reps_sid_t fake_sid = (reps_sid_t) -1; - rtemscpu_params_t cpu_params; - reps_rv rv; + //qres_sid_t fake_sid = (qres_sid_t) -1; + //rtemscpu_params_t cpu_params; + //qos_rv rv; /* get aqcpu params from contract */ - get_rtemscpu_params(vres, &cpu_params); + //get_rtemscpu_params(vres, &cpu_params); /* reserve CPU bandwidth for feedback */ - rv = reps_reserve_spare(&cpu_params); - if (rv != REPS_OK) return (int)(rv); + //rv = rtems_qres_reserve_spare(&cpu_params); + //if (rv != QOS_OK) + return QOS_E_UNIMPLEMENTED; - ul_logdeb("Created RTEMSCPU spare (period=%lld us, budget=%lld us)\n", - cpu_params.P, cpu_params.Q); - if ((vres->priv = malloc(sizeof(reps_sid_t)))) { - memcpy(vres->priv, &fake_sid, sizeof(reps_sid_t)); - } + //ul_logdeb("Created RTEMSCPU spare (period=%lld us, budget=%lld us)\n", + // cpu_params.P, cpu_params.Q); + //if ((vres->priv = malloc(sizeof(qres_sid_t)))) { + // memcpy(vres->priv, &fake_sid, sizeof(qres_sid_t)); + //} - return 0; + //return 0; } static @@ -309,15 +310,15 @@ int fra_CPU_get_desired_budget (fres_vres_t *vres, frsh_rel_time_t *p_budget_out) { - reps_sid_t sid = *((reps_sid_t*)vres->priv); + qres_sid_t sid = *((qres_sid_t*)vres->priv); rtemscpu_params_t q_params; - reps_rv rv; + qos_rv rv; if (!p_budget_out) return FRSH_ERR_BAD_ARGUMENT; - rv = reps_get_params(sid, &q_params); - if (rv != REPS_OK) return EINVAL; + rv = rtems_qres_get_params(sid, &q_params); + if (rv != QOS_OK) return EINVAL; *p_budget_out = fosa_usec_to_rel_time(q_params.Q); @@ -329,20 +330,20 @@ int fra_CPU_set_desired_budget (fres_vres_t *vres, fosa_rel_time_t *p_budget_in) { - reps_sid_t sid = *((reps_sid_t*)vres->priv); + qres_sid_t sid = *((qres_sid_t*)vres->priv); rtemscpu_params_t q_params; - reps_rv rv; + qos_rv rv; if (!p_budget_in) return FRSH_ERR_BAD_ARGUMENT; - rv = reps_get_params(sid, &q_params); - if (rv != REPS_OK) return EINVAL; + rv = rtems_qres_get_params(sid, &q_params); + if (rv != QOS_OK) return EINVAL; q_params.Q = fosa_rel_time_to_usec(*p_budget_in); - rv = reps_set_params(sid, &q_params); - if (rv != REPS_OK) return EINVAL; + rv = rtems_qres_set_params(sid, &q_params); + if (rv != QOS_OK) return EINVAL; return 0; } @@ -352,15 +353,15 @@ int fra_CPU_get_actual_budget (fres_vres_t *vres, fosa_rel_time_t *budget) { - reps_sid_t sid = *((reps_sid_t*)vres->priv); - reps_time_t appr_budget; - reps_rv rv; + qres_sid_t sid = *((qres_sid_t*)vres->priv); + qres_time_t appr_budget; + qos_rv rv; if (!budget) return FRSH_ERR_BAD_ARGUMENT; - rv = reps_get_appr_budget(sid, &appr_budget); - if (rv != REPS_OK) return EINVAL; + rv = rtems_qres_get_appr_budget(sid, &appr_budget); + if (rv != QOS_OK) return EINVAL; *budget = fosa_usec_to_rel_time(appr_budget); @@ -369,9 +370,9 @@ int fra_CPU_get_actual_budget int rtemscpu_fra_activate(forb_orb orb) { - reps_rv qrv; - if ((qrv = reps_init()) != REPS_OK) { - if (qrv == REPS_E_MISSING_COMPONENT) { + qos_rv qrv; + if ((qrv = rtems_qres_init()) != QOS_OK) { + if (qrv == QOS_E_MISSING_COMPONENT) { return FRES_ERR_KERNEL_SUPPORT_MISSING; } else return FRSH_ERR_INTERNAL_ERROR; @@ -380,7 +381,7 @@ int rtemscpu_fra_activate(forb_orb orb) /* install the cleanup function of th RTEMS framework as an exit * handler function (quite futile but, for now, it's sufficent) */ if (atexit(rtemscpu_cleanup_wrapper)) { - reps_cleanup(); + rtems_qres_cleanup(); return(FRSH_ERR_INTERNAL_ERROR); } diff --git a/src/frsh/resources/cpu_rtems/mngr/frm_rtemscpu.c b/src/frsh/resources/cpu_rtems/mngr/frm_rtemscpu.c index 2d95bbeb..e71604cf 100644 --- a/src/frsh/resources/cpu_rtems/mngr/frm_rtemscpu.c +++ b/src/frsh/resources/cpu_rtems/mngr/frm_rtemscpu.c @@ -148,7 +148,7 @@ FORB_MAIN(frm_rtemscpu, forb_orb orb, int argc, char *argv[]) ret = frm_register_and_run(orb, &frm); if (ret != 0) { - ERR( errno, "frm_generic_run"); + ERR( errno, "frm_rtemscpu_run"); } return 0; -- 2.39.2