Summary: 274 instances, 234 unique Text Count /* TODO: make sure we're unconnected. */ 1 static const uint64_t FI_BGQ_MAX_NUM_EP = (1ULL<<10); // TODO: is it needed? 1 struct l2atomic_fifo_producer * fifo = &bgq_ep->rx.post.match[0]; /* TODO - use enum */ 1 /*TODO: If addr is used, ensure that ep->info->addr_format is checked*/ 1 /* TODO reorganize ack (with rzv) for better cache layout */ 1 // TODO set one of srq sge or regular sge based on hints? 1 bgq_context->buf = NULL; /* TODO */ 1 //TODO implement dynamic AV sizing 1 * TODO: Report error (via CQ err?) 1 entry->cse_buf = 0; /* XXX TODO */ 1 * TODO: better cleanup in error case 1 /* TODO counter update model */ 1 * TODO: xpmem setup here 1 // TODO add other completion flags 1 /* TODO report error? */ 1 bgq_context->flags = 0; /* TODO */ 2 //TODO: add base address from mrail_mr 1 * TODO: use domain parameters to adjust these 1 * TODO: dlist_insert_sorted for fragmentation reduction. 1 * TODO: do we need a destructor callback for mr cache? 1 * TODO: Add support for wait/signal until all pending messages 1 * TODO: Better implementation for rx/work/tx VC scheduling. */ 1 /* TODO: use special send-to-self mechanism to avoid overhead of XPMEM 1 fi_bgq_cq_enqueue_completed(bgq_ep->recv_cq, context, 0); /* TODO - IS lock required? */ 2 /* TODO: Remove in favor of accessing op flags through 1 * TODO: optimization would 1 /* TODO: generate cq_err if RMA read fails */ 2 assert((flags & (FI_PEEK | FI_CLAIM)) != FI_CLAIM); /* TODO - why not? */ 1 /* TODO convert this to poll + fi_eq_read so that we can grab 1 struct slist_entry s_entry;//TODO - keep both or make separate tx/rx pkt structs 1 /* TODO: Add locking around param_list when adding dynamic removal */ 1 /* TODO: Unify send&sendv/recv&recvv, so data will be 1 fi_desc->rma.key_msb = 0; /* TODO - change this when key size > 48b */ 1 desc = &bgq_ep->tx.send.rzv_model[1]; /* "intranode" */ /* TODO - use an enum */ 1 for (i=0; i<64; ++i) { /* TODO - check this array size */ 1 for (i=0; i<64; ++i) { /* TODO - check this array size */ 1 /* TODO: need support for finalize operation to sync test */ 1 * Name Server TODO: add support for Windows OS 1 struct fi_bgq_ep *ep[64]; /* TODO - check this array size */ 2 // TODO use buf pool 1 /* TODO: report the addr/len of the whole write */ 2 /* TODO: optimize to save space by using a union to combine the two 1 * TODO: We can't free the rx_entry as we may receive additional 1 // TODO remove this and modify unexp msg handling path to not repost 1 /* TODO: clean up this cm_nic */ 1 * TODO: Initialize peer state at the time of AV insertion 1 uint64_t caps = attr->caps; /* TODO - "By default, a transmit context inherits the properties of its associated endpoint. However, applications may request context specific attributes through the attr parameter." */ 1 fi->ep_attr->rx_ctx_cnt = hints->ep_attr->rx_ctx_cnt; /* TODO - check */ 1 /* TODO: should we skip addresses x.x.x.0 and x.x.x.255? */ 1 * TODO MPICH CH3 doesn't work with verbs provider without skipping the 1 * TODO: add NACK message to tear down receive side state 1 * TODO - reorganize fi_bgq structures and implement a slimmed down version of 1 /* TODO: what msg orders do we not support? */ 1 * TODO: Lock in __gnix_buddy_split and allow __gnix_buddy_find_block to run 1 /* TODO: cur_rx_msg.hdr_len is initialized in some non-obvious place */ 1 * TODO: make this a domain parameter 1 /* TODO: use control structure to select counter bindings explicitly */ 1 /* TODO: This is limiting and restricts applications to using 1 fi_bgq_cq_enqueue_completed(bgq_ep->recv_cq, context, 0); /* TODO - IS lock required? */ 2 /* TODO return error */ 1 /* TODO: gnix_buddy_alloc_handle_t *alloc_handle */ 1 // TODO figure out how to remove this now that we have ini/fini calls 1 /* TODO: optimize it & guarantee buffered */ 1 // TODO add regular process comp when FI_BUFFERED_RECV not set 1 if (FI_BGQ_FABRIC_DIRECT_PROGRESS == FI_PROGRESS_MANUAL) { /* constant expression will compile out */ /* TODO FI_PROGRESS_AUTO + 64 ppn */ 1 /* TODO: have to handle this */ 1 * TODO - support >32 iov elements? 1 * TODO: better to use a buddy allocator or some other 1 * TODO: add a NACK message to tear down state on sender side 1 * TODO - this code is buggy and results in a hang at job completion for 'cpi' 1 return -FI_ENOSYS; /* TODO - implement this */ 15 * TODO should we do something similar for IPv4? */ 1 MUSPI_GetAtomicAddress(0, MUHWI_ATOMIC_OPCODE_STORE_ADD)); /* TODO - init */ 1 return -FI_EINVAL; /* TODO: should try to do 1 /* TODO: verify CQ data, if available */ 2 * TODO: Should we put it at the beginning of the work Q? */ 1 /* TODO: Should this be -FI_ENOMEM - how does it get 1 // TODO cleanup recv_list and unexp msg list 1 assert((key[i] & 0xFFFF000000000000ul) == 0); /* TODO - change this when key size > 48b */ 1 // TODO detect changes b/w mrail_domain->info and info arg 1 /* TODO: Handle errors besides FI_EAGAIN */ 1 fi_bgq_cq_enqueue_pending(bgq_ep->recv_cq, context, 0); /* TODO - IS lock required? */ 2 pkt->hdr.pt2pt.rendezvous.rget_inj_fifo_id; /* TODO - different rget inj fifos for tag vs msg operations? */ 1 fi->ep_attr->tx_ctx_cnt = hints->ep_attr->tx_ctx_cnt; /* TODO - check */ 1 /*TODO (optimization): Just return offset into ep_name */ 1 * TODO: temporary solution 1 /* TODO - OPTIMIZE - round-robin the fifo picking based on destination */ 1 bgq_context->flags = 0; /* TODO */ 1 * TODO: this can eventually be used in more places in this 1 struct ofi_mr_map mr_map;//TODO use util_domain mr_map instead 1 * TODO: need to post error to CQ 1 /* TODO: use util code, if possible, and add ref counting */ 1 * TODO: Check to see if underlying device can support CUDA 1 * TODO: need to be able to enqueue events on to the 1 * TODO: Find a better solution for finding the address of a buddy block. 1 /* #undef HAVE_ATOMICS */ /* TODO: add atomics support for windows */ 1 /* TODO: If the write call fails, then roll back the EQ entry. 1 * TODO: Add better management of tx_attr/rx_attr to getinfo and dgram 1 /* TODO should this be fatal? A request will sit waiting at the 1 if (FI_BGQ_FABRIC_DIRECT_PROGRESS == FI_PROGRESS_MANUAL) { /* branch will compile out */ /* TODO - FI_PROGRESS_AUTO + 64 ppn */ 2 /* TODO convert this call to non-blocking (use event channel) as well: 1 /* TODO: handle possible overflow */ 1 * TODO: need to handle non null addr differently at some point, 1 // TODO write cq error entry 1 * TODO: Move selection of XRC/RC to endpoint info from domain */ 1 /*TODO (optimization): strchr to name_type and strtol */ 1 /* TODO: when this fails, clean up the already scheduled work in this function */ 1 /* TODO - is this an error or something? */ 1 uint16_t reserved; /* TODO: this should be the msg len */ 1 /* list nics this domain is attached to, TODO: thread safety */ 1 //TODO fill in more fields? Selective ack? 1 /* TODO: Should this be the sender's rndzv thresh instead? */ 1 * @TODO - Support shared named AVs 1 struct l2atomic_fifo_producer * fifo = &bgq_ep->rx.post.match[1]; /* TODO - use enum */ 1 fi_bgq_cq_enqueue_completed(bgq_ep->recv_cq, context, 0); /* TODO - IS lock required? */ 1 if (do_cntr) { /* likely -- TODO: change to *always* do a counter update?? */ 1 // TODO make rxm send buffered recv amount of data for large message 1 * TODO: Do we need to do this for sendv? 1 fi_addr_t *addr = (fi_addr_t *)malloc(sizeof(fi_addr_t)*ep_count); /* TODO - mmap this into shared memory */ 1 /* TODO - msync? */ 1 /* TODO return error */ 4 /* TODO: make sure this fits in tx_buf and rx_buf */ 1 bgq_context->buf = NULL; /* TODO */ 1 #define VRB_BUF_ALIGNMENT (4096) /* TODO: Page or MTU size */ 1 /* TODO: update inject_size when we implement inject */ 1 /* TODO I can probably do this in a single sweep, avoiding a second 1 MUSPI_GetAtomicAddress(0, MUHWI_ATOMIC_OPCODE_STORE_ADD)); /* TODO - init */ 1 /* TODO: Add a local finalize applicable to shared ctx */ 1 bgq_ep->rx.poll.rzv.rget_model[1] = *desc; /* TODO - use an enum */ 1 /* TODO: check other MPI */ 2 /* TODO: more error checking of rx_attr */ 1 return NULL; /* TODO - implement this */ 2 } rzv __attribute((aligned(L2_CACHE_LINE_SIZE))); /* TODO reorganize rzv for better cache layout */ 1 /* TODO Wait for more bytes. */ 1 * TODO: hardwired constants, uff 1 attr->max_ep_srx_ctx = 0; /* TODO - reserve some mu reception fifos for use as shared receive context ... how to address? */ 1 void poll_cfifo (struct fi_bgq_ep * bgq_ep, const unsigned is_manual_progress) { /* TODO - make no inline */ 1 /* TODO: check other fields of hints */ 1 * TODO: Once we start using a core's selective completion capability, 1 bgq_context->buf = NULL; /* TODO */ 1 * TODO: really need to process CQEs better for error reporting, 1 attr->ep_cnt = 1; /* TODO - what about endpoints that only use a shared receive context and a shared transmit context? */ 1 * TODO: is there a race condition here for multi-threaded? 1 /* TODO ..... */ 1 * TODO: slab should be freed when entries in the slab drop to zero, 1 bgq_ep->rx.poll.atomic_cntr_update_model[1] = *desc; /* internode .. TODO - use an enum */ 1 /* TODO: revisit these values, these are just placeholders now */ 1 * TODO: We can't free the tx_entry as we may receive a control packet 1 // TODO define cq strerror, may need to pass rail index 1 /*TODO: Add a local finalize applicable for scalable ep */ 1 * TODO remove this and include ofi_osd.h which would require merging osd.h 1 /* TODO - set an "is clone" variable to remeber not to free this */ 1 * TODO: sanity check that requested base is reasonable 1 /*TODO: Handle erroneous case "result->Status != S_OK" */ 1 /* TODO: more error checking of tx_attr */ 1 /* TODO: 1 * TODO: In future we will send RECV_CANCEL signal to sender, 1 #define MAX_ENDPOINTS (128) /* TODO - get this value from somewhere else */ 1 * TODO should we also pass pending,remote_data states to 1 * TODO: add FI_MR_LOCAL to mr_mode for any applcations 1 /* TODO: The timeout handling seems off on this one. */ 1 * TODO: Disable the EQ. 1 /* TODO: Add version check when we decide on how to do it */ 1 return 0; /* TODO - implement this */ 1 /* TODO: ep_priv->domain->params.ct_max_size; */ 1 MUHWI_Descriptor_t * desc = &bgq_ep->rx.poll.ack_model[0]; /* TODO - use an enum */ 1 * TODO: Allow __gnix_buddy_coalesce to run concurrently and return to 1 if (FI_BGQ_FABRIC_DIRECT_PROGRESS == FI_PROGRESS_MANUAL) { /* constant expression will compile out */ /* TODO FI_PROGRESS_AUTO + 64 ppn */ 1 /* TODO: handle this. */ 1 MUHWI_Descriptor_t * desc = &bgq_ep->rx.poll.rzv.rget_model[0]; /* TODO - use an enum */ 1 * TODO: handle the case where a single process opens multiple domains 1 if (len) memcpy(payload_vaddr, buf, len); /* TODO use a qpx-optimized memcpy instead */ 1 /* TODO: separate the different operations to optimize performance */ 1 // TODO move to common code 1 /* TODO: retry send for unreliable endpoints */ 2 struct usd_device_attrs ud_attrs; /* TODO move this to usd_ctx */ 1 // TODO find which other modes should be filtered 1 /* TODO: Add support for true FI_DELIVERY_COMPLETE */ 1 .name = NULL, /* TODO: runtime query for name? */ 1 // TODO explore adding a common hook_ini function that can initialize 1 * TODO: Use buddy allocator with max alloc lim of 1 pep_priv->backlog = 5; /* TODO set via fi_control parameter. */ 1 * TODO: really need to search bitmap for clear 1 /* TODO: This isn't thread safe -- neither are start/stop */ 1 /* TODO if it's more optimal to insert multiple addresses at once 1 * TODO: temporary solution 3 * TODO: need work here too! 1 size_t total_buffered_recv; /* TODO - is this only used by receive operations? */ 1 * nic struct was supplied. TODO: a lot more error 1 struct fi_bgq_ep *ep[64]; /* TODO - check this array size */ 1 // TODO go for separate recv functions (recvmsg, recvv, etc) to be optimal 1 * TODO: remove me once RxR supports resizing members tied to the AV 1 /* TODO: Buddy alloc */ 1 /* TODO: Handle FI_READ */ 1 desc = &bgq_ep->rx.poll.atomic_cntr_update_model[0]; /* intranode .. TODO - use an enum */ 1 * TODO - better assignment algorithm 1 /* TODO: Add version check when we decide on how to do it */ 1 MUHWI_Descriptor_t * desc = &bgq_ep->rx.poll.rzv.dput_model[0]; /* TODO - use an enum */ 1 //TODO: add base address from mrail_addr_key 1 bgq_ep->rx.poll.ack_model[1] = *desc; /* TODO - use an enum */ 1 case FI_CLASS_MR:/*TODO: got to figure this one out */ 1 /* TODO: Determine if aligning SMR data helps performance */ 1 fi_bgq_progress_init(bgq_domain, 64/ppn - 1); /* TODO - what should the "max threads" be? */ 1 fi_bgq_set_default_info(); // TODO: fold into fi_bgq_set_defaults 1 bgq_context->flags = 0; /* TODO */ 1 * TODO: need to define the other msg/rma/amo methods for tx/rx contexts 1 /* TODO: need to add msg_id -> tx_id/rx_id mapping */ 2 /* TODO - how to specify multiple remote injection fifos? */ 1 domain->cdm_id_seed = getpid(); /* TODO: direct syscall better */ 1 /* TODO: if optimization will be needed, we can use adapter->MaxInitiatorSge, 2 struct fi_bgq_ep *ep[64]; /* TODO - check this array size */ 1 struct l2atomic_fifo_producer match[2]; /* 0 == 'tag', 1 == 'msg' */ /* TODO - use an enum */ 1 return -FI_ENOSYS; /* TODO - implement this */ 1 // TODO handle variable length message 1 // TODO check for AF_IB addr 1 /* TODO: check caps, mode */ 1 /* TODO - if this is a FI_CLASS_STX_CTX, then the lock is required */ 6 /* TODO: Handle mmap - shared AV */ 1 /* TODO - other cleanup */ 1 /* TODO: dump /proc/self/maps ? */ 1 /* TODO */ 3 * TODO: Support shared named AVs. 1 // TODO create a similar function that won't require pruning ib_rai 1 /* TODO: Figure out requirements for using collectives. 1 if (FI_BGQ_FABRIC_DIRECT_PROGRESS == FI_PROGRESS_MANUAL) { /* TODO - FI_PROGRESS_AUTO + 64 ppn */ 1 * TODO: should be adjustable from domain params 1 desc = &bgq_ep->tx.send.rzv_model[0]; /* "internode" */ /* TODO - use an enum */ 1 /* TODO: should we skip addresses x::0 and x::255? */ 1 // TODO write error to cq 1 * it limits an EQ to a single passive endpoint. TODO: implement 1 bgq_ep->rx.poll.rzv.dput_model[1] = *desc; /* TODO - use an enum */ 1 uint64_t caps = attr->caps; /* TODO - "By default, a receive context inherits the properties of its associated endpoint. However, applications may request context specific attributes through the attr parameter." */ 1 else { /* TODO add warning here */ 1 /* TODO Some iWarp HW may support immediate data as per RFC 7306 1