diff options
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.patch | 250 |
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 + |