static LIST_HEAD(hnae3_client_list);
 static LIST_HEAD(hnae3_ae_dev_list);
 
+void hnae3_unregister_ae_algo_prepare(struct hnae3_ae_algo *ae_algo)
+{
+       const struct pci_device_id *pci_id;
+       struct hnae3_ae_dev *ae_dev;
+
+       if (!ae_algo)
+               return;
+
+       list_for_each_entry(ae_dev, &hnae3_ae_dev_list, node) {
+               if (!hnae3_get_bit(ae_dev->flag, HNAE3_DEV_INITED_B))
+                       continue;
+
+               pci_id = pci_match_id(ae_algo->pdev_id_table, ae_dev->pdev);
+               if (!pci_id)
+                       continue;
+               if (IS_ENABLED(CONFIG_PCI_IOV))
+                       pci_disable_sriov(ae_dev->pdev);
+       }
+}
+EXPORT_SYMBOL(hnae3_unregister_ae_algo_prepare);
+
 /* we are keeping things simple and using single lock for all the
  * list. This is a non-critical code so other updations, if happen
  * in parallel, can wait.
 
 int hnae3_register_ae_dev(struct hnae3_ae_dev *ae_dev);
 void hnae3_unregister_ae_dev(struct hnae3_ae_dev *ae_dev);
 
+void hnae3_unregister_ae_algo_prepare(struct hnae3_ae_algo *ae_algo);
 void hnae3_unregister_ae_algo(struct hnae3_ae_algo *ae_algo);
 void hnae3_register_ae_algo(struct hnae3_ae_algo *ae_algo);