[PATCH v6 21/25] coresight: cti: increase reference count when enabling cti

Mike Leach mike.leach at linaro.org
Mon Aug 3 13:13:12 EDT 2020


Please see my comment from the previous patch regarding the function here.

Mike


On Fri, 31 Jul 2020 at 07:42, Tingwei Zhang <tingwei at codeaurora.org> wrote:
>
> CTI device is enabled when associated coresight device is enabled.
> Increase the module and device reference count for CTI device
> when it's enabled. This can prevent CTI device be removed or
> module be unloaded when CTI device is enabled by an active trace
> session.
>
> Signed-off-by: Mike Leach <mike.leach at linaro.org>
> Signed-off-by: Tingwei Zhang <tingwei at codeaurora.org>
> ---
>  drivers/hwtracing/coresight/coresight.c | 17 ++++++++++++++---
>  1 file changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/hwtracing/coresight/coresight.c b/drivers/hwtracing/coresight/coresight.c
> index 83a46cf37968..78439b7cd8ba 100644
> --- a/drivers/hwtracing/coresight/coresight.c
> +++ b/drivers/hwtracing/coresight/coresight.c
> @@ -242,19 +242,30 @@ coresight_control_assoc_ectdev(struct coresight_device *csdev, bool enable)
>  {
>         int ect_ret = 0;
>         struct coresight_device *ect_csdev = csdev->ect_dev;
> +       struct module *mod;
>
>         if (!ect_csdev)
>                 return 0;
>         if ((!ect_ops(ect_csdev)->enable) || (!ect_ops(ect_csdev)->disable))
>                 return 0;
>
> +       mod = ect_csdev->dev.parent->driver->owner;
>         if (enable) {
> -               ect_ret = ect_ops(ect_csdev)->enable(ect_csdev);
> -               if (ect_ret)
> -                       csdev->ect_enabled = true;
> +               if (try_module_get(mod)) {
> +                       ect_ret = ect_ops(ect_csdev)->enable(ect_csdev);
> +                       if (ect_ret) {
> +                               module_put(mod);
> +                       } else {
> +                               get_device(ect_csdev->dev.parent);
> +                               csdev->ect_enabled = true;
> +                       }
> +               } else
> +                       ect_ret = -ENODEV;
>         } else {
>                 if (csdev->ect_enabled) {
>                         ect_ret = ect_ops(ect_csdev)->disable(ect_csdev);
> +                       put_device(ect_csdev->dev.parent);
> +                       module_put(mod);
>                         csdev->ect_enabled = false;
>                 }
>         }
> --
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
> a Linux Foundation Collaborative Project
>


--
Mike Leach
Principal Engineer, ARM Ltd.
Manchester Design Centre. UK



More information about the linux-arm-kernel mailing list