drm/msm/dpu: use drmm-managed allocation for dpu_encoder_virt
It is incorrect to use devm-managed memory allocations for DRM data structures exposed to userspace. They should use drmm_ allocations. Change struct dpu_encoder allocation to use drmm_encoder_alloc(). This removes the need to perform any actions on encoder destruction. Reviewed-by: Jessica Zhang <quic_jesszhan@quicinc.com> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Patchwork: https://patchwork.freedesktop.org/patch/570053/ Link: https://lore.kernel.org/r/20231201211845.1026967-14-dmitry.baryshkov@linaro.org
This commit is contained in:
parent
3285f4acb2
commit
cd42c56d9c
1 changed files with 10 additions and 40 deletions
|
@ -442,23 +442,6 @@ int dpu_encoder_get_linecount(struct drm_encoder *drm_enc)
|
|||
return linecount;
|
||||
}
|
||||
|
||||
static void dpu_encoder_destroy(struct drm_encoder *drm_enc)
|
||||
{
|
||||
struct dpu_encoder_virt *dpu_enc = NULL;
|
||||
int i = 0;
|
||||
|
||||
if (!drm_enc) {
|
||||
DPU_ERROR("invalid encoder\n");
|
||||
return;
|
||||
}
|
||||
|
||||
dpu_enc = to_dpu_encoder_virt(drm_enc);
|
||||
DPU_DEBUG_ENC(dpu_enc, "\n");
|
||||
|
||||
drm_encoder_cleanup(drm_enc);
|
||||
mutex_destroy(&dpu_enc->enc_lock);
|
||||
}
|
||||
|
||||
void dpu_encoder_helper_split_config(
|
||||
struct dpu_encoder_phys *phys_enc,
|
||||
enum dpu_intf interface)
|
||||
|
@ -2346,7 +2329,6 @@ static const struct drm_encoder_helper_funcs dpu_encoder_helper_funcs = {
|
|||
};
|
||||
|
||||
static const struct drm_encoder_funcs dpu_encoder_funcs = {
|
||||
.destroy = dpu_encoder_destroy,
|
||||
.late_register = dpu_encoder_late_register,
|
||||
.early_unregister = dpu_encoder_early_unregister,
|
||||
};
|
||||
|
@ -2357,20 +2339,13 @@ struct drm_encoder *dpu_encoder_init(struct drm_device *dev,
|
|||
{
|
||||
struct msm_drm_private *priv = dev->dev_private;
|
||||
struct dpu_kms *dpu_kms = to_dpu_kms(priv->kms);
|
||||
struct drm_encoder *drm_enc = NULL;
|
||||
struct dpu_encoder_virt *dpu_enc = NULL;
|
||||
int ret = 0;
|
||||
struct dpu_encoder_virt *dpu_enc;
|
||||
int ret;
|
||||
|
||||
dpu_enc = devm_kzalloc(dev->dev, sizeof(*dpu_enc), GFP_KERNEL);
|
||||
if (!dpu_enc)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
ret = drm_encoder_init(dev, &dpu_enc->base, &dpu_encoder_funcs,
|
||||
drm_enc_mode, NULL);
|
||||
if (ret) {
|
||||
devm_kfree(dev->dev, dpu_enc);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
dpu_enc = drmm_encoder_alloc(dev, struct dpu_encoder_virt, base,
|
||||
&dpu_encoder_funcs, drm_enc_mode, NULL);
|
||||
if (IS_ERR(dpu_enc))
|
||||
return ERR_CAST(dpu_enc);
|
||||
|
||||
drm_encoder_helper_add(&dpu_enc->base, &dpu_encoder_helper_funcs);
|
||||
|
||||
|
@ -2380,8 +2355,10 @@ struct drm_encoder *dpu_encoder_init(struct drm_device *dev,
|
|||
mutex_init(&dpu_enc->rc_lock);
|
||||
|
||||
ret = dpu_encoder_setup_display(dpu_enc, dpu_kms, disp_info);
|
||||
if (ret)
|
||||
goto fail;
|
||||
if (ret) {
|
||||
DPU_ERROR("failed to setup encoder\n");
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
||||
atomic_set(&dpu_enc->frame_done_timeout_ms, 0);
|
||||
atomic_set(&dpu_enc->frame_done_timeout_cnt, 0);
|
||||
|
@ -2397,13 +2374,6 @@ struct drm_encoder *dpu_encoder_init(struct drm_device *dev,
|
|||
DPU_DEBUG_ENC(dpu_enc, "created\n");
|
||||
|
||||
return &dpu_enc->base;
|
||||
|
||||
fail:
|
||||
DPU_ERROR("failed to create encoder\n");
|
||||
if (drm_enc)
|
||||
dpu_encoder_destroy(drm_enc);
|
||||
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
int dpu_encoder_wait_for_event(struct drm_encoder *drm_enc,
|
||||
|
|
Loading…
Add table
Reference in a new issue