Commit ef9da01c authored by Alvaro Karsz's avatar Alvaro Karsz Committed by Michael S. Tsirkin

vdpa/snet: implement the resume vDPA callback

The callback sends a resume command to the DPU through
the control mechanism.
Signed-off-by: default avatarAlvaro Karsz <alvaro.karsz@solid-run.com>
Message-Id: <20230502131048.61134-1-alvaro.karsz@solid-run.com>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Acked-by: default avatarJason Wang <jasowang@redhat.com>
parent 47b60ec7
...@@ -16,6 +16,7 @@ enum snet_ctrl_opcodes { ...@@ -16,6 +16,7 @@ enum snet_ctrl_opcodes {
SNET_CTRL_OP_DESTROY = 1, SNET_CTRL_OP_DESTROY = 1,
SNET_CTRL_OP_READ_VQ_STATE, SNET_CTRL_OP_READ_VQ_STATE,
SNET_CTRL_OP_SUSPEND, SNET_CTRL_OP_SUSPEND,
SNET_CTRL_OP_RESUME,
}; };
#define SNET_CTRL_TIMEOUT 2000000 #define SNET_CTRL_TIMEOUT 2000000
...@@ -328,3 +329,8 @@ int snet_suspend_dev(struct snet *snet) ...@@ -328,3 +329,8 @@ int snet_suspend_dev(struct snet *snet)
{ {
return snet_send_ctrl_msg(snet, SNET_CTRL_OP_SUSPEND, 0); return snet_send_ctrl_msg(snet, SNET_CTRL_OP_SUSPEND, 0);
} }
int snet_resume_dev(struct snet *snet)
{
return snet_send_ctrl_msg(snet, SNET_CTRL_OP_RESUME, 0);
}
...@@ -509,6 +509,20 @@ static int snet_suspend(struct vdpa_device *vdev) ...@@ -509,6 +509,20 @@ static int snet_suspend(struct vdpa_device *vdev)
return ret; return ret;
} }
static int snet_resume(struct vdpa_device *vdev)
{
struct snet *snet = vdpa_to_snet(vdev);
int ret;
ret = snet_resume_dev(snet);
if (ret)
SNET_ERR(snet->pdev, "SNET[%u] resume failed, err: %d\n", snet->sid, ret);
else
SNET_DBG(snet->pdev, "Resume SNET[%u] device\n", snet->sid);
return ret;
}
static const struct vdpa_config_ops snet_config_ops = { static const struct vdpa_config_ops snet_config_ops = {
.set_vq_address = snet_set_vq_address, .set_vq_address = snet_set_vq_address,
.set_vq_num = snet_set_vq_num, .set_vq_num = snet_set_vq_num,
...@@ -536,6 +550,7 @@ static const struct vdpa_config_ops snet_config_ops = { ...@@ -536,6 +550,7 @@ static const struct vdpa_config_ops snet_config_ops = {
.get_config = snet_get_config, .get_config = snet_get_config,
.set_config = snet_set_config, .set_config = snet_set_config,
.suspend = snet_suspend, .suspend = snet_suspend,
.resume = snet_resume,
}; };
static int psnet_open_pf_bar(struct pci_dev *pdev, struct psnet *psnet) static int psnet_open_pf_bar(struct pci_dev *pdev, struct psnet *psnet)
......
...@@ -204,5 +204,6 @@ void snet_ctrl_clear(struct snet *snet); ...@@ -204,5 +204,6 @@ void snet_ctrl_clear(struct snet *snet);
int snet_destroy_dev(struct snet *snet); int snet_destroy_dev(struct snet *snet);
int snet_read_vq_state(struct snet *snet, u16 idx, struct vdpa_vq_state *state); int snet_read_vq_state(struct snet *snet, u16 idx, struct vdpa_vq_state *state);
int snet_suspend_dev(struct snet *snet); int snet_suspend_dev(struct snet *snet);
int snet_resume_dev(struct snet *snet);
#endif //_SNET_VDPA_H_ #endif //_SNET_VDPA_H_
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