Lines Matching refs:table
23 static int hashtable_unlink_entry(struct vmci_hashtable *table,
25 static bool vmci_hashtable_entry_exists_locked(struct vmci_hashtable *table,
47 struct vmci_hashtable *table; in vmci_hashtable_create() local
49 table = vmci_alloc_kernel_mem(sizeof(*table), in vmci_hashtable_create()
51 if (table == NULL) in vmci_hashtable_create()
53 memset(table, 0, sizeof(*table)); in vmci_hashtable_create()
55 table->entries = vmci_alloc_kernel_mem(sizeof(*table->entries) * size, in vmci_hashtable_create()
57 if (table->entries == NULL) { in vmci_hashtable_create()
58 vmci_free_kernel_mem(table, sizeof(*table)); in vmci_hashtable_create()
61 memset(table->entries, 0, sizeof(*table->entries) * size); in vmci_hashtable_create()
62 table->size = size; in vmci_hashtable_create()
63 if (vmci_init_lock(&table->lock, "VMCI Hashtable lock") < in vmci_hashtable_create()
65 vmci_free_kernel_mem(table->entries, sizeof(*table->entries) * size); in vmci_hashtable_create()
66 vmci_free_kernel_mem(table, sizeof(*table)); in vmci_hashtable_create()
70 return (table); in vmci_hashtable_create()
93 vmci_hashtable_destroy(struct vmci_hashtable *table) in vmci_hashtable_destroy() argument
96 ASSERT(table); in vmci_hashtable_destroy()
98 vmci_grab_lock_bh(&table->lock); in vmci_hashtable_destroy()
99 vmci_free_kernel_mem(table->entries, sizeof(*table->entries) * in vmci_hashtable_destroy()
100 table->size); in vmci_hashtable_destroy()
101 table->entries = NULL; in vmci_hashtable_destroy()
102 vmci_release_lock_bh(&table->lock); in vmci_hashtable_destroy()
103 vmci_cleanup_lock(&table->lock); in vmci_hashtable_destroy()
104 vmci_free_kernel_mem(table, sizeof(*table)); in vmci_hashtable_destroy()
149 vmci_hashtable_add_entry(struct vmci_hashtable *table, in vmci_hashtable_add_entry() argument
155 ASSERT(table); in vmci_hashtable_add_entry()
157 vmci_grab_lock_bh(&table->lock); in vmci_hashtable_add_entry()
159 if (vmci_hashtable_entry_exists_locked(table, entry->handle)) { in vmci_hashtable_add_entry()
163 vmci_release_lock_bh(&table->lock); in vmci_hashtable_add_entry()
167 idx = VMCI_HASHTABLE_HASH(entry->handle, table->size); in vmci_hashtable_add_entry()
168 ASSERT(idx < table->size); in vmci_hashtable_add_entry()
172 entry->next = table->entries[idx]; in vmci_hashtable_add_entry()
173 table->entries[idx] = entry; in vmci_hashtable_add_entry()
174 vmci_release_lock_bh(&table->lock); in vmci_hashtable_add_entry()
196 vmci_hashtable_remove_entry(struct vmci_hashtable *table, in vmci_hashtable_remove_entry() argument
201 ASSERT(table); in vmci_hashtable_remove_entry()
204 vmci_grab_lock_bh(&table->lock); in vmci_hashtable_remove_entry()
207 result = hashtable_unlink_entry(table, entry); in vmci_hashtable_remove_entry()
221 vmci_release_lock_bh(&table->lock); in vmci_hashtable_remove_entry()
244 vmci_hashtable_get_entry_locked(struct vmci_hashtable *table, in vmci_hashtable_get_entry_locked() argument
251 ASSERT(table); in vmci_hashtable_get_entry_locked()
253 idx = VMCI_HASHTABLE_HASH(handle, table->size); in vmci_hashtable_get_entry_locked()
255 cur = table->entries[idx]; in vmci_hashtable_get_entry_locked()
292 vmci_hashtable_get_entry(struct vmci_hashtable *table, in vmci_hashtable_get_entry() argument
300 ASSERT(table); in vmci_hashtable_get_entry()
302 vmci_grab_lock_bh(&table->lock); in vmci_hashtable_get_entry()
303 entry = vmci_hashtable_get_entry_locked(table, handle); in vmci_hashtable_get_entry()
304 vmci_release_lock_bh(&table->lock); in vmci_hashtable_get_entry()
328 vmci_hashtable_hold_entry(struct vmci_hashtable *table, in vmci_hashtable_hold_entry() argument
332 ASSERT(table); in vmci_hashtable_hold_entry()
335 vmci_grab_lock_bh(&table->lock); in vmci_hashtable_hold_entry()
337 vmci_release_lock_bh(&table->lock); in vmci_hashtable_hold_entry()
360 vmci_hashtable_release_entry_locked(struct vmci_hashtable *table, in vmci_hashtable_release_entry_locked() argument
365 ASSERT(table); in vmci_hashtable_release_entry_locked()
382 hashtable_unlink_entry(table, entry); in vmci_hashtable_release_entry_locked()
406 vmci_hashtable_release_entry(struct vmci_hashtable *table, in vmci_hashtable_release_entry() argument
411 ASSERT(table); in vmci_hashtable_release_entry()
412 vmci_grab_lock_bh(&table->lock); in vmci_hashtable_release_entry()
413 result = vmci_hashtable_release_entry_locked(table, entry); in vmci_hashtable_release_entry()
414 vmci_release_lock_bh(&table->lock); in vmci_hashtable_release_entry()
436 vmci_hashtable_entry_exists(struct vmci_hashtable *table, in vmci_hashtable_entry_exists() argument
441 ASSERT(table); in vmci_hashtable_entry_exists()
443 vmci_grab_lock_bh(&table->lock); in vmci_hashtable_entry_exists()
444 exists = vmci_hashtable_entry_exists_locked(table, handle); in vmci_hashtable_entry_exists()
445 vmci_release_lock_bh(&table->lock); in vmci_hashtable_entry_exists()
467 vmci_hashtable_entry_exists_locked(struct vmci_hashtable *table, in vmci_hashtable_entry_exists_locked() argument
474 ASSERT(table); in vmci_hashtable_entry_exists_locked()
476 idx = VMCI_HASHTABLE_HASH(handle, table->size); in vmci_hashtable_entry_exists_locked()
478 entry = table->entries[idx]; in vmci_hashtable_entry_exists_locked()
510 hashtable_unlink_entry(struct vmci_hashtable *table, in hashtable_unlink_entry() argument
517 idx = VMCI_HASHTABLE_HASH(entry->handle, table->size); in hashtable_unlink_entry()
520 cur = table->entries[idx]; in hashtable_unlink_entry()
533 table->entries[idx] = cur->next; in hashtable_unlink_entry()
562 vmci_hashtable_sync(struct vmci_hashtable *table) in vmci_hashtable_sync() argument
565 ASSERT(table); in vmci_hashtable_sync()
566 vmci_grab_lock_bh(&table->lock); in vmci_hashtable_sync()
567 vmci_release_lock_bh(&table->lock); in vmci_hashtable_sync()