Эх сурвалжийг харах

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 <[email protected]>
Anjaneya Prasad Musunuri 4 жил өмнө
parent
commit
e719a10f9f

+ 20 - 20
msm/sde/sde_hw_reg_dma_v1_color_proc.c

@@ -522,7 +522,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;
 
@@ -570,7 +570,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;
@@ -1191,7 +1191,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;
@@ -1228,7 +1228,7 @@ int reg_dmav1_setup_rc_datav1(struct sde_hw_dspp *ctx, void *cfg)
 	}
 
 exit:
-	kfree(data);
+	kvfree(data);
 	return rc;
 }
 
@@ -1332,7 +1332,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;
 
@@ -1403,7 +1403,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);
 
 }
 
@@ -2417,7 +2417,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;
 
@@ -2479,7 +2479,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;
 }
 
@@ -2686,7 +2686,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;
@@ -2746,7 +2746,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,
@@ -4109,7 +4109,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;
 
@@ -4157,7 +4157,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)
@@ -4277,7 +4277,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;
 
@@ -4353,7 +4353,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)
@@ -4431,7 +4431,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;
 
@@ -4496,7 +4496,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,
@@ -4950,7 +4950,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;
 
@@ -5086,7 +5086,7 @@ static int __reg_dmav1_setup_demurav1_cfg0(struct sde_hw_dspp *ctx,
 		goto quit;
 	}
 quit:
-	kfree(temp);
+	kvfree(temp);
 	return rc;
 }
 
@@ -5106,7 +5106,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;
 
@@ -5184,7 +5184,7 @@ static int __reg_dmav1_setup_demurav1_cfg1(struct sde_hw_dspp *ctx,
 	}
 
 quit:
-	kfree(cfg1_data);
+	kvfree(cfg1_data);
 	return rc;
 }