diff mbox series

drm/tilcdc: Check priv->crtc validity in cpufreq_transition()

Message ID 20190802083901.2018-1-peter.ujfalusi@ti.com (mailing list archive)
State New, archived
Headers show
Series drm/tilcdc: Check priv->crtc validity in cpufreq_transition() | expand

Commit Message

Peter Ujfalusi Aug. 2, 2019, 8:39 a.m. UTC
The notifier can be called before we have crtc. With the check we can avoid
NULL pointer dereference within tilcdc_crtc_update_clk().

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
---
 drivers/gpu/drm/tilcdc/tilcdc_drv.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Jyri Sarha Aug. 2, 2019, 9:35 a.m. UTC | #1
On 02/08/2019 11:39, Peter Ujfalusi wrote:
> The notifier can be called before we have crtc. With the check we can avoid
> NULL pointer dereference within tilcdc_crtc_update_clk().
> 
> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>

Peter, do you have "drm/tilcdc: Register cpufreq notifier after we have
initialized crtc" [1] in your branch? It was merged in v5.0. If you do
and still see the crash, then I need to study this more.

Best regards,
Jyri

[1] https://patchwork.freedesktop.org/patch/292412/
    commit 432973fd3a20102840d5f7e61af9f1a03c217a4c

> ---
>  drivers/gpu/drm/tilcdc/tilcdc_drv.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> index 3046a4a4232d..85093123722d 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> @@ -169,7 +169,7 @@ static int cpufreq_transition(struct notifier_block *nb,
>  	struct tilcdc_drm_private *priv = container_of(nb,
>  			struct tilcdc_drm_private, freq_transition);
>  
> -	if (val == CPUFREQ_POSTCHANGE)
> +	if (val == CPUFREQ_POSTCHANGE && priv->crtc)
>  		tilcdc_crtc_update_clk(priv->crtc);
>  
>  	return 0;
>
Peter Ujfalusi Aug. 2, 2019, 9:55 a.m. UTC | #2
On 02/08/2019 12.35, Jyri Sarha wrote:
> On 02/08/2019 11:39, Peter Ujfalusi wrote:
>> The notifier can be called before we have crtc. With the check we can avoid
>> NULL pointer dereference within tilcdc_crtc_update_clk().
>>
>> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
> 
> Peter, do you have "drm/tilcdc: Register cpufreq notifier after we have
> initialized crtc" [1] in your branch? It was merged in v5.0. If you do
> and still see the crash, then I need to study this more.
> 
> Best regards,
> Jyri
> 
> [1] https://patchwork.freedesktop.org/patch/292412/
>     commit 432973fd3a20102840d5f7e61af9f1a03c217a4c

Your patch fixed the issue in a better way. I was just carrying this
since December 2018 and since it still applies I thought that I will
send it...

Just ignore this patch and thanks for the proper fix.

> 
>> ---
>>  drivers/gpu/drm/tilcdc/tilcdc_drv.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
>> index 3046a4a4232d..85093123722d 100644
>> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
>> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
>> @@ -169,7 +169,7 @@ static int cpufreq_transition(struct notifier_block *nb,
>>  	struct tilcdc_drm_private *priv = container_of(nb,
>>  			struct tilcdc_drm_private, freq_transition);
>>  
>> -	if (val == CPUFREQ_POSTCHANGE)
>> +	if (val == CPUFREQ_POSTCHANGE && priv->crtc)
>>  		tilcdc_crtc_update_clk(priv->crtc);
>>  
>>  	return 0;
>>
> 
> 

- Péter

Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
diff mbox series

Patch

diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index 3046a4a4232d..85093123722d 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -169,7 +169,7 @@  static int cpufreq_transition(struct notifier_block *nb,
 	struct tilcdc_drm_private *priv = container_of(nb,
 			struct tilcdc_drm_private, freq_transition);
 
-	if (val == CPUFREQ_POSTCHANGE)
+	if (val == CPUFREQ_POSTCHANGE && priv->crtc)
 		tilcdc_crtc_update_clk(priv->crtc);
 
 	return 0;