This source file includes following definitions.
- opal_btl_usnic_piggyback_ack
1
2
3
4
5
6
7
8
9
10 #ifndef BTL_USNIC_ACK_H
11 #define BTL_USNIC_ACK_H
12
13 #include "opal_config.h"
14
15 #include "opal/class/opal_hotel.h"
16
17 #include "btl_usnic.h"
18 #include "btl_usnic_frag.h"
19 #include "btl_usnic_endpoint.h"
20 #include "btl_usnic_compat.h"
21
22
23
24 #define OPAL_BTL_USNIC_DO_SEND_FRAG_CB(module, send_frag, comment) \
25 do { \
26 MSGDEBUG1_OUT("%s:%d: %s SEND callback for module=%p frag=%p\n", \
27 __func__, __LINE__, \
28 (comment), (void *)(module), (void *)(send_frag)); \
29 (send_frag)->sf_base.uf_base.des_cbfunc( \
30 &(module)->super, \
31 (send_frag)->sf_endpoint, \
32 &(send_frag)->sf_base.uf_base, \
33 OPAL_SUCCESS); \
34 frag->sf_base.uf_base.des_flags &= ~MCA_BTL_DES_SEND_ALWAYS_CALLBACK; \
35 ++((module)->stats.pml_send_callbacks); \
36 } while (0)
37
38 #if BTL_VERSION == 30
39
40
41 #define OPAL_BTL_USNIC_DO_PUT_FRAG_CB(module, send_frag, comment) \
42 do { \
43 MSGDEBUG1_OUT("%s:%d: %s PUT callback for module=%p frag=%p\n", \
44 __func__, __LINE__, \
45 (comment), (void *)(module), (void *)(send_frag)); \
46 mca_btl_base_rdma_completion_fn_t func = \
47 (mca_btl_base_rdma_completion_fn_t) \
48 (send_frag)->sf_base.uf_base.des_cbfunc; \
49 func(&(module)->super, \
50 (send_frag)->sf_endpoint, \
51 (send_frag)->sf_base.uf_local_seg[0].seg_addr.pval, \
52 NULL, \
53 (send_frag)->sf_base.uf_base.des_context, \
54 (send_frag)->sf_base.uf_base.des_cbdata, \
55 OPAL_SUCCESS); \
56 ++((module)->stats.pml_send_callbacks); \
57 } while (0)
58 #endif
59
60
61
62
63 void opal_btl_usnic_ack_complete(opal_btl_usnic_module_t *module,
64 opal_btl_usnic_ack_segment_t *ack);
65
66
67
68
69
70 int opal_btl_usnic_ack_send(opal_btl_usnic_module_t *module,
71 opal_btl_usnic_endpoint_t *endpoint);
72
73
74
75
76
77 void opal_btl_usnic_ack_timeout(opal_hotel_t *hotel, int room_num,
78 void *occupant);
79
80
81
82
83 void opal_btl_usnic_handle_ack(opal_btl_usnic_endpoint_t *endpoint,
84 opal_btl_usnic_seq_t ack_seq);
85
86 static inline void
87 opal_btl_usnic_piggyback_ack(
88 opal_btl_usnic_endpoint_t *endpoint,
89 opal_btl_usnic_send_segment_t *sseg)
90 {
91
92 if (endpoint->endpoint_ack_needed) {
93 opal_btl_usnic_remove_from_endpoints_needing_ack(endpoint);
94 sseg->ss_base.us_btl_header->ack_seq =
95 SEQ_DIFF(endpoint->endpoint_next_contig_seq_to_recv, 1);
96 sseg->ss_base.us_btl_header->ack_present = 1;
97 #if MSGDEBUG1
98 opal_output(0, "Piggy-backing ACK for sequence %"UDSEQ"\n",
99 sseg->ss_base.us_btl_header->ack_seq);
100 #endif
101 } else {
102 sseg->ss_base.us_btl_header->ack_present = 0;
103 }
104 }
105
106
107 #endif