static int map_reverse_lookup(struct gnix_fid_av *int_av, struct gnix_address gnix_addr, fi_addr_t *fi_addr) { GNIX_HASHTABLE_ITERATOR(int_av->map_ht, iter); struct gnix_av_addr_entry *entry; while ((entry = _gnix_ht_iterator_next(&iter))) { if (GNIX_ADDR_EQUAL(entry->gnix_addr, gnix_addr)) { *fi_addr = GNIX_HASHTABLE_ITERATOR_KEY(iter); return FI_SUCCESS; } } return -FI_ENOENT; }
static int map_reverse_lookup(struct gnix_fid_av *av_priv, struct gnix_address gnix_addr, fi_addr_t *fi_addr) { GNIX_HASHTABLE_ITERATOR(av_priv->map_ht, iter); struct gnix_av_addr_entry *entry; fi_addr_t rx_addr; while ((entry = _gnix_ht_iterator_next(&iter))) { /* * for SEP endpoint entry we may have a delta in the cdm_id * component of the address to process */ if ((entry->name_type & GNIX_EPN_TYPE_SEP) && (entry->gnix_addr.device_addr == gnix_addr.device_addr)) { int index = gnix_addr.cdm_id - entry->gnix_addr.cdm_id; if ((index >= 0) && (index < entry->rx_ctx_cnt)) { /* we have a match */ memcpy(&rx_addr, &entry->gnix_addr, sizeof(fi_addr_t)); *fi_addr = fi_rx_addr(rx_addr, index, av_priv->rx_ctx_bits); return FI_SUCCESS; } } else { if (GNIX_ADDR_EQUAL(entry->gnix_addr, gnix_addr)) { *fi_addr = GNIX_HASHTABLE_ITERATOR_KEY(iter); return FI_SUCCESS; } } } return -FI_ENOENT; }