• Home
  • Raw
  • Download

Lines Matching refs:entry

905 	struct qp_entry *entry;  in qp_list_find()  local
910 list_for_each_entry(entry, &qp_list->head, list_item) { in qp_list_find()
911 if (vmci_handle_is_equal(entry->handle, handle)) in qp_list_find()
912 return entry; in qp_list_find()
924 struct qp_guest_endpoint *entry; in qp_guest_handle_to_entry() local
927 entry = qp ? container_of( in qp_guest_handle_to_entry()
929 return entry; in qp_guest_handle_to_entry()
938 struct qp_broker_entry *entry; in qp_broker_handle_to_entry() local
941 entry = qp ? container_of( in qp_broker_handle_to_entry()
943 return entry; in qp_broker_handle_to_entry()
984 struct qp_guest_endpoint *entry; in qp_guest_endpoint_create() local
995 entry = kzalloc(sizeof(*entry), GFP_KERNEL); in qp_guest_endpoint_create()
996 if (entry) { in qp_guest_endpoint_create()
997 entry->qp.peer = peer; in qp_guest_endpoint_create()
998 entry->qp.flags = flags; in qp_guest_endpoint_create()
999 entry->qp.produce_size = produce_size; in qp_guest_endpoint_create()
1000 entry->qp.consume_size = consume_size; in qp_guest_endpoint_create()
1001 entry->qp.ref_count = 0; in qp_guest_endpoint_create()
1002 entry->num_ppns = num_ppns; in qp_guest_endpoint_create()
1003 entry->produce_q = produce_q; in qp_guest_endpoint_create()
1004 entry->consume_q = consume_q; in qp_guest_endpoint_create()
1005 INIT_LIST_HEAD(&entry->qp.list_item); in qp_guest_endpoint_create()
1008 result = vmci_resource_add(&entry->resource, in qp_guest_endpoint_create()
1011 entry->qp.handle = vmci_resource_handle(&entry->resource); in qp_guest_endpoint_create()
1013 qp_list_find(&qp_guest_endpoints, entry->qp.handle)) { in qp_guest_endpoint_create()
1016 kfree(entry); in qp_guest_endpoint_create()
1017 entry = NULL; in qp_guest_endpoint_create()
1020 return entry; in qp_guest_endpoint_create()
1026 static void qp_guest_endpoint_destroy(struct qp_guest_endpoint *entry) in qp_guest_endpoint_destroy() argument
1028 qp_free_ppn_set(&entry->ppn_set); in qp_guest_endpoint_destroy()
1029 qp_cleanup_queue_mutex(entry->produce_q, entry->consume_q); in qp_guest_endpoint_destroy()
1030 qp_free_queue(entry->produce_q, entry->qp.produce_size); in qp_guest_endpoint_destroy()
1031 qp_free_queue(entry->consume_q, entry->qp.consume_size); in qp_guest_endpoint_destroy()
1033 vmci_resource_remove(&entry->resource); in qp_guest_endpoint_destroy()
1035 kfree(entry); in qp_guest_endpoint_destroy()
1042 static int qp_alloc_hypercall(const struct qp_guest_endpoint *entry) in qp_alloc_hypercall() argument
1048 if (!entry || entry->num_ppns <= 2) in qp_alloc_hypercall()
1052 (size_t) entry->num_ppns * sizeof(u32); in qp_alloc_hypercall()
1061 alloc_msg->handle = entry->qp.handle; in qp_alloc_hypercall()
1062 alloc_msg->peer = entry->qp.peer; in qp_alloc_hypercall()
1063 alloc_msg->flags = entry->qp.flags; in qp_alloc_hypercall()
1064 alloc_msg->produce_size = entry->qp.produce_size; in qp_alloc_hypercall()
1065 alloc_msg->consume_size = entry->qp.consume_size; in qp_alloc_hypercall()
1066 alloc_msg->num_ppns = entry->num_ppns; in qp_alloc_hypercall()
1069 &entry->ppn_set); in qp_alloc_hypercall()
1098 static void qp_list_add_entry(struct qp_list *qp_list, struct qp_entry *entry) in qp_list_add_entry() argument
1100 if (entry) in qp_list_add_entry()
1101 list_add(&entry->list_item, &qp_list->head); in qp_list_add_entry()
1108 struct qp_entry *entry) in qp_list_remove_entry() argument
1110 if (entry) in qp_list_remove_entry()
1111 list_del(&entry->list_item); in qp_list_remove_entry()
1121 struct qp_guest_endpoint *entry; in qp_detatch_guest_work() local
1126 entry = qp_guest_handle_to_entry(handle); in qp_detatch_guest_work()
1127 if (!entry) { in qp_detatch_guest_work()
1132 if (entry->qp.flags & VMCI_QPFLAG_LOCAL) { in qp_detatch_guest_work()
1135 if (entry->qp.ref_count > 1) { in qp_detatch_guest_work()
1167 entry->qp.ref_count--; in qp_detatch_guest_work()
1168 if (entry->qp.ref_count == 0) in qp_detatch_guest_work()
1169 qp_list_remove_entry(&qp_guest_endpoints, &entry->qp); in qp_detatch_guest_work()
1172 if (entry) in qp_detatch_guest_work()
1173 ref_count = entry->qp.ref_count; in qp_detatch_guest_work()
1178 qp_guest_endpoint_destroy(entry); in qp_detatch_guest_work()
1388 struct qp_broker_entry *entry = NULL; in qp_broker_create() local
1416 entry = kzalloc(sizeof(*entry), GFP_ATOMIC); in qp_broker_create()
1417 if (!entry) in qp_broker_create()
1436 entry->qp.handle = handle; in qp_broker_create()
1437 entry->qp.peer = peer; in qp_broker_create()
1438 entry->qp.flags = flags; in qp_broker_create()
1439 entry->qp.produce_size = guest_produce_size; in qp_broker_create()
1440 entry->qp.consume_size = guest_consume_size; in qp_broker_create()
1441 entry->qp.ref_count = 1; in qp_broker_create()
1442 entry->create_id = context_id; in qp_broker_create()
1443 entry->attach_id = VMCI_INVALID_ID; in qp_broker_create()
1444 entry->state = VMCIQPB_NEW; in qp_broker_create()
1445 entry->require_trusted_attach = in qp_broker_create()
1447 entry->created_by_trusted = in qp_broker_create()
1449 entry->vmci_page_files = false; in qp_broker_create()
1450 entry->wakeup_cb = wakeup_cb; in qp_broker_create()
1451 entry->client_data = client_data; in qp_broker_create()
1452 entry->produce_q = qp_host_alloc_queue(guest_produce_size); in qp_broker_create()
1453 if (entry->produce_q == NULL) { in qp_broker_create()
1457 entry->consume_q = qp_host_alloc_queue(guest_consume_size); in qp_broker_create()
1458 if (entry->consume_q == NULL) { in qp_broker_create()
1463 qp_init_queue_mutex(entry->produce_q, entry->consume_q); in qp_broker_create()
1465 INIT_LIST_HEAD(&entry->qp.list_item); in qp_broker_create()
1470 entry->local_mem = kcalloc(QPE_NUM_PAGES(entry->qp), in qp_broker_create()
1472 if (entry->local_mem == NULL) { in qp_broker_create()
1476 entry->state = VMCIQPB_CREATED_MEM; in qp_broker_create()
1477 entry->produce_q->q_header = entry->local_mem; in qp_broker_create()
1478 tmp = (u8 *)entry->local_mem + PAGE_SIZE * in qp_broker_create()
1479 (DIV_ROUND_UP(entry->qp.produce_size, PAGE_SIZE) + 1); in qp_broker_create()
1480 entry->consume_q->q_header = (struct vmci_queue_header *)tmp; in qp_broker_create()
1487 entry->produce_q, in qp_broker_create()
1488 entry->consume_q); in qp_broker_create()
1492 entry->state = VMCIQPB_CREATED_MEM; in qp_broker_create()
1501 entry->state = VMCIQPB_CREATED_NO_MEM; in qp_broker_create()
1504 qp_list_add_entry(&qp_broker_list, &entry->qp); in qp_broker_create()
1506 *ent = entry; in qp_broker_create()
1509 result = vmci_resource_add(&entry->resource, in qp_broker_create()
1518 entry->qp.handle = vmci_resource_handle(&entry->resource); in qp_broker_create()
1520 vmci_q_header_init(entry->produce_q->q_header, in qp_broker_create()
1521 entry->qp.handle); in qp_broker_create()
1522 vmci_q_header_init(entry->consume_q->q_header, in qp_broker_create()
1523 entry->qp.handle); in qp_broker_create()
1526 vmci_ctx_qp_create(context, entry->qp.handle); in qp_broker_create()
1531 if (entry != NULL) { in qp_broker_create()
1532 qp_host_free_queue(entry->produce_q, guest_produce_size); in qp_broker_create()
1533 qp_host_free_queue(entry->consume_q, guest_consume_size); in qp_broker_create()
1534 kfree(entry); in qp_broker_create()
1605 static int qp_broker_attach(struct qp_broker_entry *entry, in qp_broker_attach() argument
1621 if (entry->state != VMCIQPB_CREATED_NO_MEM && in qp_broker_attach()
1622 entry->state != VMCIQPB_CREATED_MEM) in qp_broker_attach()
1626 if (!(entry->qp.flags & VMCI_QPFLAG_LOCAL) || in qp_broker_attach()
1627 context_id != entry->create_id) { in qp_broker_attach()
1630 } else if (context_id == entry->create_id || in qp_broker_attach()
1631 context_id == entry->attach_id) { in qp_broker_attach()
1636 VMCI_CONTEXT_IS_VM(entry->create_id)) in qp_broker_attach()
1644 !entry->created_by_trusted) in qp_broker_attach()
1651 if (entry->require_trusted_attach && in qp_broker_attach()
1659 if (entry->qp.peer != VMCI_INVALID_ID && entry->qp.peer != context_id) in qp_broker_attach()
1662 if (entry->create_id == VMCI_HOST_CONTEXT_ID) { in qp_broker_attach()
1680 create_context = vmci_ctx_get(entry->create_id); in qp_broker_attach()
1688 if ((entry->qp.flags & ~VMCI_QP_ASYMM) != (flags & ~VMCI_QP_ASYMM_PEER)) in qp_broker_attach()
1698 if (entry->qp.produce_size != produce_size || in qp_broker_attach()
1699 entry->qp.consume_size != consume_size) { in qp_broker_attach()
1702 } else if (entry->qp.produce_size != consume_size || in qp_broker_attach()
1703 entry->qp.consume_size != produce_size) { in qp_broker_attach()
1721 if (entry->state != VMCIQPB_CREATED_NO_MEM) in qp_broker_attach()
1733 entry->produce_q, in qp_broker_attach()
1734 entry->consume_q); in qp_broker_attach()
1738 entry->state = VMCIQPB_ATTACHED_MEM; in qp_broker_attach()
1740 entry->state = VMCIQPB_ATTACHED_NO_MEM; in qp_broker_attach()
1742 } else if (entry->state == VMCIQPB_CREATED_NO_MEM) { in qp_broker_attach()
1753 entry->state = VMCIQPB_ATTACHED_MEM; in qp_broker_attach()
1756 if (entry->state == VMCIQPB_ATTACHED_MEM) { in qp_broker_attach()
1758 qp_notify_peer(true, entry->qp.handle, context_id, in qp_broker_attach()
1759 entry->create_id); in qp_broker_attach()
1762 entry->create_id, entry->qp.handle.context, in qp_broker_attach()
1763 entry->qp.handle.resource); in qp_broker_attach()
1766 entry->attach_id = context_id; in qp_broker_attach()
1767 entry->qp.ref_count++; in qp_broker_attach()
1769 entry->wakeup_cb = wakeup_cb; in qp_broker_attach()
1770 entry->client_data = client_data; in qp_broker_attach()
1778 vmci_ctx_qp_create(context, entry->qp.handle); in qp_broker_attach()
1781 *ent = entry; in qp_broker_attach()
1805 struct qp_broker_entry *entry = NULL; in qp_broker_alloc() local
1835 entry = qp_broker_handle_to_entry(handle); in qp_broker_alloc()
1837 if (!entry) { in qp_broker_alloc()
1846 qp_broker_attach(entry, peer, flags, priv_flags, in qp_broker_alloc()
1877 struct qp_broker_entry *entry; in qp_alloc_host_work() local
1888 entry = NULL; in qp_alloc_host_work()
1892 wakeup_cb, client_data, &entry, &swap); in qp_alloc_host_work()
1901 *produce_q = entry->consume_q; in qp_alloc_host_work()
1902 *consume_q = entry->produce_q; in qp_alloc_host_work()
1904 *produce_q = entry->produce_q; in qp_alloc_host_work()
1905 *consume_q = entry->consume_q; in qp_alloc_host_work()
1908 *handle = vmci_resource_handle(&entry->resource); in qp_alloc_host_work()
1991 struct qp_entry *entry = in qp_list_get_head() local
1994 return entry; in qp_list_get_head()
2002 struct qp_entry *entry; in vmci_qp_broker_exit() local
2007 while ((entry = qp_list_get_head(&qp_broker_list))) { in vmci_qp_broker_exit()
2008 be = (struct qp_broker_entry *)entry; in vmci_qp_broker_exit()
2010 qp_list_remove_entry(&qp_broker_list, entry); in vmci_qp_broker_exit()
2059 struct qp_broker_entry *entry; in vmci_qp_broker_set_page_store() local
2084 entry = qp_broker_handle_to_entry(handle); in vmci_qp_broker_set_page_store()
2085 if (!entry) { in vmci_qp_broker_set_page_store()
2096 if (entry->create_id != context_id && in vmci_qp_broker_set_page_store()
2097 (entry->create_id != VMCI_HOST_CONTEXT_ID || in vmci_qp_broker_set_page_store()
2098 entry->attach_id != context_id)) { in vmci_qp_broker_set_page_store()
2103 if (entry->state != VMCIQPB_CREATED_NO_MEM && in vmci_qp_broker_set_page_store()
2104 entry->state != VMCIQPB_ATTACHED_NO_MEM) { in vmci_qp_broker_set_page_store()
2110 entry->produce_q, entry->consume_q); in vmci_qp_broker_set_page_store()
2114 result = qp_host_map_queues(entry->produce_q, entry->consume_q); in vmci_qp_broker_set_page_store()
2116 qp_host_unregister_user_memory(entry->produce_q, in vmci_qp_broker_set_page_store()
2117 entry->consume_q); in vmci_qp_broker_set_page_store()
2121 if (entry->state == VMCIQPB_CREATED_NO_MEM) in vmci_qp_broker_set_page_store()
2122 entry->state = VMCIQPB_CREATED_MEM; in vmci_qp_broker_set_page_store()
2124 entry->state = VMCIQPB_ATTACHED_MEM; in vmci_qp_broker_set_page_store()
2126 entry->vmci_page_files = true; in vmci_qp_broker_set_page_store()
2128 if (entry->state == VMCIQPB_ATTACHED_MEM) { in vmci_qp_broker_set_page_store()
2130 qp_notify_peer(true, handle, context_id, entry->create_id); in vmci_qp_broker_set_page_store()
2133 entry->create_id, entry->qp.handle.context, in vmci_qp_broker_set_page_store()
2134 entry->qp.handle.resource); in vmci_qp_broker_set_page_store()
2149 static void qp_reset_saved_headers(struct qp_broker_entry *entry) in qp_reset_saved_headers() argument
2151 entry->produce_q->saved_header = NULL; in qp_reset_saved_headers()
2152 entry->consume_q->saved_header = NULL; in qp_reset_saved_headers()
2175 struct qp_broker_entry *entry; in vmci_qp_broker_detach() local
2195 entry = qp_broker_handle_to_entry(handle); in vmci_qp_broker_detach()
2196 if (!entry) { in vmci_qp_broker_detach()
2203 if (context_id != entry->create_id && context_id != entry->attach_id) { in vmci_qp_broker_detach()
2208 if (context_id == entry->create_id) { in vmci_qp_broker_detach()
2209 peer_id = entry->attach_id; in vmci_qp_broker_detach()
2210 entry->create_id = VMCI_INVALID_ID; in vmci_qp_broker_detach()
2212 peer_id = entry->create_id; in vmci_qp_broker_detach()
2213 entry->attach_id = VMCI_INVALID_ID; in vmci_qp_broker_detach()
2215 entry->qp.ref_count--; in vmci_qp_broker_detach()
2217 is_local = entry->qp.flags & VMCI_QPFLAG_LOCAL; in vmci_qp_broker_detach()
2230 qp_acquire_queue_mutex(entry->produce_q); in vmci_qp_broker_detach()
2231 headers_mapped = entry->produce_q->q_header || in vmci_qp_broker_detach()
2232 entry->consume_q->q_header; in vmci_qp_broker_detach()
2233 if (QPBROKERSTATE_HAS_MEM(entry)) { in vmci_qp_broker_detach()
2236 entry->produce_q, in vmci_qp_broker_detach()
2237 entry->consume_q); in vmci_qp_broker_detach()
2243 if (entry->vmci_page_files) in vmci_qp_broker_detach()
2244 qp_host_unregister_user_memory(entry->produce_q, in vmci_qp_broker_detach()
2245 entry-> in vmci_qp_broker_detach()
2248 qp_host_unregister_user_memory(entry->produce_q, in vmci_qp_broker_detach()
2249 entry-> in vmci_qp_broker_detach()
2255 qp_reset_saved_headers(entry); in vmci_qp_broker_detach()
2257 qp_release_queue_mutex(entry->produce_q); in vmci_qp_broker_detach()
2259 if (!headers_mapped && entry->wakeup_cb) in vmci_qp_broker_detach()
2260 entry->wakeup_cb(entry->client_data); in vmci_qp_broker_detach()
2263 if (entry->wakeup_cb) { in vmci_qp_broker_detach()
2264 entry->wakeup_cb = NULL; in vmci_qp_broker_detach()
2265 entry->client_data = NULL; in vmci_qp_broker_detach()
2269 if (entry->qp.ref_count == 0) { in vmci_qp_broker_detach()
2270 qp_list_remove_entry(&qp_broker_list, &entry->qp); in vmci_qp_broker_detach()
2273 kfree(entry->local_mem); in vmci_qp_broker_detach()
2275 qp_cleanup_queue_mutex(entry->produce_q, entry->consume_q); in vmci_qp_broker_detach()
2276 qp_host_free_queue(entry->produce_q, entry->qp.produce_size); in vmci_qp_broker_detach()
2277 qp_host_free_queue(entry->consume_q, entry->qp.consume_size); in vmci_qp_broker_detach()
2279 vmci_resource_remove(&entry->resource); in vmci_qp_broker_detach()
2281 kfree(entry); in vmci_qp_broker_detach()
2287 QPBROKERSTATE_HAS_MEM(entry)) { in vmci_qp_broker_detach()
2288 entry->state = VMCIQPB_SHUTDOWN_MEM; in vmci_qp_broker_detach()
2290 entry->state = VMCIQPB_SHUTDOWN_NO_MEM; in vmci_qp_broker_detach()
2313 struct qp_broker_entry *entry; in vmci_qp_broker_map() local
2331 entry = qp_broker_handle_to_entry(handle); in vmci_qp_broker_map()
2332 if (!entry) { in vmci_qp_broker_map()
2339 if (context_id != entry->create_id && context_id != entry->attach_id) { in vmci_qp_broker_map()
2344 is_local = entry->qp.flags & VMCI_QPFLAG_LOCAL; in vmci_qp_broker_map()
2348 !QPBROKERSTATE_HAS_MEM(entry)) { in vmci_qp_broker_map()
2352 page_store.len = QPE_NUM_PAGES(entry->qp); in vmci_qp_broker_map()
2354 qp_acquire_queue_mutex(entry->produce_q); in vmci_qp_broker_map()
2355 qp_reset_saved_headers(entry); in vmci_qp_broker_map()
2358 entry->produce_q, in vmci_qp_broker_map()
2359 entry->consume_q); in vmci_qp_broker_map()
2360 qp_release_queue_mutex(entry->produce_q); in vmci_qp_broker_map()
2364 entry->state++; in vmci_qp_broker_map()
2366 if (entry->wakeup_cb) in vmci_qp_broker_map()
2367 entry->wakeup_cb(entry->client_data); in vmci_qp_broker_map()
2383 static int qp_save_headers(struct qp_broker_entry *entry) in qp_save_headers() argument
2387 if (entry->produce_q->saved_header != NULL && in qp_save_headers()
2388 entry->consume_q->saved_header != NULL) { in qp_save_headers()
2398 if (NULL == entry->produce_q->q_header || in qp_save_headers()
2399 NULL == entry->consume_q->q_header) { in qp_save_headers()
2400 result = qp_host_map_queues(entry->produce_q, entry->consume_q); in qp_save_headers()
2405 memcpy(&entry->saved_produce_q, entry->produce_q->q_header, in qp_save_headers()
2406 sizeof(entry->saved_produce_q)); in qp_save_headers()
2407 entry->produce_q->saved_header = &entry->saved_produce_q; in qp_save_headers()
2408 memcpy(&entry->saved_consume_q, entry->consume_q->q_header, in qp_save_headers()
2409 sizeof(entry->saved_consume_q)); in qp_save_headers()
2410 entry->consume_q->saved_header = &entry->saved_consume_q; in qp_save_headers()
2425 struct qp_broker_entry *entry; in vmci_qp_broker_unmap() local
2443 entry = qp_broker_handle_to_entry(handle); in vmci_qp_broker_unmap()
2444 if (!entry) { in vmci_qp_broker_unmap()
2451 if (context_id != entry->create_id && context_id != entry->attach_id) { in vmci_qp_broker_unmap()
2456 is_local = entry->qp.flags & VMCI_QPFLAG_LOCAL; in vmci_qp_broker_unmap()
2459 QPBROKERSTATE_HAS_MEM(entry)) { in vmci_qp_broker_unmap()
2460 qp_acquire_queue_mutex(entry->produce_q); in vmci_qp_broker_unmap()
2461 result = qp_save_headers(entry); in vmci_qp_broker_unmap()
2466 qp_host_unmap_queues(gid, entry->produce_q, entry->consume_q); in vmci_qp_broker_unmap()
2475 qp_host_unregister_user_memory(entry->produce_q, in vmci_qp_broker_unmap()
2476 entry->consume_q); in vmci_qp_broker_unmap()
2481 entry->state--; in vmci_qp_broker_unmap()
2483 qp_release_queue_mutex(entry->produce_q); in vmci_qp_broker_unmap()
2501 struct qp_entry *entry; in vmci_qp_guest_endpoints_exit() local
2506 while ((entry = qp_list_get_head(&qp_guest_endpoints))) { in vmci_qp_guest_endpoints_exit()
2507 ep = (struct qp_guest_endpoint *)entry; in vmci_qp_guest_endpoints_exit()
2510 if (!(entry->flags & VMCI_QPFLAG_LOCAL)) in vmci_qp_guest_endpoints_exit()
2511 qp_detatch_hypercall(entry->handle); in vmci_qp_guest_endpoints_exit()
2514 entry->ref_count = 0; in vmci_qp_guest_endpoints_exit()
2515 qp_list_remove_entry(&qp_guest_endpoints, entry); in vmci_qp_guest_endpoints_exit()