vfio/igd: Use g_autofree in vfio_probe_igd_bar4_quirk()

Pointer opregion, host and lpc are allocated and freed in
vfio_probe_igd_bar4_quirk(). Use g_autofree to automatically
free them.

Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
Zhenzhong Duan 2024-05-22 12:40:13 +08:00 committed by Cédric Le Goater
parent 0d3e89bea8
commit b4e1670c49
1 changed files with 12 additions and 15 deletions

View File

@ -368,7 +368,9 @@ static const MemoryRegionOps vfio_igd_index_quirk = {
void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr) void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
{ {
g_autofree struct vfio_region_info *rom = NULL; g_autofree struct vfio_region_info *rom = NULL;
struct vfio_region_info *opregion = NULL, *host = NULL, *lpc = NULL; g_autofree struct vfio_region_info *opregion = NULL;
g_autofree struct vfio_region_info *host = NULL;
g_autofree struct vfio_region_info *lpc = NULL;
VFIOQuirk *quirk; VFIOQuirk *quirk;
VFIOIGDQuirk *igd; VFIOIGDQuirk *igd;
PCIDevice *lpc_bridge; PCIDevice *lpc_bridge;
@ -426,7 +428,7 @@ void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
if ((ret || !rom->size) && !vdev->pdev.romfile) { if ((ret || !rom->size) && !vdev->pdev.romfile) {
error_report("IGD device %s has no ROM, legacy mode disabled", error_report("IGD device %s has no ROM, legacy mode disabled",
vdev->vbasedev.name); vdev->vbasedev.name);
goto out; return;
} }
/* /*
@ -437,7 +439,7 @@ void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
error_report("IGD device %s hotplugged, ROM disabled, " error_report("IGD device %s hotplugged, ROM disabled, "
"legacy mode disabled", vdev->vbasedev.name); "legacy mode disabled", vdev->vbasedev.name);
vdev->rom_read_failed = true; vdev->rom_read_failed = true;
goto out; return;
} }
/* /*
@ -450,7 +452,7 @@ void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
if (ret) { if (ret) {
error_report("IGD device %s does not support OpRegion access," error_report("IGD device %s does not support OpRegion access,"
"legacy mode disabled", vdev->vbasedev.name); "legacy mode disabled", vdev->vbasedev.name);
goto out; return;
} }
ret = vfio_get_dev_region_info(&vdev->vbasedev, ret = vfio_get_dev_region_info(&vdev->vbasedev,
@ -459,7 +461,7 @@ void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
if (ret) { if (ret) {
error_report("IGD device %s does not support host bridge access," error_report("IGD device %s does not support host bridge access,"
"legacy mode disabled", vdev->vbasedev.name); "legacy mode disabled", vdev->vbasedev.name);
goto out; return;
} }
ret = vfio_get_dev_region_info(&vdev->vbasedev, ret = vfio_get_dev_region_info(&vdev->vbasedev,
@ -468,7 +470,7 @@ void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
if (ret) { if (ret) {
error_report("IGD device %s does not support LPC bridge access," error_report("IGD device %s does not support LPC bridge access,"
"legacy mode disabled", vdev->vbasedev.name); "legacy mode disabled", vdev->vbasedev.name);
goto out; return;
} }
gmch = vfio_pci_read_config(&vdev->pdev, IGD_GMCH, 4); gmch = vfio_pci_read_config(&vdev->pdev, IGD_GMCH, 4);
@ -482,7 +484,7 @@ void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
error_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name); error_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name);
error_report("IGD device %s failed to enable VGA access, " error_report("IGD device %s failed to enable VGA access, "
"legacy mode disabled", vdev->vbasedev.name); "legacy mode disabled", vdev->vbasedev.name);
goto out; return;
} }
/* Create our LPC/ISA bridge */ /* Create our LPC/ISA bridge */
@ -490,7 +492,7 @@ void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
if (ret) { if (ret) {
error_report("IGD device %s failed to create LPC bridge, " error_report("IGD device %s failed to create LPC bridge, "
"legacy mode disabled", vdev->vbasedev.name); "legacy mode disabled", vdev->vbasedev.name);
goto out; return;
} }
/* Stuff some host values into the VM PCI host bridge */ /* Stuff some host values into the VM PCI host bridge */
@ -498,14 +500,14 @@ void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
if (ret) { if (ret) {
error_report("IGD device %s failed to modify host bridge, " error_report("IGD device %s failed to modify host bridge, "
"legacy mode disabled", vdev->vbasedev.name); "legacy mode disabled", vdev->vbasedev.name);
goto out; return;
} }
/* Setup OpRegion access */ /* Setup OpRegion access */
if (!vfio_pci_igd_opregion_init(vdev, opregion, &err)) { if (!vfio_pci_igd_opregion_init(vdev, opregion, &err)) {
error_append_hint(&err, "IGD legacy mode disabled\n"); error_append_hint(&err, "IGD legacy mode disabled\n");
error_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name); error_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name);
goto out; return;
} }
/* Setup our quirk to munge GTT addresses to the VM allocated buffer */ /* Setup our quirk to munge GTT addresses to the VM allocated buffer */
@ -607,9 +609,4 @@ void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
} }
trace_vfio_pci_igd_bdsm_enabled(vdev->vbasedev.name, ggms_mb + gms_mb); trace_vfio_pci_igd_bdsm_enabled(vdev->vbasedev.name, ggms_mb + gms_mb);
out:
g_free(opregion);
g_free(host);
g_free(lpc);
} }