From 0730de9e4bf2d721384d48f527e9612c080aa11f Mon Sep 17 00:00:00 2001 From: Anjaneya Prasad Musunuri Date: Tue, 15 Jun 2021 16:43:35 +0530 Subject: [PATCH] disp: msm: sde: allocate virtually contiguous memory This change uses kvzalloc to allocate memory for lutdma buffers. This is needed since kernel cannot guarantee that physically contiguous allocations greater than 32 KB will succeed. Change-Id: I91c12bbd612408692ba8e4a3cd9ac1ce308eda64 Signed-off-by: Anjaneya Prasad Musunuri --- msm/sde/sde_hw_reg_dma_v1_color_proc.c | 40 +++++++++++++------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/msm/sde/sde_hw_reg_dma_v1_color_proc.c b/msm/sde/sde_hw_reg_dma_v1_color_proc.c index 93d9b58729a1..3509d6a2d309 100644 --- a/msm/sde/sde_hw_reg_dma_v1_color_proc.c +++ b/msm/sde/sde_hw_reg_dma_v1_color_proc.c @@ -530,7 +530,7 @@ void reg_dmav1_setup_dspp_vlutv18(struct sde_hw_dspp *ctx, void *cfg) return; } - data = kzalloc(VLUT_LEN, GFP_KERNEL); + data = kvzalloc(VLUT_LEN, GFP_KERNEL); if (!data) return; @@ -578,7 +578,7 @@ void reg_dmav1_setup_dspp_vlutv18(struct sde_hw_dspp *ctx, void *cfg) } exit: - kfree(data); + kvfree(data); /* update flush bit */ if (!rc && ctl && ctl->ops.update_bitmask_dspp_pavlut) { int dspp_idx; @@ -1199,7 +1199,7 @@ int reg_dmav1_setup_rc_datav1(struct sde_hw_dspp *ctx, void *cfg) } DRM_DEBUG_DRIVER("allocating %u bytes of memory for dma\n", buf_sz); - data = kzalloc(buf_sz, GFP_KERNEL); + data = kvzalloc(buf_sz, GFP_KERNEL); if (!data) { DRM_ERROR("memory allocation failed ret %d\n", rc); return -ENOMEM; @@ -1236,7 +1236,7 @@ int reg_dmav1_setup_rc_datav1(struct sde_hw_dspp *ctx, void *cfg) } exit: - kfree(data); + kvfree(data); return rc; } @@ -1340,7 +1340,7 @@ void reg_dmav1_setup_dspp_pcc_common(struct sde_hw_dspp *ctx, void *cfg) return; } - data = kzalloc(PCC_LEN, GFP_KERNEL); + data = kvzalloc(PCC_LEN, GFP_KERNEL); if (!data) return; @@ -1411,7 +1411,7 @@ void reg_dmav1_setup_dspp_pcc_common(struct sde_hw_dspp *ctx, void *cfg) DRM_ERROR("failed to kick off ret %d\n", rc); exit: - kfree(data); + kvfree(data); } @@ -2425,7 +2425,7 @@ static int reg_dmav1_setup_vig_igc_common(struct sde_hw_reg_dma_ops *dma_ops, hw_cfg->len, sizeof(struct drm_msm_igc_lut)); } - data = kzalloc(VIG_1D_LUT_IGC_LEN * sizeof(u32), GFP_KERNEL); + data = kvzalloc(VIG_1D_LUT_IGC_LEN * sizeof(u32), GFP_KERNEL); if (!data) return -ENOMEM; @@ -2487,7 +2487,7 @@ static int reg_dmav1_setup_vig_igc_common(struct sde_hw_reg_dma_ops *dma_ops, if (rc) DRM_ERROR("setting opcode failed ret %d\n", rc); exit: - kfree(data); + kvfree(data); return rc; } @@ -2694,7 +2694,7 @@ void reg_dmav1_setup_dma_igcv5(struct sde_hw_pipe *ctx, void *cfg, return; } - data = kzalloc(DMA_1D_LUT_IGC_LEN * sizeof(u32), GFP_KERNEL); + data = kvzalloc(DMA_1D_LUT_IGC_LEN * sizeof(u32), GFP_KERNEL); if (!data) { DRM_ERROR("failed to allocate memory for igc\n"); return; @@ -2756,7 +2756,7 @@ void reg_dmav1_setup_dma_igcv5(struct sde_hw_pipe *ctx, void *cfg, if (rc) DRM_ERROR("failed to kick off ret %d\n", rc); igc_exit: - kfree(data); + kvfree(data); } static void dma_gcv5_off(struct sde_hw_pipe *ctx, void *cfg, @@ -4119,7 +4119,7 @@ void reg_dmav2_setup_dspp_igcv4(struct sde_hw_dspp *ctx, void *cfg) if (len % transfer_size_bytes) len = len + (transfer_size_bytes - len % transfer_size_bytes); - data = kzalloc(len, GFP_KERNEL); + data = kvzalloc(len, GFP_KERNEL); if (!data) return; @@ -4167,7 +4167,7 @@ void reg_dmav2_setup_dspp_igcv4(struct sde_hw_dspp *ctx, void *cfg) _perform_sbdma_kickoff(ctx, hw_cfg, dma_ops, blk, IGC); exit: - kfree(data); + kvfree(data); } static void dspp_3d_gamutv43_off(struct sde_hw_dspp *ctx, void *cfg) @@ -4287,7 +4287,7 @@ void reg_dmav2_setup_dspp_3d_gamutv43(struct sde_hw_dspp *ctx, void *cfg) if (len % transfer_size_bytes) len = len + (transfer_size_bytes - len % transfer_size_bytes); - data = kzalloc(len, GFP_KERNEL); + data = kvzalloc(len, GFP_KERNEL); if (!data) return; @@ -4363,7 +4363,7 @@ void reg_dmav2_setup_dspp_3d_gamutv43(struct sde_hw_dspp *ctx, void *cfg) _perform_sbdma_kickoff(ctx, hw_cfg, dma_ops, blk, GAMUT); exit: - kfree(data); + kvfree(data); } void reg_dmav2_setup_vig_gamutv61(struct sde_hw_pipe *ctx, void *cfg) @@ -4441,7 +4441,7 @@ void reg_dmav2_setup_vig_gamutv61(struct sde_hw_pipe *ctx, void *cfg) if (len % transfer_size_bytes) len = len + (transfer_size_bytes - len % transfer_size_bytes); - data = kzalloc(len, GFP_KERNEL); + data = kvzalloc(len, GFP_KERNEL); if (!data) return; @@ -4506,7 +4506,7 @@ void reg_dmav2_setup_vig_gamutv61(struct sde_hw_pipe *ctx, void *cfg) DRM_ERROR("failed to kick off ret %d\n", rc); exit: - kfree(data); + kvfree(data); } int reg_dmav1_setup_spr_cfg3_params(struct sde_hw_dspp *ctx, @@ -4958,7 +4958,7 @@ static int __reg_dmav1_setup_demurav1_cfg0(struct sde_hw_dspp *ctx, return 0; } - temp = kzalloc(sizeof(struct drm_msm_dem_cfg), GFP_KERNEL); + temp = kvzalloc(sizeof(struct drm_msm_dem_cfg), GFP_KERNEL); if (!temp) return -ENOMEM; @@ -5094,7 +5094,7 @@ static int __reg_dmav1_setup_demurav1_cfg0(struct sde_hw_dspp *ctx, goto quit; } quit: - kfree(temp); + kvfree(temp); return rc; } @@ -5114,7 +5114,7 @@ static int __reg_dmav1_setup_demurav1_cfg1(struct sde_hw_dspp *ctx, return 0; } len = ARRAY_SIZE(dcfg->cfg1_param0_c0); - cfg1_data = kcalloc(len, sizeof(u32), GFP_KERNEL); + cfg1_data = kvzalloc((len * sizeof(u32)), GFP_KERNEL); if (!cfg1_data) return -ENOMEM; @@ -5192,7 +5192,7 @@ static int __reg_dmav1_setup_demurav1_cfg1(struct sde_hw_dspp *ctx, } quit: - kfree(cfg1_data); + kvfree(cfg1_data); return rc; }