Lines Matching refs:query
490 void ib_sa_cancel_query(int id, struct ib_sa_query *query) in ib_sa_cancel_query() argument
497 if (idr_find(&query_idr, id) != query) { in ib_sa_cancel_query()
501 agent = query->port->agent; in ib_sa_cancel_query()
502 mad_buf = query->mad_buf; in ib_sa_cancel_query()
570 static int alloc_mad(struct ib_sa_query *query, gfp_t gfp_mask) in alloc_mad() argument
574 spin_lock_irqsave(&query->port->ah_lock, flags); in alloc_mad()
575 if (!query->port->sm_ah) { in alloc_mad()
576 spin_unlock_irqrestore(&query->port->ah_lock, flags); in alloc_mad()
579 kref_get(&query->port->sm_ah->ref); in alloc_mad()
580 query->sm_ah = query->port->sm_ah; in alloc_mad()
581 spin_unlock_irqrestore(&query->port->ah_lock, flags); in alloc_mad()
583 query->mad_buf = ib_create_send_mad(query->port->agent, 1, in alloc_mad()
584 query->sm_ah->pkey_index, in alloc_mad()
587 if (IS_ERR(query->mad_buf)) { in alloc_mad()
588 kref_put(&query->sm_ah->ref, free_sm_ah); in alloc_mad()
592 query->mad_buf->ah = query->sm_ah->ah; in alloc_mad()
597 static void free_mad(struct ib_sa_query *query) in free_mad() argument
599 ib_free_send_mad(query->mad_buf); in free_mad()
600 kref_put(&query->sm_ah->ref, free_sm_ah); in free_mad()
619 static int send_mad(struct ib_sa_query *query, int timeout_ms, gfp_t gfp_mask) in send_mad() argument
629 id = idr_alloc(&query_idr, query, 0, 0, GFP_NOWAIT); in send_mad()
637 query->mad_buf->timeout_ms = timeout_ms; in send_mad()
638 query->mad_buf->context[0] = query; in send_mad()
639 query->id = id; in send_mad()
641 ret = ib_post_send_mad(query->mad_buf, NULL); in send_mad()
672 struct ib_sa_path_query *query = in ib_sa_path_rec_callback() local
683 query->callback(status, &rec, query->context); in ib_sa_path_rec_callback()
685 query->callback(status, NULL, query->context); in ib_sa_path_rec_callback()
729 struct ib_sa_path_query *query; in ib_sa_path_rec_get() local
742 query = kmalloc(sizeof *query, gfp_mask); in ib_sa_path_rec_get()
743 if (!query) in ib_sa_path_rec_get()
746 query->sa_query.port = port; in ib_sa_path_rec_get()
747 ret = alloc_mad(&query->sa_query, gfp_mask); in ib_sa_path_rec_get()
752 query->sa_query.client = client; in ib_sa_path_rec_get()
753 query->callback = callback; in ib_sa_path_rec_get()
754 query->context = context; in ib_sa_path_rec_get()
756 mad = query->sa_query.mad_buf->mad; in ib_sa_path_rec_get()
759 query->sa_query.callback = callback ? ib_sa_path_rec_callback : NULL; in ib_sa_path_rec_get()
760 query->sa_query.release = ib_sa_path_rec_release; in ib_sa_path_rec_get()
767 *sa_query = &query->sa_query; in ib_sa_path_rec_get()
769 ret = send_mad(&query->sa_query, timeout_ms, gfp_mask); in ib_sa_path_rec_get()
777 ib_sa_client_put(query->sa_query.client); in ib_sa_path_rec_get()
778 free_mad(&query->sa_query); in ib_sa_path_rec_get()
781 kfree(query); in ib_sa_path_rec_get()
790 struct ib_sa_service_query *query = in ib_sa_service_rec_callback() local
798 query->callback(status, &rec, query->context); in ib_sa_service_rec_callback()
800 query->callback(status, NULL, query->context); in ib_sa_service_rec_callback()
846 struct ib_sa_service_query *query; in ib_sa_service_rec_query() local
864 query = kmalloc(sizeof *query, gfp_mask); in ib_sa_service_rec_query()
865 if (!query) in ib_sa_service_rec_query()
868 query->sa_query.port = port; in ib_sa_service_rec_query()
869 ret = alloc_mad(&query->sa_query, gfp_mask); in ib_sa_service_rec_query()
874 query->sa_query.client = client; in ib_sa_service_rec_query()
875 query->callback = callback; in ib_sa_service_rec_query()
876 query->context = context; in ib_sa_service_rec_query()
878 mad = query->sa_query.mad_buf->mad; in ib_sa_service_rec_query()
881 query->sa_query.callback = callback ? ib_sa_service_rec_callback : NULL; in ib_sa_service_rec_query()
882 query->sa_query.release = ib_sa_service_rec_release; in ib_sa_service_rec_query()
890 *sa_query = &query->sa_query; in ib_sa_service_rec_query()
892 ret = send_mad(&query->sa_query, timeout_ms, gfp_mask); in ib_sa_service_rec_query()
900 ib_sa_client_put(query->sa_query.client); in ib_sa_service_rec_query()
901 free_mad(&query->sa_query); in ib_sa_service_rec_query()
904 kfree(query); in ib_sa_service_rec_query()
913 struct ib_sa_mcmember_query *query = in ib_sa_mcmember_rec_callback() local
921 query->callback(status, &rec, query->context); in ib_sa_mcmember_rec_callback()
923 query->callback(status, NULL, query->context); in ib_sa_mcmember_rec_callback()
943 struct ib_sa_mcmember_query *query; in ib_sa_mcmember_rec_query() local
956 query = kmalloc(sizeof *query, gfp_mask); in ib_sa_mcmember_rec_query()
957 if (!query) in ib_sa_mcmember_rec_query()
960 query->sa_query.port = port; in ib_sa_mcmember_rec_query()
961 ret = alloc_mad(&query->sa_query, gfp_mask); in ib_sa_mcmember_rec_query()
966 query->sa_query.client = client; in ib_sa_mcmember_rec_query()
967 query->callback = callback; in ib_sa_mcmember_rec_query()
968 query->context = context; in ib_sa_mcmember_rec_query()
970 mad = query->sa_query.mad_buf->mad; in ib_sa_mcmember_rec_query()
973 query->sa_query.callback = callback ? ib_sa_mcmember_rec_callback : NULL; in ib_sa_mcmember_rec_query()
974 query->sa_query.release = ib_sa_mcmember_rec_release; in ib_sa_mcmember_rec_query()
982 *sa_query = &query->sa_query; in ib_sa_mcmember_rec_query()
984 ret = send_mad(&query->sa_query, timeout_ms, gfp_mask); in ib_sa_mcmember_rec_query()
992 ib_sa_client_put(query->sa_query.client); in ib_sa_mcmember_rec_query()
993 free_mad(&query->sa_query); in ib_sa_mcmember_rec_query()
996 kfree(query); in ib_sa_mcmember_rec_query()
1005 struct ib_sa_guidinfo_query *query = in ib_sa_guidinfo_rec_callback() local
1013 query->callback(status, &rec, query->context); in ib_sa_guidinfo_rec_callback()
1015 query->callback(status, NULL, query->context); in ib_sa_guidinfo_rec_callback()
1034 struct ib_sa_guidinfo_query *query; in ib_sa_guid_info_rec_query() local
1053 query = kmalloc(sizeof *query, gfp_mask); in ib_sa_guid_info_rec_query()
1054 if (!query) in ib_sa_guid_info_rec_query()
1057 query->sa_query.port = port; in ib_sa_guid_info_rec_query()
1058 ret = alloc_mad(&query->sa_query, gfp_mask); in ib_sa_guid_info_rec_query()
1063 query->sa_query.client = client; in ib_sa_guid_info_rec_query()
1064 query->callback = callback; in ib_sa_guid_info_rec_query()
1065 query->context = context; in ib_sa_guid_info_rec_query()
1067 mad = query->sa_query.mad_buf->mad; in ib_sa_guid_info_rec_query()
1070 query->sa_query.callback = callback ? ib_sa_guidinfo_rec_callback : NULL; in ib_sa_guid_info_rec_query()
1071 query->sa_query.release = ib_sa_guidinfo_rec_release; in ib_sa_guid_info_rec_query()
1080 *sa_query = &query->sa_query; in ib_sa_guid_info_rec_query()
1082 ret = send_mad(&query->sa_query, timeout_ms, gfp_mask); in ib_sa_guid_info_rec_query()
1090 ib_sa_client_put(query->sa_query.client); in ib_sa_guid_info_rec_query()
1091 free_mad(&query->sa_query); in ib_sa_guid_info_rec_query()
1094 kfree(query); in ib_sa_guid_info_rec_query()
1102 struct ib_sa_query *query = mad_send_wc->send_buf->context[0]; in send_handler() local
1105 if (query->callback) in send_handler()
1111 query->callback(query, -ETIMEDOUT, NULL); in send_handler()
1114 query->callback(query, -EINTR, NULL); in send_handler()
1117 query->callback(query, -EIO, NULL); in send_handler()
1122 idr_remove(&query_idr, query->id); in send_handler()
1125 free_mad(query); in send_handler()
1126 ib_sa_client_put(query->client); in send_handler()
1127 query->release(query); in send_handler()
1133 struct ib_sa_query *query; in recv_handler() local
1137 query = mad_buf->context[0]; in recv_handler()
1139 if (query->callback) { in recv_handler()
1141 query->callback(query, in recv_handler()
1146 query->callback(query, -EIO, NULL); in recv_handler()