/* * include/linux/idr.h * * 2002-10-18 written by Jim Houston jim.houston@ccur.com * Copyright (C) 2002 by Concurrent Computer Corporation * Distributed under the GNU GPL license version 2. * * Small id to pointer translation service avoiding fixed sized * tables. */ #ifndef __IDR_H__ #define __IDR_H__ #include #include //#include //#include //#include struct rcu_head { struct rcu_head *next; void (*func)(struct rcu_head *head); }; # define IDR_BITS 5 # define IDR_FULL 0xfffffffful /* We can only use two of the bits in the top level because there is only one possible bit in the top level (5 bits * 7 levels = 35 bits, but you only use 31 bits in the id). */ # define TOP_LEVEL_FULL (IDR_FULL >> 30) #define IDR_SIZE (1 << IDR_BITS) #define IDR_MASK ((1 << IDR_BITS)-1) #define MAX_ID_SHIFT (sizeof(int)*8 - 1) #define MAX_ID_BIT (1U << MAX_ID_SHIFT) #define MAX_ID_MASK (MAX_ID_BIT - 1) /* Leave the possibility of an incomplete final layer */ #define MAX_LEVEL (MAX_ID_SHIFT + IDR_BITS - 1) / IDR_BITS /* Number of id_layer structs to leave in free list */ #define IDR_FREE_MAX MAX_LEVEL + MAX_LEVEL struct idr_layer { unsigned long bitmap; /* A zero bit means "space here" */ struct idr_layer *ary[1<