Lines Matching refs:s

17 int sidtab_init(struct sidtab *s)  in sidtab_init()  argument
21 s->htable = kmalloc(sizeof(*(s->htable)) * SIDTAB_SIZE, GFP_ATOMIC); in sidtab_init()
22 if (!s->htable) in sidtab_init()
25 s->htable[i] = NULL; in sidtab_init()
26 s->nel = 0; in sidtab_init()
27 s->next_sid = 1; in sidtab_init()
28 s->shutdown = 0; in sidtab_init()
29 spin_lock_init(&s->lock); in sidtab_init()
33 int sidtab_insert(struct sidtab *s, u32 sid, struct context *context) in sidtab_insert() argument
38 if (!s) { in sidtab_insert()
45 cur = s->htable[hvalue]; in sidtab_insert()
73 newnode->next = s->htable[hvalue]; in sidtab_insert()
75 s->htable[hvalue] = newnode; in sidtab_insert()
78 s->nel++; in sidtab_insert()
79 if (sid >= s->next_sid) in sidtab_insert()
80 s->next_sid = sid + 1; in sidtab_insert()
85 static struct context *sidtab_search_core(struct sidtab *s, u32 sid, int force) in sidtab_search_core() argument
90 if (!s) in sidtab_search_core()
94 cur = s->htable[hvalue]; in sidtab_search_core()
105 cur = s->htable[hvalue]; in sidtab_search_core()
115 struct context *sidtab_search(struct sidtab *s, u32 sid) in sidtab_search() argument
117 return sidtab_search_core(s, sid, 0); in sidtab_search()
120 struct context *sidtab_search_force(struct sidtab *s, u32 sid) in sidtab_search_force() argument
122 return sidtab_search_core(s, sid, 1); in sidtab_search_force()
125 int sidtab_map(struct sidtab *s, in sidtab_map() argument
134 if (!s) in sidtab_map()
138 cur = s->htable[i]; in sidtab_map()
150 static void sidtab_update_cache(struct sidtab *s, struct sidtab_node *n, int loc) in sidtab_update_cache() argument
155 s->cache[loc] = s->cache[loc - 1]; in sidtab_update_cache()
158 s->cache[0] = n; in sidtab_update_cache()
161 static inline u32 sidtab_search_context(struct sidtab *s, in sidtab_search_context() argument
168 cur = s->htable[i]; in sidtab_search_context()
171 sidtab_update_cache(s, cur, SIDTAB_CACHE_LEN - 1); in sidtab_search_context()
180 static inline u32 sidtab_search_cache(struct sidtab *s, struct context *context) in sidtab_search_cache() argument
186 node = s->cache[i]; in sidtab_search_cache()
190 sidtab_update_cache(s, node, i); in sidtab_search_cache()
197 int sidtab_context_to_sid(struct sidtab *s, in sidtab_context_to_sid() argument
207 sid = sidtab_search_cache(s, context); in sidtab_context_to_sid()
209 sid = sidtab_search_context(s, context); in sidtab_context_to_sid()
211 spin_lock_irqsave(&s->lock, flags); in sidtab_context_to_sid()
213 sid = sidtab_search_context(s, context); in sidtab_context_to_sid()
217 if (s->next_sid == UINT_MAX || s->shutdown) { in sidtab_context_to_sid()
221 sid = s->next_sid++; in sidtab_context_to_sid()
226 ret = sidtab_insert(s, sid, context); in sidtab_context_to_sid()
228 s->next_sid--; in sidtab_context_to_sid()
230 spin_unlock_irqrestore(&s->lock, flags); in sidtab_context_to_sid()
267 void sidtab_destroy(struct sidtab *s) in sidtab_destroy() argument
272 if (!s) in sidtab_destroy()
276 cur = s->htable[i]; in sidtab_destroy()
283 s->htable[i] = NULL; in sidtab_destroy()
285 kfree(s->htable); in sidtab_destroy()
286 s->htable = NULL; in sidtab_destroy()
287 s->nel = 0; in sidtab_destroy()
288 s->next_sid = 1; in sidtab_destroy()
306 void sidtab_shutdown(struct sidtab *s) in sidtab_shutdown() argument
310 spin_lock_irqsave(&s->lock, flags); in sidtab_shutdown()
311 s->shutdown = 1; in sidtab_shutdown()
312 spin_unlock_irqrestore(&s->lock, flags); in sidtab_shutdown()