Re: [PATCH 8/8] drm/mipi-dbi: Move drm_dev_{enter,exit}() out from fb_dirty functions

2022-11-25 Thread Noralf Trønnes



Den 21.11.2022 11.45, skrev Thomas Zimmermann:
> Call drm_dev_enter() and drm_dev_exit() in the outer-most callbacks
> of the modesetting pipeline. If drm_dev_enter() fails, the driver can
> thus avoid unnecessary work.
> 
> Signed-off-by: Thomas Zimmermann 
> ---

Makes sense in order to make the code more readable, the other
*_fb_dirty call sites (*_enable) are already protected.

Reviewed-by: Noralf Trønnes 


[PATCH 8/8] drm/mipi-dbi: Move drm_dev_{enter, exit}() out from fb_dirty functions

2022-11-21 Thread Thomas Zimmermann
Call drm_dev_enter() and drm_dev_exit() in the outer-most callbacks
of the modesetting pipeline. If drm_dev_enter() fails, the driver can
thus avoid unnecessary work.

Signed-off-by: Thomas Zimmermann 
---
 drivers/gpu/drm/drm_mipi_dbi.c | 13 +++--
 drivers/gpu/drm/tiny/ili9225.c | 13 +++--
 drivers/gpu/drm/tiny/st7586.c  | 13 +++--
 3 files changed, 21 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/drm_mipi_dbi.c b/drivers/gpu/drm/drm_mipi_dbi.c
index d45824a65c9fd..fc1c8c536370a 100644
--- a/drivers/gpu/drm/drm_mipi_dbi.c
+++ b/drivers/gpu/drm/drm_mipi_dbi.c
@@ -261,13 +261,10 @@ static void mipi_dbi_fb_dirty(struct iosys_map *src, 
struct drm_framebuffer *fb,
unsigned int width = rect->x2 - rect->x1;
struct mipi_dbi *dbi = >dbi;
bool swap = dbi->swap_bytes;
-   int idx, ret = 0;
+   int ret = 0;
bool full;
void *tr;
 
-   if (!drm_dev_enter(fb->dev, ))
-   return;
-
full = width == fb->width && height == fb->height;
 
DRM_DEBUG_KMS("Flushing [FB:%d] " DRM_RECT_FMT "\n", fb->base.id, 
DRM_RECT_ARG(rect));
@@ -290,8 +287,6 @@ static void mipi_dbi_fb_dirty(struct iosys_map *src, struct 
drm_framebuffer *fb,
 err_msg:
if (ret)
drm_err_once(fb->dev, "Failed to update display %d\n", ret);
-
-   drm_dev_exit(idx);
 }
 
 /**
@@ -330,6 +325,7 @@ void mipi_dbi_pipe_update(struct drm_simple_display_pipe 
*pipe,
_dbi_plane_state->shadow_plane_state;
struct drm_framebuffer *fb = state->fb;
struct drm_rect rect;
+   int idx;
 
if (!pipe->crtc.state->active)
return;
@@ -337,8 +333,13 @@ void mipi_dbi_pipe_update(struct drm_simple_display_pipe 
*pipe,
if (WARN_ON(!fb))
return;
 
+   if (!drm_dev_enter(fb->dev, ))
+   return;
+
if (drm_atomic_helper_damage_merged(old_state, state, ))
mipi_dbi_fb_dirty(_plane_state->data[0], fb, );
+
+   drm_dev_exit(idx);
 }
 EXPORT_SYMBOL(mipi_dbi_pipe_update);
 
diff --git a/drivers/gpu/drm/tiny/ili9225.c b/drivers/gpu/drm/tiny/ili9225.c
index ba5681b63ffbf..7ecbb8b141757 100644
--- a/drivers/gpu/drm/tiny/ili9225.c
+++ b/drivers/gpu/drm/tiny/ili9225.c
@@ -87,13 +87,10 @@ static void ili9225_fb_dirty(struct iosys_map *src, struct 
drm_framebuffer *fb,
bool swap = dbi->swap_bytes;
u16 x_start, y_start;
u16 x1, x2, y1, y2;
-   int idx, ret = 0;
+   int ret = 0;
bool full;
void *tr;
 
-   if (!drm_dev_enter(fb->dev, ))
-   return;
-
full = width == fb->width && height == fb->height;
 
DRM_DEBUG_KMS("Flushing [FB:%d] " DRM_RECT_FMT "\n", fb->base.id, 
DRM_RECT_ARG(rect));
@@ -156,8 +153,6 @@ static void ili9225_fb_dirty(struct iosys_map *src, struct 
drm_framebuffer *fb,
 err_msg:
if (ret)
dev_err_once(fb->dev->dev, "Failed to update display %d\n", 
ret);
-
-   drm_dev_exit(idx);
 }
 
 static void ili9225_pipe_update(struct drm_simple_display_pipe *pipe,
@@ -170,12 +165,18 @@ static void ili9225_pipe_update(struct 
drm_simple_display_pipe *pipe,
_dbi_plane_state->shadow_plane_state;
struct drm_framebuffer *fb = state->fb;
struct drm_rect rect;
+   int idx;
 
if (!pipe->crtc.state->active)
return;
 
+   if (!drm_dev_enter(fb->dev, ))
+   return;
+
if (drm_atomic_helper_damage_merged(old_state, state, ))
ili9225_fb_dirty(_plane_state->data[0], fb, );
+
+   drm_dev_exit(idx);
 }
 
 static void ili9225_pipe_enable(struct drm_simple_display_pipe *pipe,
diff --git a/drivers/gpu/drm/tiny/st7586.c b/drivers/gpu/drm/tiny/st7586.c
index ddaa82c2e58ae..0f5e532fe5d1d 100644
--- a/drivers/gpu/drm/tiny/st7586.c
+++ b/drivers/gpu/drm/tiny/st7586.c
@@ -113,10 +113,7 @@ static void st7586_fb_dirty(struct iosys_map *src, struct 
drm_framebuffer *fb,
 {
struct mipi_dbi_dev *dbidev = drm_to_mipi_dbi_dev(fb->dev);
struct mipi_dbi *dbi = >dbi;
-   int start, end, idx, ret = 0;
-
-   if (!drm_dev_enter(fb->dev, ))
-   return;
+   int start, end, ret = 0;
 
/* 3 pixels per byte, so grow clip to nearest multiple of 3 */
rect->x1 = rounddown(rect->x1, 3);
@@ -145,8 +142,6 @@ static void st7586_fb_dirty(struct iosys_map *src, struct 
drm_framebuffer *fb,
 err_msg:
if (ret)
dev_err_once(fb->dev->dev, "Failed to update display %d\n", 
ret);
-
-   drm_dev_exit(idx);
 }
 
 static void st7586_pipe_update(struct drm_simple_display_pipe *pipe,
@@ -159,12 +154,18 @@ static void st7586_pipe_update(struct 
drm_simple_display_pipe *pipe,
_dbi_plane_state->shadow_plane_state;
struct drm_framebuffer *fb = state->fb;
struct drm_rect rect;
+   int idx;
 
if (!pipe->crtc.state->active)
return;
 
+   if