From 6a225701acf7d79f292eeffcd99d6f00b02c180b Mon Sep 17 00:00:00 2001 From: Glenn Elliott Date: Fri, 7 Sep 2012 23:25:01 -0400 Subject: Infrastructure for Litmus signals. Added signals to Litmus. Specifcally, SIG_BUDGET signals are delivered (when requested by real-time tasks) when a budget is exceeded. Note: pfair not currently supported (but it probably could be). --- include/litmus/budget.h | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'include/litmus/budget.h') diff --git a/include/litmus/budget.h b/include/litmus/budget.h index 33344ee8d5f9..763b31c0e9f6 100644 --- a/include/litmus/budget.h +++ b/include/litmus/budget.h @@ -5,6 +5,9 @@ * the next task. */ void update_enforcement_timer(struct task_struct* t); +/* Send SIG_BUDGET to a real-time task. */ +void send_sigbudget(struct task_struct* t); + inline static int budget_exhausted(struct task_struct* t) { return get_exec_time(t) >= get_exec_cost(t); @@ -19,10 +22,21 @@ inline static lt_t budget_remaining(struct task_struct* t) return 0; } -#define budget_enforced(t) (tsk_rt(t)->task_params.budget_policy != NO_ENFORCEMENT) +#define budget_enforced(t) (\ + tsk_rt(t)->task_params.budget_policy != NO_ENFORCEMENT) + +#define budget_precisely_tracked(t) (\ + tsk_rt(t)->task_params.budget_policy == PRECISE_ENFORCEMENT || \ + tsk_rt(t)->task_params.budget_signal_policy == PRECISE_SIGNALS) + +#define budget_signalled(t) (\ + tsk_rt(t)->task_params.budget_signal_policy != NO_SIGNALS) + +#define budget_precisely_signalled(t) (\ + tsk_rt(t)->task_params.budget_policy == PRECISE_SIGNALS) -#define budget_precisely_enforced(t) (tsk_rt(t)->task_params.budget_policy \ - == PRECISE_ENFORCEMENT) +#define sigbudget_sent(t) (\ + test_bit(RT_JOB_SIG_BUDGET_SENT, &tsk_rt(t)->job_params.flags)) static inline int requeue_preempted_job(struct task_struct* t) { -- cgit v1.2.2