• Home
  • Raw
  • Download

Lines Matching refs:entry

807 	struct qp_entry *entry;  in qp_list_find()  local
812 list_for_each_entry(entry, &qp_list->head, list_item) { in qp_list_find()
813 if (vmci_handle_is_equal(entry->handle, handle)) in qp_list_find()
814 return entry; in qp_list_find()
826 struct qp_guest_endpoint *entry; in qp_guest_handle_to_entry() local
829 entry = qp ? container_of( in qp_guest_handle_to_entry()
831 return entry; in qp_guest_handle_to_entry()
840 struct qp_broker_entry *entry; in qp_broker_handle_to_entry() local
843 entry = qp ? container_of( in qp_broker_handle_to_entry()
845 return entry; in qp_broker_handle_to_entry()
887 struct qp_guest_endpoint *entry; in qp_guest_endpoint_create() local
898 entry = kzalloc(sizeof(*entry), GFP_KERNEL); in qp_guest_endpoint_create()
899 if (entry) { in qp_guest_endpoint_create()
900 entry->qp.peer = peer; in qp_guest_endpoint_create()
901 entry->qp.flags = flags; in qp_guest_endpoint_create()
902 entry->qp.produce_size = produce_size; in qp_guest_endpoint_create()
903 entry->qp.consume_size = consume_size; in qp_guest_endpoint_create()
904 entry->qp.ref_count = 0; in qp_guest_endpoint_create()
905 entry->num_ppns = num_ppns; in qp_guest_endpoint_create()
906 entry->produce_q = produce_q; in qp_guest_endpoint_create()
907 entry->consume_q = consume_q; in qp_guest_endpoint_create()
908 INIT_LIST_HEAD(&entry->qp.list_item); in qp_guest_endpoint_create()
911 result = vmci_resource_add(&entry->resource, in qp_guest_endpoint_create()
914 entry->qp.handle = vmci_resource_handle(&entry->resource); in qp_guest_endpoint_create()
916 qp_list_find(&qp_guest_endpoints, entry->qp.handle)) { in qp_guest_endpoint_create()
919 kfree(entry); in qp_guest_endpoint_create()
920 entry = NULL; in qp_guest_endpoint_create()
923 return entry; in qp_guest_endpoint_create()
929 static void qp_guest_endpoint_destroy(struct qp_guest_endpoint *entry) in qp_guest_endpoint_destroy() argument
931 qp_free_ppn_set(&entry->ppn_set); in qp_guest_endpoint_destroy()
932 qp_cleanup_queue_mutex(entry->produce_q, entry->consume_q); in qp_guest_endpoint_destroy()
933 qp_free_queue(entry->produce_q, entry->qp.produce_size); in qp_guest_endpoint_destroy()
934 qp_free_queue(entry->consume_q, entry->qp.consume_size); in qp_guest_endpoint_destroy()
936 vmci_resource_remove(&entry->resource); in qp_guest_endpoint_destroy()
938 kfree(entry); in qp_guest_endpoint_destroy()
945 static int qp_alloc_hypercall(const struct qp_guest_endpoint *entry) in qp_alloc_hypercall() argument
952 if (!entry || entry->num_ppns <= 2) in qp_alloc_hypercall()
957 (size_t) entry->num_ppns * ppn_size; in qp_alloc_hypercall()
966 alloc_msg->handle = entry->qp.handle; in qp_alloc_hypercall()
967 alloc_msg->peer = entry->qp.peer; in qp_alloc_hypercall()
968 alloc_msg->flags = entry->qp.flags; in qp_alloc_hypercall()
969 alloc_msg->produce_size = entry->qp.produce_size; in qp_alloc_hypercall()
970 alloc_msg->consume_size = entry->qp.consume_size; in qp_alloc_hypercall()
971 alloc_msg->num_ppns = entry->num_ppns; in qp_alloc_hypercall()
974 &entry->ppn_set); in qp_alloc_hypercall()
1003 static void qp_list_add_entry(struct qp_list *qp_list, struct qp_entry *entry) in qp_list_add_entry() argument
1005 if (entry) in qp_list_add_entry()
1006 list_add(&entry->list_item, &qp_list->head); in qp_list_add_entry()
1013 struct qp_entry *entry) in qp_list_remove_entry() argument
1015 if (entry) in qp_list_remove_entry()
1016 list_del(&entry->list_item); in qp_list_remove_entry()
1026 struct qp_guest_endpoint *entry; in qp_detatch_guest_work() local
1031 entry = qp_guest_handle_to_entry(handle); in qp_detatch_guest_work()
1032 if (!entry) { in qp_detatch_guest_work()
1037 if (entry->qp.flags & VMCI_QPFLAG_LOCAL) { in qp_detatch_guest_work()
1040 if (entry->qp.ref_count > 1) { in qp_detatch_guest_work()
1072 entry->qp.ref_count--; in qp_detatch_guest_work()
1073 if (entry->qp.ref_count == 0) in qp_detatch_guest_work()
1074 qp_list_remove_entry(&qp_guest_endpoints, &entry->qp); in qp_detatch_guest_work()
1077 if (entry) in qp_detatch_guest_work()
1078 ref_count = entry->qp.ref_count; in qp_detatch_guest_work()
1083 qp_guest_endpoint_destroy(entry); in qp_detatch_guest_work()
1293 struct qp_broker_entry *entry = NULL; in qp_broker_create() local
1321 entry = kzalloc(sizeof(*entry), GFP_ATOMIC); in qp_broker_create()
1322 if (!entry) in qp_broker_create()
1341 entry->qp.handle = handle; in qp_broker_create()
1342 entry->qp.peer = peer; in qp_broker_create()
1343 entry->qp.flags = flags; in qp_broker_create()
1344 entry->qp.produce_size = guest_produce_size; in qp_broker_create()
1345 entry->qp.consume_size = guest_consume_size; in qp_broker_create()
1346 entry->qp.ref_count = 1; in qp_broker_create()
1347 entry->create_id = context_id; in qp_broker_create()
1348 entry->attach_id = VMCI_INVALID_ID; in qp_broker_create()
1349 entry->state = VMCIQPB_NEW; in qp_broker_create()
1350 entry->require_trusted_attach = in qp_broker_create()
1352 entry->created_by_trusted = in qp_broker_create()
1354 entry->vmci_page_files = false; in qp_broker_create()
1355 entry->wakeup_cb = wakeup_cb; in qp_broker_create()
1356 entry->client_data = client_data; in qp_broker_create()
1357 entry->produce_q = qp_host_alloc_queue(guest_produce_size); in qp_broker_create()
1358 if (entry->produce_q == NULL) { in qp_broker_create()
1362 entry->consume_q = qp_host_alloc_queue(guest_consume_size); in qp_broker_create()
1363 if (entry->consume_q == NULL) { in qp_broker_create()
1368 qp_init_queue_mutex(entry->produce_q, entry->consume_q); in qp_broker_create()
1370 INIT_LIST_HEAD(&entry->qp.list_item); in qp_broker_create()
1375 entry->local_mem = kcalloc(QPE_NUM_PAGES(entry->qp), in qp_broker_create()
1377 if (entry->local_mem == NULL) { in qp_broker_create()
1381 entry->state = VMCIQPB_CREATED_MEM; in qp_broker_create()
1382 entry->produce_q->q_header = entry->local_mem; in qp_broker_create()
1383 tmp = (u8 *)entry->local_mem + PAGE_SIZE * in qp_broker_create()
1384 (DIV_ROUND_UP(entry->qp.produce_size, PAGE_SIZE) + 1); in qp_broker_create()
1385 entry->consume_q->q_header = (struct vmci_queue_header *)tmp; in qp_broker_create()
1392 entry->produce_q, in qp_broker_create()
1393 entry->consume_q); in qp_broker_create()
1397 entry->state = VMCIQPB_CREATED_MEM; in qp_broker_create()
1406 entry->state = VMCIQPB_CREATED_NO_MEM; in qp_broker_create()
1409 qp_list_add_entry(&qp_broker_list, &entry->qp); in qp_broker_create()
1411 *ent = entry; in qp_broker_create()
1414 result = vmci_resource_add(&entry->resource, in qp_broker_create()
1423 entry->qp.handle = vmci_resource_handle(&entry->resource); in qp_broker_create()
1425 vmci_q_header_init(entry->produce_q->q_header, in qp_broker_create()
1426 entry->qp.handle); in qp_broker_create()
1427 vmci_q_header_init(entry->consume_q->q_header, in qp_broker_create()
1428 entry->qp.handle); in qp_broker_create()
1431 vmci_ctx_qp_create(context, entry->qp.handle); in qp_broker_create()
1436 if (entry != NULL) { in qp_broker_create()
1437 qp_host_free_queue(entry->produce_q, guest_produce_size); in qp_broker_create()
1438 qp_host_free_queue(entry->consume_q, guest_consume_size); in qp_broker_create()
1439 kfree(entry); in qp_broker_create()
1511 static int qp_broker_attach(struct qp_broker_entry *entry, in qp_broker_attach() argument
1527 if (entry->state != VMCIQPB_CREATED_NO_MEM && in qp_broker_attach()
1528 entry->state != VMCIQPB_CREATED_MEM) in qp_broker_attach()
1532 if (!(entry->qp.flags & VMCI_QPFLAG_LOCAL) || in qp_broker_attach()
1533 context_id != entry->create_id) { in qp_broker_attach()
1536 } else if (context_id == entry->create_id || in qp_broker_attach()
1537 context_id == entry->attach_id) { in qp_broker_attach()
1542 VMCI_CONTEXT_IS_VM(entry->create_id)) in qp_broker_attach()
1550 !entry->created_by_trusted) in qp_broker_attach()
1557 if (entry->require_trusted_attach && in qp_broker_attach()
1565 if (entry->qp.peer != VMCI_INVALID_ID && entry->qp.peer != context_id) in qp_broker_attach()
1568 if (entry->create_id == VMCI_HOST_CONTEXT_ID) { in qp_broker_attach()
1586 create_context = vmci_ctx_get(entry->create_id); in qp_broker_attach()
1594 if ((entry->qp.flags & ~VMCI_QP_ASYMM) != (flags & ~VMCI_QP_ASYMM_PEER)) in qp_broker_attach()
1604 if (entry->qp.produce_size != produce_size || in qp_broker_attach()
1605 entry->qp.consume_size != consume_size) { in qp_broker_attach()
1608 } else if (entry->qp.produce_size != consume_size || in qp_broker_attach()
1609 entry->qp.consume_size != produce_size) { in qp_broker_attach()
1627 if (entry->state != VMCIQPB_CREATED_NO_MEM) in qp_broker_attach()
1639 entry->produce_q, in qp_broker_attach()
1640 entry->consume_q); in qp_broker_attach()
1644 entry->state = VMCIQPB_ATTACHED_MEM; in qp_broker_attach()
1646 entry->state = VMCIQPB_ATTACHED_NO_MEM; in qp_broker_attach()
1648 } else if (entry->state == VMCIQPB_CREATED_NO_MEM) { in qp_broker_attach()
1659 entry->state = VMCIQPB_ATTACHED_MEM; in qp_broker_attach()
1662 if (entry->state == VMCIQPB_ATTACHED_MEM) { in qp_broker_attach()
1664 qp_notify_peer(true, entry->qp.handle, context_id, in qp_broker_attach()
1665 entry->create_id); in qp_broker_attach()
1668 entry->create_id, entry->qp.handle.context, in qp_broker_attach()
1669 entry->qp.handle.resource); in qp_broker_attach()
1672 entry->attach_id = context_id; in qp_broker_attach()
1673 entry->qp.ref_count++; in qp_broker_attach()
1675 entry->wakeup_cb = wakeup_cb; in qp_broker_attach()
1676 entry->client_data = client_data; in qp_broker_attach()
1684 vmci_ctx_qp_create(context, entry->qp.handle); in qp_broker_attach()
1687 *ent = entry; in qp_broker_attach()
1711 struct qp_broker_entry *entry = NULL; in qp_broker_alloc() local
1741 entry = qp_broker_handle_to_entry(handle); in qp_broker_alloc()
1743 if (!entry) { in qp_broker_alloc()
1752 qp_broker_attach(entry, peer, flags, priv_flags, in qp_broker_alloc()
1783 struct qp_broker_entry *entry; in qp_alloc_host_work() local
1794 entry = NULL; in qp_alloc_host_work()
1798 wakeup_cb, client_data, &entry, &swap); in qp_alloc_host_work()
1807 *produce_q = entry->consume_q; in qp_alloc_host_work()
1808 *consume_q = entry->produce_q; in qp_alloc_host_work()
1810 *produce_q = entry->produce_q; in qp_alloc_host_work()
1811 *consume_q = entry->consume_q; in qp_alloc_host_work()
1814 *handle = vmci_resource_handle(&entry->resource); in qp_alloc_host_work()
1897 struct qp_entry *entry = in qp_list_get_head() local
1900 return entry; in qp_list_get_head()
1908 struct qp_entry *entry; in vmci_qp_broker_exit() local
1913 while ((entry = qp_list_get_head(&qp_broker_list))) { in vmci_qp_broker_exit()
1914 be = (struct qp_broker_entry *)entry; in vmci_qp_broker_exit()
1916 qp_list_remove_entry(&qp_broker_list, entry); in vmci_qp_broker_exit()
1968 struct qp_broker_entry *entry; in vmci_qp_broker_set_page_store() local
1993 entry = qp_broker_handle_to_entry(handle); in vmci_qp_broker_set_page_store()
1994 if (!entry) { in vmci_qp_broker_set_page_store()
2005 if (entry->create_id != context_id && in vmci_qp_broker_set_page_store()
2006 (entry->create_id != VMCI_HOST_CONTEXT_ID || in vmci_qp_broker_set_page_store()
2007 entry->attach_id != context_id)) { in vmci_qp_broker_set_page_store()
2012 if (entry->state != VMCIQPB_CREATED_NO_MEM && in vmci_qp_broker_set_page_store()
2013 entry->state != VMCIQPB_ATTACHED_NO_MEM) { in vmci_qp_broker_set_page_store()
2019 entry->produce_q, entry->consume_q); in vmci_qp_broker_set_page_store()
2023 result = qp_host_map_queues(entry->produce_q, entry->consume_q); in vmci_qp_broker_set_page_store()
2025 qp_host_unregister_user_memory(entry->produce_q, in vmci_qp_broker_set_page_store()
2026 entry->consume_q); in vmci_qp_broker_set_page_store()
2030 if (entry->state == VMCIQPB_CREATED_NO_MEM) in vmci_qp_broker_set_page_store()
2031 entry->state = VMCIQPB_CREATED_MEM; in vmci_qp_broker_set_page_store()
2033 entry->state = VMCIQPB_ATTACHED_MEM; in vmci_qp_broker_set_page_store()
2035 entry->vmci_page_files = true; in vmci_qp_broker_set_page_store()
2037 if (entry->state == VMCIQPB_ATTACHED_MEM) { in vmci_qp_broker_set_page_store()
2039 qp_notify_peer(true, handle, context_id, entry->create_id); in vmci_qp_broker_set_page_store()
2042 entry->create_id, entry->qp.handle.context, in vmci_qp_broker_set_page_store()
2043 entry->qp.handle.resource); in vmci_qp_broker_set_page_store()
2058 static void qp_reset_saved_headers(struct qp_broker_entry *entry) in qp_reset_saved_headers() argument
2060 entry->produce_q->saved_header = NULL; in qp_reset_saved_headers()
2061 entry->consume_q->saved_header = NULL; in qp_reset_saved_headers()
2084 struct qp_broker_entry *entry; in vmci_qp_broker_detach() local
2104 entry = qp_broker_handle_to_entry(handle); in vmci_qp_broker_detach()
2105 if (!entry) { in vmci_qp_broker_detach()
2112 if (context_id != entry->create_id && context_id != entry->attach_id) { in vmci_qp_broker_detach()
2117 if (context_id == entry->create_id) { in vmci_qp_broker_detach()
2118 peer_id = entry->attach_id; in vmci_qp_broker_detach()
2119 entry->create_id = VMCI_INVALID_ID; in vmci_qp_broker_detach()
2121 peer_id = entry->create_id; in vmci_qp_broker_detach()
2122 entry->attach_id = VMCI_INVALID_ID; in vmci_qp_broker_detach()
2124 entry->qp.ref_count--; in vmci_qp_broker_detach()
2126 is_local = entry->qp.flags & VMCI_QPFLAG_LOCAL; in vmci_qp_broker_detach()
2139 qp_acquire_queue_mutex(entry->produce_q); in vmci_qp_broker_detach()
2140 headers_mapped = entry->produce_q->q_header || in vmci_qp_broker_detach()
2141 entry->consume_q->q_header; in vmci_qp_broker_detach()
2142 if (QPBROKERSTATE_HAS_MEM(entry)) { in vmci_qp_broker_detach()
2145 entry->produce_q, in vmci_qp_broker_detach()
2146 entry->consume_q); in vmci_qp_broker_detach()
2152 qp_host_unregister_user_memory(entry->produce_q, in vmci_qp_broker_detach()
2153 entry->consume_q); in vmci_qp_broker_detach()
2158 qp_reset_saved_headers(entry); in vmci_qp_broker_detach()
2160 qp_release_queue_mutex(entry->produce_q); in vmci_qp_broker_detach()
2162 if (!headers_mapped && entry->wakeup_cb) in vmci_qp_broker_detach()
2163 entry->wakeup_cb(entry->client_data); in vmci_qp_broker_detach()
2166 if (entry->wakeup_cb) { in vmci_qp_broker_detach()
2167 entry->wakeup_cb = NULL; in vmci_qp_broker_detach()
2168 entry->client_data = NULL; in vmci_qp_broker_detach()
2172 if (entry->qp.ref_count == 0) { in vmci_qp_broker_detach()
2173 qp_list_remove_entry(&qp_broker_list, &entry->qp); in vmci_qp_broker_detach()
2176 kfree(entry->local_mem); in vmci_qp_broker_detach()
2178 qp_cleanup_queue_mutex(entry->produce_q, entry->consume_q); in vmci_qp_broker_detach()
2179 qp_host_free_queue(entry->produce_q, entry->qp.produce_size); in vmci_qp_broker_detach()
2180 qp_host_free_queue(entry->consume_q, entry->qp.consume_size); in vmci_qp_broker_detach()
2182 vmci_resource_remove(&entry->resource); in vmci_qp_broker_detach()
2184 kfree(entry); in vmci_qp_broker_detach()
2190 QPBROKERSTATE_HAS_MEM(entry)) { in vmci_qp_broker_detach()
2191 entry->state = VMCIQPB_SHUTDOWN_MEM; in vmci_qp_broker_detach()
2193 entry->state = VMCIQPB_SHUTDOWN_NO_MEM; in vmci_qp_broker_detach()
2216 struct qp_broker_entry *entry; in vmci_qp_broker_map() local
2233 entry = qp_broker_handle_to_entry(handle); in vmci_qp_broker_map()
2234 if (!entry) { in vmci_qp_broker_map()
2241 if (context_id != entry->create_id && context_id != entry->attach_id) { in vmci_qp_broker_map()
2249 !QPBROKERSTATE_HAS_MEM(entry)) { in vmci_qp_broker_map()
2253 page_store.len = QPE_NUM_PAGES(entry->qp); in vmci_qp_broker_map()
2255 qp_acquire_queue_mutex(entry->produce_q); in vmci_qp_broker_map()
2256 qp_reset_saved_headers(entry); in vmci_qp_broker_map()
2259 entry->produce_q, in vmci_qp_broker_map()
2260 entry->consume_q); in vmci_qp_broker_map()
2261 qp_release_queue_mutex(entry->produce_q); in vmci_qp_broker_map()
2265 entry->state++; in vmci_qp_broker_map()
2267 if (entry->wakeup_cb) in vmci_qp_broker_map()
2268 entry->wakeup_cb(entry->client_data); in vmci_qp_broker_map()
2284 static int qp_save_headers(struct qp_broker_entry *entry) in qp_save_headers() argument
2288 if (entry->produce_q->saved_header != NULL && in qp_save_headers()
2289 entry->consume_q->saved_header != NULL) { in qp_save_headers()
2299 if (NULL == entry->produce_q->q_header || in qp_save_headers()
2300 NULL == entry->consume_q->q_header) { in qp_save_headers()
2301 result = qp_host_map_queues(entry->produce_q, entry->consume_q); in qp_save_headers()
2306 memcpy(&entry->saved_produce_q, entry->produce_q->q_header, in qp_save_headers()
2307 sizeof(entry->saved_produce_q)); in qp_save_headers()
2308 entry->produce_q->saved_header = &entry->saved_produce_q; in qp_save_headers()
2309 memcpy(&entry->saved_consume_q, entry->consume_q->q_header, in qp_save_headers()
2310 sizeof(entry->saved_consume_q)); in qp_save_headers()
2311 entry->consume_q->saved_header = &entry->saved_consume_q; in qp_save_headers()
2326 struct qp_broker_entry *entry; in vmci_qp_broker_unmap() local
2343 entry = qp_broker_handle_to_entry(handle); in vmci_qp_broker_unmap()
2344 if (!entry) { in vmci_qp_broker_unmap()
2351 if (context_id != entry->create_id && context_id != entry->attach_id) { in vmci_qp_broker_unmap()
2357 QPBROKERSTATE_HAS_MEM(entry)) { in vmci_qp_broker_unmap()
2358 qp_acquire_queue_mutex(entry->produce_q); in vmci_qp_broker_unmap()
2359 result = qp_save_headers(entry); in vmci_qp_broker_unmap()
2364 qp_host_unmap_queues(gid, entry->produce_q, entry->consume_q); in vmci_qp_broker_unmap()
2373 qp_host_unregister_user_memory(entry->produce_q, in vmci_qp_broker_unmap()
2374 entry->consume_q); in vmci_qp_broker_unmap()
2379 entry->state--; in vmci_qp_broker_unmap()
2381 qp_release_queue_mutex(entry->produce_q); in vmci_qp_broker_unmap()
2399 struct qp_entry *entry; in vmci_qp_guest_endpoints_exit() local
2404 while ((entry = qp_list_get_head(&qp_guest_endpoints))) { in vmci_qp_guest_endpoints_exit()
2405 ep = (struct qp_guest_endpoint *)entry; in vmci_qp_guest_endpoints_exit()
2408 if (!(entry->flags & VMCI_QPFLAG_LOCAL)) in vmci_qp_guest_endpoints_exit()
2409 qp_detatch_hypercall(entry->handle); in vmci_qp_guest_endpoints_exit()
2412 entry->ref_count = 0; in vmci_qp_guest_endpoints_exit()
2413 qp_list_remove_entry(&qp_guest_endpoints, entry); in vmci_qp_guest_endpoints_exit()