static int usdf_get_devinfo(void) { struct usdf_usnic_info *dp; struct usdf_dev_entry *dep; struct usd_open_params params; int ret; int d; assert(__usdf_devinfo == NULL); dp = calloc(1, sizeof(*dp)); if (dp == NULL) { ret = -FI_ENOMEM; goto fail; } __usdf_devinfo = dp; dp->uu_num_devs = USD_MAX_DEVICES; ret = usd_get_device_list(dp->uu_devs, &dp->uu_num_devs); if (ret != 0) { dp->uu_num_devs = 0; goto fail; } for (d = 0; d < dp->uu_num_devs; ++d) { dep = &dp->uu_info[d]; memset(¶ms, 0, sizeof(params)); params.flags = UOPF_SKIP_PD_ALLOC; params.cmd_fd = -1; params.context = NULL; ret = usd_open_with_params(dp->uu_devs[d].ude_devname, ¶ms, &dep->ue_dev); if (ret != 0) { continue; } ret = usd_get_device_attrs(dep->ue_dev, &dep->ue_dattr); if (ret != 0) { continue; } dep->ue_dev_ok = 1; /* this device is OK */ usd_close(dep->ue_dev); dep->ue_dev = NULL; } return 0; fail: return ret; }
static int usdf_get_devinfo(void) { struct usdf_usnic_info *dp; struct usdf_dev_entry *dep; int ret; int d; assert(__usdf_devinfo == NULL); dp = calloc(1, sizeof(*dp)); if (dp == NULL) { ret = -FI_ENOMEM; goto fail; } __usdf_devinfo = dp; dp->uu_num_devs = USD_MAX_DEVICES; ret = usd_get_device_list(dp->uu_devs, &dp->uu_num_devs); if (ret != 0) { dp->uu_num_devs = 0; goto fail; } for (d = 0; d < dp->uu_num_devs; ++d) { dep = &dp->uu_info[d]; ret = usd_open_for_attrs(dp->uu_devs[d].ude_devname, &dep->ue_dev); if (ret != 0) { continue; } ret = usd_get_device_attrs(dep->ue_dev, &dep->ue_dattr); if (ret != 0) { continue; } dep->ue_dev_ok = 1; /* this device is OK */ usd_close(dep->ue_dev); dep->ue_dev = NULL; } return 0; fail: return ret; }