Annotation of coherent/f/usr/include/kernel/ddi_data.h, revision 1.1.1.1

1.1       root        1: #ifndef        __KERNEL_DDI_DATA_H__
                      2: #define        __KERNEL_DDI_DATA_H__
                      3: 
                      4: /*
                      5:  * This internal header contains data definitions common to several of the
                      6:  * <sys/ddi...> family of header files. This commonality does not warrant a
                      7:  * separate header for each type, because these are normally incomplete types
                      8:  * anyway, and the <sys/ddi...> mechanisms are only for internal use.
                      9:  */
                     10: /*
                     11:  *-IMPORTS:
                     12:  *     <kernel/_defer.h>
                     13:  *             deffuncp_t
                     14:  *     <kernel/_lock.h>
                     15:  *             __lock_t
                     16:  *     <kernel/x86lock.h>
                     17:  *             atomic_uchar_t
                     18:  */
                     19: 
                     20: #include <kernel/_defer.h>
                     21: #include <kernel/_lock.h>
                     22: #include <kernel/x86lock.h>
                     23: 
                     24: 
                     25: /*
                     26:  * Defer tables operate at both the per-CPU and global levels. This is the
                     27:  * type of a defer table, and the type used to index the table for reading
                     28:  * and writing.
                     29:  *
                     30:  * The defer tables use short atomic indices because that is considerably
                     31:  * simpler and more portable than dealing with atomic pointer types (as they
                     32:  * are implemented in this system, anyway). The extra scaling operation to
                     33:  * index the table seems worth it, since it's cheap and for many common CPUs
                     34:  * is available as an address mode anyway.
                     35:  */
                     36: 
                     37: typedef        atomic_uchar_t  deftabidx_t;
                     38: 
                     39: /*
                     40:  * The per-CPU defer-function tables need locks for writing since they are
                     41:  * used to bind routines to specific processors. The global defer-function
                     42:  * tables need read and write locks. The read lock is typically a simple test-
                     43:  * and-set lock because the table is tested on the way out of interrupts and
                     44:  * we are concerned about the overhead this imposes.
                     45:  */
                     46: 
                     47: typedef        atomic_uchar_t  defrlock_t;
                     48: typedef        __lock_t      * defwlock_t;
                     49: 
                     50: 
                     51: /*
                     52:  * The deferred-operation tables come in separate per-CPU and global flavours
                     53:  * due to different locking requirements. In addition, deferred operations can
                     54:  * run at different priority levels, most easily managed by having separate
                     55:  * tables.
                     56:  *
                     57:  * One priority level has operations indended to be lower than any interrupt
                     58:  * but higher than regular kernel processing. Kernel timeouts are a good
                     59:  * example of this. The other priority level has operations that are lower
                     60:  * than any kernel-level operation but higher priority than any user-level
                     61:  * operation.
                     62:  *
                     63:  * Since the only difference between the per-CPU and global tables is the read
                     64:  * lock, we can use the same structure for all the deferred functions (the
                     65:  * read lock takes no extra space under COFF due to the structure alignment
                     66:  * rules).
                     67:  */
                     68: 
                     69: typedef struct {
                     70:        __deffuncp_t  * df_tab;                 /* deferred function table */
                     71:        deftabidx_t     df_read;                /* next entry to run */
                     72:        deftabidx_t     df_max;                 /* number of table entries */
                     73:        deftabidx_t     df_write;               /* next entry to write to */
                     74:        defrlock_t      df_rlock;               /* lock read from table */
                     75:        defwlock_t      df_wlock;               /* lock write to table */
                     76: } defer_t;
                     77: 
                     78: 
                     79: #endif /* ! defined (__KERNEL_DDI_DATA_H__) */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.