Rev 2131 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2131 | Rev 2307 | ||
|---|---|---|---|
| Line 372... | Line 372... | ||
| 372 | void ipc_cleanup(void) |
372 | void ipc_cleanup(void) |
| 373 | { |
373 | { |
| 374 | int i; |
374 | int i; |
| 375 | call_t *call; |
375 | call_t *call; |
| 376 | phone_t *phone; |
376 | phone_t *phone; |
| - | 377 | DEADLOCK_PROBE_INIT(p_phonelck); |
|
| 377 | 378 | ||
| 378 | /* Disconnect all our phones ('ipc_phone_hangup') */ |
379 | /* Disconnect all our phones ('ipc_phone_hangup') */ |
| 379 | for (i=0;i < IPC_MAX_PHONES; i++) |
380 | for (i=0;i < IPC_MAX_PHONES; i++) |
| 380 | ipc_phone_hangup(&TASK->phones[i]); |
381 | ipc_phone_hangup(&TASK->phones[i]); |
| 381 | 382 | ||
| Line 385... | Line 386... | ||
| 385 | /* Disconnect all phones connected to our answerbox */ |
386 | /* Disconnect all phones connected to our answerbox */ |
| 386 | restart_phones: |
387 | restart_phones: |
| 387 | spinlock_lock(&TASK->answerbox.lock); |
388 | spinlock_lock(&TASK->answerbox.lock); |
| 388 | while (!list_empty(&TASK->answerbox.connected_phones)) { |
389 | while (!list_empty(&TASK->answerbox.connected_phones)) { |
| 389 | phone = list_get_instance(TASK->answerbox.connected_phones.next, |
390 | phone = list_get_instance(TASK->answerbox.connected_phones.next, |
| 390 | phone_t, link); |
391 | phone_t, link); |
| 391 | if (! spinlock_trylock(&phone->lock)) { |
392 | if (! spinlock_trylock(&phone->lock)) { |
| 392 | spinlock_unlock(&TASK->answerbox.lock); |
393 | spinlock_unlock(&TASK->answerbox.lock); |
| - | 394 | DEADLOCK_PROBE(p_phonelck, DEADLOCK_THRESHOLD); |
|
| 393 | goto restart_phones; |
395 | goto restart_phones; |
| 394 | } |
396 | } |
| 395 | 397 | ||
| 396 | /* Disconnect phone */ |
398 | /* Disconnect phone */ |
| 397 | ASSERT(phone->state == IPC_PHONE_CONNECTED); |
399 | ASSERT(phone->state == IPC_PHONE_CONNECTED); |
| Line 498... | Line 500... | ||
| 498 | /* Print answerbox - calls */ |
500 | /* Print answerbox - calls */ |
| 499 | spinlock_lock(&task->answerbox.lock); |
501 | spinlock_lock(&task->answerbox.lock); |
| 500 | printf("ABOX - CALLS:\n"); |
502 | printf("ABOX - CALLS:\n"); |
| 501 | for (tmp=task->answerbox.calls.next; tmp != &task->answerbox.calls;tmp = tmp->next) { |
503 | for (tmp=task->answerbox.calls.next; tmp != &task->answerbox.calls;tmp = tmp->next) { |
| 502 | call = list_get_instance(tmp, call_t, link); |
504 | call = list_get_instance(tmp, call_t, link); |
| 503 | printf("Callid: %p Srctask:%lld M:%d A1:%d A2:%d A3:%d Flags:%x\n",call, |
505 | printf("Callid: %p Srctask:%llu M:%d A1:%d A2:%d A3:%d Flags:%x\n",call, |
| 504 | call->sender->taskid, IPC_GET_METHOD(call->data), IPC_GET_ARG1(call->data), |
506 | call->sender->taskid, IPC_GET_METHOD(call->data), IPC_GET_ARG1(call->data), |
| 505 | IPC_GET_ARG2(call->data), IPC_GET_ARG3(call->data), call->flags); |
507 | IPC_GET_ARG2(call->data), IPC_GET_ARG3(call->data), call->flags); |
| 506 | } |
508 | } |
| 507 | /* Print answerbox - calls */ |
509 | /* Print answerbox - calls */ |
| 508 | printf("ABOX - DISPATCHED CALLS:\n"); |
510 | printf("ABOX - DISPATCHED CALLS:\n"); |
| 509 | for (tmp=task->answerbox.dispatched_calls.next; |
511 | for (tmp=task->answerbox.dispatched_calls.next; |
| 510 | tmp != &task->answerbox.dispatched_calls; |
512 | tmp != &task->answerbox.dispatched_calls; |
| 511 | tmp = tmp->next) { |
513 | tmp = tmp->next) { |
| 512 | call = list_get_instance(tmp, call_t, link); |
514 | call = list_get_instance(tmp, call_t, link); |
| 513 | printf("Callid: %p Srctask:%lld M:%d A1:%d A2:%d A3:%d Flags:%x\n",call, |
515 | printf("Callid: %p Srctask:%llu M:%d A1:%d A2:%d A3:%d Flags:%x\n",call, |
| 514 | call->sender->taskid, IPC_GET_METHOD(call->data), IPC_GET_ARG1(call->data), |
516 | call->sender->taskid, IPC_GET_METHOD(call->data), IPC_GET_ARG1(call->data), |
| 515 | IPC_GET_ARG2(call->data), IPC_GET_ARG3(call->data), call->flags); |
517 | IPC_GET_ARG2(call->data), IPC_GET_ARG3(call->data), call->flags); |
| 516 | } |
518 | } |
| 517 | /* Print answerbox - calls */ |
519 | /* Print answerbox - calls */ |
| 518 | printf("ABOX - ANSWERS:\n"); |
520 | printf("ABOX - ANSWERS:\n"); |