mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 19:43:40 +02:00
hisi_acc_vfio_pci: create subfunction for data reading
This patch generates the code for the operation of reading data from the device into a sub-function. Then, it can be called during the device status data saving phase of the live migration process and the device status data reading function in debugfs. Thereby reducing the redundant code of the driver. Signed-off-by: Longfang Liu <liulongfang@huawei.com> Reviewed-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com> Link: https://lore.kernel.org/r/20241112073322.54550-3-liulongfang@huawei.com Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
parent
ece8a2c77b
commit
1962920689
|
|
@ -486,31 +486,11 @@ static int vf_qm_load_data(struct hisi_acc_vf_core_device *hisi_acc_vdev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int vf_qm_state_save(struct hisi_acc_vf_core_device *hisi_acc_vdev,
|
||||
struct hisi_acc_vf_migration_file *migf)
|
||||
static int vf_qm_read_data(struct hisi_qm *vf_qm, struct acc_vf_data *vf_data)
|
||||
{
|
||||
struct acc_vf_data *vf_data = &migf->vf_data;
|
||||
struct hisi_qm *vf_qm = &hisi_acc_vdev->vf_qm;
|
||||
struct device *dev = &vf_qm->pdev->dev;
|
||||
int ret;
|
||||
|
||||
if (unlikely(qm_wait_dev_not_ready(vf_qm))) {
|
||||
/* Update state and return with match data */
|
||||
vf_data->vf_qm_state = QM_NOT_READY;
|
||||
hisi_acc_vdev->vf_qm_state = vf_data->vf_qm_state;
|
||||
migf->total_length = QM_MATCH_SIZE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
vf_data->vf_qm_state = QM_READY;
|
||||
hisi_acc_vdev->vf_qm_state = vf_data->vf_qm_state;
|
||||
|
||||
ret = vf_qm_cache_wb(vf_qm);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to writeback QM Cache!\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = qm_get_regs(vf_qm, vf_data);
|
||||
if (ret)
|
||||
return -EINVAL;
|
||||
|
|
@ -536,6 +516,38 @@ static int vf_qm_state_save(struct hisi_acc_vf_core_device *hisi_acc_vdev,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vf_qm_state_save(struct hisi_acc_vf_core_device *hisi_acc_vdev,
|
||||
struct hisi_acc_vf_migration_file *migf)
|
||||
{
|
||||
struct acc_vf_data *vf_data = &migf->vf_data;
|
||||
struct hisi_qm *vf_qm = &hisi_acc_vdev->vf_qm;
|
||||
struct device *dev = &vf_qm->pdev->dev;
|
||||
int ret;
|
||||
|
||||
if (unlikely(qm_wait_dev_not_ready(vf_qm))) {
|
||||
/* Update state and return with match data */
|
||||
vf_data->vf_qm_state = QM_NOT_READY;
|
||||
hisi_acc_vdev->vf_qm_state = vf_data->vf_qm_state;
|
||||
migf->total_length = QM_MATCH_SIZE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
vf_data->vf_qm_state = QM_READY;
|
||||
hisi_acc_vdev->vf_qm_state = vf_data->vf_qm_state;
|
||||
|
||||
ret = vf_qm_cache_wb(vf_qm);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to writeback QM Cache!\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = vf_qm_read_data(vf_qm, vf_data);
|
||||
if (ret)
|
||||
return -EINVAL;
|
||||
|
||||
migf->total_length = sizeof(struct acc_vf_data);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user