Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/ipc/ipc.c

    r6aef742 rab34cc9  
    3838 */
    3939
    40 #include <synch/synch.h>
    4140#include <synch/spinlock.h>
    4241#include <synch/mutex.h>
    4342#include <synch/waitq.h>
    44 #include <synch/synch.h>
    4543#include <ipc/ipc.h>
     44#include <abi/ipc/methods.h>
    4645#include <ipc/kbox.h>
    4746#include <ipc/event.h>
     
    127126        list_initialize(&box->answers);
    128127        list_initialize(&box->irq_notifs);
    129         list_initialize(&box->irq_head);
     128        list_initialize(&box->irq_list);
    130129        box->task = task;
    131130}
     
    182181         */
    183182        irq_spinlock_lock(&TASK->lock, true);
    184         list_append(&sync_box->sync_box_link, &TASK->sync_box_head);
     183        list_append(&sync_box->sync_box_link, &TASK->sync_boxes);
    185184        irq_spinlock_unlock(&TASK->lock, true);
    186185       
     
    231230                }
    232231        }
     232
     233        call->data.task_id = TASK->taskid;
    233234       
    234235        if (do_lock)
     
    295296                atomic_inc(&phone->active_calls);
    296297                call->data.phone = phone;
    297                 call->data.task = TASK;
     298                call->data.task_id = TASK->taskid;
    298299        }
    299300       
     
    407408                        call->caller_phone = call->data.phone;
    408409                call->data.phone = newphone;
    409                 call->data.task = TASK;
     410                call->data.task_id = TASK->taskid;
    410411        }
    411412       
     
    449450                irq_spinlock_lock(&box->irq_lock, false);
    450451               
    451                 request = list_get_instance(box->irq_notifs.next, call_t, link);
     452                request = list_get_instance(list_first(&box->irq_notifs),
     453                    call_t, link);
    452454                list_remove(&request->link);
    453455               
     
    458460               
    459461                /* Handle asynchronous answers */
    460                 request = list_get_instance(box->answers.next, call_t, link);
     462                request = list_get_instance(list_first(&box->answers),
     463                    call_t, link);
    461464                list_remove(&request->link);
    462465                atomic_dec(&request->data.phone->active_calls);
     
    466469               
    467470                /* Handle requests */
    468                 request = list_get_instance(box->calls.next, call_t, link);
     471                request = list_get_instance(list_first(&box->calls),
     472                    call_t, link);
    469473                list_remove(&request->link);
    470474               
     
    493497 *
    494498 */
    495 void ipc_cleanup_call_list(link_t *lst)
     499void ipc_cleanup_call_list(list_t *lst)
    496500{
    497501        while (!list_empty(lst)) {
    498                 call_t *call = list_get_instance(lst->next, call_t, link);
     502                call_t *call = list_get_instance(list_first(lst), call_t, link);
    499503                if (call->buffer)
    500504                        free(call->buffer);
     
    525529        irq_spinlock_lock(&box->lock, true);
    526530        while (!list_empty(&box->connected_phones)) {
    527                 phone = list_get_instance(box->connected_phones.next,
     531                phone = list_get_instance(list_first(&box->connected_phones),
    528532                    phone_t, link);
    529533                if (SYNCH_FAILED(mutex_trylock(&phone->lock))) {
     
    605609        /* Wait for all answers to interrupted synchronous calls to arrive */
    606610        ipl_t ipl = interrupts_disable();
    607         while (!list_empty(&TASK->sync_box_head)) {
    608                 answerbox_t *box = list_get_instance(TASK->sync_box_head.next,
    609                     answerbox_t, sync_box_link);
     611        while (!list_empty(&TASK->sync_boxes)) {
     612                answerbox_t *box = list_get_instance(
     613                    list_first(&TASK->sync_boxes), answerbox_t, sync_box_link);
    610614               
    611615                list_remove(&box->sync_box_link);
     
    742746#endif
    743747       
    744         link_t *cur;
    745        
    746748        printf(" --- incomming calls ---\n");
    747         for (cur = task->answerbox.calls.next; cur != &task->answerbox.calls;
    748             cur = cur->next) {
     749        list_foreach(task->answerbox.calls, cur) {
    749750                call_t *call = list_get_instance(cur, call_t, link);
    750751               
     
    766767       
    767768        printf(" --- dispatched calls ---\n");
    768         for (cur = task->answerbox.dispatched_calls.next;
    769             cur != &task->answerbox.dispatched_calls;
    770             cur = cur->next) {
     769        list_foreach(task->answerbox.dispatched_calls, cur) {
    771770                call_t *call = list_get_instance(cur, call_t, link);
    772771               
     
    788787       
    789788        printf(" --- incoming answers ---\n");
    790         for (cur = task->answerbox.answers.next;
    791             cur != &task->answerbox.answers;
    792             cur = cur->next) {
     789        list_foreach(task->answerbox.answers, cur) {
    793790                call_t *call = list_get_instance(cur, call_t, link);
    794791               
Note: See TracChangeset for help on using the changeset viewer.