Commit c4cb773c authored by Hanjun Guo's avatar Hanjun Guo Committed by Alex Deucher

drm/amdkfd: Put ACPI table after using it

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: 174de876 ("drm/amdkfd: Group up CRAT related functions")
Fixes: 520b8fb7 ("drm/amdkfd: Add topology support for CPUs")
Signed-off-by: default avatarHanjun Guo <guohanjun@huawei.com>
Reviewed-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 1cb02795
...@@ -780,6 +780,7 @@ int kfd_create_crat_image_acpi(void **crat_image, size_t *size) ...@@ -780,6 +780,7 @@ int kfd_create_crat_image_acpi(void **crat_image, size_t *size)
struct acpi_table_header *crat_table; struct acpi_table_header *crat_table;
acpi_status status; acpi_status status;
void *pcrat_image; void *pcrat_image;
int rc = 0;
if (!crat_image) if (!crat_image)
return -EINVAL; return -EINVAL;
...@@ -804,14 +805,17 @@ int kfd_create_crat_image_acpi(void **crat_image, size_t *size) ...@@ -804,14 +805,17 @@ int kfd_create_crat_image_acpi(void **crat_image, size_t *size)
} }
pcrat_image = kvmalloc(crat_table->length, GFP_KERNEL); pcrat_image = kvmalloc(crat_table->length, GFP_KERNEL);
if (!pcrat_image) if (!pcrat_image) {
return -ENOMEM; rc = -ENOMEM;
goto out;
}
memcpy(pcrat_image, crat_table, crat_table->length); memcpy(pcrat_image, crat_table, crat_table->length);
*crat_image = pcrat_image; *crat_image = pcrat_image;
*size = crat_table->length; *size = crat_table->length;
out:
return 0; acpi_put_table(crat_table);
return rc;
} }
/* Memory required to create Virtual CRAT. /* Memory required to create Virtual CRAT.
...@@ -994,6 +998,7 @@ static int kfd_create_vcrat_image_cpu(void *pcrat_image, size_t *size) ...@@ -994,6 +998,7 @@ static int kfd_create_vcrat_image_cpu(void *pcrat_image, size_t *size)
CRAT_OEMID_LENGTH); CRAT_OEMID_LENGTH);
memcpy(crat_table->oem_table_id, acpi_table->oem_table_id, memcpy(crat_table->oem_table_id, acpi_table->oem_table_id,
CRAT_OEMTABLEID_LENGTH); CRAT_OEMTABLEID_LENGTH);
acpi_put_table(acpi_table);
} }
crat_table->total_entries = 0; crat_table->total_entries = 0;
crat_table->num_domains = 0; crat_table->num_domains = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment