Lines Matching +full:reserved +full:- +full:endpoints
1 // SPDX-License-Identifier: GPL-2.0-only
5 * Copyright (C) 2012 VMware, Inc. All rights reserved.
68 * The last_notify_idx_reserved is used to track the last index handed out - in
80 * with a given doorbell handle. For guest endpoints, the
82 * endpoints privileges are associated with the complete
83 * handle. Hypervisor endpoints are not yet supported.
100 *priv_flags = entry->priv_flags; in vmci_dbell_get_priv_flags()
104 * Hypervisor endpoints for notifications are not in vmci_dbell_get_priv_flags()
125 if (idx == dbell->idx) in dbell_index_table_find()
142 vmci_resource_get(&entry->resource); in dbell_index_table_add()
186 entry->idx = new_notify_idx; in dbell_index_table_add()
187 bucket = VMCI_DOORBELL_HASH(entry->idx); in dbell_index_table_add()
188 hlist_add_head(&entry->node, &vmci_doorbell_it.entries[bucket]); in dbell_index_table_add()
201 hlist_del_init(&entry->node); in dbell_index_table_remove()
203 notify_idx_count--; in dbell_index_table_remove()
204 if (entry->idx == max_notify_idx - 1) { in dbell_index_table_remove()
213 !dbell_index_table_find(max_notify_idx - 1)) in dbell_index_table_remove()
214 max_notify_idx--; in dbell_index_table_remove()
217 last_notify_idx_released = entry->idx; in dbell_index_table_remove()
221 vmci_resource_put(&entry->resource); in dbell_index_table_remove()
236 link_msg.hdr.payload_size = sizeof(link_msg) - VMCI_DG_HEADERSIZE; in dbell_link()
254 unlink_msg.hdr.payload_size = sizeof(unlink_msg) - VMCI_DG_HEADERSIZE; in dbell_unlink()
268 entry->notify_cb(entry->client_data); in dbell_delayed_dispatch()
269 vmci_resource_put(&entry->resource); in dbell_delayed_dispatch()
295 if (entry->run_delayed) { in vmci_dbell_host_context_notify()
296 if (!schedule_work(&entry->work)) in vmci_dbell_host_context_notify()
299 entry->notify_cb(entry->client_data); in vmci_dbell_host_context_notify()
317 bitmap_set_msg.hdr.payload_size = sizeof(bitmap_set_msg) - in vmci_dbell_register_notification_bitmap()
344 if (dbell->idx == notify_idx && in dbell_fire_entries()
345 atomic_read(&dbell->active) == 1) { in dbell_fire_entries()
346 if (dbell->run_delayed) { in dbell_fire_entries()
347 vmci_resource_get(&dbell->resource); in dbell_fire_entries()
348 if (!schedule_work(&dbell->work)) in dbell_fire_entries()
349 vmci_resource_put(&dbell->resource); in dbell_fire_entries()
351 dbell->notify_cb(dbell->client_data); in dbell_fire_entries()
376 * vmci_doorbell_create() - Creates a doorbell
386 * locks held - the default) or delayed (in a kernel thread) by
432 if (handle->context == VMCI_HOST_CONTEXT_ID || in vmci_doorbell_create()
434 vmci_get_context_id() == handle->context)) { in vmci_doorbell_create()
438 if (!valid_context || handle->resource == VMCI_INVALID_ID) { in vmci_doorbell_create()
440 handle->context, handle->resource); in vmci_doorbell_create()
448 entry->idx = 0; in vmci_doorbell_create()
449 INIT_HLIST_NODE(&entry->node); in vmci_doorbell_create()
450 entry->priv_flags = priv_flags; in vmci_doorbell_create()
451 INIT_WORK(&entry->work, dbell_delayed_dispatch); in vmci_doorbell_create()
452 entry->run_delayed = flags & VMCI_FLAG_DELAYED_CB; in vmci_doorbell_create()
453 entry->notify_cb = notify_cb; in vmci_doorbell_create()
454 entry->client_data = client_data; in vmci_doorbell_create()
455 atomic_set(&entry->active, 0); in vmci_doorbell_create()
457 result = vmci_resource_add(&entry->resource, in vmci_doorbell_create()
466 new_handle = vmci_resource_handle(&entry->resource); in vmci_doorbell_create()
469 result = dbell_link(new_handle, entry->idx); in vmci_doorbell_create()
473 atomic_set(&entry->active, 1); in vmci_doorbell_create()
482 vmci_resource_remove(&entry->resource); in vmci_doorbell_create()
490 * vmci_doorbell_destroy() - Destroy a doorbell.
514 if (!hlist_unhashed(&entry->node)) { in vmci_doorbell_destroy()
544 vmci_resource_put(&entry->resource); in vmci_doorbell_destroy()
545 vmci_resource_remove(&entry->resource); in vmci_doorbell_destroy()