enqueue/dequeue in mbuf.c

Eric Norum eric at skatter.USask.Ca
Wed Apr 29 16:22:06 UTC 1998


"erik.ivanenko" <erik.ivanenko at utoronto.ca> wrote:
> Just a quick question...
>
> Should the enqueue/dequeue routines be protected by a _ISR_disable
> and _ISR_enable pair?  I'm worried about this situation:
>
> task B at priority X ( or higher ) is waiting for an event
> task A is a preemptible task of priority X that uses the
> enqueue/dequeue primitives of mbuf.c
> an interrupt fires
> task A yields control to the ISR
> the ISR issues the event to wake task B
> task B then becomes runnable, and is of higher or equal priority of
> task A
> task B then runs, and uses enqueue/dequeue primitives
>
> Is that possible?
>

Don't worry.
Be happy.
There isn't a problem.

The situation you describe ``can't happen''.  A task which wishes to  
execute network code must first obtain the network semaphore  
(rtems_ka9q_semaphore) so there's no chance that two tasks can be  
active in enqueue/dequeue at the `same' time.

Have a look at the c/src/lib/libka9q/NOTES for complete details.  By  
using a mutex like this I was able to remove all interrupt  
disable/enable pairs from the KA9Q network code.

This is why there's the caveat that interrupt service routines must  
not call network code!

---
Eric Norum                                 eric at skatter.usask.ca
Saskatchewan Accelerator Laboratory        Phone: (306) 966-6308
University of Saskatchewan                 FAX:   (306) 966-6058
Saskatoon, Canada.



More information about the users mailing list