X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/c29d86ce91159cc6ddcb4266903f0aafe9992e01..8554583c1846da3be0ab3e25c5e4621e78de8125:/lincan/src/can_quekern.c diff --git a/lincan/src/can_quekern.c b/lincan/src/can_quekern.c index 5089e5c..ac1554c 100644 --- a/lincan/src/can_quekern.c +++ b/lincan/src/can_quekern.c @@ -3,7 +3,7 @@ * New CAN queues by Pavel Pisa - OCERA team member * email:pisa@cmp.felk.cvut.cz * This software is released under the GPL-License. - * Version lincan-0.2 9 Jul 2003 + * Version lincan-0.3 17 Jun 2004 */ #include "../include/can.h" @@ -122,12 +122,10 @@ static inline void canque_dead_tasklet_schedule(void) } -void canque_edge_do_dead(struct canque_edge_t *edge, int dead_fl) +void canque_edge_do_dead(struct canque_edge_t *edge) { can_spin_irqflags_t flags; - if(dead_fl) return; - canque_notify_bothends(edge,CANQUEUE_NOTIFY_NOUSR); #ifdef CAN_WITH_RTL /* The problem of the above call is, that in RT-Linux to Linux notify @@ -176,6 +174,13 @@ void canque_edge_do_dead(struct canque_edge_t *edge, int dead_fl) * @qends: pointer to the callback side ends structure * @qedge: edge which invoked notification * @what: notification type + * + * The notification event is handled directly by call of this function except case, + * when called from RT-Linux context in mixed mode Linux/RT-Linux compilation. + * It is not possible to directly call Linux kernel synchronization primitives + * in such case. The notification request is postponed and signaled by @pending_inops flags + * by call canqueue_rtl2lin_check_and_pend() function. + * The edge reference count is increased until until all pending notifications are processed. */ void canqueue_notify_kern(struct canque_ends_t *qends, struct canque_edge_t *qedge, int what) { @@ -376,7 +381,7 @@ struct canque_edge_t *canque_new_edge_kern(int slotsnr) #ifdef USE_SYNC_DISCONNECT_EDGE_KERN -/** +/*not included in doc * canqueue_disconnect_edge_kern - disconnect edge from communicating entities with wait * @qends: ends structure belonging to calling communication object * @qedge: pointer to edge