Changeset 7c7aae16 in mainline for generic/src/ipc/ipc.c


Ignore:
Timestamp:
2006-03-19T19:42:00Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ad64a2d
Parents:
9f22213
Message:

Reduced unnecessary IPC system calls.
Allow everything to be sync & async, everything is handled using messages.

File:
1 edited

Legend:

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

    r9f22213 r7c7aae16  
    146146        answerbox_t *callerbox = call->callerbox;
    147147
    148         call->flags &= ~IPC_CALL_DISPATCHED;
    149148        call->flags |= IPC_CALL_ANSWERED;
    150149
     
    167166        spinlock_unlock(&box->lock);
    168167        /* Send back answer */
     168        _ipc_answer_free_call(call);
     169}
     170
     171/** Simulate sending back a message
     172 *
     173 * Most errors are better handled by forming a normal backward
     174 * message and sending it as a normal answer.
     175 */
     176void ipc_backsend_err(phone_t *phone, call_t *call, __native err)
     177{
     178        call->data.phone = phone;
     179        atomic_inc(&phone->active_calls);
     180        if (phone->busy == IPC_BUSY_CONNECTED)
     181                IPC_SET_RETVAL(call->data, EHANGUP);
     182        else
     183                IPC_SET_RETVAL(call->data, ENOENT);
     184
    169185        _ipc_answer_free_call(call);
    170186}
     
    201217                if (call->flags & IPC_CALL_FORWARDED) {
    202218                        IPC_SET_RETVAL(call->data, EFORWARD);
    203                 } else { /* Simulate sending a message */
    204                         call->data.phone = phone;
    205                         atomic_inc(&phone->active_calls);
     219                        _ipc_answer_free_call(call);
     220                } else { /* Simulate sending back a message */
    206221                        if (phone->busy == IPC_BUSY_CONNECTED)
    207                                 IPC_SET_RETVAL(call->data, EHANGUP);
     222                                ipc_backsend_err(phone, call, EHANGUP);
    208223                        else
    209                                 IPC_SET_RETVAL(call->data, ENOENT);
     224                                ipc_backsend_err(phone, call, ENOENT);
    210225                }
    211226
    212                 _ipc_answer_free_call(call);
    213227                return ENOENT;
    214228        }
     
    308322                /* Append request to dispatch queue */
    309323                list_append(&request->list, &box->dispatched_calls);
    310                 request->flags |= IPC_CALL_DISPATCHED;
    311324        } else {
    312325                printf("WARNING: Spurious IPC wakeup.\n");
Note: See TracChangeset for help on using the changeset viewer.