aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4366-drm-amd-display-Use-kvzalloc-for-potentially-large-a.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4366-drm-amd-display-Use-kvzalloc-for-potentially-large-a.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4366-drm-amd-display-Use-kvzalloc-for-potentially-large-a.patch250
1 files changed, 250 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4366-drm-amd-display-Use-kvzalloc-for-potentially-large-a.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4366-drm-amd-display-Use-kvzalloc-for-potentially-large-a.patch
new file mode 100644
index 00000000..e2409d19
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4366-drm-amd-display-Use-kvzalloc-for-potentially-large-a.patch
@@ -0,0 +1,250 @@
+From b17e81a56cb5dcef910104604238eaeb8aedc114 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <michel.daenzer@amd.com>
+Date: Tue, 17 Apr 2018 12:25:22 +0200
+Subject: [PATCH 4366/5725] drm/amd/display: Use kvzalloc for potentially large
+ allocations
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Allocating up to 32 physically contiguous pages can easily fail (and has
+failed for me), and isn't necessary anyway.
+
+Reviewed-by: Harry Wentland <harry.wentland@amd.com>
+Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc_surface.c | 14 ++---
+ .../drm/amd/display/modules/color/color_gamma.c | 72 ++++++++++++----------
+ 2 files changed, 45 insertions(+), 41 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_surface.c b/drivers/gpu/drm/amd/display/dc/core/dc_surface.c
+index 9593877..68a71ad 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_surface.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_surface.c
+@@ -72,8 +72,8 @@ struct dc_plane_state *dc_create_plane_state(struct dc *dc)
+ {
+ struct dc *core_dc = dc;
+
+- struct dc_plane_state *plane_state = kzalloc(sizeof(*plane_state),
+- GFP_KERNEL);
++ struct dc_plane_state *plane_state = kvzalloc(sizeof(*plane_state),
++ GFP_KERNEL);
+
+ if (NULL == plane_state)
+ return NULL;
+@@ -126,7 +126,7 @@ static void dc_plane_state_free(struct kref *kref)
+ {
+ struct dc_plane_state *plane_state = container_of(kref, struct dc_plane_state, refcount);
+ destruct(plane_state);
+- kfree(plane_state);
++ kvfree(plane_state);
+ }
+
+ void dc_plane_state_release(struct dc_plane_state *plane_state)
+@@ -142,7 +142,7 @@ void dc_gamma_retain(struct dc_gamma *gamma)
+ static void dc_gamma_free(struct kref *kref)
+ {
+ struct dc_gamma *gamma = container_of(kref, struct dc_gamma, refcount);
+- kfree(gamma);
++ kvfree(gamma);
+ }
+
+ void dc_gamma_release(struct dc_gamma **gamma)
+@@ -153,7 +153,7 @@ void dc_gamma_release(struct dc_gamma **gamma)
+
+ struct dc_gamma *dc_create_gamma(void)
+ {
+- struct dc_gamma *gamma = kzalloc(sizeof(*gamma), GFP_KERNEL);
++ struct dc_gamma *gamma = kvzalloc(sizeof(*gamma), GFP_KERNEL);
+
+ if (gamma == NULL)
+ goto alloc_fail;
+@@ -173,7 +173,7 @@ void dc_transfer_func_retain(struct dc_transfer_func *tf)
+ static void dc_transfer_func_free(struct kref *kref)
+ {
+ struct dc_transfer_func *tf = container_of(kref, struct dc_transfer_func, refcount);
+- kfree(tf);
++ kvfree(tf);
+ }
+
+ void dc_transfer_func_release(struct dc_transfer_func *tf)
+@@ -183,7 +183,7 @@ void dc_transfer_func_release(struct dc_transfer_func *tf)
+
+ struct dc_transfer_func *dc_create_transfer_func()
+ {
+- struct dc_transfer_func *tf = kzalloc(sizeof(*tf), GFP_KERNEL);
++ struct dc_transfer_func *tf = kvzalloc(sizeof(*tf), GFP_KERNEL);
+
+ if (tf == NULL)
+ goto alloc_fail;
+diff --git a/drivers/gpu/drm/amd/display/modules/color/color_gamma.c b/drivers/gpu/drm/amd/display/modules/color/color_gamma.c
+index ad0ff50..15e5b72 100644
+--- a/drivers/gpu/drm/amd/display/modules/color/color_gamma.c
++++ b/drivers/gpu/drm/amd/display/modules/color/color_gamma.c
+@@ -1274,19 +1274,19 @@ bool mod_color_calculate_regamma_params(struct dc_transfer_func *output_tf,
+
+ output_tf->type = TF_TYPE_DISTRIBUTED_POINTS;
+
+- rgb_user = kzalloc(sizeof(*rgb_user) * (ramp->num_entries + _EXTRA_POINTS),
+- GFP_KERNEL);
++ rgb_user = kvzalloc(sizeof(*rgb_user) * (ramp->num_entries + _EXTRA_POINTS),
++ GFP_KERNEL);
+ if (!rgb_user)
+ goto rgb_user_alloc_fail;
+- rgb_regamma = kzalloc(sizeof(*rgb_regamma) * (MAX_HW_POINTS + _EXTRA_POINTS),
+- GFP_KERNEL);
++ rgb_regamma = kvzalloc(sizeof(*rgb_regamma) * (MAX_HW_POINTS + _EXTRA_POINTS),
++ GFP_KERNEL);
+ if (!rgb_regamma)
+ goto rgb_regamma_alloc_fail;
+- axix_x = kzalloc(sizeof(*axix_x) * (ramp->num_entries + 3),
+- GFP_KERNEL);
++ axix_x = kvzalloc(sizeof(*axix_x) * (ramp->num_entries + 3),
++ GFP_KERNEL);
+ if (!axix_x)
+ goto axix_x_alloc_fail;
+- coeff = kzalloc(sizeof(*coeff) * (MAX_HW_POINTS + _EXTRA_POINTS), GFP_KERNEL);
++ coeff = kvzalloc(sizeof(*coeff) * (MAX_HW_POINTS + _EXTRA_POINTS), GFP_KERNEL);
+ if (!coeff)
+ goto coeff_alloc_fail;
+
+@@ -1338,13 +1338,13 @@ bool mod_color_calculate_regamma_params(struct dc_transfer_func *output_tf,
+
+ ret = true;
+
+- kfree(coeff);
++ kvfree(coeff);
+ coeff_alloc_fail:
+- kfree(axix_x);
++ kvfree(axix_x);
+ axix_x_alloc_fail:
+- kfree(rgb_regamma);
++ kvfree(rgb_regamma);
+ rgb_regamma_alloc_fail:
+- kfree(rgb_user);
++ kvfree(rgb_user);
+ rgb_user_alloc_fail:
+ return ret;
+ }
+@@ -1480,19 +1480,19 @@ bool mod_color_calculate_degamma_params(struct dc_transfer_func *input_tf,
+
+ input_tf->type = TF_TYPE_DISTRIBUTED_POINTS;
+
+- rgb_user = kzalloc(sizeof(*rgb_user) * (ramp->num_entries + _EXTRA_POINTS),
+- GFP_KERNEL);
++ rgb_user = kvzalloc(sizeof(*rgb_user) * (ramp->num_entries + _EXTRA_POINTS),
++ GFP_KERNEL);
+ if (!rgb_user)
+ goto rgb_user_alloc_fail;
+- curve = kzalloc(sizeof(*curve) * (MAX_HW_POINTS + _EXTRA_POINTS),
+- GFP_KERNEL);
++ curve = kvzalloc(sizeof(*curve) * (MAX_HW_POINTS + _EXTRA_POINTS),
++ GFP_KERNEL);
+ if (!curve)
+ goto curve_alloc_fail;
+- axix_x = kzalloc(sizeof(*axix_x) * (ramp->num_entries + _EXTRA_POINTS),
+- GFP_KERNEL);
++ axix_x = kvzalloc(sizeof(*axix_x) * (ramp->num_entries + _EXTRA_POINTS),
++ GFP_KERNEL);
+ if (!axix_x)
+ goto axix_x_alloc_fail;
+- coeff = kzalloc(sizeof(*coeff) * (MAX_HW_POINTS + _EXTRA_POINTS), GFP_KERNEL);
++ coeff = kvzalloc(sizeof(*coeff) * (MAX_HW_POINTS + _EXTRA_POINTS), GFP_KERNEL);
+ if (!coeff)
+ goto coeff_alloc_fail;
+
+@@ -1534,13 +1534,13 @@ bool mod_color_calculate_degamma_params(struct dc_transfer_func *input_tf,
+
+ ret = true;
+
+- kfree(coeff);
++ kvfree(coeff);
+ coeff_alloc_fail:
+- kfree(axix_x);
++ kvfree(axix_x);
+ axix_x_alloc_fail:
+- kfree(curve);
++ kvfree(curve);
+ curve_alloc_fail:
+- kfree(rgb_user);
++ kvfree(rgb_user);
+ rgb_user_alloc_fail:
+
+ return ret;
+@@ -1569,8 +1569,9 @@ bool mod_color_calculate_curve(enum dc_transfer_func_predefined trans,
+ }
+ ret = true;
+ } else if (trans == TRANSFER_FUNCTION_PQ) {
+- rgb_regamma = kzalloc(sizeof(*rgb_regamma) * (MAX_HW_POINTS +
+- _EXTRA_POINTS), GFP_KERNEL);
++ rgb_regamma = kvzalloc(sizeof(*rgb_regamma) *
++ (MAX_HW_POINTS + _EXTRA_POINTS),
++ GFP_KERNEL);
+ if (!rgb_regamma)
+ goto rgb_regamma_alloc_fail;
+ points->end_exponent = 7;
+@@ -1590,11 +1591,12 @@ bool mod_color_calculate_curve(enum dc_transfer_func_predefined trans,
+ }
+ ret = true;
+
+- kfree(rgb_regamma);
++ kvfree(rgb_regamma);
+ } else if (trans == TRANSFER_FUNCTION_SRGB ||
+ trans == TRANSFER_FUNCTION_BT709) {
+- rgb_regamma = kzalloc(sizeof(*rgb_regamma) * (MAX_HW_POINTS +
+- _EXTRA_POINTS), GFP_KERNEL);
++ rgb_regamma = kvzalloc(sizeof(*rgb_regamma) *
++ (MAX_HW_POINTS + _EXTRA_POINTS),
++ GFP_KERNEL);
+ if (!rgb_regamma)
+ goto rgb_regamma_alloc_fail;
+ points->end_exponent = 0;
+@@ -1612,7 +1614,7 @@ bool mod_color_calculate_curve(enum dc_transfer_func_predefined trans,
+ }
+ ret = true;
+
+- kfree(rgb_regamma);
++ kvfree(rgb_regamma);
+ }
+ rgb_regamma_alloc_fail:
+ return ret;
+@@ -1636,8 +1638,9 @@ bool mod_color_calculate_degamma_curve(enum dc_transfer_func_predefined trans,
+ }
+ ret = true;
+ } else if (trans == TRANSFER_FUNCTION_PQ) {
+- rgb_degamma = kzalloc(sizeof(*rgb_degamma) * (MAX_HW_POINTS +
+- _EXTRA_POINTS), GFP_KERNEL);
++ rgb_degamma = kvzalloc(sizeof(*rgb_degamma) *
++ (MAX_HW_POINTS + _EXTRA_POINTS),
++ GFP_KERNEL);
+ if (!rgb_degamma)
+ goto rgb_degamma_alloc_fail;
+
+@@ -1652,11 +1655,12 @@ bool mod_color_calculate_degamma_curve(enum dc_transfer_func_predefined trans,
+ }
+ ret = true;
+
+- kfree(rgb_degamma);
++ kvfree(rgb_degamma);
+ } else if (trans == TRANSFER_FUNCTION_SRGB ||
+ trans == TRANSFER_FUNCTION_BT709) {
+- rgb_degamma = kzalloc(sizeof(*rgb_degamma) * (MAX_HW_POINTS +
+- _EXTRA_POINTS), GFP_KERNEL);
++ rgb_degamma = kvzalloc(sizeof(*rgb_degamma) *
++ (MAX_HW_POINTS + _EXTRA_POINTS),
++ GFP_KERNEL);
+ if (!rgb_degamma)
+ goto rgb_degamma_alloc_fail;
+
+@@ -1670,7 +1674,7 @@ bool mod_color_calculate_degamma_curve(enum dc_transfer_func_predefined trans,
+ }
+ ret = true;
+
+- kfree(rgb_degamma);
++ kvfree(rgb_degamma);
+ }
+ points->end_exponent = 0;
+ points->x_point_at_y1_red = 1;
+--
+2.7.4
+