lkml.org 
[lkml]   [2020]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 114/717] drm/amdkfd: Put ACPI table after using it
    Date
    From: Hanjun Guo <guohanjun@huawei.com>

    [ Upstream commit c4cb773c702be5519442c8375a6476d08fe2cb46 ]

    The acpi_get_table() should be coupled with acpi_put_table() if
    the mapped table is not used at runtime to release the table
    mapping which can prevent the memory leak.

    In kfd_create_crat_image_acpi(), crat_table is copied to pcrat_image,
    and in kfd_create_vcrat_image_cpu(), the acpi_table is only used to
    get the OEM information, so those two table mappings need to be released
    after using it.

    Fixes: 174de876d6d0 ("drm/amdkfd: Group up CRAT related functions")
    Fixes: 520b8fb755cc ("drm/amdkfd: Add topology support for CPUs")
    Signed-off-by: Hanjun Guo <guohanjun@huawei.com>
    Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
    Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/amd/amdkfd/kfd_crat.c | 13 +++++++++----
    1 file changed, 9 insertions(+), 4 deletions(-)

    diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_crat.c b/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
    index 3de5e14c5ae31..d7f67620f57ba 100644
    --- a/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
    +++ b/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
    @@ -774,6 +774,7 @@ int kfd_create_crat_image_acpi(void **crat_image, size_t *size)
    struct acpi_table_header *crat_table;
    acpi_status status;
    void *pcrat_image;
    + int rc = 0;

    if (!crat_image)
    return -EINVAL;
    @@ -798,14 +799,17 @@ int kfd_create_crat_image_acpi(void **crat_image, size_t *size)
    }

    pcrat_image = kvmalloc(crat_table->length, GFP_KERNEL);
    - if (!pcrat_image)
    - return -ENOMEM;
    + if (!pcrat_image) {
    + rc = -ENOMEM;
    + goto out;
    + }

    memcpy(pcrat_image, crat_table, crat_table->length);
    *crat_image = pcrat_image;
    *size = crat_table->length;
    -
    - return 0;
    +out:
    + acpi_put_table(crat_table);
    + return rc;
    }

    /* Memory required to create Virtual CRAT.
    @@ -988,6 +992,7 @@ static int kfd_create_vcrat_image_cpu(void *pcrat_image, size_t *size)
    CRAT_OEMID_LENGTH);
    memcpy(crat_table->oem_table_id, acpi_table->oem_table_id,
    CRAT_OEMTABLEID_LENGTH);
    + acpi_put_table(acpi_table);
    }
    crat_table->total_entries = 0;
    crat_table->num_domains = 0;
    --
    2.27.0


    \
     
     \ /
      Last update: 2020-12-28 16:39    [W:4.024 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site