Commit d59f633d authored by Zhu Lingshan's avatar Zhu Lingshan Committed by Michael S. Tsirkin

vDPA/ifcvf: decouple hw features manipulators from the adapter

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: default avatarZhu Lingshan <lingshan.zhu@intel.com>
Cc: stable@vger.kernel.org
Message-Id: <20221125145724.1129962-2-lingshan.zhu@intel.com>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent 0a599750
...@@ -220,10 +220,8 @@ u64 ifcvf_get_features(struct ifcvf_hw *hw) ...@@ -220,10 +220,8 @@ u64 ifcvf_get_features(struct ifcvf_hw *hw)
int ifcvf_verify_min_features(struct ifcvf_hw *hw, u64 features) 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) { 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; return -EINVAL;
} }
...@@ -301,14 +299,11 @@ static void ifcvf_set_features(struct ifcvf_hw *hw, u64 features) ...@@ -301,14 +299,11 @@ static void ifcvf_set_features(struct ifcvf_hw *hw, u64 features)
static int ifcvf_config_features(struct ifcvf_hw *hw) 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_set_features(hw, hw->req_features);
ifcvf_add_status(hw, VIRTIO_CONFIG_S_FEATURES_OK); ifcvf_add_status(hw, VIRTIO_CONFIG_S_FEATURES_OK);
if (!(ifcvf_get_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; return -EIO;
} }
......
...@@ -89,6 +89,7 @@ struct ifcvf_hw { ...@@ -89,6 +89,7 @@ struct ifcvf_hw {
u16 nr_vring; u16 nr_vring;
/* VIRTIO_PCI_CAP_DEVICE_CFG size */ /* VIRTIO_PCI_CAP_DEVICE_CFG size */
u32 cap_dev_config_size; u32 cap_dev_config_size;
struct pci_dev *pdev;
}; };
struct ifcvf_adapter { struct ifcvf_adapter {
......
...@@ -842,6 +842,7 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -842,6 +842,7 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
vf = &adapter->vf; vf = &adapter->vf;
vf->dev_type = get_dev_type(pdev); vf->dev_type = get_dev_type(pdev);
vf->base = pcim_iomap_table(pdev); vf->base = pcim_iomap_table(pdev);
vf->pdev = pdev;
adapter->pdev = pdev; adapter->pdev = pdev;
adapter->vdpa.dma_dev = &pdev->dev; adapter->vdpa.dma_dev = &pdev->dev;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment