[PATCH v10 20/24] coresight: cti: increase reference count when enabling cti

Mathieu Poirier mathieu.poirier at linaro.org
Mon Sep 14 14:08:05 EDT 2020


On Fri, Aug 21, 2020 at 11:44:41AM +0800, Tingwei Zhang 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>
> ---

Reviewed-by: Mathieu Poirier <mathieu.poirier at linaro.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 d354fd57474e..6c9f6930b8b8 100644
> --- a/drivers/hwtracing/coresight/coresight.c
> +++ b/drivers/hwtracing/coresight/coresight.c
> @@ -241,19 +241,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
> 



More information about the linux-arm-kernel mailing list