Changeset f3b97d1 in mainline


Ignore:
Timestamp:
2012-09-26T16:18:34Z (12 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6f9c8f6
Parents:
c99d470
Message:

Add a long explanatory comment on the system IPC callbacks.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/ipc/sysipc_ops.h

    rc99d470 rf3b97d1  
    3838#include <ipc/ipc.h>
    3939
     40/**
     41 * This header declares the per-method IPC callbacks. Using these callbacks,
     42 * each IPC method (but system methods in particular), can define actions that
     43 * will be called at specific moments in the call life-cycle.
     44 *
     45 * Normally, the kernel will attempt to invoke the following callbacks in the
     46 * following order on each call:
     47 *
     48 * request_preprocess()
     49 * request_process()
     50 * answer_preprocess()
     51 * answer_process()
     52 *
     53 * This callback invocation sequence is a natural order of processing. Note,
     54 * however, that due to various special circumstances, callbacks may be called
     55 * also in a different than natural order of processing. This means that some
     56 * callbacks may be skipped and some others may be called instead.
     57 *
     58 * The additional callbacks that may be called are as follows:
     59 *
     60 * request_forget()
     61 * answer_cleanup()
     62 *
     63 * There are several notable scenarios in which some callbacks of the natural
     64 * order of processing will be skipped.
     65 *
     66 * The request_process(), answer_preprocess() and answer_process() callbacks
     67 * will be skipped if the call cannot be dispatched to the callee. This may
     68 * happen when e.g. the request_preprocess() callback fails or the connection to
     69 * the callee is not functional. The next callback that will be invoked on the
     70 * call is request_forget().
     71 *
     72 * The request_process() callback will be skipped if the callee terminates
     73 * before picking up the request. In this case, the terminating task will
     74 * cleanup its dispatched calls list and so the next callback invoked on the
     75 * call will usually be answer_preprocess(). If, in the meantime, the caller
     76 * terminates too, it may happen that the call will be forgotten instead of
     77 * answered, in which case the kernel will invoke the request_forget() and
     78 * answer_cleanup() callbacks instead. The order in which they are invoked is
     79 * not defined.
     80 *
     81 * The answer_process() callback will be skipped if the caller terminates before
     82 * picking up the answer. This means that this callback is not suitable for
     83 * releasing system resources allocated by the preceding callbacks.
     84 *
     85 * The comments for each callback type describe the specifics of each callback
     86 * such as the context in which it is invoked and various constraints.
     87 */
     88
    4089typedef struct {
    4190        /**
     
    67116         * Caller alive:        no guarantee
    68117         * Races with:          request_forget()
    69          * Invoked on:          calls that are received by the callee
     118         * Invoked on:          calls that are explicitly received by the callee
    70119         */     
    71120        int (* request_process)(call_t *, answerbox_t *);
     
    99148         * Caller alive:        guaranteed
    100149         * Races with:          N/A
    101          * Invoked on:          all answered calls
     150         * Invoked on:          answered calls explicitly received by the caller
    102151         */
    103152        int (* answer_process)(call_t *);
Note: See TracChangeset for help on using the changeset viewer.