summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorAndrew Morton <akpm@digeo.com>2003-03-28 03:18:11 -0800
committerDave Jones <davej@tetrachloride.(none)>2003-03-28 03:18:11 -0800
commit9d3488a87cb356a740187371e94d86a601a48bd1 (patch)
tree544ad7e1348aab60ff3642c0c201188710ad32e3 /include/linux
parenta3fa4e811e89f670cd21ef8f67ad3ccffce14333 (diff)
[PATCH] POSIX timers interface long/int cleanup
From: Eric Piel <Eric.Piel@Bull.Net> Fixes some long/int confusion on 64-bit machines which was causing failures on ia64 - we end up trying to set bits in the 32-63 range on an int and the kernel locks up. Also cleans up idr.h. George has acked this change.
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/idr.h38
1 files changed, 21 insertions, 17 deletions
diff --git a/include/linux/idr.h b/include/linux/idr.h
index 4995cb68a0fa..69652da724d1 100644
--- a/include/linux/idr.h
+++ b/include/linux/idr.h
@@ -13,40 +13,44 @@
#define RESERVED_ID_BITS 8
-#if BITS_PER_LONG == 32
-#define IDR_BITS 5
-#define IDR_FULL 0xffffffff
+#if BITS_PER_LONG == 32
+# define IDR_BITS 5
+# define IDR_FULL 0xffffffff
#elif BITS_PER_LONG == 64
-#define IDR_BITS 6
-#define IDR_FULL 0xffffffffffffffff
+# define IDR_BITS 6
+# define IDR_FULL 0xffffffffffffffff
#else
-#error "BITS_PER_LONG is not 32 or 64"
+# error "BITS_PER_LONG is not 32 or 64"
#endif
#define IDR_MASK ((1 << IDR_BITS)-1)
-/* Leave the possibility of an incomplete final layer */
-#define MAX_LEVEL (BITS_PER_LONG - RESERVED_ID_BITS + IDR_BITS - 1) / IDR_BITS
-#define MAX_ID_SHIFT (BITS_PER_LONG - RESERVED_ID_BITS)
-#define MAX_ID_BIT (1L << MAX_ID_SHIFT)
+/* Define the size of the id's */
+#define BITS_PER_INT (sizeof(int)*8)
+
+#define MAX_ID_SHIFT (BITS_PER_INT - RESERVED_ID_BITS)
+#define MAX_ID_BIT (1 << 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"
- int count; // When zero, we can release it
- struct idr_layer *ary[1<<IDR_BITS];
+ unsigned long bitmap; /* A zero bit means "space here" */
+ struct idr_layer *ary[1<<IDR_BITS];
+ int count; /* When zero, we can release it */
};
struct idr {
struct idr_layer *top;
- int layers;
- long count;
struct idr_layer *id_free;
- int id_free_cnt;
- spinlock_t lock;
+ long count;
+ int layers;
+ int id_free_cnt;
+ spinlock_t lock;
};
/*