The structures are large and they do not require continuous
memory so use vzalloc.

Fixes: 70839da63605 ("drm/amd/display: Add new DCN401 sources")
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4126
Cc: Aurabindo Pillai <aurabindo.pil...@amd.com>
Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
---
 .../gpu/drm/amd/display/dc/dml2/dml21/dml21_wrapper.c | 11 ++++++-----
 drivers/gpu/drm/amd/display/dc/dml2/dml2_wrapper.c    |  6 ++++--
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_wrapper.c 
b/drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_wrapper.c
index 94e99e540691c..5d16f36ec95c8 100644
--- a/drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_wrapper.c
+++ b/drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_wrapper.c
@@ -2,6 +2,7 @@
 //
 // Copyright 2024 Advanced Micro Devices, Inc.
 
+#include <linux/vmalloc.h>
 
 #include "dml2_internal_types.h"
 #include "dml_top.h"
@@ -13,11 +14,11 @@
 
 static bool dml21_allocate_memory(struct dml2_context **dml_ctx)
 {
-       *dml_ctx = kzalloc(sizeof(struct dml2_context), GFP_KERNEL);
+       *dml_ctx = vzalloc(sizeof(struct dml2_context));
        if (!(*dml_ctx))
                return false;
 
-       (*dml_ctx)->v21.dml_init.dml2_instance = kzalloc(sizeof(struct 
dml2_instance), GFP_KERNEL);
+       (*dml_ctx)->v21.dml_init.dml2_instance = vzalloc(sizeof(struct 
dml2_instance));
        if (!((*dml_ctx)->v21.dml_init.dml2_instance))
                return false;
 
@@ -27,7 +28,7 @@ static bool dml21_allocate_memory(struct dml2_context 
**dml_ctx)
        (*dml_ctx)->v21.mode_support.display_config = 
&(*dml_ctx)->v21.display_config;
        (*dml_ctx)->v21.mode_programming.display_config = 
(*dml_ctx)->v21.mode_support.display_config;
 
-       (*dml_ctx)->v21.mode_programming.programming = kzalloc(sizeof(struct 
dml2_display_cfg_programming), GFP_KERNEL);
+       (*dml_ctx)->v21.mode_programming.programming = vzalloc(sizeof(struct 
dml2_display_cfg_programming));
        if (!((*dml_ctx)->v21.mode_programming.programming))
                return false;
 
@@ -115,8 +116,8 @@ bool dml21_create(const struct dc *in_dc, struct 
dml2_context **dml_ctx, const s
 
 void dml21_destroy(struct dml2_context *dml2)
 {
-       kfree(dml2->v21.dml_init.dml2_instance);
-       kfree(dml2->v21.mode_programming.programming);
+       vfree(dml2->v21.dml_init.dml2_instance);
+       vfree(dml2->v21.mode_programming.programming);
 }
 
 static void dml21_calculate_rq_and_dlg_params(const struct dc *dc, struct 
dc_state *context, struct resource_context *out_new_hw_state,
diff --git a/drivers/gpu/drm/amd/display/dc/dml2/dml2_wrapper.c 
b/drivers/gpu/drm/amd/display/dc/dml2/dml2_wrapper.c
index 04316d719426a..525b7d04bf84c 100644
--- a/drivers/gpu/drm/amd/display/dc/dml2/dml2_wrapper.c
+++ b/drivers/gpu/drm/amd/display/dc/dml2/dml2_wrapper.c
@@ -24,6 +24,8 @@
  *
  */
 
+#include <linux/vmalloc.h>
+
 #include "display_mode_core.h"
 #include "dml2_internal_types.h"
 #include "dml2_utils.h"
@@ -750,7 +752,7 @@ bool dml2_validate(const struct dc *in_dc, struct dc_state 
*context, struct dml2
 
 static inline struct dml2_context *dml2_allocate_memory(void)
 {
-       return (struct dml2_context *) kzalloc(sizeof(struct dml2_context), 
GFP_KERNEL);
+       return (struct dml2_context *) vzalloc(sizeof(struct dml2_context));
 }
 
 static void dml2_init(const struct dc *in_dc, const struct 
dml2_configuration_options *config, struct dml2_context **dml2)
@@ -824,7 +826,7 @@ void dml2_destroy(struct dml2_context *dml2)
 
        if (dml2->architecture == dml2_architecture_21)
                dml21_destroy(dml2);
-       kfree(dml2);
+       vfree(dml2);
 }
 
 void dml2_extract_dram_and_fclk_change_support(struct dml2_context *dml2,
-- 
2.49.0

Reply via email to