Go to the documentation of this file.
12 #include <linux/types.h>
14 #include <linux/hash.h>
20 #define TMEM_PUT_PAGE 4
21 #define TMEM_GET_PAGE 5
22 #define TMEM_FLUSH_PAGE 6
23 #define TMEM_FLUSH_OBJECT 7
24 #define TMEM_POOL_PERSIST 1
25 #define TMEM_POOL_SHARED 2
26 #define TMEM_POOL_PRECOMPRESSED 4
27 #define TMEM_POOL_PAGESIZE_SHIFT 4
28 #define TMEM_POOL_PAGESIZE_MASK 0xf
29 #define TMEM_POOL_RESERVED_BITS 0x00ffff00
37 #define DECL_SENTINEL uint32_t sentinel;
38 #define SET_SENTINEL(_x, _y) (_x->sentinel = _y##_SENTINEL)
39 #define INVERT_SENTINEL(_x, _y) (_x->sentinel = ~_y##_SENTINEL)
40 #define ASSERT_SENTINEL(_x, _y) WARN_ON(_x->sentinel != _y##_SENTINEL)
41 #define ASSERT_INVERTED_SENTINEL(_x, _y) WARN_ON(_x->sentinel != ~_y##_SENTINEL)
44 #define SET_SENTINEL(_x, _y) do { } while (0)
45 #define INVERT_SENTINEL(_x, _y) do { } while (0)
46 #define ASSERT_SENTINEL(_x, _y) do { } while (0)
47 #define ASSERT_INVERTED_SENTINEL(_x, _y) do { } while (0)
50 #define ASSERT_SPINLOCK(_l) lockdep_assert_held(_l)
60 #define TMEM_HASH_BUCKET_BITS 8
61 #define TMEM_HASH_BUCKETS (1<<TMEM_HASH_BUCKET_BITS)
80 #define is_persistent(_p) (_p->persistent)
81 #define is_ephemeral(_p) (!(_p->persistent))
92 static inline void tmem_oid_set_invalid(
struct tmem_oid *oidp)
97 static inline bool tmem_oid_valid(
struct tmem_oid *oidp)
99 return oidp->
oid[0] != -1
UL || oidp->
oid[1] != -1
UL ||
100 oidp->
oid[2] != -1
UL;
103 static inline int tmem_oid_compare(
struct tmem_oid *
left,
108 if (left->
oid[2] == right->
oid[2]) {
109 if (left->
oid[1] == right->
oid[1]) {
110 if (left->
oid[0] == right->
oid[0])
112 else if (left->
oid[0] < right->
oid[0])
116 }
else if (left->
oid[1] < right->
oid[1])
120 }
else if (left->
oid[2] < right->
oid[2])
127 static inline unsigned tmem_oid_hash(
struct tmem_oid *oidp)
129 return hash_long(oidp->
oid[0] ^ oidp->
oid[1] ^ oidp->
oid[2],
154 #define OBJNODE_TREE_MAP_SHIFT 6
155 #define OBJNODE_TREE_MAP_SIZE (1UL << OBJNODE_TREE_MAP_SHIFT)
156 #define OBJNODE_TREE_MAP_MASK (OBJNODE_TREE_MAP_SIZE-1)
157 #define OBJNODE_TREE_INDEX_BITS (8 * sizeof(unsigned long))
158 #define OBJNODE_TREE_MAX_PATH \
159 (OBJNODE_TREE_INDEX_BITS/OBJNODE_TREE_MAP_SHIFT + 2)
196 char *,
size_t,
bool,
bool);
198 char *,
size_t *,
bool,
int);