Rev 3425 | Rev 3433 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3425 | Rev 3431 | ||
|---|---|---|---|
| Line 454... | Line 454... | ||
| 454 | phone_t *phone; |
454 | phone_t *phone; |
| 455 | DEADLOCK_PROBE_INIT(p_phonelck); |
455 | DEADLOCK_PROBE_INIT(p_phonelck); |
| 456 | ipl_t ipl; |
456 | ipl_t ipl; |
| 457 | call_t *call; |
457 | call_t *call; |
| 458 | 458 | ||
| 459 | call = ipc_call_alloc(0); |
459 | call = notify_box ? ipc_call_alloc(0) : NULL; |
| 460 | 460 | ||
| 461 | /* Disconnect all phones connected to our answerbox */ |
461 | /* Disconnect all phones connected to our answerbox */ |
| 462 | restart_phones: |
462 | restart_phones: |
| 463 | ipl = interrupts_disable(); |
463 | ipl = interrupts_disable(); |
| 464 | spinlock_lock(&box->lock); |
464 | spinlock_lock(&box->lock); |
| Line 508... | Line 508... | ||
| 508 | 508 | ||
| 509 | /* Free unused call */ |
509 | /* Free unused call */ |
| 510 | if (call) ipc_call_free(call); |
510 | if (call) ipc_call_free(call); |
| 511 | } |
511 | } |
| 512 | 512 | ||
| - | 513 | #ifdef CONFIG_UDEBUG |
|
| - | 514 | ||
| 513 | static void ipc_kbox_cleanup() |
515 | static void ipc_kbox_cleanup() |
| 514 | { |
516 | { |
| 515 | bool have_kb_thread; |
517 | bool have_kb_thread; |
| 516 | 518 | ||
| 517 | /* Only hold kb_cleanup_lock while setting kb_finished - this is enough */ |
519 | /* Only hold kb_cleanup_lock while setting kb_finished - this is enough */ |
| Line 544... | Line 546... | ||
| 544 | ipc_cleanup_call_list(&TASK->kernel_box.dispatched_calls); |
546 | ipc_cleanup_call_list(&TASK->kernel_box.dispatched_calls); |
| 545 | ipc_cleanup_call_list(&TASK->kernel_box.calls); |
547 | ipc_cleanup_call_list(&TASK->kernel_box.calls); |
| 546 | spinlock_unlock(&TASK->kernel_box.lock); |
548 | spinlock_unlock(&TASK->kernel_box.lock); |
| 547 | } |
549 | } |
| 548 | 550 | ||
| - | 551 | #endif |
|
| 549 | 552 | ||
| 550 | /** Cleans up all IPC communication of the current task. |
553 | /** Cleans up all IPC communication of the current task. |
| 551 | * |
554 | * |
| 552 | * Note: ipc_hangup sets returning answerbox to TASK->answerbox, you |
555 | * Note: ipc_hangup sets returning answerbox to TASK->answerbox, you |
| 553 | * have to change it as well if you want to cleanup other tasks than TASK. |
556 | * have to change it as well if you want to cleanup other tasks than TASK. |
| Line 565... | Line 568... | ||
| 565 | ipc_irq_cleanup(&TASK->answerbox); |
568 | ipc_irq_cleanup(&TASK->answerbox); |
| 566 | 569 | ||
| 567 | /* Disconnect all phones connected to our regular answerbox */ |
570 | /* Disconnect all phones connected to our regular answerbox */ |
| 568 | ipc_answerbox_slam_phones(&TASK->answerbox, false); |
571 | ipc_answerbox_slam_phones(&TASK->answerbox, false); |
| 569 | 572 | ||
| - | 573 | #ifdef CONFIG_UDEBUG |
|
| 570 | /* Clean up kbox thread and communications */ |
574 | /* Clean up kbox thread and communications */ |
| 571 | ipc_kbox_cleanup(); |
575 | ipc_kbox_cleanup(); |
| - | 576 | #endif |
|
| 572 | 577 | ||
| 573 | /* Answer all messages in 'calls' and 'dispatched_calls' queues */ |
578 | /* Answer all messages in 'calls' and 'dispatched_calls' queues */ |
| 574 | spinlock_lock(&TASK->answerbox.lock); |
579 | spinlock_lock(&TASK->answerbox.lock); |
| 575 | ipc_cleanup_call_list(&TASK->answerbox.dispatched_calls); |
580 | ipc_cleanup_call_list(&TASK->answerbox.dispatched_calls); |
| 576 | ipc_cleanup_call_list(&TASK->answerbox.calls); |
581 | ipc_cleanup_call_list(&TASK->answerbox.calls); |
| Line 721... | Line 726... | ||
| 721 | 726 | ||
| 722 | spinlock_unlock(&task->answerbox.lock); |
727 | spinlock_unlock(&task->answerbox.lock); |
| 723 | spinlock_unlock(&task->lock); |
728 | spinlock_unlock(&task->lock); |
| 724 | } |
729 | } |
| 725 | 730 | ||
| - | 731 | #ifdef CONFIG_UDEBUG |
|
| - | 732 | ||
| 726 | #include <ipc/ipcrsc.h> |
733 | #include <ipc/ipcrsc.h> |
| 727 | #include <print.h> |
734 | #include <print.h> |
| 728 | #include <udebug/udebug_ipc.h> |
735 | #include <udebug/udebug_ipc.h> |
| 729 | 736 | ||
| 730 | static void kbox_thread_proc(void *arg) |
737 | static void kbox_thread_proc(void *arg) |
| Line 862... | Line 869... | ||
| 862 | mutex_unlock(&ta->kb_cleanup_lock); |
869 | mutex_unlock(&ta->kb_cleanup_lock); |
| 863 | 870 | ||
| 864 | return newphid; |
871 | return newphid; |
| 865 | } |
872 | } |
| 866 | 873 | ||
| - | 874 | #endif /* defined(CONFIG_UDEBUG) */ |
|
| - | 875 | ||
| 867 | /** @} |
876 | /** @} |
| 868 | */ |
877 | */ |