[PATCH] drm/xe/display: check for error on drmm_mutex_init

Lucas De Marchi lucas.demarchi at intel.com
Thu Mar 21 05:43:47 UTC 2024


On Thu, Mar 21, 2024 at 05:04:51AM +0000, Murthy, Arun R wrote:
>
>
>> -----Original Message-----
>> From: De Marchi, Lucas <lucas.demarchi at intel.com>
>> Sent: Wednesday, March 20, 2024 6:06 AM
>> To: Murthy, Arun R <arun.r.murthy at intel.com>
>> Cc: intel-gfx at lists.freedesktop.org; intel-xe at lists.freedesktop.org
>> Subject: Re: [PATCH] drm/xe/display: check for error on drmm_mutex_init
>>
>> On Tue, Mar 19, 2024 at 08:33:41AM +0530, Arun R Murthy wrote:
>> >Check return value for drmm_mutex_init as it can fail and return on
>> >failure.
>> >
>> >Signed-off-by: Arun R Murthy <arun.r.murthy at intel.com>
>> >---
>> > drivers/gpu/drm/xe/display/xe_display.c | 24 ++++++++++++++++++------
>> > 1 file changed, 18 insertions(+), 6 deletions(-)
>> >
>> >diff --git a/drivers/gpu/drm/xe/display/xe_display.c
>> >b/drivers/gpu/drm/xe/display/xe_display.c
>> >index e4db069f0db3..c59fa832758d 100644
>> >--- a/drivers/gpu/drm/xe/display/xe_display.c
>> >+++ b/drivers/gpu/drm/xe/display/xe_display.c
>> >@@ -107,12 +107,24 @@ int xe_display_create(struct xe_device *xe)
>> >
>> > 	xe->display.hotplug.dp_wq = alloc_ordered_workqueue("xe-dp", 0);
>> >
>> >-	drmm_mutex_init(&xe->drm, &xe->sb_lock);
>> >-	drmm_mutex_init(&xe->drm, &xe->display.backlight.lock);
>> >-	drmm_mutex_init(&xe->drm, &xe->display.audio.mutex);
>> >-	drmm_mutex_init(&xe->drm, &xe->display.wm.wm_mutex);
>> >-	drmm_mutex_init(&xe->drm, &xe->display.pps.mutex);
>> >-	drmm_mutex_init(&xe->drm, &xe->display.hdcp.hdcp_mutex);
>> >+	err = drmm_mutex_init(&xe->drm, &xe->sb_lock);
>> >+	if (err)
>> >+		return err;
>> >+	err = drmm_mutex_init(&xe->drm, &xe->display.backlight.lock);
>> >+	if (err)
>> >+		return err;
>> >+	err = drmm_mutex_init(&xe->drm, &xe->display.audio.mutex);
>> >+	if (err)
>> >+		return err;
>> >+	err = drmm_mutex_init(&xe->drm, &xe->display.wm.wm_mutex);
>> >+	if (err)
>> >+		return err;
>> >+	err = drmm_mutex_init(&xe->drm, &xe->display.pps.mutex);
>> >+	if (err)
>> >+		return err;
>> >+	err = drmm_mutex_init(&xe->drm, &xe->display.hdcp.hdcp_mutex);
>> >+	if (err)
>> >+		return err;
>>
>>
>> humn... but not very pretty. What about?
>>
>> 	if ((err = drmm_mutex_init(&xe->drm, &xe->sb_lock)) ||
>> 	    (err = drmm_mutex_init(&xe->drm, &xe->display.backlight.lock)) ||
>> 	    (err = ...))
>> 		return err;
>>
>> I think there are few places in life for assignment + check in single statement,
>> but IMO this is one of them where the alternative is uglier and more error
>> prone.
>>
>> thoughts?
>>
>
>We should not proceed with the remaining mutex_init in case of failures. As an alternative we can have

with the code above, we are not proceeding with the other drmm_mutex_init() initializations.

foo() || bar() doesn't execute bar() if foo() returned != 0.

Lucas De Marchi

>drmm_mutex_init(var1) ? (drmm_mutex_init(var2) ? drmm_mutex_init(var3) : return ret) : return ret;
>
>With the existing one traversing the code is more easier, these optimization might make the code look complex.
>
>Thanks and Regards,
>Arun R Murthy
>--------------------
>> Lucas De Marchi
>>
>> > 	xe->enabled_irq_mask = ~0;
>> >
>> > 	err = drmm_add_action_or_reset(&xe->drm, display_destroy, NULL);
>> >--
>> >2.25.1
>> >


More information about the Intel-xe mailing list