Critical section - pSOS+

Srinivas Rao.M msrao at vxl.co.in
Fri Jan 5 16:19:15 EST 2001


Hi Jerry,
Thanks for your reply.
   I have the splx() routine given from pSOS+, I am also having the
wrapper code which calls the psos 's system call to disable the
preemption of the task. I can do this successfully. But My problem is,
how can i implement the interrupts enabling/disabling mechanism at the
task level.

 Present mechanism has got a loophole: whenever we disable interrupts any
other task enables it. I want to have a mechanism, which is there UNIX.
something like splnet,splclock,splhigh,splimp,splx, at each task level.

any suggestions...
-Srini...



On Thu, 4 Jan 2001, Jerry Van Baren wrote:

>
> I forgot if splx() returns the current value of the interrupt enable
> bit.  If it doesn't, modify it to do so.  If I recall correctly, the
> routine is in the BSP (been a little while since I messed with PPC
> pSOS).  If I recall wrongly, you may need to write your own version of
> splx(), naming it something else to avoid name collisions, and use it
> instead of the provided splx().
>
> Once your splx() routine returns the current value of the EE flag, save
> it in a variable, and restore the value when you exit your critical region.
>
> Something like...
>
> void foo()
> {
>      int ee;
>
>      ee = splix(1);      /* mask interrupts */
>      bar()
>      splx(ee);           /* restore the interrupt level */
> }
>
> gvb
>
>
> At 09:37 AM 1/4/01 +0530, Srinivas Rao.M wrote:
>
> >Hi to all,
> >
> >  I am sorry, This question is not releated to the list directly.
> >
> >  We have a custom board built using MPC860 processor and running the
> >pSOS+ kernel. We are running a multitasking application on this. we are
> >facing a problem with the critical section.
> >we have in pSOS+, splx(1) and splx(0) calls for disabling and enabling the
> >interrupts respectively. Having multiple tasks running on the kernel,
> >suppose if one task disables the interrupt by calling splx(1),
> >The other task can enable the interrupts back to the old posture by
> >calling splx(0). Hence the critical section code is left in the non
> >critical section area. Unlike UNIX, pSOS+ doesnot provide, the interrupts
> >locking (and unlocking) mechanism at the task level.
> >In such contexts how can we solve this problem.
> >
> >Thanks in advance.
> >Srini...
> >
> >--
> >
> >The beginning of knowledge is the discovery of something we do not
> >understand.
> >-Frank Herbert
> >(contributed by Chris Johnston)
> >
>
>
>

--

There is one thing even more vital to science than intelligent methods; and
that is, the sincere desire to find out the truth, whatever it may be.
-Charles Sanders Pierce


** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/





More information about the Linuxppc-dev mailing list