Re: [PATCH] drm/xe/display: check for error on drmm_mutex_init
On Thu, Mar 21, 2024 at 11:31:24AM +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 --- drivers/gpu/drm/xe/display/xe_display.c | 14 -- 1 file changed, 8 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..ac2e58d1fa82 100644 --- a/drivers/gpu/drm/xe/display/xe_display.c +++ b/drivers/gpu/drm/xe/display/xe_display.c @@ -107,12 +107,14 @@ int xe_display_create(struct xe_device *xe) xe->display.hotplug.dp_wq = alloc_ordered_workqueue("xe-dp", 0); - drmm_mutex_init(>drm, >sb_lock); - drmm_mutex_init(>drm, >display.backlight.lock); - drmm_mutex_init(>drm, >display.audio.mutex); - drmm_mutex_init(>drm, >display.wm.wm_mutex); - drmm_mutex_init(>drm, >display.pps.mutex); - drmm_mutex_init(>drm, >display.hdcp.hdcp_mutex); + if ((drmm_mutex_init(>drm, >sb_lock)) || ^^ you only need 2 parenthesis if you were going to record the return. Lucas De Marchi
Re: [PATCH] drm/xe/display: check for error on drmm_mutex_init
On Thu, 21 Mar 2024, 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 > --- > drivers/gpu/drm/xe/display/xe_display.c | 14 -- > 1 file changed, 8 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..ac2e58d1fa82 100644 > --- a/drivers/gpu/drm/xe/display/xe_display.c > +++ b/drivers/gpu/drm/xe/display/xe_display.c > @@ -107,12 +107,14 @@ int xe_display_create(struct xe_device *xe) > > xe->display.hotplug.dp_wq = alloc_ordered_workqueue("xe-dp", 0); > > - drmm_mutex_init(>drm, >sb_lock); > - drmm_mutex_init(>drm, >display.backlight.lock); > - drmm_mutex_init(>drm, >display.audio.mutex); > - drmm_mutex_init(>drm, >display.wm.wm_mutex); > - drmm_mutex_init(>drm, >display.pps.mutex); > - drmm_mutex_init(>drm, >display.hdcp.hdcp_mutex); > + if ((drmm_mutex_init(>drm, >sb_lock)) || > + (drmm_mutex_init(>drm, >display.backlight.lock)) || > + (drmm_mutex_init(>drm, >display.audio.mutex)) || > + (drmm_mutex_init(>drm, >display.wm.wm_mutex)) || > + (drmm_mutex_init(>drm, >display.pps.mutex)) || > + (drmm_mutex_init(>drm, >display.hdcp.hdcp_mutex))) Excessive parentheses. BR, Jani. > + return -ENOMEM; > + > xe->enabled_irq_mask = ~0; > > err = drmm_add_action_or_reset(>drm, display_destroy, NULL); -- Jani Nikula, Intel
[PATCH] drm/xe/display: check for error on drmm_mutex_init
Check return value for drmm_mutex_init as it can fail and return on failure. Signed-off-by: Arun R Murthy --- drivers/gpu/drm/xe/display/xe_display.c | 14 -- 1 file changed, 8 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..ac2e58d1fa82 100644 --- a/drivers/gpu/drm/xe/display/xe_display.c +++ b/drivers/gpu/drm/xe/display/xe_display.c @@ -107,12 +107,14 @@ int xe_display_create(struct xe_device *xe) xe->display.hotplug.dp_wq = alloc_ordered_workqueue("xe-dp", 0); - drmm_mutex_init(>drm, >sb_lock); - drmm_mutex_init(>drm, >display.backlight.lock); - drmm_mutex_init(>drm, >display.audio.mutex); - drmm_mutex_init(>drm, >display.wm.wm_mutex); - drmm_mutex_init(>drm, >display.pps.mutex); - drmm_mutex_init(>drm, >display.hdcp.hdcp_mutex); + if ((drmm_mutex_init(>drm, >sb_lock)) || + (drmm_mutex_init(>drm, >display.backlight.lock)) || + (drmm_mutex_init(>drm, >display.audio.mutex)) || + (drmm_mutex_init(>drm, >display.wm.wm_mutex)) || + (drmm_mutex_init(>drm, >display.pps.mutex)) || + (drmm_mutex_init(>drm, >display.hdcp.hdcp_mutex))) + return -ENOMEM; + xe->enabled_irq_mask = ~0; err = drmm_add_action_or_reset(>drm, display_destroy, NULL); -- 2.25.1
Re: [PATCH] drm/xe/display: check for error on drmm_mutex_init
On Thu, Mar 21, 2024 at 05:04:51AM +, Murthy, Arun R wrote: -Original Message- From: De Marchi, Lucas Sent: Wednesday, March 20, 2024 6:06 AM To: Murthy, Arun R Cc: intel-gfx@lists.freedesktop.org; intel...@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 >--- > 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(>drm, >sb_lock); >- drmm_mutex_init(>drm, >display.backlight.lock); >- drmm_mutex_init(>drm, >display.audio.mutex); >- drmm_mutex_init(>drm, >display.wm.wm_mutex); >- drmm_mutex_init(>drm, >display.pps.mutex); >- drmm_mutex_init(>drm, >display.hdcp.hdcp_mutex); >+ err = drmm_mutex_init(>drm, >sb_lock); >+ if (err) >+ return err; >+ err = drmm_mutex_init(>drm, >display.backlight.lock); >+ if (err) >+ return err; >+ err = drmm_mutex_init(>drm, >display.audio.mutex); >+ if (err) >+ return err; >+ err = drmm_mutex_init(>drm, >display.wm.wm_mutex); >+ if (err) >+ return err; >+ err = drmm_mutex_init(>drm, >display.pps.mutex); >+ if (err) >+ return err; >+ err = drmm_mutex_init(>drm, >display.hdcp.hdcp_mutex); >+ if (err) >+ return err; humn... but not very pretty. What about? if ((err = drmm_mutex_init(>drm, >sb_lock)) || (err = drmm_mutex_init(>drm, >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(>drm, display_destroy, NULL); >-- >2.25.1 >
RE: [PATCH] drm/xe/display: check for error on drmm_mutex_init
> -Original Message- > From: De Marchi, Lucas > Sent: Wednesday, March 20, 2024 6:06 AM > To: Murthy, Arun R > Cc: intel-gfx@lists.freedesktop.org; intel...@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 > >--- > > 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(>drm, >sb_lock); > >-drmm_mutex_init(>drm, >display.backlight.lock); > >-drmm_mutex_init(>drm, >display.audio.mutex); > >-drmm_mutex_init(>drm, >display.wm.wm_mutex); > >-drmm_mutex_init(>drm, >display.pps.mutex); > >-drmm_mutex_init(>drm, >display.hdcp.hdcp_mutex); > >+err = drmm_mutex_init(>drm, >sb_lock); > >+if (err) > >+return err; > >+err = drmm_mutex_init(>drm, >display.backlight.lock); > >+if (err) > >+return err; > >+err = drmm_mutex_init(>drm, >display.audio.mutex); > >+if (err) > >+return err; > >+err = drmm_mutex_init(>drm, >display.wm.wm_mutex); > >+if (err) > >+return err; > >+err = drmm_mutex_init(>drm, >display.pps.mutex); > >+if (err) > >+return err; > >+err = drmm_mutex_init(>drm, >display.hdcp.hdcp_mutex); > >+if (err) > >+return err; > > > humn... but not very pretty. What about? > > if ((err = drmm_mutex_init(>drm, >sb_lock)) || > (err = drmm_mutex_init(>drm, >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 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(>drm, display_destroy, NULL); > >-- > >2.25.1 > >
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 --- 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(>drm, >sb_lock); - drmm_mutex_init(>drm, >display.backlight.lock); - drmm_mutex_init(>drm, >display.audio.mutex); - drmm_mutex_init(>drm, >display.wm.wm_mutex); - drmm_mutex_init(>drm, >display.pps.mutex); - drmm_mutex_init(>drm, >display.hdcp.hdcp_mutex); + err = drmm_mutex_init(>drm, >sb_lock); + if (err) + return err; + err = drmm_mutex_init(>drm, >display.backlight.lock); + if (err) + return err; + err = drmm_mutex_init(>drm, >display.audio.mutex); + if (err) + return err; + err = drmm_mutex_init(>drm, >display.wm.wm_mutex); + if (err) + return err; + err = drmm_mutex_init(>drm, >display.pps.mutex); + if (err) + return err; + err = drmm_mutex_init(>drm, >display.hdcp.hdcp_mutex); + if (err) + return err; humn... but not very pretty. What about? if ((err = drmm_mutex_init(>drm, >sb_lock)) || (err = drmm_mutex_init(>drm, >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? Lucas De Marchi xe->enabled_irq_mask = ~0; err = drmm_add_action_or_reset(>drm, display_destroy, NULL); -- 2.25.1
[PATCH] drm/xe/display: check for error on drmm_mutex_init
Check return value for drmm_mutex_init as it can fail and return on failure. Signed-off-by: Arun R Murthy --- 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(>drm, >sb_lock); - drmm_mutex_init(>drm, >display.backlight.lock); - drmm_mutex_init(>drm, >display.audio.mutex); - drmm_mutex_init(>drm, >display.wm.wm_mutex); - drmm_mutex_init(>drm, >display.pps.mutex); - drmm_mutex_init(>drm, >display.hdcp.hdcp_mutex); + err = drmm_mutex_init(>drm, >sb_lock); + if (err) + return err; + err = drmm_mutex_init(>drm, >display.backlight.lock); + if (err) + return err; + err = drmm_mutex_init(>drm, >display.audio.mutex); + if (err) + return err; + err = drmm_mutex_init(>drm, >display.wm.wm_mutex); + if (err) + return err; + err = drmm_mutex_init(>drm, >display.pps.mutex); + if (err) + return err; + err = drmm_mutex_init(>drm, >display.hdcp.hdcp_mutex); + if (err) + return err; xe->enabled_irq_mask = ~0; err = drmm_add_action_or_reset(>drm, display_destroy, NULL); -- 2.25.1