LCOV - code coverage report
Current view: top level - include/linux - klist.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 2 2 100.0 %
Date: 2017-01-25 Functions: 0 0 -

          Line data    Source code
       1             : /*
       2             :  *      klist.h - Some generic list helpers, extending struct list_head a bit.
       3             :  *
       4             :  *      Implementations are found in lib/klist.c
       5             :  *
       6             :  *
       7             :  *      Copyright (C) 2005 Patrick Mochel
       8             :  *
       9             :  *      This file is rleased under the GPL v2.
      10             :  */
      11             : 
      12             : #ifndef _LINUX_KLIST_H
      13             : #define _LINUX_KLIST_H
      14             : 
      15             : #include <linux/spinlock.h>
      16             : #include <linux/kref.h>
      17             : #include <linux/list.h>
      18             : 
      19             : struct klist_node;
      20             : struct klist {
      21             :         spinlock_t              k_lock;
      22             :         struct list_head        k_list;
      23             :         void                    (*get)(struct klist_node *);
      24             :         void                    (*put)(struct klist_node *);
      25             : } __attribute__ ((aligned (sizeof(void *))));
      26             : 
      27             : #define KLIST_INIT(_name, _get, _put)                                   \
      28             :         { .k_lock       = __SPIN_LOCK_UNLOCKED(_name.k_lock),           \
      29             :           .k_list       = LIST_HEAD_INIT(_name.k_list),                 \
      30             :           .get          = _get,                                         \
      31             :           .put          = _put, }
      32             : 
      33             : #define DEFINE_KLIST(_name, _get, _put)                                 \
      34             :         struct klist _name = KLIST_INIT(_name, _get, _put)
      35             : 
      36             : extern void klist_init(struct klist *k, void (*get)(struct klist_node *),
      37           1 :                        void (*put)(struct klist_node *));
      38             : 
      39             : struct klist_node {
      40             :         void                    *n_klist;       /* never access directly */
      41             :         struct list_head        n_node;
      42             :         struct kref             n_ref;
      43             : };
      44             : 
      45             : extern void klist_add_tail(struct klist_node *n, struct klist *k);
      46             : extern void klist_add_head(struct klist_node *n, struct klist *k);
      47             : extern void klist_add_after(struct klist_node *n, struct klist_node *pos);
      48             : extern void klist_add_before(struct klist_node *n, struct klist_node *pos);
      49             : 
      50             : extern void klist_del(struct klist_node *n);
      51             : extern void klist_remove(struct klist_node *n);
      52             : 
      53             : extern int klist_node_attached(struct klist_node *n);
      54             : 
      55             : 
      56             : struct klist_iter {
      57             :         struct klist            *i_klist;
      58             :         struct klist_node       *i_cur;
      59             : };
      60             : 
      61             : 
      62             : extern void klist_iter_init(struct klist *k, struct klist_iter *i);
      63             : extern void klist_iter_init_node(struct klist *k, struct klist_iter *i,
      64             :                                  struct klist_node *n);
      65             : extern void klist_iter_exit(struct klist_iter *i);
      66             : extern struct klist_node *klist_next(struct klist_iter *i);
      67           2 : 
      68             : #endif

Generated by: LCOV version 1.10