[LITMUS^RT] is get_rt_flag deprecated

ayoade gbadebo gbaduz at gmail.com
Wed Nov 6 04:11:49 CET 2013


thanks


On Tue, Nov 5, 2013 at 9:07 PM, Glenn Elliott <gelliott at cs.unc.edu> wrote:

> On Nov 5, 2013, at 9:29 PM, ayoade gbadebo <gbaduz at gmail.com> wrote:
>
> I am trying to follow the tutorial on implementing a plugin,
>  but it complains about this function and RT_F_SLEEP
> get_rt_flags(prev) == RT_F_SLEEP and set_rt_flags(tsk, RT_F_RUNNING);
>
> What functions replaced them
>
> Thanks
> _______________________________________________
> litmus-dev mailing list
> litmus-dev at lists.litmus-rt.org
> https://lists.litmus-rt.org/listinfo/litmus-dev
>
>
>
> You might want to look at the schedule() code for some of the other
> plugins for hints.  I think this code from
> sched_psn_edf.c::psnedf_schedule(…) is relevant:
>
>     exists      = pedf->scheduled != NULL;
>     blocks      = exists && !is_running(pedf->scheduled);
>     out_of_time = exists &&
>                   budget_enforced(pedf->scheduled) &&
>                   budget_exhausted(pedf->scheduled);
>     np      = exists && is_np(pedf->scheduled);
>     sleep       = exists && is_completed(pedf->scheduled);
>     preempt     = edf_preemption_needed(edf, pref);
>
> There are several is_*() macros (see include/litmus/litmus.h) and inline
> functions that replace reading these flags.  I believe the flags were
> replaced by “unsigned int:1” boolean bitfields in struct rt_param (this may
> not be as efficient as OR’ing and AND’ing flags, but it’s a lot easier to
> work with).  For example, here’s the code for litmus.h::is_completed():
>
> static inline int is_completed(struct task_struct* t)
> {
>     return t && tsk_rt(t)->completed;  // here’s the declaration for
> completed: "unsigned int completed:1;"
> }
>
> Let’s look at an old Litmus implementation for the same part of
> sched_psn_edf.c::psnedf_schedule(…):
>
>      exists      = pedf->scheduled != NULL;
>      blocks      = exists && !is_running(pedf->scheduled);
>      out_of_time = exists &&
>                    budget_enforced(pedf->scheduled) &&
>                    budget_exhausted(pedf->scheduled);
>      np = exists && is_np(pedf->scheduled);
>      sleep = exists && get_rt_flags(pedf->scheduled) == RT_F_SLEEP;
>      preempt = edf_preemption_needed(edf, prev);
>
> See where the value for “sleep” is computed?  I think it’s safe to assume
> “get_rt_flags(tsk) == RT_F_SLEEP” is equivalent to "is_completed(tsk)”.
>  Furthermore, comparing the old Litmus code against the new, I believe
> “set_rt_flags(tsk, RT_F_SLEEP)” is equivalent to “tsk_rt(t)->completed = 1”
> and “set_rt_flags(tsk, RT_F_RUNNING)” is equivalent to
> “tsk_rt(t)->completed = 0”.  Regarding the flag “RT_F_EXIT_SEM”, I think
> this functionality has been replaced by logic relating to task release
> policy (release_policy_t) in task wake-up routines.
>
> Here’s a patch for an older version of Litmus that you can search through
> for examples of RT_F_*:
> http://www.litmus-rt.org/releases/2012.2/litmus-rt-2012.2.patch
>
> I didn’t run into any situations where I couldn’t correlate an old segment
> of code with equivalent code in the newest version of Litmus, but please
> feel free to ask more questions if you run into trouble.
>
> -Glenn
>
> _______________________________________________
> litmus-dev mailing list
> litmus-dev at lists.litmus-rt.org
> https://lists.litmus-rt.org/listinfo/litmus-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.litmus-rt.org/pipermail/litmus-dev/attachments/20131105/f647d123/attachment.html>


More information about the litmus-dev mailing list