sysinfo.py (openstack-cyborg-8.0.0) | : | sysinfo.py (openstack-cyborg-9.0.0) | ||
---|---|---|---|---|
skipping to change at line 87 | skipping to change at line 87 | |||
glob.glob(PCI_DEVICES_PATH_PATTERN)) | glob.glob(PCI_DEVICES_PATH_PATTERN)) | |||
def get_link_targets(links): | def get_link_targets(links): | |||
return map( | return map( | |||
lambda p: | lambda p: | |||
os.path.realpath( | os.path.realpath( | |||
os.path.join(os.path.dirname(p), os.readlink(p))), | os.path.join(os.path.dirname(p), os.readlink(p))), | |||
links) | links) | |||
def all_fpgas(): | def all_fpgas(): | |||
# glob.glob1("/sys/class/fpga", "*") | # glob.glob("/sys/class/fpga", "*") | |||
return set(get_link_targets(find_fpgas_by_know_list())) | set( | return set(get_link_targets(find_fpgas_by_know_list())) | set( | |||
map(lambda p: p.rsplit("/", 2)[0], | map(lambda p: p.rsplit("/", 2)[0], | |||
get_link_targets(glob.glob(os.path.join(SYS_FPGA, "*"))))) | get_link_targets(glob.glob(os.path.join(SYS_FPGA, "*"))))) | |||
def all_vf_fpgas(): | def all_vf_fpgas(): | |||
return [dev.rsplit("/", 2)[0] for dev in | return [dev.rsplit("/", 2)[0] for dev in | |||
glob.glob(os.path.join(SYS_FPGA, "*/device/physfn"))] | glob.glob(os.path.join(SYS_FPGA, "*/device/physfn"))] | |||
def all_pfs_have_vf(): | def all_pfs_have_vf(): | |||
return list(filter(lambda p: glob.glob(os.path.join(p, "virtfn0")), | return list(filter(lambda p: glob.glob(os.path.join(p, "virtfn0")), | |||
skipping to change at line 117 | skipping to change at line 117 | |||
return dict(map(lambda f: (os.path.basename(f), f), all_fpgas())) | return dict(map(lambda f: (os.path.basename(f), f), all_fpgas())) | |||
def all_vfs_in_pf_fpgas(pf_path): | def all_vfs_in_pf_fpgas(pf_path): | |||
return get_link_targets( | return get_link_targets( | |||
glob.glob(os.path.join(pf_path, "virtfn*"))) | glob.glob(os.path.join(pf_path, "virtfn*"))) | |||
def all_pf_fpgas(): | def all_pf_fpgas(): | |||
return filter(lambda p: glob.glob(os.path.join(p, "sriov_totalvfs")), | return filter(lambda p: glob.glob(os.path.join(p, "sriov_totalvfs")), | |||
all_fpgas()) | all_fpgas()) | |||
def is_vf(path): | ||||
return True if ( | ||||
glob.glob(os.path.join(path, "device/physfn")) or | ||||
glob.glob(os.path.join(path, "physfn"))) else False | ||||
def find_pf_by_vf(path): | ||||
if glob.glob(os.path.join(path, "physfn")): | ||||
return link_real_path(os.path.join(path, "physfn")) | ||||
def is_bdf(bdf): | def is_bdf(bdf): | |||
return True if BDF_PATTERN.match(bdf) else False | return True if BDF_PATTERN.match(bdf) else False | |||
def get_bdf_by_path(path): | def get_bdf_by_path(path): | |||
bdf = os.path.basename(path) | bdf = os.path.basename(path) | |||
if is_bdf(bdf): | if is_bdf(bdf): | |||
return bdf | return bdf | |||
return os.path.basename(os.readlink(os.path.join(path, "device"))) | return os.path.basename(os.readlink(os.path.join(path, "device"))) | |||
def split_bdf(bdf): | ||||
return ["0x" + v for v in bdf.replace(".", ":").rsplit(":")[1:]] | ||||
def get_pf_bdf(bdf): | ||||
paths = glob.glob0(PCI_DEVICES_PATH, bdf) | ||||
if paths: | ||||
p0 = paths[0] | ||||
path = find_pf_by_vf(p0) if is_vf(p0) else p0 | ||||
return get_bdf_by_path(path) | ||||
return bdf | ||||
def get_afu_ids(device_name): | def get_afu_ids(device_name): | |||
return map( | return map( | |||
read_line, | read_line, | |||
glob.glob( | glob.glob( | |||
os.path.join( | os.path.join( | |||
PCI_DEVICES_PATH_PATTERN, "fpga", | PCI_DEVICES_PATH_PATTERN, "fpga", | |||
device_name, "intel-fpga-port.*", "afu_id") | device_name, "intel-fpga-port.*", "afu_id") | |||
) | ) | |||
) | ) | |||
skipping to change at line 205 | skipping to change at line 185 | |||
infos[key] = DEVICE_FILE_HANDLER(key)( | infos[key] = DEVICE_FILE_HANDLER(key)( | |||
os.path.join(dirpath, filename)) | os.path.join(dirpath, filename)) | |||
else: | else: | |||
infos[key] = read_line(os.path.join(dirpath, filename)) | infos[key] = read_line(os.path.join(dirpath, filename)) | |||
return infos | return infos | |||
def fpga_tree(): | def fpga_tree(): | |||
def gen_fpga_infos(path, vf=True): | def gen_fpga_infos(path, vf=True): | |||
bdf = get_bdf_by_path(path) | bdf = get_bdf_by_path(path) | |||
names = glob.glob1(os.path.join(path, "fpga"), "*") | names = glob.glob1(os.path.join(path, "fpga"), "*") | |||
# name = os.path.basename(path) | ||||
fpga = {"type": constants.DEVICE_FPGA, | fpga = {"type": constants.DEVICE_FPGA, | |||
"devices": bdf, "stub": True, | "devices": bdf, "stub": True, | |||
"name": "_".join((socket.gethostname(), bdf))} | "name": "_".join((socket.gethostname(), bdf))} | |||
d_info = fpga_device(path) | d_info = fpga_device(path) | |||
fpga.update(d_info) | fpga.update(d_info) | |||
if names: | if names: | |||
name = names[0] | name = names[0] | |||
fpga["stub"] = False | fpga["stub"] = False | |||
traits = get_traits(name, fpga["product_id"], vf) | traits = get_traits(name, fpga["product_id"], vf) | |||
fpga.update(traits) | fpga.update(traits) | |||
skipping to change at line 241 | skipping to change at line 220 | |||
devs.append(_generate_driver_device(fpga, pf in pf_has_vf)) | devs.append(_generate_driver_device(fpga, pf in pf_has_vf)) | |||
return devs | return devs | |||
def _generate_driver_device(fpga, pf_has_vf): | def _generate_driver_device(fpga, pf_has_vf): | |||
driver_device_obj = driver_device.DriverDevice() | driver_device_obj = driver_device.DriverDevice() | |||
driver_device_obj.vendor = fpga["vendor"] | driver_device_obj.vendor = fpga["vendor"] | |||
driver_device_obj.stub = fpga["stub"] | driver_device_obj.stub = fpga["stub"] | |||
driver_device_obj.model = fpga.get('model', "miss_model_info") | driver_device_obj.model = fpga.get('model', "miss_model_info") | |||
driver_device_obj.vendor_board_info = fpga.get('vendor_board_info', | driver_device_obj.vendor_board_info = fpga.get('vendor_board_info', | |||
"miss_vb_info") | "miss_vb_info") | |||
std_board_info = {'product_id': fpga.get('product_id', None)} | std_board_info = {'product_id': fpga.get('product_id')} | |||
driver_device_obj.std_board_info = jsonutils.dumps(std_board_info) | driver_device_obj.std_board_info = jsonutils.dumps(std_board_info) | |||
driver_device_obj.type = fpga["type"] | driver_device_obj.type = fpga["type"] | |||
driver_device_obj.controlpath_id = _generate_controlpath_id(fpga) | driver_device_obj.controlpath_id = _generate_controlpath_id(fpga) | |||
driver_device_obj.deployable_list = _generate_dep_list(fpga, pf_has_vf) | driver_device_obj.deployable_list = _generate_dep_list(fpga, pf_has_vf) | |||
return driver_device_obj | return driver_device_obj | |||
def _generate_controlpath_id(fpga): | def _generate_controlpath_id(fpga): | |||
driver_cpid = driver_controlpath_id.DriverControlPathID() | driver_cpid = driver_controlpath_id.DriverControlPathID() | |||
driver_cpid.cpid_type = "PCI" | driver_cpid.cpid_type = "PCI" | |||
driver_cpid.cpid_info = utils.pci_str_to_json(fpga["devices"]) | driver_cpid.cpid_info = utils.pci_str_to_json(fpga["devices"]) | |||
skipping to change at line 266 | skipping to change at line 245 | |||
driver_dep.attribute_list = _generate_attribute_list(fpga) | driver_dep.attribute_list = _generate_attribute_list(fpga) | |||
driver_dep.attach_handle_list = [] | driver_dep.attach_handle_list = [] | |||
# pf without sriov enabled. | # pf without sriov enabled. | |||
if not pf_has_vf: | if not pf_has_vf: | |||
driver_dep.num_accelerators = 1 | driver_dep.num_accelerators = 1 | |||
driver_dep.attach_handle_list = \ | driver_dep.attach_handle_list = \ | |||
[_generate_attach_handle(fpga)] | [_generate_attach_handle(fpga)] | |||
driver_dep.name = fpga["name"] | driver_dep.name = fpga["name"] | |||
driver_dep.driver_name = DRIVER_NAME | driver_dep.driver_name = DRIVER_NAME | |||
# pf with sriov enabled, may have several regions and several vfs. | # pf with sriov enabled, may have several regions and several vfs. | |||
# For now, there is only region, this maybe improve in next release. | # For now, there is only one region, this maybe improve in next release. | |||
else: | else: | |||
driver_dep.num_accelerators = len(fpga["regions"]) | driver_dep.num_accelerators = len(fpga["regions"]) | |||
for vf in fpga["regions"]: | for vf in fpga["regions"]: | |||
# Only vfs in regions can be attach, no pf. | # Only vfs in regions can be attach, no pf. | |||
driver_dep.attach_handle_list.append( | driver_dep.attach_handle_list.append( | |||
_generate_attach_handle(vf)) | _generate_attach_handle(vf)) | |||
driver_dep.name = vf["name"] | driver_dep.name = vf["name"] | |||
driver_dep.driver_name = DRIVER_NAME | driver_dep.driver_name = DRIVER_NAME | |||
return [driver_dep] | return [driver_dep] | |||
def _generate_attach_handle(fpga): | def _generate_attach_handle(fpga): | |||
driver_ah = driver_attach_handle.DriverAttachHandle() | driver_ah = driver_attach_handle.DriverAttachHandle() | |||
driver_ah.attach_type = constants.AH_TYPE_PCI | driver_ah.attach_type = constants.AH_TYPE_PCI | |||
driver_ah.attach_info = utils.pci_str_to_json(fpga["devices"]) | driver_ah.attach_info = utils.pci_str_to_json(fpga["devices"]) | |||
driver_ah.in_use = False | driver_ah.in_use = False | |||
return driver_ah | return driver_ah | |||
def _generate_attribute_list(fpga): | def _generate_attribute_list(fpga): | |||
attr_list = [] | attr_list = [] | |||
count_pf_traits = 0 | ||||
for k, v in fpga.items(): | for k, v in fpga.items(): | |||
if k == "rc": | if k == "rc": | |||
driver_attr = driver_attribute.DriverAttribute() | driver_attr = driver_attribute.DriverAttribute() | |||
driver_attr.key, driver_attr.value = k, v | driver_attr.key, driver_attr.value = k, v | |||
attr_list.append(driver_attr) | attr_list.append(driver_attr) | |||
if k == "traits": | if k == "traits": | |||
values = fpga.get(k, []) | values = fpga.get(k, []) | |||
for index_pf, val in enumerate(values): | for index_pf, val in enumerate(values): | |||
driver_attr = driver_attribute.DriverAttribute() | driver_attr = driver_attribute.DriverAttribute() | |||
driver_attr.key = "trait" + str(index_pf) | driver_attr.key = "trait" + str(index_pf) | |||
driver_attr.value = val | driver_attr.value = val | |||
attr_list.append(driver_attr) | attr_list.append(driver_attr) | |||
if fpga.get("regions"): | count_pf_traits = index_pf | |||
for vf in fpga["regions"]: | vfs = fpga.get('regions', []) | |||
for k, values in vf.items(): | for vf in vfs: | |||
if k == "traits": | for k, values in vf.items(): | |||
for index_vf, val in enumerate(values): | if k == "traits": | |||
driver_attr = driver_attribute.DriverAttribute( | for index_vf, val in enumerate(values): | |||
key="trait" + str(index_vf + index_pf), value=val) | driver_attr = driver_attribute.DriverAttribute() | |||
attr_list.append(driver_attr) | driver_attr.key = "trait" + str(index_vf + count_pf_traits) | |||
driver_attr.value = val | ||||
attr_list.append(driver_attr) | ||||
return attr_list | return attr_list | |||
End of changes. 8 change blocks. | ||||
32 lines changed or deleted | 14 lines changed or added |