diff mbox

[5/5] drm/tinydrm: Embed the mode in tinydrm_connector

Message ID 20180105165600.45568-6-noralf@tronnes.org (mailing list archive)
State New, archived
Headers show

Commit Message

Noralf Trønnes Jan. 5, 2018, 4:56 p.m. UTC
Embed the mode in tinydrm_connector instead of doing an devm_ allocation.
Remove unnecessary use of ret variable at the end of
tinydrm_display_pipe_init().

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
---
 drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c | 34 +++++++++++------------------
 1 file changed, 13 insertions(+), 21 deletions(-)

Comments

David Lechner Jan. 5, 2018, 7:14 p.m. UTC | #1
On 01/05/2018 10:56 AM, Noralf Trønnes wrote:
> Embed the mode in tinydrm_connector instead of doing an devm_ allocation.
> Remove unnecessary use of ret variable at the end of
> tinydrm_display_pipe_init().
> 
> Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
> ---
>   drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c | 34 +++++++++++------------------
>   1 file changed, 13 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c b/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
> index f41fc506ff87..dadd26d53216 100644
> --- a/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
> +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
> @@ -15,7 +15,7 @@
>   
>   struct tinydrm_connector {
>   	struct drm_connector base;
> -	const struct drm_display_mode *mode;
> +	struct drm_display_mode mode;
>   };
>   
>   static inline struct tinydrm_connector *
> @@ -29,7 +29,7 @@ static int tinydrm_connector_get_modes(struct drm_connector *connector)
>   	struct tinydrm_connector *tconn = to_tinydrm_connector(connector);
>   	struct drm_display_mode *mode;
>   
> -	mode = drm_mode_duplicate(connector->dev, tconn->mode);
> +	mode = drm_mode_duplicate(connector->dev, &tconn->mode);
>   	if (!mode) {
>   		DRM_ERROR("Failed to duplicate mode\n");
>   		return 0;
> @@ -92,7 +92,7 @@ tinydrm_connector_create(struct drm_device *drm,
>   	if (!tconn)
>   		return ERR_PTR(-ENOMEM);
>   
> -	tconn->mode = mode;
> +	tconn->mode = *mode;

I see there is a special drm_mode_copy() function, so I am wondering if this
is safe.

>   	connector = &tconn->base;
>   
>   	drm_connector_helper_add(connector, &tinydrm_connector_hfuncs);
> @@ -199,35 +199,27 @@ tinydrm_display_pipe_init(struct tinydrm_device *tdev,
>   			  unsigned int rotation)
>   {
>   	struct drm_device *drm = tdev->drm;
> -	struct drm_display_mode *mode_copy;
> +	struct drm_display_mode mode_copy;
>   	struct drm_connector *connector;
>   	int ret;
>   
> -	mode_copy = devm_kmalloc(drm->dev, sizeof(*mode_copy), GFP_KERNEL);
> -	if (!mode_copy)
> -		return -ENOMEM;
> -
> -	*mode_copy = *mode;
> -	ret = tinydrm_rotate_mode(mode_copy, rotation);
> +	mode_copy = *mode;

Same here.

> +	ret = tinydrm_rotate_mode(&mode_copy, rotation);
>   	if (ret) {
>   		DRM_ERROR("Illegal rotation value %u\n", rotation);
>   		return -EINVAL;
>   	}
>   
> -	drm->mode_config.min_width = mode_copy->hdisplay;
> -	drm->mode_config.max_width = mode_copy->hdisplay;
> -	drm->mode_config.min_height = mode_copy->vdisplay;
> -	drm->mode_config.max_height = mode_copy->vdisplay;
> +	drm->mode_config.min_width = mode_copy.hdisplay;
> +	drm->mode_config.max_width = mode_copy.hdisplay;
> +	drm->mode_config.min_height = mode_copy.vdisplay;
> +	drm->mode_config.max_height = mode_copy.vdisplay;
>   
> -	connector = tinydrm_connector_create(drm, mode_copy, connector_type);
> +	connector = tinydrm_connector_create(drm, &mode_copy, connector_type);
>   	if (IS_ERR(connector))
>   		return PTR_ERR(connector);
>   
> -	ret = drm_simple_display_pipe_init(drm, &tdev->pipe, funcs, formats,
> -					   format_count, NULL, connector);
> -	if (ret)
> -		return ret;
> -
> -	return 0;
> +	return drm_simple_display_pipe_init(drm, &tdev->pipe, funcs, formats,
> +					    format_count, NULL, connector);
>   }
>   EXPORT_SYMBOL(tinydrm_display_pipe_init);
>
Noralf Trønnes Jan. 6, 2018, 12:49 p.m. UTC | #2
Den 05.01.2018 20.14, skrev David Lechner:
> On 01/05/2018 10:56 AM, Noralf Trønnes wrote:
>> Embed the mode in tinydrm_connector instead of doing an devm_ 
>> allocation.
>> Remove unnecessary use of ret variable at the end of
>> tinydrm_display_pipe_init().
>>
>> Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
>> ---
>>   drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c | 34 
>> +++++++++++------------------
>>   1 file changed, 13 insertions(+), 21 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c 
>> b/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
>> index f41fc506ff87..dadd26d53216 100644
>> --- a/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
>> +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
>> @@ -15,7 +15,7 @@
>>     struct tinydrm_connector {
>>       struct drm_connector base;
>> -    const struct drm_display_mode *mode;
>> +    struct drm_display_mode mode;
>>   };
>>     static inline struct tinydrm_connector *
>> @@ -29,7 +29,7 @@ static int tinydrm_connector_get_modes(struct 
>> drm_connector *connector)
>>       struct tinydrm_connector *tconn = to_tinydrm_connector(connector);
>>       struct drm_display_mode *mode;
>>   -    mode = drm_mode_duplicate(connector->dev, tconn->mode);
>> +    mode = drm_mode_duplicate(connector->dev, &tconn->mode);
>>       if (!mode) {
>>           DRM_ERROR("Failed to duplicate mode\n");
>>           return 0;
>> @@ -92,7 +92,7 @@ tinydrm_connector_create(struct drm_device *drm,
>>       if (!tconn)
>>           return ERR_PTR(-ENOMEM);
>>   -    tconn->mode = mode;
>> +    tconn->mode = *mode;
>
> I see there is a special drm_mode_copy() function, so I am wondering 
> if this
> is safe.
>

It is safe, the underlying drm_mode_object isn't initialized/registered.
So to me an assignment like this makes it clear that it is so, but Laurent
also asked about this, so maybe I'm the odd one here.
I'll switch to drm_mode_copy().

Noralf.

>>       connector = &tconn->base;
>>         drm_connector_helper_add(connector, &tinydrm_connector_hfuncs);
>> @@ -199,35 +199,27 @@ tinydrm_display_pipe_init(struct tinydrm_device 
>> *tdev,
>>                 unsigned int rotation)
>>   {
>>       struct drm_device *drm = tdev->drm;
>> -    struct drm_display_mode *mode_copy;
>> +    struct drm_display_mode mode_copy;
>>       struct drm_connector *connector;
>>       int ret;
>>   -    mode_copy = devm_kmalloc(drm->dev, sizeof(*mode_copy), 
>> GFP_KERNEL);
>> -    if (!mode_copy)
>> -        return -ENOMEM;
>> -
>> -    *mode_copy = *mode;
>> -    ret = tinydrm_rotate_mode(mode_copy, rotation);
>> +    mode_copy = *mode;
>
> Same here.
>
>> +    ret = tinydrm_rotate_mode(&mode_copy, rotation);
>>       if (ret) {
>>           DRM_ERROR("Illegal rotation value %u\n", rotation);
>>           return -EINVAL;
>>       }
>>   -    drm->mode_config.min_width = mode_copy->hdisplay;
>> -    drm->mode_config.max_width = mode_copy->hdisplay;
>> -    drm->mode_config.min_height = mode_copy->vdisplay;
>> -    drm->mode_config.max_height = mode_copy->vdisplay;
>> +    drm->mode_config.min_width = mode_copy.hdisplay;
>> +    drm->mode_config.max_width = mode_copy.hdisplay;
>> +    drm->mode_config.min_height = mode_copy.vdisplay;
>> +    drm->mode_config.max_height = mode_copy.vdisplay;
>>   -    connector = tinydrm_connector_create(drm, mode_copy, 
>> connector_type);
>> +    connector = tinydrm_connector_create(drm, &mode_copy, 
>> connector_type);
>>       if (IS_ERR(connector))
>>           return PTR_ERR(connector);
>>   -    ret = drm_simple_display_pipe_init(drm, &tdev->pipe, funcs, 
>> formats,
>> -                       format_count, NULL, connector);
>> -    if (ret)
>> -        return ret;
>> -
>> -    return 0;
>> +    return drm_simple_display_pipe_init(drm, &tdev->pipe, funcs, 
>> formats,
>> +                        format_count, NULL, connector);
>>   }
>>   EXPORT_SYMBOL(tinydrm_display_pipe_init);
>>
>
David Lechner Jan. 6, 2018, 6 p.m. UTC | #3
On 01/06/2018 06:49 AM, Noralf Trønnes wrote:
> 
> Den 05.01.2018 20.14, skrev David Lechner:
>> On 01/05/2018 10:56 AM, Noralf Trønnes wrote:
>>> Embed the mode in tinydrm_connector instead of doing an devm_ allocation.
>>> Remove unnecessary use of ret variable at the end of
>>> tinydrm_display_pipe_init().
>>>
>>> Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
>>> ---
>>>   drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c | 34 +++++++++++------------------
>>>   1 file changed, 13 insertions(+), 21 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c b/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
>>> index f41fc506ff87..dadd26d53216 100644
>>> --- a/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
>>> +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
>>> @@ -15,7 +15,7 @@
>>>     struct tinydrm_connector {
>>>       struct drm_connector base;
>>> -    const struct drm_display_mode *mode;
>>> +    struct drm_display_mode mode;
>>>   };
>>>     static inline struct tinydrm_connector *
>>> @@ -29,7 +29,7 @@ static int tinydrm_connector_get_modes(struct drm_connector *connector)
>>>       struct tinydrm_connector *tconn = to_tinydrm_connector(connector);
>>>       struct drm_display_mode *mode;
>>>   -    mode = drm_mode_duplicate(connector->dev, tconn->mode);
>>> +    mode = drm_mode_duplicate(connector->dev, &tconn->mode);
>>>       if (!mode) {
>>>           DRM_ERROR("Failed to duplicate mode\n");
>>>           return 0;
>>> @@ -92,7 +92,7 @@ tinydrm_connector_create(struct drm_device *drm,
>>>       if (!tconn)
>>>           return ERR_PTR(-ENOMEM);
>>>   -    tconn->mode = mode;
>>> +    tconn->mode = *mode;
>>
>> I see there is a special drm_mode_copy() function, so I am wondering if this
>> is safe.
>>
> 
> It is safe, the underlying drm_mode_object isn't initialized/registered.
> So to me an assignment like this makes it clear that it is so, but Laurent
> also asked about this, so maybe I'm the odd one here.
> I'll switch to drm_mode_copy().
> 

I think a comment to this effect would be enough.
diff mbox

Patch

diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c b/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
index f41fc506ff87..dadd26d53216 100644
--- a/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
+++ b/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
@@ -15,7 +15,7 @@ 
 
 struct tinydrm_connector {
 	struct drm_connector base;
-	const struct drm_display_mode *mode;
+	struct drm_display_mode mode;
 };
 
 static inline struct tinydrm_connector *
@@ -29,7 +29,7 @@  static int tinydrm_connector_get_modes(struct drm_connector *connector)
 	struct tinydrm_connector *tconn = to_tinydrm_connector(connector);
 	struct drm_display_mode *mode;
 
-	mode = drm_mode_duplicate(connector->dev, tconn->mode);
+	mode = drm_mode_duplicate(connector->dev, &tconn->mode);
 	if (!mode) {
 		DRM_ERROR("Failed to duplicate mode\n");
 		return 0;
@@ -92,7 +92,7 @@  tinydrm_connector_create(struct drm_device *drm,
 	if (!tconn)
 		return ERR_PTR(-ENOMEM);
 
-	tconn->mode = mode;
+	tconn->mode = *mode;
 	connector = &tconn->base;
 
 	drm_connector_helper_add(connector, &tinydrm_connector_hfuncs);
@@ -199,35 +199,27 @@  tinydrm_display_pipe_init(struct tinydrm_device *tdev,
 			  unsigned int rotation)
 {
 	struct drm_device *drm = tdev->drm;
-	struct drm_display_mode *mode_copy;
+	struct drm_display_mode mode_copy;
 	struct drm_connector *connector;
 	int ret;
 
-	mode_copy = devm_kmalloc(drm->dev, sizeof(*mode_copy), GFP_KERNEL);
-	if (!mode_copy)
-		return -ENOMEM;
-
-	*mode_copy = *mode;
-	ret = tinydrm_rotate_mode(mode_copy, rotation);
+	mode_copy = *mode;
+	ret = tinydrm_rotate_mode(&mode_copy, rotation);
 	if (ret) {
 		DRM_ERROR("Illegal rotation value %u\n", rotation);
 		return -EINVAL;
 	}
 
-	drm->mode_config.min_width = mode_copy->hdisplay;
-	drm->mode_config.max_width = mode_copy->hdisplay;
-	drm->mode_config.min_height = mode_copy->vdisplay;
-	drm->mode_config.max_height = mode_copy->vdisplay;
+	drm->mode_config.min_width = mode_copy.hdisplay;
+	drm->mode_config.max_width = mode_copy.hdisplay;
+	drm->mode_config.min_height = mode_copy.vdisplay;
+	drm->mode_config.max_height = mode_copy.vdisplay;
 
-	connector = tinydrm_connector_create(drm, mode_copy, connector_type);
+	connector = tinydrm_connector_create(drm, &mode_copy, connector_type);
 	if (IS_ERR(connector))
 		return PTR_ERR(connector);
 
-	ret = drm_simple_display_pipe_init(drm, &tdev->pipe, funcs, formats,
-					   format_count, NULL, connector);
-	if (ret)
-		return ret;
-
-	return 0;
+	return drm_simple_display_pipe_init(drm, &tdev->pipe, funcs, formats,
+					    format_count, NULL, connector);
 }
 EXPORT_SYMBOL(tinydrm_display_pipe_init);