static int fi_bgq_getinfo(uint32_t version, const char *node, const char *service, uint64_t flags, struct fi_info *hints, struct fi_info **info) { if (!((FI_BGQ_FABRIC_DIRECT_PROGRESS == FI_PROGRESS_MANUAL) || (FI_BGQ_FABRIC_DIRECT_PROGRESS == FI_PROGRESS_AUTO))){ fprintf(stderr,"BGQ Provider must be configured with either auto or manual progresss mode specified\n"); exit(1); assert(0); } BG_JobCoords_t jobCoords; uint32_t jcrc = Kernel_JobCoords(&jobCoords); if (jobCoords.isSubBlock) { fprintf(stderr,"BGQ Provider cannot be run in a sub-block.\n"); fflush(stderr); exit(1); } int ret; struct fi_info *fi, *prev_fi, *curr; if (!fi_bgq_count) { errno = FI_ENODATA; return -errno; } if (hints) { ret = fi_bgq_check_info(hints); if (ret) { return ret; } if (!(fi = fi_allocinfo())) { return -FI_ENOMEM; } if (fi_bgq_fillinfo(fi, node, service, hints, flags)) { return -errno; } *info = fi; } else { if(node || service) { errno = FI_ENODATA; return -errno; } else { if (!(fi = fi_dupinfo(fi_bgq_global.info))) { return -FI_ENOMEM; } *info = fi; } } return 0; }
static int fi_bgq_getinfo(uint32_t version, const char *node, const char *service, uint64_t flags, struct fi_info *hints, struct fi_info **info) { int ret; struct fi_info *fi, *prev_fi, *curr; if (!fi_bgq_count) { errno = FI_ENODATA; return -errno; } if (hints) { ret = fi_bgq_check_info(hints); if (ret) { return ret; } if (!(fi = fi_allocinfo())) { return -FI_ENOMEM; } if (fi_bgq_fillinfo(fi, node, service, hints, flags)) { return -errno; } *info = fi; } else { if(node || service) { errno = FI_ENODATA; return -errno; } else { curr = fi_bgq_global.info; *info = curr; prev_fi = NULL; do { if (!(fi = fi_dupinfo(curr))) { return -FI_ENOMEM; } if (prev_fi) { prev_fi->next = fi; } prev_fi = fi; curr = curr->next; } while(curr); } } return 0; }