diff options
Diffstat (limited to 'firmware/kernel.c')
-rw-r--r-- | firmware/kernel.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/firmware/kernel.c b/firmware/kernel.c index 77b0c6ffef..03be6db624 100644 --- a/firmware/kernel.c +++ b/firmware/kernel.c | |||
@@ -38,8 +38,6 @@ void (*tick_funcs[MAX_NUM_TICK_TASKS])(void); | |||
38 | static struct event_queue *all_queues[32] NOCACHEBSS_ATTR; | 38 | static struct event_queue *all_queues[32] NOCACHEBSS_ATTR; |
39 | static int num_queues NOCACHEBSS_ATTR; | 39 | static int num_queues NOCACHEBSS_ATTR; |
40 | 40 | ||
41 | void queue_wait(struct event_queue *q, struct event *ev) ICODE_ATTR; | ||
42 | |||
43 | /**************************************************************************** | 41 | /**************************************************************************** |
44 | * Standard kernel stuff | 42 | * Standard kernel stuff |
45 | ****************************************************************************/ | 43 | ****************************************************************************/ |
@@ -234,7 +232,15 @@ void queue_wait(struct event_queue *q, struct event *ev) | |||
234 | int oldlevel; | 232 | int oldlevel; |
235 | unsigned int rd; | 233 | unsigned int rd; |
236 | 234 | ||
237 | oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); | 235 | oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); |
236 | |||
237 | #ifdef HAVE_EXTENDED_MESSAGING_AND_NAME | ||
238 | if(q->send && q->send->curr_sender) | ||
239 | { | ||
240 | /* auto-reply */ | ||
241 | queue_release_sender(&q->send->curr_sender, 0); | ||
242 | } | ||
243 | #endif | ||
238 | 244 | ||
239 | if (q->read == q->write) | 245 | if (q->read == q->write) |
240 | { | 246 | { |
@@ -259,6 +265,14 @@ void queue_wait(struct event_queue *q, struct event *ev) | |||
259 | void queue_wait_w_tmo(struct event_queue *q, struct event *ev, int ticks) | 265 | void queue_wait_w_tmo(struct event_queue *q, struct event *ev, int ticks) |
260 | { | 266 | { |
261 | int oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); | 267 | int oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); |
268 | |||
269 | #ifdef HAVE_EXTENDED_MESSAGING_AND_NAME | ||
270 | if (q->send && q->send->curr_sender) | ||
271 | { | ||
272 | /* auto-reply */ | ||
273 | queue_release_sender(&q->send->curr_sender, 0); | ||
274 | } | ||
275 | #endif | ||
262 | 276 | ||
263 | if (q->read == q->write && ticks > 0) | 277 | if (q->read == q->write && ticks > 0) |
264 | { | 278 | { |