[PATCH v2 03/13] drm/msm/dpu: use devres-managed allocation for interrupts data
Jessica Zhang
quic_jesszhan at quicinc.com
Wed Jul 19 00:26:02 UTC 2023
On 7/7/2023 4:12 PM, Dmitry Baryshkov wrote:
> Use devm_kzalloc to create interrupts data structure. This allows us to
> remove corresponding kfree and drop dpu_hw_intr_destroy() function.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov at linaro.org>
Reviewed-by: Jessica Zhang <quic_jesszhan at quicinc.com>
> ---
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c | 14 ++++++--------
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.h | 11 ++++-------
> drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 4 +---
> 3 files changed, 11 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
> index 5e2d68ebb113..945f34736206 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
> @@ -6,6 +6,8 @@
> #include <linux/debugfs.h>
> #include <linux/slab.h>
>
> +#include <drm/drm_managed.h>
> +
> #include "dpu_core_irq.h"
> #include "dpu_kms.h"
> #include "dpu_hw_interrupts.h"
> @@ -441,8 +443,9 @@ static void __intr_offset(const struct dpu_mdss_cfg *m,
> hw->blk_addr = addr + m->mdp[0].base;
> }
>
> -struct dpu_hw_intr *dpu_hw_intr_init(void __iomem *addr,
> - const struct dpu_mdss_cfg *m)
> +struct dpu_hw_intr *dpu_hw_intr_init(struct drm_device *dev,
> + void __iomem *addr,
> + const struct dpu_mdss_cfg *m)
> {
> struct dpu_hw_intr *intr;
> int nirq = MDP_INTR_MAX * 32;
> @@ -450,7 +453,7 @@ struct dpu_hw_intr *dpu_hw_intr_init(void __iomem *addr,
> if (!addr || !m)
> return ERR_PTR(-EINVAL);
>
> - intr = kzalloc(struct_size(intr, irq_tbl, nirq), GFP_KERNEL);
> + intr = drmm_kzalloc(dev, struct_size(intr, irq_tbl, nirq), GFP_KERNEL);
> if (!intr)
> return ERR_PTR(-ENOMEM);
>
> @@ -465,11 +468,6 @@ struct dpu_hw_intr *dpu_hw_intr_init(void __iomem *addr,
> return intr;
> }
>
> -void dpu_hw_intr_destroy(struct dpu_hw_intr *intr)
> -{
> - kfree(intr);
> -}
> -
> int dpu_core_irq_register_callback(struct dpu_kms *dpu_kms, int irq_idx,
> void (*irq_cb)(void *arg, int irq_idx),
> void *irq_arg)
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.h
> index 1f2dabc54c22..b0d7bb073203 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.h
> @@ -70,15 +70,12 @@ struct dpu_hw_intr {
>
> /**
> * dpu_hw_intr_init(): Initializes the interrupts hw object
> + * @dev: Corresponding device for devres management
> * @addr: mapped register io address of MDP
> * @m: pointer to MDSS catalog data
> */
> -struct dpu_hw_intr *dpu_hw_intr_init(void __iomem *addr,
> - const struct dpu_mdss_cfg *m);
> +struct dpu_hw_intr *dpu_hw_intr_init(struct drm_device *dev,
> + void __iomem *addr,
> + const struct dpu_mdss_cfg *m);
>
> -/**
> - * dpu_hw_intr_destroy(): Cleanup interrutps hw object
> - * @intr: pointer to interrupts hw object
> - */
> -void dpu_hw_intr_destroy(struct dpu_hw_intr *intr);
> #endif
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> index 85b8c9cc99ef..ef232dc838c7 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> @@ -807,8 +807,6 @@ static void _dpu_kms_hw_destroy(struct dpu_kms *dpu_kms)
> {
> int i;
>
> - if (dpu_kms->hw_intr)
> - dpu_hw_intr_destroy(dpu_kms->hw_intr);
> dpu_kms->hw_intr = NULL;
>
> /* safe to call these more than once during shutdown */
> @@ -1095,7 +1093,7 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
> goto err_pm_put;
> }
>
> - dpu_kms->hw_intr = dpu_hw_intr_init(dpu_kms->mmio, dpu_kms->catalog);
> + dpu_kms->hw_intr = dpu_hw_intr_init(dev, dpu_kms->mmio, dpu_kms->catalog);
> if (IS_ERR(dpu_kms->hw_intr)) {
> rc = PTR_ERR(dpu_kms->hw_intr);
> DPU_ERROR("hw_intr init failed: %d\n", rc);
> --
> 2.39.2
>
More information about the dri-devel
mailing list