diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /include/linux/idr.h | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (diff) |
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts:
litmus/sched_cedf.c
Diffstat (limited to 'include/linux/idr.h')
-rw-r--r-- | include/linux/idr.h | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/include/linux/idr.h b/include/linux/idr.h index e968db71e33a..13a801f3d028 100644 --- a/include/linux/idr.h +++ b/include/linux/idr.h | |||
@@ -50,14 +50,14 @@ | |||
50 | 50 | ||
51 | struct idr_layer { | 51 | struct idr_layer { |
52 | unsigned long bitmap; /* A zero bit means "space here" */ | 52 | unsigned long bitmap; /* A zero bit means "space here" */ |
53 | struct idr_layer *ary[1<<IDR_BITS]; | 53 | struct idr_layer __rcu *ary[1<<IDR_BITS]; |
54 | int count; /* When zero, we can release it */ | 54 | int count; /* When zero, we can release it */ |
55 | int layer; /* distance from leaf */ | 55 | int layer; /* distance from leaf */ |
56 | struct rcu_head rcu_head; | 56 | struct rcu_head rcu_head; |
57 | }; | 57 | }; |
58 | 58 | ||
59 | struct idr { | 59 | struct idr { |
60 | struct idr_layer *top; | 60 | struct idr_layer __rcu *top; |
61 | struct idr_layer *id_free; | 61 | struct idr_layer *id_free; |
62 | int layers; /* only valid without concurrent changes */ | 62 | int layers; /* only valid without concurrent changes */ |
63 | int id_free_cnt; | 63 | int id_free_cnt; |
@@ -81,6 +81,7 @@ struct idr { | |||
81 | #define _idr_rc_to_errno(rc) ((rc) == -1 ? -EAGAIN : -ENOSPC) | 81 | #define _idr_rc_to_errno(rc) ((rc) == -1 ? -EAGAIN : -ENOSPC) |
82 | 82 | ||
83 | /** | 83 | /** |
84 | * DOC: idr sync | ||
84 | * idr synchronization (stolen from radix-tree.h) | 85 | * idr synchronization (stolen from radix-tree.h) |
85 | * | 86 | * |
86 | * idr_find() is able to be called locklessly, using RCU. The caller must | 87 | * idr_find() is able to be called locklessly, using RCU. The caller must |
@@ -117,10 +118,13 @@ void idr_init(struct idr *idp); | |||
117 | /* | 118 | /* |
118 | * IDA - IDR based id allocator, use when translation from id to | 119 | * IDA - IDR based id allocator, use when translation from id to |
119 | * pointer isn't necessary. | 120 | * pointer isn't necessary. |
121 | * | ||
122 | * IDA_BITMAP_LONGS is calculated to be one less to accommodate | ||
123 | * ida_bitmap->nr_busy so that the whole struct fits in 128 bytes. | ||
120 | */ | 124 | */ |
121 | #define IDA_CHUNK_SIZE 128 /* 128 bytes per chunk */ | 125 | #define IDA_CHUNK_SIZE 128 /* 128 bytes per chunk */ |
122 | #define IDA_BITMAP_LONGS (128 / sizeof(long) - 1) | 126 | #define IDA_BITMAP_LONGS (IDA_CHUNK_SIZE / sizeof(long) - 1) |
123 | #define IDA_BITMAP_BITS (IDA_BITMAP_LONGS * sizeof(long) * 8) | 127 | #define IDA_BITMAP_BITS (IDA_BITMAP_LONGS * sizeof(long) * 8) |
124 | 128 | ||
125 | struct ida_bitmap { | 129 | struct ida_bitmap { |
126 | long nr_busy; | 130 | long nr_busy; |