]> git.baikalelectronics.ru Git - kernel.git/commitdiff
vDPA/ifcvf: alloc the mgmt_dev before the adapter
authorZhu Lingshan <lingshan.zhu@intel.com>
Fri, 25 Nov 2022 14:57:15 +0000 (22:57 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 11 Mar 2023 12:55:41 +0000 (13:55 +0100)
commit a59d58ca185c15c9736bdf18f4e3a7115ac602e1 upstream.

This commit reverses the order of allocating the
management device and the adapter. So that it would
be possible to move the allocation of the adapter
to dev_add().

Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
Cc: stable@vger.kernel.org
Message-Id: <20221125145724.1129962-4-lingshan.zhu@intel.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/vdpa/ifcvf/ifcvf_main.c

index 7383918b571985c3cbdd8944d778bbb147706ad3..860f72bfa7bae0a0bc0664da8a78c176f6490754 100644 (file)
@@ -831,22 +831,30 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        }
 
        pci_set_master(pdev);
+       ifcvf_mgmt_dev = kzalloc(sizeof(struct ifcvf_vdpa_mgmt_dev), GFP_KERNEL);
+       if (!ifcvf_mgmt_dev) {
+               IFCVF_ERR(pdev, "Failed to alloc memory for the vDPA management device\n");
+               return -ENOMEM;
+       }
 
        adapter = vdpa_alloc_device(struct ifcvf_adapter, vdpa,
                                    dev, &ifc_vdpa_ops, 1, 1, NULL, false);
        if (IS_ERR(adapter)) {
                IFCVF_ERR(pdev, "Failed to allocate vDPA structure");
-               return PTR_ERR(adapter);
+               ret = PTR_ERR(adapter);
+               goto err;
        }
 
+       adapter->pdev = pdev;
+       adapter->vdpa.dma_dev = &pdev->dev;
+       adapter->vdpa.mdev = &ifcvf_mgmt_dev->mdev;
+       ifcvf_mgmt_dev->adapter = adapter;
+
        vf = &adapter->vf;
        vf->dev_type = get_dev_type(pdev);
        vf->base = pcim_iomap_table(pdev);
        vf->pdev = pdev;
 
-       adapter->pdev = pdev;
-       adapter->vdpa.dma_dev = &pdev->dev;
-
        ret = ifcvf_init_hw(vf, pdev);
        if (ret) {
                IFCVF_ERR(pdev, "Failed to init IFCVF hw\n");
@@ -859,16 +867,6 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        vf->hw_features = ifcvf_get_hw_features(vf);
        vf->config_size = ifcvf_get_config_size(vf);
 
-       ifcvf_mgmt_dev = kzalloc(sizeof(struct ifcvf_vdpa_mgmt_dev), GFP_KERNEL);
-       if (!ifcvf_mgmt_dev) {
-               IFCVF_ERR(pdev, "Failed to alloc memory for the vDPA management device\n");
-               return -ENOMEM;
-       }
-
-       ifcvf_mgmt_dev->mdev.ops = &ifcvf_vdpa_mgmt_dev_ops;
-       ifcvf_mgmt_dev->mdev.device = dev;
-       ifcvf_mgmt_dev->adapter = adapter;
-
        dev_type = get_dev_type(pdev);
        switch (dev_type) {
        case VIRTIO_ID_NET:
@@ -883,12 +881,11 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
                goto err;
        }
 
+       ifcvf_mgmt_dev->mdev.ops = &ifcvf_vdpa_mgmt_dev_ops;
+       ifcvf_mgmt_dev->mdev.device = dev;
        ifcvf_mgmt_dev->mdev.max_supported_vqs = vf->nr_vring;
        ifcvf_mgmt_dev->mdev.supported_features = vf->hw_features;
 
-       adapter->vdpa.mdev = &ifcvf_mgmt_dev->mdev;
-
-
        ret = vdpa_mgmtdev_register(&ifcvf_mgmt_dev->mdev);
        if (ret) {
                IFCVF_ERR(pdev,