[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