vDPA/ifcvf: manage ifcvf_hw in the mgmt_dev
authorZhu Lingshan <lingshan.zhu@intel.com>
Fri, 25 Nov 2022 14:57:21 +0000 (22:57 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 11 Mar 2023 12:55:42 +0000 (13:55 +0100)
commit 6a3b2f179b49f2c6452ecc37b4778a43848b454c upstream.

This commit allocates the hw structure in the
management device structure. So the hardware
can be initialized once the management device
is allocated in probe.

Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
Cc: stable@vger.kernel.org
Message-Id: <20221125145724.1129962-10-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_base.h
drivers/vdpa/ifcvf/ifcvf_main.c

index e1fe947..25bd4e9 100644 (file)
@@ -39,7 +39,7 @@
 #define IFCVF_INFO(pdev, fmt, ...)     dev_info(&pdev->dev, fmt, ##__VA_ARGS__)
 
 #define ifcvf_private_to_vf(adapter) \
-       (&((struct ifcvf_adapter *)adapter)->vf)
+       (((struct ifcvf_adapter *)adapter)->vf)
 
 /* all vqs and config interrupt has its own vector */
 #define MSIX_VECTOR_PER_VQ_AND_CONFIG          1
@@ -95,7 +95,7 @@ struct ifcvf_hw {
 struct ifcvf_adapter {
        struct vdpa_device vdpa;
        struct pci_dev *pdev;
-       struct ifcvf_hw vf;
+       struct ifcvf_hw *vf;
 };
 
 struct ifcvf_vring_lm_cfg {
@@ -110,6 +110,7 @@ struct ifcvf_lm_cfg {
 
 struct ifcvf_vdpa_mgmt_dev {
        struct vdpa_mgmt_dev mdev;
+       struct ifcvf_hw vf;
        struct ifcvf_adapter *adapter;
        struct pci_dev *pdev;
 };
index a09a1c2..5f1d81a 100644 (file)
@@ -402,7 +402,7 @@ static struct ifcvf_hw *vdpa_to_vf(struct vdpa_device *vdpa_dev)
 {
        struct ifcvf_adapter *adapter = vdpa_to_adapter(vdpa_dev);
 
-       return &adapter->vf;
+       return adapter->vf;
 }
 
 static u64 ifcvf_vdpa_get_device_features(struct vdpa_device *vdpa_dev)
@@ -750,7 +750,7 @@ static int ifcvf_vdpa_dev_add(struct vdpa_mgmt_dev *mdev, const char *name,
                return -EOPNOTSUPP;
 
        adapter = ifcvf_mgmt_dev->adapter;
-       vf = &adapter->vf;
+       vf = adapter->vf;
        pdev = adapter->pdev;
        vdpa_dev = &adapter->vdpa;
 
@@ -838,10 +838,11 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        adapter->vdpa.mdev = &ifcvf_mgmt_dev->mdev;
        ifcvf_mgmt_dev->adapter = adapter;
 
-       vf = &adapter->vf;
+       vf = &ifcvf_mgmt_dev->vf;
        vf->dev_type = get_dev_type(pdev);
        vf->base = pcim_iomap_table(pdev);
        vf->pdev = pdev;
+       adapter->vf = vf;
 
        ret = ifcvf_init_hw(vf, pdev);
        if (ret) {