All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 1/2] drm/amdkfd: Move the ignore_crat check before the CRAT table get
@ 2020-11-13  3:11 Hanjun Guo
  2020-11-13  3:11 ` [PATCH v3 2/2] drm/amdkfd: Put ACPI table after using it Hanjun Guo
  2020-11-13 18:52 ` [PATCH v3 1/2] drm/amdkfd: Move the ignore_crat check before the CRAT table get Felix Kuehling
  0 siblings, 2 replies; 3+ messages in thread
From: Hanjun Guo @ 2020-11-13  3:11 UTC (permalink / raw)
  To: Felix Kuehling; +Cc: linux-acpi, linux-kernel, Hanjun Guo

If the ignore_crat is set to non-zero value, it's no point getting
the CRAT table, so just move the ignore_crat check before we get the
CRAT table.

Signed-off-by: Hanjun Guo <guohanjun@huawei.com>
---
 drivers/gpu/drm/amd/amdkfd/kfd_crat.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_crat.c b/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
index 3de5e14..c23e571 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
@@ -780,6 +780,11 @@ int kfd_create_crat_image_acpi(void **crat_image, size_t *size)
 
 	*crat_image = NULL;
 
+	if (kfd_ignore_crat()) {
+		pr_info("CRAT table disabled by module option\n");
+		return -ENODATA;
+	}
+
 	/* Fetch the CRAT table from ACPI */
 	status = acpi_get_table(CRAT_SIGNATURE, 0, &crat_table);
 	if (status == AE_NOT_FOUND) {
@@ -792,11 +797,6 @@ int kfd_create_crat_image_acpi(void **crat_image, size_t *size)
 		return -EINVAL;
 	}
 
-	if (kfd_ignore_crat()) {
-		pr_info("CRAT table disabled by module option\n");
-		return -ENODATA;
-	}
-
 	pcrat_image = kvmalloc(crat_table->length, GFP_KERNEL);
 	if (!pcrat_image)
 		return -ENOMEM;
-- 
1.7.12.4


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH v3 2/2] drm/amdkfd: Put ACPI table after using it
  2020-11-13  3:11 [PATCH v3 1/2] drm/amdkfd: Move the ignore_crat check before the CRAT table get Hanjun Guo
@ 2020-11-13  3:11 ` Hanjun Guo
  2020-11-13 18:52 ` [PATCH v3 1/2] drm/amdkfd: Move the ignore_crat check before the CRAT table get Felix Kuehling
  1 sibling, 0 replies; 3+ messages in thread
From: Hanjun Guo @ 2020-11-13  3:11 UTC (permalink / raw)
  To: Felix Kuehling; +Cc: linux-acpi, linux-kernel, Hanjun Guo

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>
---
 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 c23e571..0dc8de0 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;
-- 
1.7.12.4


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v3 1/2] drm/amdkfd: Move the ignore_crat check before the CRAT table get
  2020-11-13  3:11 [PATCH v3 1/2] drm/amdkfd: Move the ignore_crat check before the CRAT table get Hanjun Guo
  2020-11-13  3:11 ` [PATCH v3 2/2] drm/amdkfd: Put ACPI table after using it Hanjun Guo
@ 2020-11-13 18:52 ` Felix Kuehling
  1 sibling, 0 replies; 3+ messages in thread
From: Felix Kuehling @ 2020-11-13 18:52 UTC (permalink / raw)
  To: Hanjun Guo; +Cc: linux-acpi, linux-kernel

Am 2020-11-12 um 10:11 p.m. schrieb Hanjun Guo:
> If the ignore_crat is set to non-zero value, it's no point getting
> the CRAT table, so just move the ignore_crat check before we get the
> CRAT table.
>
> Signed-off-by: Hanjun Guo <guohanjun@huawei.com>

Thank you! I applied the patches.

Regards,
  Felix


> ---
>  drivers/gpu/drm/amd/amdkfd/kfd_crat.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_crat.c b/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
> index 3de5e14..c23e571 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
> @@ -780,6 +780,11 @@ int kfd_create_crat_image_acpi(void **crat_image, size_t *size)
>  
>  	*crat_image = NULL;
>  
> +	if (kfd_ignore_crat()) {
> +		pr_info("CRAT table disabled by module option\n");
> +		return -ENODATA;
> +	}
> +
>  	/* Fetch the CRAT table from ACPI */
>  	status = acpi_get_table(CRAT_SIGNATURE, 0, &crat_table);
>  	if (status == AE_NOT_FOUND) {
> @@ -792,11 +797,6 @@ int kfd_create_crat_image_acpi(void **crat_image, size_t *size)
>  		return -EINVAL;
>  	}
>  
> -	if (kfd_ignore_crat()) {
> -		pr_info("CRAT table disabled by module option\n");
> -		return -ENODATA;
> -	}
> -
>  	pcrat_image = kvmalloc(crat_table->length, GFP_KERNEL);
>  	if (!pcrat_image)
>  		return -ENOMEM;

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-11-13 18:52 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-13  3:11 [PATCH v3 1/2] drm/amdkfd: Move the ignore_crat check before the CRAT table get Hanjun Guo
2020-11-13  3:11 ` [PATCH v3 2/2] drm/amdkfd: Put ACPI table after using it Hanjun Guo
2020-11-13 18:52 ` [PATCH v3 1/2] drm/amdkfd: Move the ignore_crat check before the CRAT table get Felix Kuehling

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.