]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
vDPA/ifcvf: decouple hw features manipulators from the adapter
authorZhu Lingshan <lingshan.zhu@intel.com>
Fri, 25 Nov 2022 14:57:13 +0000 (22:57 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 11 Mar 2023 12:50:47 +0000 (13:50 +0100)
commit d59f633dd05940739b5f46f5d4403cafb91d2742 upstream.

This commit gets rid of ifcvf_adapter in hw features related
functions in ifcvf_base. Then these functions are more rubust
and de-coupling from the ifcvf_adapter layer. So these
functions could be invoded once the device is probed, even
before the adapter is allocaed.

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

index 3e4486bfa0b71266c43eb5920c778ba40e9cface..7a7e6ba66f8810d3e2a8b7d414d5310afb439d00 100644 (file)
@@ -220,10 +220,8 @@ u64 ifcvf_get_features(struct ifcvf_hw *hw)
 
 int ifcvf_verify_min_features(struct ifcvf_hw *hw, u64 features)
 {
-       struct ifcvf_adapter *ifcvf = vf_to_adapter(hw);
-
        if (!(features & BIT_ULL(VIRTIO_F_ACCESS_PLATFORM)) && features) {
-               IFCVF_ERR(ifcvf->pdev, "VIRTIO_F_ACCESS_PLATFORM is not negotiated\n");
+               IFCVF_ERR(hw->pdev, "VIRTIO_F_ACCESS_PLATFORM is not negotiated\n");
                return -EINVAL;
        }
 
@@ -301,14 +299,11 @@ static void ifcvf_set_features(struct ifcvf_hw *hw, u64 features)
 
 static int ifcvf_config_features(struct ifcvf_hw *hw)
 {
-       struct ifcvf_adapter *ifcvf;
-
-       ifcvf = vf_to_adapter(hw);
        ifcvf_set_features(hw, hw->req_features);
        ifcvf_add_status(hw, VIRTIO_CONFIG_S_FEATURES_OK);
 
        if (!(ifcvf_get_status(hw) & VIRTIO_CONFIG_S_FEATURES_OK)) {
-               IFCVF_ERR(ifcvf->pdev, "Failed to set FEATURES_OK status\n");
+               IFCVF_ERR(hw->pdev, "Failed to set FEATURES_OK status\n");
                return -EIO;
        }
 
index f5563f665cc625b1834d98c21dbc63d7a8be6dbe..e1fe947d61b7dfe30db6f9774bd9c7dc87a60e08 100644 (file)
@@ -89,6 +89,7 @@ struct ifcvf_hw {
        u16 nr_vring;
        /* VIRTIO_PCI_CAP_DEVICE_CFG size */
        u32 cap_dev_config_size;
+       struct pci_dev *pdev;
 };
 
 struct ifcvf_adapter {
index 44b29289aa193883c494863c87159a96e066727d..7383918b571985c3cbdd8944d778bbb147706ad3 100644 (file)
@@ -842,6 +842,7 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        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;