fix(core): QAT VF bind 20/39320/1
authorpmikus <peter.mikus@protonmail.ch>
Fri, 4 Aug 2023 06:48:29 +0000 (06:48 +0000)
committerpmikus <peter.mikus@protonmail.ch>
Fri, 4 Aug 2023 06:48:29 +0000 (06:48 +0000)
Signed-off-by: pmikus <peter.mikus@protonmail.ch>
Change-Id: Iafae1a1f538b928d3bb80bf9610a0bf7de646f8a

resources/libraries/python/QATUtil.py
resources/libraries/robot/shared/default.robot

index e709aad..34a8e3b 100644 (file)
@@ -22,7 +22,7 @@ class QATUtil:
     """Contains methods for setting up QATs."""
 
     @staticmethod
-    def crypto_device_verify(node, crypto_type, numvfs, force_init=False):
+    def crypto_device_verify(node, crypto_type, numvfs, force_init=True):
         """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.
@@ -41,16 +41,20 @@ class QATUtil:
                               to False.
         """
         pci_addr = Topology.get_cryptodev(node)
-        sriov_numvfs = DUTSetup.get_sriov_numvfs(node, pci_addr)
-
-        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']}"
-                )
+
+        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']}"
+            )
+
+        # QAT VF devices must be re-bound to vfio-pci driver before use.
+        pci_addr = Topology.get_cryptodev(node)
+        for i in range(numvfs):
+            DUTSetup.pci_vf_driver_unbind(node, pci_addr, i)
+            DUTSetup.pci_vf_driver_bind(node, pci_addr, i, "vfio-pci")
 
     @staticmethod
     def crypto_device_init(node, crypto_type, numvfs):
index 755bc1a..be68958 100644 (file)
 | |
 | | ... | \| Configure crypto device on all DUTs \| HW_DH895xcc \| ${32} \|
 | |
-| | [Arguments] | ${crypto_type} | ${numvfs} | ${force_init}=${False}
+| | [Arguments] | ${crypto_type} | ${numvfs} | ${force_init}=${True}
 | |
 | | FOR | ${dut} | IN | @{duts}
 | | | Crypto Device Verify | ${nodes['${dut}']} | ${crypto_type}