X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FQATUtil.py;h=e16221fb30c6e10bd8f52842a18057be1a901b9e;hb=0efc3083ed2bacaf3445a50fae1679a5ae88d7d9;hp=e709aad6ed78b3aded6970faeb83d31f3730a286;hpb=fb731e12fc85bf225e8917fe068fcc357f9a2158;p=csit.git diff --git a/resources/libraries/python/QATUtil.py b/resources/libraries/python/QATUtil.py index e709aad6ed..e16221fb30 100644 --- a/resources/libraries/python/QATUtil.py +++ b/resources/libraries/python/QATUtil.py @@ -14,92 +14,79 @@ """QAT util library.""" from resources.libraries.python.DUTSetup import DUTSetup -from resources.libraries.python.topology import Topology +from resources.libraries.python.topology import NodeType, Topology from resources.libraries.python.VPPUtil import VPPUtil +from resources.libraries.python.ssh import exec_cmd_no_error class QATUtil: """Contains methods for setting up QATs.""" @staticmethod - def crypto_device_verify(node, crypto_type, numvfs, force_init=False): - """Verify if Crypto QAT device virtual functions are initialized on all - DUTs. If parameter force initialization is set to True, then try to - initialize or remove VFs on QAT. + def crypto_device_verify_on_all_duts(nodes): + """Verify if Crypto QAT device and its virtual functions are initialized + on all DUTs. - :param node: DUT node. - :crypto_type: Crypto device type - HW_DH895xcc, HW_C3xxx, HW_C4xxx - or HW_4xxx. - :param numvfs: Number of VFs to initialize, 0 - disable the VFs. - :param force_init: If True then try to initialize to specific value. - :type node: dict - :type crypto_type: string - :type numvfs: int - :type force_init: bool - :returns: nothing - :raises RuntimeError: If QAT VFs are not created and force init is set - to False. + :param nodes: Nodes in the topology. + :type nodes: dict """ - pci_addr = Topology.get_cryptodev(node) - sriov_numvfs = DUTSetup.get_sriov_numvfs(node, pci_addr) + VPPUtil.stop_vpp_service_on_all_duts(nodes) - if sriov_numvfs != numvfs: - if force_init: - # QAT is not initialized and we want to initialize with numvfs - QATUtil.crypto_device_init(node, crypto_type, numvfs) - else: - raise RuntimeError( - f"QAT device failed to create VFs on {node[u'host']}" - ) + for node in nodes.values(): + if node["type"] == NodeType.DUT: + cryptodevs = Topology.get_cryptodev(node) + if not cryptodevs: + return + for device in cryptodevs.values(): + QATUtil.crypto_device_init(node, device) @staticmethod - def crypto_device_init(node, crypto_type, numvfs): + def crypto_device_init(node, device): """Init Crypto QAT device virtual functions on DUT. :param node: DUT node. - :crypto_type: Crypto device type - HW_DH895xcc, HW_C3xxx, HW_C4xxx - or HW_4xxx. - :param numvfs: Number of VFs to initialize, 0 - disable the VFs. + :device: Crypto device entry from topology file. :type node: dict - :type crypto_type: string - :type numvfs: int - :returns: nothing - :raises RuntimeError: If failed to stop VPP or QAT failed to initialize. + :type device: dict """ - if crypto_type == u"HW_DH895xcc": - kernel_mod = u"qat_dh895xcc" - kernel_drv = u"dh895xcc" - elif crypto_type == u"HW_C3xxx": - kernel_mod = u"qat_c3xxx" - kernel_drv = u"c3xxx" - elif crypto_type == u"HW_C4xxx": - kernel_mod = u"qat_c4xxx" - kernel_drv = u"c4xxx" - elif crypto_type == u"HW_4xxx": - kernel_mod = u"qat_4xxx" - kernel_drv = u"4xxx" - else: - raise RuntimeError( - f"Unsupported crypto device type on {node[u'host']}" - ) - - pci_addr = Topology.get_cryptodev(node) - - # QAT device must be re-bound to kernel driver before initialization. - DUTSetup.verify_kernel_module(node, kernel_mod, force_load=True) - - # Stop VPP to prevent deadlock. - VPPUtil.stop_vpp_service(node) + DUTSetup.verify_kernel_module(node, device["module"], force_load=True) current_driver = DUTSetup.get_pci_dev_driver( - node, pci_addr.replace(u":", r"\:") + node, device["pci_address"].replace(":", r"\:") ) if current_driver is not None: - DUTSetup.pci_driver_unbind(node, pci_addr) - + DUTSetup.pci_driver_unbind(node, device["pci_address"]) # Bind to kernel driver. - DUTSetup.pci_driver_bind(node, pci_addr, kernel_drv) + DUTSetup.pci_driver_bind(node, device["pci_address"], device["driver"]) + + cmd = f"adf_ctl status | grep {device['pci_address']} | " + cmd += "awk '{print $1}'" + stdout, _ = exec_cmd_no_error( + node, cmd, sudo=True, message="Failed to check crypto device!" + ) + if stdout.strip(): + qat_dev = stdout.split("_")[-1] + conf_file = f"/etc/{device['driver']}_{qat_dev.strip()}.conf" + exec_cmd_no_error( + node, f"adf_ctl --config {conf_file} {stdout.strip()} restart", + sudo=True, message="Failed to restart crypto device!" + ) + else: + raise ValueError("Crypto device error") # Initialize QAT VFs. - if numvfs > 0: - DUTSetup.set_sriov_numvfs(node, pci_addr, numvfs) \ No newline at end of file + if int(device["numvfs"]) > 0: + path = f"drivers/{device['driver']}" + DUTSetup.set_sriov_numvfs( + node, device["pci_address"], path=path, + numvfs=device["numvfs"] + ) + + if device["driver"] not in ["c4xxx"]: + for cvf in range(int(device["numvfs"])): + DUTSetup.pci_vf_driver_unbind( + node, device["pci_address"], cvf + ) + DUTSetup.pci_vf_driver_bind( + node, device["pci_address"], cvf, "vfio-pci" + )