Ignore:
File:
1 edited

Legend:

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

    r6aef742 rbe06914  
    270270 *
    271271 */
    272 void ipc_backsend_err(phone_t *phone, call_t *call, sysarg_t err)
     272void ipc_backsend_err(phone_t *phone, call_t *call, unative_t err)
    273273{
    274274        call->data.phone = phone;
     
    295295                atomic_inc(&phone->active_calls);
    296296                call->data.phone = phone;
    297                 call->data.task = TASK;
    298297        }
    299298       
     
    368367               
    369368                call_t *call = ipc_call_alloc(0);
    370                 IPC_SET_IMETHOD(call->data, IPC_M_PHONE_HUNGUP);
     369                IPC_SET_METHOD(call->data, IPC_M_PHONE_HUNGUP);
    371370                call->flags |= IPC_CALL_DISCARD_ANSWER;
    372371                _ipc_call(phone, box, call);
     
    407406                        call->caller_phone = call->data.phone;
    408407                call->data.phone = newphone;
    409                 call->data.task = TASK;
    410408        }
    411409       
     
    549547                         * disconnected.
    550548                         */
    551                         IPC_SET_IMETHOD(call->data, IPC_M_PHONE_HUNGUP);
     549                        IPC_SET_METHOD(call->data, IPC_M_PHONE_HUNGUP);
    552550                        call->flags |= IPC_CALL_DISCARD_ANSWER;
    553551                        _ipc_call(phone, box, call);
     
    657655                    (call->flags & IPC_CALL_NOTIF));
    658656               
     657                /*
     658                 * Record the receipt of this call in the current task's counter
     659                 * of active calls. IPC_M_PHONE_HUNGUP calls do not contribute
     660                 * to this counter so do not record answers to them either.
     661                 */
     662                if (!(call->flags & IPC_CALL_DISCARD_ANSWER))
     663                        atomic_dec(&TASK->active_calls);
     664               
    659665                ipc_call_free(call);
    660666        }
     
    690696        irq_spinlock_exchange(&tasks_lock, &task->lock);
    691697       
    692         printf("[phone id] [calls] [state\n");
     698        /* Print opened phones & details */
     699        printf("PHONE:\n");
    693700       
    694701        size_t i;
    695702        for (i = 0; i < IPC_MAX_PHONES; i++) {
    696703                if (SYNCH_FAILED(mutex_trylock(&task->phones[i].lock))) {
    697                         printf("%-10zu (mutex busy)\n", i);
     704                        printf("%d: mutex busy\n", i);
    698705                        continue;
    699706                }
    700707               
    701708                if (task->phones[i].state != IPC_PHONE_FREE) {
    702                         printf("%-10zu %7" PRIun " ", i,
    703                             atomic_get(&task->phones[i].active_calls));
     709                        printf("%" PRIs ": ", i);
    704710                       
    705711                        switch (task->phones[i].state) {
    706712                        case IPC_PHONE_CONNECTING:
    707                                 printf("connecting");
     713                                printf("connecting ");
    708714                                break;
    709715                        case IPC_PHONE_CONNECTED:
    710                                 printf("connected to %" PRIu64 " (%s)",
    711                                     task->phones[i].callee->task->taskid,
    712                                     task->phones[i].callee->task->name);
     716                                printf("connected to: %p ",
     717                                    task->phones[i].callee);
    713718                                break;
    714719                        case IPC_PHONE_SLAMMED:
    715                                 printf("slammed by %p",
     720                                printf("slammed by: %p ",
    716721                                    task->phones[i].callee);
    717722                                break;
    718723                        case IPC_PHONE_HUNGUP:
    719                                 printf("hung up by %p",
     724                                printf("hung up - was: %p ",
    720725                                    task->phones[i].callee);
    721726                                break;
     
    724729                        }
    725730                       
    726                         printf("\n");
     731                        printf("active: %" PRIun "\n",
     732                            atomic_get(&task->phones[i].active_calls));
    727733                }
    728734               
     
    732738        irq_spinlock_lock(&task->answerbox.lock, false);
    733739       
    734 #ifdef __32_BITS__
    735         printf("[call id ] [method] [arg1] [arg2] [arg3] [arg4] [arg5]"
    736             " [flags] [sender\n");
    737 #endif
    738        
    739 #ifdef __64_BITS__
    740         printf("[call id         ] [method] [arg1] [arg2] [arg3] [arg4]"
    741             " [arg5] [flags] [sender\n");
    742 #endif
    743        
    744740        link_t *cur;
    745741       
    746         printf(" --- incomming calls ---\n");
     742        /* Print answerbox - calls */
     743        printf("ABOX - CALLS:\n");
    747744        for (cur = task->answerbox.calls.next; cur != &task->answerbox.calls;
    748745            cur = cur->next) {
    749746                call_t *call = list_get_instance(cur, call_t, link);
    750                
    751 #ifdef __32_BITS__
    752                 printf("%10p ", call);
    753 #endif
    754                
    755 #ifdef __64_BITS__
    756                 printf("%18p ", call);
    757 #endif
    758                
    759                 printf("%-8" PRIun " %-6" PRIun " %-6" PRIun " %-6" PRIun
    760                     " %-6" PRIun " %-6" PRIun " %-7x %" PRIu64 " (%s)\n",
    761                     IPC_GET_IMETHOD(call->data), IPC_GET_ARG1(call->data),
     747                printf("Callid: %p Srctask:%" PRIu64 " M:%" PRIun
     748                    " A1:%" PRIun " A2:%" PRIun " A3:%" PRIun
     749                    " A4:%" PRIun " A5:%" PRIun " Flags:%x\n", call,
     750                    call->sender->taskid,
     751                    IPC_GET_METHOD(call->data), IPC_GET_ARG1(call->data),
    762752                    IPC_GET_ARG2(call->data), IPC_GET_ARG3(call->data),
    763753                    IPC_GET_ARG4(call->data), IPC_GET_ARG5(call->data),
    764                     call->flags, call->sender->taskid, call->sender->name);
    765         }
    766        
    767         printf(" --- dispatched calls ---\n");
     754                    call->flags);
     755        }
     756       
     757        /* Print answerbox - dispatched calls */
     758        printf("ABOX - DISPATCHED CALLS:\n");
    768759        for (cur = task->answerbox.dispatched_calls.next;
    769760            cur != &task->answerbox.dispatched_calls;
    770761            cur = cur->next) {
    771762                call_t *call = list_get_instance(cur, call_t, link);
    772                
    773 #ifdef __32_BITS__
    774                 printf("%10p ", call);
    775 #endif
    776                
    777 #ifdef __64_BITS__
    778                 printf("%18p ", call);
    779 #endif
    780                
    781                 printf("%-8" PRIun " %-6" PRIun " %-6" PRIun " %-6" PRIun
    782                     " %-6" PRIun " %-6" PRIun " %-7x %" PRIu64 " (%s)\n",
    783                     IPC_GET_IMETHOD(call->data), IPC_GET_ARG1(call->data),
     763                printf("Callid: %p Srctask:%" PRIu64 " M:%" PRIun
     764                    " A1:%" PRIun " A2:%" PRIun " A3:%" PRIun
     765                    " A4:%" PRIun " A5:%" PRIun " Flags:%x\n", call,
     766                    call->sender->taskid,
     767                    IPC_GET_METHOD(call->data), IPC_GET_ARG1(call->data),
    784768                    IPC_GET_ARG2(call->data), IPC_GET_ARG3(call->data),
    785769                    IPC_GET_ARG4(call->data), IPC_GET_ARG5(call->data),
    786                     call->flags, call->sender->taskid, call->sender->name);
    787         }
    788        
    789         printf(" --- incoming answers ---\n");
     770                    call->flags);
     771        }
     772       
     773        /* Print answerbox - answers */
     774        printf("ABOX - ANSWERS:\n");
    790775        for (cur = task->answerbox.answers.next;
    791776            cur != &task->answerbox.answers;
    792777            cur = cur->next) {
    793778                call_t *call = list_get_instance(cur, call_t, link);
    794                
    795 #ifdef __32_BITS__
    796                 printf("%10p ", call);
    797 #endif
    798                
    799 #ifdef __64_BITS__
    800                 printf("%18p ", call);
    801 #endif
    802                
    803                 printf("%-8" PRIun " %-6" PRIun " %-6" PRIun " %-6" PRIun
    804                     " %-6" PRIun " %-6" PRIun " %-7x %" PRIu64 " (%s)\n",
    805                     IPC_GET_IMETHOD(call->data), IPC_GET_ARG1(call->data),
     779                printf("Callid:%p M:%" PRIun " A1:%" PRIun " A2:%" PRIun
     780                    " A3:%" PRIun " A4:%" PRIun " A5:%" PRIun " Flags:%x\n",
     781                    call, IPC_GET_METHOD(call->data), IPC_GET_ARG1(call->data),
    806782                    IPC_GET_ARG2(call->data), IPC_GET_ARG3(call->data),
    807783                    IPC_GET_ARG4(call->data), IPC_GET_ARG5(call->data),
    808                     call->flags, call->sender->taskid, call->sender->name);
     784                    call->flags);
    809785        }
    810786       
Note: See TracChangeset for help on using the changeset viewer.