mirror of
https://github.com/Motorhead1991/qemu.git
synced 2026-03-06 01:54:45 -07:00
vfio: move config space read into vfio_pci_config_setup()
Small cleanup that reduces duplicate code for vfio-user and reduces the size of vfio_realize(); while we're here, correct that name to vfio_pci_realize(). Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Cédric Le Goater <clg@redhat.com> Link: https://lore.kernel.org/qemu-devel/20250520150419.2172078-4-john.levon@nutanix.com Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
parent
33528f255a
commit
1539945946
1 changed files with 16 additions and 15 deletions
|
|
@ -3017,6 +3017,19 @@ static bool vfio_pci_config_setup(VFIOPCIDevice *vdev, Error **errp)
|
|||
{
|
||||
PCIDevice *pdev = &vdev->pdev;
|
||||
VFIODevice *vbasedev = &vdev->vbasedev;
|
||||
uint32_t config_space_size;
|
||||
int ret;
|
||||
|
||||
config_space_size = MIN(pci_config_size(&vdev->pdev), vdev->config_size);
|
||||
|
||||
/* Get a copy of config space */
|
||||
ret = vfio_pci_config_space_read(vdev, 0, config_space_size,
|
||||
vdev->pdev.config);
|
||||
if (ret < (int)config_space_size) {
|
||||
ret = ret < 0 ? -ret : EFAULT;
|
||||
error_setg_errno(errp, ret, "failed to read device config space");
|
||||
return false;
|
||||
}
|
||||
|
||||
/* vfio emulates a lot for us, but some bits need extra love */
|
||||
vdev->emulated_config_bits = g_malloc0(vdev->config_size);
|
||||
|
|
@ -3138,15 +3151,14 @@ static bool vfio_interrupt_setup(VFIOPCIDevice *vdev, Error **errp)
|
|||
return true;
|
||||
}
|
||||
|
||||
static void vfio_realize(PCIDevice *pdev, Error **errp)
|
||||
static void vfio_pci_realize(PCIDevice *pdev, Error **errp)
|
||||
{
|
||||
ERRP_GUARD();
|
||||
VFIOPCIDevice *vdev = VFIO_PCI_BASE(pdev);
|
||||
VFIODevice *vbasedev = &vdev->vbasedev;
|
||||
int i, ret;
|
||||
int i;
|
||||
char uuid[UUID_STR_LEN];
|
||||
g_autofree char *name = NULL;
|
||||
uint32_t config_space_size;
|
||||
|
||||
if (vbasedev->fd < 0 && !vbasedev->sysfsdev) {
|
||||
if (!(~vdev->host.domain || ~vdev->host.bus ||
|
||||
|
|
@ -3201,17 +3213,6 @@ static void vfio_realize(PCIDevice *pdev, Error **errp)
|
|||
goto error;
|
||||
}
|
||||
|
||||
config_space_size = MIN(pci_config_size(&vdev->pdev), vdev->config_size);
|
||||
|
||||
/* Get a copy of config space */
|
||||
ret = vfio_pci_config_space_read(vdev, 0, config_space_size,
|
||||
vdev->pdev.config);
|
||||
if (ret < (int)config_space_size) {
|
||||
ret = ret < 0 ? -ret : EFAULT;
|
||||
error_setg_errno(errp, ret, "failed to read device config space");
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (!vfio_pci_config_setup(vdev, errp)) {
|
||||
goto error;
|
||||
}
|
||||
|
|
@ -3515,7 +3516,7 @@ static void vfio_pci_dev_class_init(ObjectClass *klass, const void *data)
|
|||
object_class_property_add_str(klass, "fd", NULL, vfio_pci_set_fd);
|
||||
#endif
|
||||
dc->desc = "VFIO-based PCI device assignment";
|
||||
pdc->realize = vfio_realize;
|
||||
pdc->realize = vfio_pci_realize;
|
||||
|
||||
object_class_property_set_description(klass, /* 1.3 */
|
||||
"host",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue