[PATCH 1/4] drm/amdgpu: Add wrapper for freeing vbios memory

Deucher, Alexander Alexander.Deucher at amd.com
Wed Feb 5 21:08:37 UTC 2025


[Public]

Might be nice to apply this to where we free the vbios in amdgpu_device_fini_sw() as well.  Either way:
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>


Alex

________________________________
From: Lazar, Lijo <Lijo.Lazar at amd.com>
Sent: Wednesday, February 5, 2025 6:38 AM
To: amd-gfx at lists.freedesktop.org <amd-gfx at lists.freedesktop.org>
Cc: Zhang, Hawking <Hawking.Zhang at amd.com>; Deucher, Alexander <Alexander.Deucher at amd.com>
Subject: [PATCH 1/4] drm/amdgpu: Add wrapper for freeing vbios memory

Use bios_release wrapper to release memory allocated for vbios image and
reset the variables.

Signed-off-by: Lijo Lazar <lijo.lazar at amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c
index 423fd2eebe1e..a9b3f4702f6c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c
@@ -84,6 +84,13 @@ static bool check_atom_bios(struct amdgpu_device *adev, size_t size)
         return false;
 }

+static inline void amdgpu_bios_release(struct amdgpu_device *adev)
+{
+       kfree(adev->bios);
+       adev->bios = NULL;
+       adev->bios_size = 0;
+}
+
 /* If you boot an IGP board with a discrete card as the primary,
  * the IGP rom is not accessible via the rom bar as the IGP rom is
  * part of the system bios.  On boot, the system bios puts a
@@ -121,7 +128,7 @@ static bool amdgpu_read_bios_from_vram(struct amdgpu_device *adev)
         iounmap(bios);

         if (!check_atom_bios(adev, size)) {
-               kfree(adev->bios);
+               amdgpu_bios_release(adev);
                 return false;
         }

@@ -149,7 +156,7 @@ bool amdgpu_read_bios(struct amdgpu_device *adev)
         pci_unmap_rom(adev->pdev, bios);

         if (!check_atom_bios(adev, size)) {
-               kfree(adev->bios);
+               amdgpu_bios_release(adev);
                 return false;
         }

@@ -189,7 +196,7 @@ static bool amdgpu_read_bios_from_rom(struct amdgpu_device *adev)
         amdgpu_asic_read_bios_from_rom(adev, adev->bios, len);

         if (!check_atom_bios(adev, len)) {
-               kfree(adev->bios);
+               amdgpu_bios_release(adev);
                 return false;
         }

@@ -225,7 +232,8 @@ static bool amdgpu_read_platform_bios(struct amdgpu_device *adev)

         return true;
 free_bios:
-       kfree(adev->bios);
+       amdgpu_bios_release(adev);
+
         return false;
 }

@@ -327,7 +335,7 @@ static bool amdgpu_atrm_get_bios(struct amdgpu_device *adev)
         }

         if (!check_atom_bios(adev, size)) {
-               kfree(adev->bios);
+               amdgpu_bios_release(adev);
                 return false;
         }
         adev->bios_size = size;
@@ -392,7 +400,7 @@ static bool amdgpu_acpi_vfct_bios(struct amdgpu_device *adev)
                                              GFP_KERNEL);

                         if (!check_atom_bios(adev, vhdr->ImageLength)) {
-                               kfree(adev->bios);
+                               amdgpu_bios_release(adev);
                                 return false;
                         }
                         adev->bios_size = vhdr->ImageLength;
--
2.25.1

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20250205/98ca7abd/attachment-0001.htm>


More information about the amd-gfx mailing list