Lines Matching full:table

21 static int	hashtable_unlink_entry(struct vmci_hashtable *table,
23 static bool vmci_hashtable_entry_exists_locked(struct vmci_hashtable *table,
45 struct vmci_hashtable *table; in vmci_hashtable_create() local
47 table = vmci_alloc_kernel_mem(sizeof(*table), in vmci_hashtable_create()
49 if (table == NULL) in vmci_hashtable_create()
51 memset(table, 0, sizeof(*table)); in vmci_hashtable_create()
53 table->entries = vmci_alloc_kernel_mem(sizeof(*table->entries) * size, in vmci_hashtable_create()
55 if (table->entries == NULL) { in vmci_hashtable_create()
56 vmci_free_kernel_mem(table, sizeof(*table)); in vmci_hashtable_create()
59 memset(table->entries, 0, sizeof(*table->entries) * size); in vmci_hashtable_create()
60 table->size = size; in vmci_hashtable_create()
61 if (vmci_init_lock(&table->lock, "VMCI Hashtable lock") < in vmci_hashtable_create()
63 vmci_free_kernel_mem(table->entries, sizeof(*table->entries) * size); in vmci_hashtable_create()
64 vmci_free_kernel_mem(table, sizeof(*table)); in vmci_hashtable_create()
68 return (table); in vmci_hashtable_create()
77 * module ref count to insure that no one is accessing any hash table
79 * all entries from the hash table.
91 vmci_hashtable_destroy(struct vmci_hashtable *table) in vmci_hashtable_destroy() argument
94 ASSERT(table); in vmci_hashtable_destroy()
96 vmci_grab_lock_bh(&table->lock); in vmci_hashtable_destroy()
97 vmci_free_kernel_mem(table->entries, sizeof(*table->entries) * in vmci_hashtable_destroy()
98 table->size); in vmci_hashtable_destroy()
99 table->entries = NULL; in vmci_hashtable_destroy()
100 vmci_release_lock_bh(&table->lock); in vmci_hashtable_destroy()
101 vmci_cleanup_lock(&table->lock); in vmci_hashtable_destroy()
102 vmci_free_kernel_mem(table, sizeof(*table)); in vmci_hashtable_destroy()
147 vmci_hashtable_add_entry(struct vmci_hashtable *table, in vmci_hashtable_add_entry() argument
153 ASSERT(table); in vmci_hashtable_add_entry()
155 vmci_grab_lock_bh(&table->lock); in vmci_hashtable_add_entry()
157 if (vmci_hashtable_entry_exists_locked(table, entry->handle)) { in vmci_hashtable_add_entry()
161 vmci_release_lock_bh(&table->lock); in vmci_hashtable_add_entry()
165 idx = VMCI_HASHTABLE_HASH(entry->handle, table->size); in vmci_hashtable_add_entry()
166 ASSERT(idx < table->size); in vmci_hashtable_add_entry()
170 entry->next = table->entries[idx]; in vmci_hashtable_add_entry()
171 table->entries[idx] = entry; in vmci_hashtable_add_entry()
172 vmci_release_lock_bh(&table->lock); in vmci_hashtable_add_entry()
194 vmci_hashtable_remove_entry(struct vmci_hashtable *table, in vmci_hashtable_remove_entry() argument
199 ASSERT(table); in vmci_hashtable_remove_entry()
202 vmci_grab_lock_bh(&table->lock); in vmci_hashtable_remove_entry()
205 result = hashtable_unlink_entry(table, entry); in vmci_hashtable_remove_entry()
219 vmci_release_lock_bh(&table->lock); in vmci_hashtable_remove_entry()
229 * Looks up an entry in the hash table, that is already locked.
242 vmci_hashtable_get_entry_locked(struct vmci_hashtable *table, in vmci_hashtable_get_entry_locked() argument
249 ASSERT(table); in vmci_hashtable_get_entry_locked()
251 idx = VMCI_HASHTABLE_HASH(handle, table->size); in vmci_hashtable_get_entry_locked()
253 cur = table->entries[idx]; in vmci_hashtable_get_entry_locked()
290 vmci_hashtable_get_entry(struct vmci_hashtable *table, in vmci_hashtable_get_entry() argument
298 ASSERT(table); in vmci_hashtable_get_entry()
300 vmci_grab_lock_bh(&table->lock); in vmci_hashtable_get_entry()
301 entry = vmci_hashtable_get_entry_locked(table, handle); in vmci_hashtable_get_entry()
302 vmci_release_lock_bh(&table->lock); in vmci_hashtable_get_entry()
326 vmci_hashtable_hold_entry(struct vmci_hashtable *table, in vmci_hashtable_hold_entry() argument
330 ASSERT(table); in vmci_hashtable_hold_entry()
333 vmci_grab_lock_bh(&table->lock); in vmci_hashtable_hold_entry()
335 vmci_release_lock_bh(&table->lock); in vmci_hashtable_hold_entry()
347 * If the entry is removed from the hash table, VMCI_SUCCESS_ENTRY_DEAD
352 * from the hash table on 0.
358 vmci_hashtable_release_entry_locked(struct vmci_hashtable *table, in vmci_hashtable_release_entry_locked() argument
363 ASSERT(table); in vmci_hashtable_release_entry_locked()
370 * Remove entry from hash table if not already removed. This in vmci_hashtable_release_entry_locked()
379 hashtable_unlink_entry(table, entry); in vmci_hashtable_release_entry_locked()
403 vmci_hashtable_release_entry(struct vmci_hashtable *table, in vmci_hashtable_release_entry() argument
408 ASSERT(table); in vmci_hashtable_release_entry()
409 vmci_grab_lock_bh(&table->lock); in vmci_hashtable_release_entry()
410 result = vmci_hashtable_release_entry_locked(table, entry); in vmci_hashtable_release_entry()
411 vmci_release_lock_bh(&table->lock); in vmci_hashtable_release_entry()
433 vmci_hashtable_entry_exists(struct vmci_hashtable *table, in vmci_hashtable_entry_exists() argument
438 ASSERT(table); in vmci_hashtable_entry_exists()
440 vmci_grab_lock_bh(&table->lock); in vmci_hashtable_entry_exists()
441 exists = vmci_hashtable_entry_exists_locked(table, handle); in vmci_hashtable_entry_exists()
442 vmci_release_lock_bh(&table->lock); in vmci_hashtable_entry_exists()
464 vmci_hashtable_entry_exists_locked(struct vmci_hashtable *table, in vmci_hashtable_entry_exists_locked() argument
471 ASSERT(table); in vmci_hashtable_entry_exists_locked()
473 idx = VMCI_HASHTABLE_HASH(handle, table->size); in vmci_hashtable_entry_exists_locked()
475 entry = table->entries[idx]; in vmci_hashtable_entry_exists_locked()
495 * Assumes caller holds table lock.
507 hashtable_unlink_entry(struct vmci_hashtable *table, in hashtable_unlink_entry() argument
514 idx = VMCI_HASHTABLE_HASH(entry->handle, table->size); in hashtable_unlink_entry()
517 cur = table->entries[idx]; in hashtable_unlink_entry()
530 table->entries[idx] = cur->next; in hashtable_unlink_entry()
559 vmci_hashtable_sync(struct vmci_hashtable *table) in vmci_hashtable_sync() argument
562 ASSERT(table); in vmci_hashtable_sync()
563 vmci_grab_lock_bh(&table->lock); in vmci_hashtable_sync()
564 vmci_release_lock_bh(&table->lock); in vmci_hashtable_sync()