27 static int photon_pwc_test_gwc_pwc(
int proc,
int *ret_offset);
29 static int photon_pwc_test_ledger(
int proc,
int *ret_offset);
30 static int photon_pwc_try_ledger(
photonRequest req,
int curr);
32 static int photon_pwc_test_packed(
int proc, uint64_t size,
int *ret_offset);
33 static int photon_pwc_try_packed(
photonRequest req,
int offset);
35 static int photon_pwc_try_gwc_pwc(
photonRequest req,
int offset);
36 static int photon_pwc_handle_comp_req(
photonRequest req,
int *flag,
40 static two_lock_queue_t *comp_q;
41 static uint16_t **pbufs;
42 static volatile uint32_t qcount = 0;
50 static inline uint32_t photon_pwc_rcid_size(
photonRequest req) {
55 static inline uint64_t photon_pwc_packed_asize(
photonRequest req) {
56 uint32_t rsize = photon_pwc_rcid_size(req);
63 uint32_t csize = (rid->
size) ? rid->
size :
sizeof(rid->
u64);
65 e->hdr.type = req->chdr.type;
66 e->hdr.cmd = req->chdr.cmd;
70 memcpy(e->data, rid->
data, csize);
73 memcpy(e->data, &(rid->
u64), csize);
81 void *p = malloc(lid->
size);
88 static inline int photon_pwc_check_gwc_align(
int proc, photonBuffer lbuf,
89 photonBuffer rbuf, uint64_t size) {
100 dbg_warn(
"Could not get alignment info from backend");
103 if (!TEST_ALIGN(lbuf->addr, *align) ||
104 !TEST_ALIGN(rbuf->addr, *align) ||
105 !TEST_ALIGN(size, *align)) {
114 uintptr_t addr, uint16_t size,
void *ptr) {
116 int ctype = chdr->
type;
127 .
u64 = (uint64_t)addr,
134 memcpy(&rbuf, ptr,
sizeof(rbuf));
135 memcpy(&lbuf, ptr+
sizeof(rbuf),
sizeof(lbuf));
140 log_err(
"Could not complete PWC_REQ command");
153 memcpy((
void*)addr, ptr, size);
158 log_err(
"Could not find request in PWC_REP");
165 sync_store(&(rhdr->
req), rid, SYNC_RELAXED);
170 log_err(
"Unknown INTERNAL command received: 0x%016lx", cmd);
179 handler = pwc_ctype_handler_table[ctype];
185 handler(proc, cmd, cid, ptr, size);
188 dbg_info(
"No handler defined for ctype %d", ctype);
207 *c = req->local_info.id;
218 handler = pwc_ctype_handler_table[req->chdr.type];
220 handler(
_photon_myrank, req->chdr.cmd, req->local_info.id, NULL, 0);
223 dbg_trace(
"No handler defined for ctype %d", req->chdr.type);
232 req->rattr.cookie = req->id;
233 rc = photon_pwc_safe_ledger(req);
237 sync_two_lock_queue_enqueue(rt->pwc_q, req);
238 sync_fadd(&rt->pcount, 1, SYNC_RELAXED);
239 sync_fadd(&qcount, 1, SYNC_RELAXED);
240 dbg_trace(
"Enqueing ROP PWC req: 0x%016lx", req->id);
245 dbg_trace(
"Completed and removing PWC/GWC request: 0x%016lx (lid=0x%016lx)",
246 req->id, req->local_info.id);
259 val = sync_load(&rt->gcount, SYNC_RELAXED);
264 sync_tatas_acquire(&rt->gq_loc);
267 val = sync_load(&rt->gcount, SYNC_RELAXED);
269 rc = be->tx_size_left(proc);
271 sync_tatas_release(&rt->gq_loc);
274 req = sync_two_lock_queue_dequeue(rt->gwc_q);
275 rc = photon_pwc_try_gwc(req);
277 sync_tatas_release(&rt->gq_loc);
280 sync_fadd(&rt->gcount, -1, SYNC_RELAXED);
281 sync_fadd(&qcount, -1, SYNC_RELAXED);
282 sync_tatas_release(&rt->gq_loc);
286 sync_tatas_release(&rt->gq_loc);
289 val = sync_load(&rt->gpcount, SYNC_RELAXED);
294 sync_tatas_acquire(&rt->pack_loc);
297 val = sync_load(&rt->gpcount, SYNC_RELAXED);
299 rc = photon_pwc_test_gwc_pwc(proc, &offset);
301 sync_tatas_release(&rt->pack_loc);
305 req = sync_two_lock_queue_dequeue(rt->gwc_pwc_q);
306 rc = photon_pwc_try_gwc_pwc(req, offset);
308 dbg_err(
"Could not send queued PWC request");
309 sync_tatas_release(&rt->pack_loc);
312 sync_fadd(&rt->gpcount, -1, SYNC_RELAXED);
313 sync_fadd(&qcount, -1, SYNC_RELAXED);
314 sync_tatas_release(&rt->pack_loc);
319 sync_tatas_release(&rt->pack_loc);
336 val = sync_load(&rt->pcount, SYNC_RELAXED);
341 sync_tatas_acquire(&rt->pq_loc);
343 val = sync_load(&rt->pcount, SYNC_RELAXED);
348 rc = photon_pwc_test_ledger(proc, &offset);
350 req = sync_two_lock_queue_dequeue(rt->pwc_q);
351 rc = photon_pwc_try_ledger(req, offset);
353 dbg_err(
"Could not send queued PWC request");
356 sync_fadd(&rt->pcount, -1, SYNC_RELAXED);
357 sync_fadd(&qcount, -1, SYNC_RELAXED);
363 sync_tatas_release(&rt->pq_loc);
368 sync_tatas_release(&rt->pq_loc);
372 sync_tatas_release(&rt->pq_loc);
376 static int photon_pwc_try_gwc_pwc(
photonRequest req,
int offset) {
380 uint64_t asize, rsize, imm_data = 0;
381 uintptr_t eager_addr;
386 dbg_trace(
"Performing GWC-PUT for req: 0x%016lx", req->id);
389 req->local_info.buf.size = req->size;
390 req->remote_info.buf.size = req->size;
393 req->rattr.events = 1;
401 eager_addr = (uintptr_t)eb->remote.addr + offset;
412 dptr = (
void*)((uintptr_t)hdr +
sizeof(*hdr));
413 memcpy(dptr, (
void*)&req->local_info.buf,
sizeof(req->local_info.buf));
416 dptr +=
sizeof(req->local_info.buf);
417 memcpy(dptr, (
void*)&req->remote_info.buf,
sizeof(req->remote_info.buf));
420 tail = (uint8_t*)(uintptr_t)((uintptr_t)hdr + asize - 1);
429 rc = be->rdma_put(req->proc, (uintptr_t)hdr, (uintptr_t)eager_addr, asize,
433 dbg_err(
"RDMA PUT (GWC-PUT) failed for 0x%016lx", req->rattr.cookie);
437 dbg_trace(
"Posted GWC-PUT Request: 0x%016lx", req->id);
448 rc = be->rdma_get(req->proc, req->local_info.buf.addr,
449 req->remote_info.buf.addr, req->size,
450 &req->local_info.buf,
451 &req->remote_info.buf,
455 dbg_err(
"RDMA GET (PWC data) failed for 0x%016lx", req->rattr.cookie);
459 dbg_trace(
"Posted GWC Request: %d/0x%016lx/0x%016lx", req->proc,
461 req->remote_info.id);
469 static int photon_pwc_test_gwc_pwc(
int proc,
int *ret_offset) {
477 rc = photon_pwc_test_packed(proc, asize, &offset);
479 *ret_offset = offset;
491 if ((req->size <= 0) ||
498 asize = photon_pwc_packed_asize(req);
501 sync_tatas_acquire(&rt->pack_loc);
503 rc = photon_pwc_test_packed(req->proc, asize, &offset);
506 rc = photon_pwc_try_packed(req, offset);
509 sync_tatas_release(&rt->pack_loc);
514 static int photon_pwc_test_packed(
int proc, uint64_t size,
int *ret_offset) {
523 *ret_offset = offset;
527 static int photon_pwc_try_packed(
photonRequest req,
int offset) {
533 uint64_t asize, imm_data = 0;
534 uintptr_t eager_addr;
541 req->rattr.events = 1;
543 rid = &(req->remote_info.id);
544 rsize = photon_pwc_rcid_size(req);
545 asize = photon_pwc_packed_asize(req);
548 eager_addr = (uintptr_t)eb->remote.addr + offset;
554 hdr->
addr = req->remote_info.buf.addr;
555 hdr->
length = (uint16_t)req->size;
559 dptr = (
void*)((uintptr_t)hdr +
sizeof(*hdr));
561 memcpy(dptr, rid->
data, rsize);
564 memcpy(dptr, &(rid->
u64), rsize);
569 memcpy(dptr, (
void*)req->local_info.buf.addr, req->size);
572 tail = (uint8_t*)(uintptr_t)((uintptr_t)hdr + asize - 1);
581 rc = be->rdma_put(req->proc, (uintptr_t)hdr, (uintptr_t)eager_addr, asize,
585 dbg_err(
"RDMA PUT (PWC EAGER) failed for 0x%016lx", req->rattr.cookie);
589 dbg_trace(
"Posted PWC Request: %d/0x%016lx/0x%016lx", req->proc,
591 req->remote_info.id);
602 sync_tatas_acquire(&rt->pq_loc);
604 rc = photon_pwc_test_ledger(req->proc, &offset);
606 rc = photon_pwc_try_ledger(req, offset);
609 sync_tatas_release(&rt->pq_loc);
613 static int photon_pwc_test_ledger(
int proc,
int *ret_offset) {
625 static int photon_pwc_try_ledger(
photonRequest req,
int curr) {
629 uint64_t imm_data = 0;
630 int rc, iflag, rflags;
633 req->rattr.events = 1;
636 if (!req->local_info.buf.priv.key0 && !req->local_info.buf.priv.key1) {
638 req->size, &db) != 0) {
639 log_err(
"Tried posting from a buffer that's not registered");
642 req->local_info.buf.priv = db->bint.buf.priv;
652 req->rattr.events = 2;
658 rc = be->rdma_put(req->proc,
659 req->local_info.buf.addr,
660 req->remote_info.buf.addr,
662 &req->local_info.buf,
663 &req->remote_info.buf,
668 dbg_err(
"RDMA PUT (PWC data) failed for 0x%016lx", req->rattr.cookie);
680 (curr * l->entry_size));
682 photon_pwc_pack_cid(req, entry);
693 rc = be->rdma_put(req->proc, (uintptr_t)entry, rmt_addr,
694 sizeof(*entry)+entry->hdr.size,
696 &(l->remote), req->rattr.cookie,
700 dbg_err(
"RDMA PUT (PWC comp) failed for 0x%016lx", req->rattr.cookie);
705 dbg_trace(
"Posted PWC Request: %d/0x%016lx/0x%016lx/0x%016lx", req->proc,
708 req->remote_info.id);
717 comp_q = sync_two_lock_queue_new();
719 log_err(
"Could not allocate PWC completion queue");
725 log_err(
"Could not allocate PWC recv acct buffers");
734 pwc_ctype_handler_table[i] = NULL;
744 pwc_ctype_handler_table[type] = handler;
745 dbg_trace(
"Registered ctype %d handler %p", type, handler);
750 sync_two_lock_queue_enqueue(comp_q, req);
751 dbg_trace(
"Enqueing completed request: 0x%016lx", req->id);
756 return sync_two_lock_queue_dequeue(comp_q);
762 photon_cid local, photon_cid remote,
769 dbg_trace(
"(%d, size: %lu, lid: 0x%016lx, rid: 0x%016lx, flags: %d)", proc,
770 size, local.
u64, remote.
u64, flags);
773 log_err(
"Local CID size is larger than configured max: %d/%d",
779 log_err(
"Remote CID size is larger than configured max: %d/%d",
785 log_err(
"Trying to put size %lu and NULL lbuf", size);
790 log_err(
"Trying to put size %lu and NULL rbuf", size);
795 dbg_warn(
"Nothing to send and no remote completion requested!");
801 dbg_err(
"Could not allocate request");
806 req->chdr.type = type;
808 req->local_info.id = local;
809 req->remote_info.id = remote;
811 photon_pwc_save_lcid(req);
819 if (flags & PHOTON_REQ_PWC_NO_RCE) {
821 return photon_pwc_try_ledger(req, 0);
827 rc = photon_pwc_process_queued_pwc(proc, rt);
834 rc = photon_pwc_safe_packed(req);
836 rc = photon_pwc_safe_ledger(req);
844 sync_two_lock_queue_enqueue(rt->pwc_q, req);
845 sync_fadd(&rt->pcount, 1, SYNC_RELAXED);
846 sync_fadd(&qcount, 1, SYNC_RELAXED);
847 dbg_trace(
"Enqueued PWC request: 0x%016lx", req->id);
857 photon_cid local, photon_cid remote,
867 dbg_trace(
"(%d, size: %lu, lid: 0x%016lx, rid: 0x%016lx, flags: %d)", proc,
868 size, local.
u64, remote.
u64, flags);
871 log_err(
"Local CID size is larger than configured max: %d/%d",
877 log_err(
"Remote CID size is larger than configured max: %d/%d",
883 log_err(
"Tring to get size %lu and NULL rbuf", size);
888 dbg_warn(
"Nothing to get and no remote completion requested!");
893 nlbuf.
addr = lbuf->addr;
894 nlbuf.
size = lbuf->size;
895 nlbuf.
priv = lbuf->priv;
899 log_err(
"Tried get into a buffer that's not registered");
902 nlbuf.
priv = db->bint.buf.priv;
907 dbg_trace(
"Could not setup direct buffer request");
912 req->chdr.type = type;
914 req->local_info.id = local;
915 req->remote_info.id = remote;
917 photon_pwc_save_lcid(req);
925 if (! (flags & PHOTON_REQ_PWC_NO_RCE)) {
936 aok = photon_pwc_check_gwc_align(req->proc,
937 &req->local_info.buf,
938 &req->remote_info.buf,
943 rc = photon_pwc_process_queued_gwc(proc, rt);
949 goto queue_gwc_pwc_exit;
955 rc = be->tx_size_left(proc);
959 rc = photon_pwc_try_gwc(req);
964 sync_tatas_acquire(&rt->pack_loc);
966 rc = photon_pwc_test_gwc_pwc(proc, &offset);
968 sync_tatas_release(&rt->pack_loc);
969 goto queue_gwc_pwc_exit;
971 rc = photon_pwc_try_gwc_pwc(req, offset);
973 sync_tatas_release(&rt->pack_loc);
979 sync_two_lock_queue_enqueue(rt->gwc_q, req);
980 sync_fadd(&rt->gcount, 1, SYNC_RELAXED);
981 sync_fadd(&qcount, 1, SYNC_RELAXED);
982 dbg_trace(
"Enqueued GWC request: 0x%016lx", req->id);
986 sync_two_lock_queue_enqueue(rt->gwc_pwc_q, req);
987 sync_fadd(&rt->gpcount, 1, SYNC_RELAXED);
988 sync_fadd(&qcount, 1, SYNC_RELAXED);
989 dbg_trace(
"Enqueued GWC-PWC request: 0x%016lx", req->id);
996 static int photon_pwc_probe_local(
int proc,
int *flag, photon_cid *c,
997 void (*cb)(photon_cid)) {
1005 photon_pwc_handle_comp_req(req, flag, c, cb);
1011 dbg_err(
"Error getting event, rc=%d", rc);
1022 photon_pwc_handle_comp_req(req, flag, c, cb);
1026 dbg_trace(
"PWC probe handled non-completion event: 0x%016lx", cookie);
1039 static inline int photon_pwc_handle_pooo(
photonEagerBuf eb,
int proc,
1040 int offset,
int size) {
1042 uint64_t prog = sync_load(&(eb->prog), SYNC_RELAXED);
1043 int p = prog & (eb->size - 1);
1045 pbufs[proc][offset] =
size;
1052 iter = (iter+val) & (eb->size - 1);
1053 left = eb->size - iter;
1058 val = pbufs[proc][iter];
1060 sync_store(&pbufs[proc][iter], 0, SYNC_RELAXED);
1064 sync_fadd(&eb->prog, padd, SYNC_RELAXED);
1070 static inline int photon_pwc_handle_looo(
photonLedger l, uint64_t imm,
1071 photon_cid *comp,
int do_comp,
int *src,
1072 void (*cb)(photon_cid),
int *flag) {
1089 int count = sync_addf(&(rhdr->
cnt), 1, SYNC_RELAXED);
1094 comp->
data = (
void*)le->data;
1095 sync_store(&(rhdr->
cnt), 0, SYNC_RELAXED);
1108 int count = sync_addf(&(rhdr->
cnt), 1, SYNC_RELAXED);
1111 sync_store(&(rhdr->
cnt), 0, SYNC_RELAXED);
1127 log_err(
"Could not lookup saved request ID");
1139 *flag = *flag && do_comp;
1147 if (*flag && (comp->
size ==
sizeof(comp->
u64))) {
1148 comp->
u64 = *(uint64_t*)comp->
data;
1153 uint64_t prog = sync_load(&(l->prog), SYNC_RELAXED);
1157 sync_store(&(rhdr->
cnt), -1, SYNC_RELAXED);
1167 val = sync_load(&(le->rhdr.cnt), SYNC_RELAXED);
1169 sync_store(&(le->rhdr.cnt), 0, SYNC_RELAXED);
1174 sync_fadd(&(l->prog), padd, SYNC_RELAXED);
1177 dbg_trace(
"Popped ledger event with id: 0x%016lx (%lu)",
1183 static inline int photon_pwc_advance_ledger(
photonLedger l, photon_cid *comp,
int do_comp,
1184 void (*cb)(photon_cid),
int *flag) {
1188 *flag = *flag && do_comp;
1196 if (*flag && (comp->
size ==
sizeof(comp->
u64))) {
1197 comp->
u64 = *(uint64_t*)comp->
data;
1202 sync_fadd(&(l->prog), 1, SYNC_RELAXED);
1204 dbg_trace(
"Popped ledger event with id: 0x%016lx (%lu)",
1210 static int photon_pwc_probe_ledger(
int proc,
int *flag, photon_cid *comp,
1211 int *src,
void (*cb)(photon_cid)) {
1219 int i, rc, start, end, lead, etype, pos = -1;
1220 int scan_packed = 1, scan_ledger = 1;
1234 return photon_pwc_handle_looo(ledger, imm, comp, 1, src, cb, flag);
1265 uint64_t offset, curr,
new, left;
1266 for (i=start; i<end; i++) {
1270 curr = sync_load(&eb->curr, SYNC_RELAXED);
1275 offset = curr & (eb->size - 1);
1276 left = eb->size - offset;
1287 if ((hdr->
header == UINT8_MAX) && (hdr->
footer == UINT8_MAX)) {
1289 uintptr_t addr = hdr->
addr;
1290 uint16_t size = hdr->
length;
1292 void *cidptr = (
void*)(uintptr_t)hdr +
sizeof(*hdr);
1293 void *payload = (
void*)(uintptr_t)hdr +
sizeof(*hdr) + cent->
size;
1294 if (sync_cas(&eb->curr, &curr,
new+asize, SYNC_RELAXED, SYNC_RELAXED)) {
1296 volatile uint8_t *tail = (uint8_t*)(uintptr_t)((uintptr_t)hdr + asize - 1);
1297 while (*tail != UINT8_MAX)
1301 photon_pwc_process_command(i, NULL, cent, cidptr, addr, size, payload);
1304 memcpy((
void*)addr, payload, size);
1306 comp->
data = cidptr;
1315 if (comp->
size ==
sizeof(comp->
u64)) {
1316 comp->
u64 = *(uint64_t*)comp->
data;
1320 dbg_trace(
"Copied message of size %u into 0x%016lx for request 0x%016lx",
1321 size, addr, comp->
u64);
1324 memset((
void*)hdr, 0, asize);
1327 photon_pwc_handle_pooo(eb, i, offset, asize);
1330 sync_store(&eb->prog,
new+asize, SYNC_RELAXED);
1341 curr = sync_load(&ledger->curr, SYNC_RELAXED);
1346 offset = curr & (ledger->num_entries - 1);
1351 sync_cas(&ledger->curr, &curr, curr+1, SYNC_RELAXED, SYNC_RELAXED)) {
1352 uint16_t type = entry->hdr.type;
1353 comp->
size = entry->hdr.size;
1354 comp->
data = (
void*)entry->data;
1360 photon_pwc_process_command(i, &entry->rhdr, &entry->hdr,
1361 entry->data, 0, 0, NULL);
1369 photon_pwc_handle_looo(ledger, imm, comp, user, (
int*)&offset, cb, flag);
1372 photon_pwc_advance_ledger(ledger, comp, user, cb, flag);
1381 log_err(
"Missing RCQ lookup: %d, %d", scan_packed, scan_ledger);
1391 photon_cid *comp,
int *src,
1392 void (*cb)(photon_cid),
int flags) {
1400 rc = photon_pwc_probe_local(proc, flag, comp, cb);
1412 rc = photon_pwc_probe_ledger(proc, flag, comp, src, cb);
1422 int rcs, *peers, pcount;
1426 dbg_warn(
"Could not get shmem peers");
1429 for (i=0; i<pcount; i++) {
1430 rc = photon_pwc_probe_ledger(peers[i], flag, comp, src, cb);
1443 uint32_t cnt = sync_load(&qcount, SYNC_RELAXED);
1461 dbg_trace(
"%d requests remaining", *remaining);
int _photon_get_with_completion(int proc, uint64_t size, photonBuffer lbuf, photonBuffer rbuf, photon_cid local, photon_cid remote, int flags, pwc_cid_type type, pwc_command cmd)
photonLedger remote_pwc_ledger
int __photon_get_event(int proc, photon_rid *id)
Convenience pointer type for the buffer structure.
int __photon_get_revent(int proc, photon_rid *id, uint64_t *imm)
uint32_t size
Size 0 indicates u64 field is used, otherwise data pointer is used.
photonRequest photon_lookup_request(photon_rid rid)
#define PHOTON_EVENT_REQCOMP
#define PHOTON_ORDER_NONE
Do not assume anything about the ordering of completion IDs.
The Photon completion ID used by the PWC API.
photonLedger local_pwc_ledger
photonBufferHandle shared_storage
photonRequest photon_pwc_pop_req(int proc)
int photon_count_request(int proc)
int __photon_handle_cq_event(photonRequest req, photon_rid cookie, photonRequest *rreq)
struct photon_buffer_handle_t * photonBufferHandle
int photon_pwc_register_ctype_handler(pwc_cid_type type, void *handler)
photonRequest photon_setup_request_direct(photonBuffer lbuf, photonBuffer rbuf, uint64_t size, int proc, int events)
int photon_coll_probe(int proc, int *flag, photon_cid *comp)
photonBackend __photon_shmem
photonRequestTable request_table
struct photon_cid_ledger_entry_t * photonCIDLedgerEntry
struct photon_req_table_t * photonRequestTable
uint64_t photon_rid
The Photon request ID.
photonBackend __photon_fabric
#define ENCODE_RCQ_32(t, l, f, c, p)
#define PHOTON_ANY_SOURCE
RNDV and PWC flag: return completions from any source.
photonEagerBuf local_pwc_buf
#define PHOTON_EFLAG_LEDG
#define REQUEST_FLAG_1PWC
struct photon_buffer_priv_t priv
THe associated private buffer information.
#define REQUEST_COOK_GPWC
#define PHOTON_EVENT_NOTIMPL
#define RDMA_FLAG_WITH_IMM
#define PHOTON_REQ_PWC_NO_RCE
PWC flag: do not send a remote completion ID.
int photon_rdma_eager_buf_get_offset(int proc, photonEagerBuf buf, int size, int lim)
#define DECODE_RCQ_32_CURR(v)
struct photon_req_t * photonRequest
ProcessInfo * photon_processes
#define DECODE_RCQ_32_TYPE(v)
#define PHOTON_EVENT_NONE
#define PHOTON_ERROR
Error code, general error.
int photon_free_request(photonRequest req)
void * data
Pointer to user-defined completion ID data.
uint64_t size
The size of the buffer in bytes.
#define PHOTON_ETYPE_DATA
#define PHOTON_REQ_PWC_NO_LCE
PWC flag: probe will not return a local completion ID.
photonEagerBuf remote_pwc_buf
#define PHOTON_ETYPE_NTFY
#define PHOTON_OK
Photon success code.
int photon_rdma_ledger_get_next(int proc, photonLedger l)
int _photon_put_with_completion(int proc, uint64_t size, photonBuffer lbuf, photonBuffer rbuf, photon_cid local, photon_cid remote, int flags, pwc_cid_type type, pwc_command cmd)
#define PHOTON_EFLAG_PACK
int buffertable_find_containing(void *addr, uint64_t size, photonBufferHandle *result)
#define REQUEST_FLAG_NO_LCE
uint64_t u64
Unsigned 64b representation of the ID.
#define PHOTON_ERROR_RESOURCE
Error code, resource not available.
struct photon_rdma_ledger_t * photonLedger
#define REQUEST_FLAG_NO_RCE
#define DECODE_RCQ_32_LEAD(v)
struct photon_cid_recv_ledger_entry_t * photonCIDRecvLedgerEntry
#define PHOTON_EVENT_ERROR
int photon_pwc_init(photonConfig cfg)
#define PHOTON_CID_RECV_ENTRY_SIZE
#define PHOTON_PROBE_LEDGER
PWC probe flag: return only ledger completion IDs.
int photon_pwc_add_req(photonRequest req)
#define DECODE_RCQ_32_FLAG(v)
int _photon_probe_completion(int proc, int *flag, int *remaining, photon_cid *comp, int *src, void(*cb)(photon_cid), int flags)
#define PHOTON_EVENT_REQFOUND
#define PHOTON_PROBE_EVQ
PWC probe flag: return only local (event queue) IDs.
uintptr_t addr
The base address of the buffer.
#define DECODE_RCQ_32_PROC(v)
#define REQUEST_FLAG_2PWC
struct photon_rdma_eager_buf_t * photonEagerBuf