Esempio n. 1
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)
{

	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;
}
Esempio n. 2
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;
}