Changeset c4e4507 in mainline for generic/src/ipc/ipc.c


Ignore:
Timestamp:
2006-06-04T17:17:29Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
2cb5e64
Parents:
fe19611
Message:

Renamed some things in IPC to be consistent.
Added ipc reporting to kconsole.

File:
1 edited

Legend:

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

    rfe19611 rc4e4507  
    111111        spinlock_lock(&phone->lock);
    112112
    113         ASSERT(!phone->callee);
    114113        phone->state = IPC_PHONE_CONNECTED;
    115114        phone->callee = box;
    116115
    117116        spinlock_lock(&box->lock);
    118         list_append(&phone->list, &box->connected_phones);
     117        list_append(&phone->link, &box->connected_phones);
    119118        spinlock_unlock(&box->lock);
    120119
     
    156155
    157156        spinlock_lock(&callerbox->lock);
    158         list_append(&call->list, &callerbox->answers);
     157        list_append(&call->link, &callerbox->answers);
    159158        spinlock_unlock(&callerbox->lock);
    160159        waitq_wakeup(&callerbox->wq, 0);
     
    170169        /* Remove from active box */
    171170        spinlock_lock(&box->lock);
    172         list_remove(&call->list);
     171        list_remove(&call->link);
    173172        spinlock_unlock(&box->lock);
    174173        /* Send back answer */
     
    198197
    199198        spinlock_lock(&box->lock);
    200         list_append(&call->list, &box->calls);
     199        list_append(&call->link, &box->calls);
    201200        spinlock_unlock(&box->lock);
    202201        waitq_wakeup(&box->wq, 0);
     
    262261                /* Remove myself from answerbox */
    263262                spinlock_lock(&box->lock);
    264                 list_remove(&phone->list);
     263                list_remove(&phone->link);
    265264                spinlock_unlock(&box->lock);
    266265
     
    277276        }
    278277
    279         phone->callee = 0;
    280        
    281278        phone->state = IPC_PHONE_HUNGUP;
    282279        spinlock_unlock(&phone->lock);
     
    298295{
    299296        spinlock_lock(&oldbox->lock);
    300         list_remove(&call->list);
     297        list_remove(&call->link);
    301298        spinlock_unlock(&oldbox->lock);
    302299
     
    331328                spinlock_lock(&box->irq_lock);
    332329
    333                 request = list_get_instance(box->irq_notifs.next, call_t, list);
    334                 list_remove(&request->list);
     330                request = list_get_instance(box->irq_notifs.next, call_t, link);
     331                list_remove(&request->link);
    335332
    336333                spinlock_unlock(&box->irq_lock);
     
    338335        } else if (!list_empty(&box->answers)) {
    339336                /* Handle asynchronous answers */
    340                 request = list_get_instance(box->answers.next, call_t, list);
    341                 list_remove(&request->list);
     337                request = list_get_instance(box->answers.next, call_t, link);
     338                list_remove(&request->link);
    342339                atomic_dec(&request->data.phone->active_calls);
    343340        } else if (!list_empty(&box->calls)) {
    344341                /* Handle requests */
    345                 request = list_get_instance(box->calls.next, call_t, list);
    346                 list_remove(&request->list);
     342                request = list_get_instance(box->calls.next, call_t, link);
     343                list_remove(&request->link);
    347344                /* Append request to dispatch queue */
    348                 list_append(&request->list, &box->dispatched_calls);
     345                list_append(&request->link, &box->dispatched_calls);
    349346        } else {
    350347                /* This can happen regularly after ipc_cleanup, remove
     
    365362
    366363        while (!list_empty(lst)) {
    367                 call = list_get_instance(lst->next, call_t, list);
    368                 list_remove(&call->list);
     364                call = list_get_instance(lst->next, call_t, link);
     365                list_remove(&call->link);
    369366
    370367                IPC_SET_RETVAL(call->data, EHANGUP);
     
    395392        while (!list_empty(&task->answerbox.connected_phones)) {
    396393                phone = list_get_instance(task->answerbox.connected_phones.next,
    397                                           phone_t,
    398                                           list);
     394                                          phone_t, link);
    399395                if (! spinlock_trylock(&phone->lock)) {
    400396                        spinlock_unlock(&task->answerbox.lock);
     
    405401                ASSERT(phone->state == IPC_PHONE_CONNECTED);
    406402                phone->state = IPC_PHONE_SLAMMED;
    407                 list_remove(&phone->list);
     403                list_remove(&phone->link);
    408404
    409405                spinlock_unlock(&phone->lock);
     
    452448}
    453449
     450
     451/** Kconsole - list answerbox contents */
     452void ipc_print_task(task_id_t taskid)
     453{
     454        task_t *task;
     455        int i;
     456        call_t *call;
     457        link_t *tmp;
     458       
     459        spinlock_lock(&tasks_lock);
     460        task = task_find_by_id(taskid);
     461        if (task)
     462                spinlock_lock(&task->lock);
     463        spinlock_unlock(&tasks_lock);
     464        if (!task)
     465                return;
     466
     467        /* Print opened phones & details */
     468        printf("PHONE:\n");
     469        for (i=0; i < IPC_MAX_PHONES;i++) {
     470                spinlock_lock(&task->phones[i].lock);
     471                if (task->phones[i].state != IPC_PHONE_FREE) {
     472                        printf("%d: ",i);
     473                        switch (task->phones[i].state) {
     474                        case IPC_PHONE_CONNECTING:
     475                                printf("connecting ");
     476                                break;
     477                        case IPC_PHONE_CONNECTED:
     478                                printf("connected to: %P ",
     479                                       task->phones[i].callee);
     480                                break;
     481                        case IPC_PHONE_SLAMMED:
     482                                printf("slammed by: %P ",
     483                                       task->phones[i].callee);
     484                                break;
     485                        case IPC_PHONE_HUNGUP:
     486                                printf("hung up - was: %P ",
     487                                       task->phones[i].callee);
     488                                break;
     489                        default:
     490                                break;
     491                        }
     492                        printf("active: %d\n", atomic_get(&task->phones[i].active_calls));
     493                }
     494                spinlock_unlock(&task->phones[i].lock);
     495        }
     496
     497
     498        /* Print answerbox - calls */
     499        spinlock_lock(&task->answerbox.lock);
     500        printf("ABOX - CALLS:\n");
     501        for (tmp=task->answerbox.calls.next; tmp != &task->answerbox.calls;tmp = tmp->next) {
     502                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,
     504                       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);
     506        }
     507        /* Print answerbox - calls */
     508        printf("ABOX - DISPATCHED CALLS:\n");
     509        for (tmp=task->answerbox.dispatched_calls.next;
     510             tmp != &task->answerbox.dispatched_calls;
     511             tmp = tmp->next) {
     512                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,
     514                       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);
     516        }
     517        /* Print answerbox - calls */
     518        printf("ABOX - ANSWERS:\n");
     519        for (tmp=task->answerbox.answers.next; tmp != &task->answerbox.answers; tmp = tmp->next) {
     520                call = list_get_instance(tmp, call_t, link);
     521                printf("Callid:%P M:%d A1:%d A2:%d A3:%d Flags:%x\n",call,
     522                       IPC_GET_METHOD(call->data), IPC_GET_ARG1(call->data),
     523                       IPC_GET_ARG2(call->data), IPC_GET_ARG3(call->data), call->flags);
     524        }
     525
     526        spinlock_unlock(&task->answerbox.lock);
     527        spinlock_unlock(&task->lock);
     528}
Note: See TracChangeset for help on using the changeset viewer.