fix(core): QAT VF bind
[csit.git] / resources / libraries / python / QATUtil.py
index e709aad..34a8e3b 100644 (file)
@@ -22,7 +22,7 @@ class QATUtil:
     """Contains methods for setting up QATs."""
 
     @staticmethod
     """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.
         """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)
                               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):
 
     @staticmethod
     def crypto_device_init(node, crypto_type, numvfs):