Lines Matching full:resource

7 /* Implementation of the VMCI Resource Access Control API. */
20 static void vmci_resource_do_remove(struct vmci_resource *resource);
24 /* Public Resource Access Control API. */
31 * Initializes the VMCI Resource Access Control API. Creates a hashtable to
54 VMCI_LOG_WARNING((LGPFX"Failed creating a resource hash table " in vmci_resource_init()
95 * Return resource ID. The first VMCI_RESERVED_RESOURCE_ID_MAX are reserved
99 * VMCI resource id on success, VMCI_INVALID_ID on failure.
119 * Generate a unique resource ID. Keep on trying until we wrap around in vmci_resource_get_id()
151 * Add resource to hashtable.
163 vmci_resource_add(struct vmci_resource *resource, in vmci_resource_add() argument
169 ASSERT(resource); in vmci_resource_add()
172 VMCI_LOG_DEBUG(LGPFX"Invalid argument resource " in vmci_resource_add()
174 resource_handle.resource); in vmci_resource_add()
178 vmci_hashtable_init_entry(&resource->hash_entry, resource_handle); in vmci_resource_add()
179 resource->type = resource_type; in vmci_resource_add()
180 resource->container_free_cb = container_free_cb; in vmci_resource_add()
181 resource->container_object = container_object; in vmci_resource_add()
183 /* Add resource to hashtable. */ in vmci_resource_add()
185 &resource->hash_entry); in vmci_resource_add()
200 * Remove resource from hashtable.
215 struct vmci_resource *resource; in vmci_resource_remove() local
217 resource = vmci_resource_get(resource_handle, resource_type); in vmci_resource_remove()
218 if (resource == NULL) in vmci_resource_remove()
221 /* Remove resource from hashtable. */ in vmci_resource_remove()
222 vmci_hashtable_remove_entry(resource_table, &resource->hash_entry); in vmci_resource_remove()
224 vmci_resource_release(resource); in vmci_resource_remove()
225 /* resource could be freed by now. */ in vmci_resource_remove()
233 * Get resource from hashtable.
236 * Resource if successful. Otherwise NULL.
249 struct vmci_resource *resource; in vmci_resource_get() local
254 resource = RESOURCE_CONTAINER(entry, struct vmci_resource, hash_entry); in vmci_resource_get()
256 resource->type == resource_type) { in vmci_resource_get()
257 return (resource); in vmci_resource_get()
268 * Hold the given resource. This will hold the hashtable entry. This is like
269 * doing a Get() but without having to lookup the resource by handle.
281 vmci_resource_hold(struct vmci_resource *resource) in vmci_resource_hold() argument
284 ASSERT(resource); in vmci_resource_hold()
285 vmci_hashtable_hold_entry(resource_table, &resource->hash_entry); in vmci_resource_hold()
293 * Deallocates data structures associated with the given resource and
294 * invoke any call back registered for the resource.
300 * May deallocate memory and invoke a callback for the removed resource.
306 vmci_resource_do_remove(struct vmci_resource *resource) in vmci_resource_do_remove() argument
309 ASSERT(resource); in vmci_resource_do_remove()
311 if (resource->container_free_cb) { in vmci_resource_do_remove()
312 resource->container_free_cb(resource->container_object); in vmci_resource_do_remove()
313 /* Resource has been freed don't dereference it. */ in vmci_resource_do_remove()
326 * Resource's containerFreeCB will get called if last reference.
332 vmci_resource_release(struct vmci_resource *resource) in vmci_resource_release() argument
336 ASSERT(resource); in vmci_resource_release()
339 &resource->hash_entry); in vmci_resource_release()
341 vmci_resource_do_remove(resource); in vmci_resource_release()
355 * Get the handle for the given resource.
358 * The resource's associated handle.
367 vmci_resource_handle(struct vmci_resource *resource) in vmci_resource_handle() argument
370 ASSERT(resource); in vmci_resource_handle()
371 return (resource->hash_entry.handle); in vmci_resource_handle()