From: Ville Syrjälä <ville.syrj...@linux.intel.com>

Pass along the format info from .fb_create() to aliminate the
redundant drm_get_format_info() calls from the gem fb code.

Cc: Dave Airlie <airl...@redhat.com>
Cc: Gerd Hoffmann <kra...@redhat.com>
Cc: Sandy Huang <h...@rock-chips.com>
Cc: "Heiko Stübner" <he...@sntech.de>
Cc: Andy Yan <andy....@rock-chips.com>
Cc: Oleksandr Andrushchenko <oleksandr_andrushche...@epam.com>
Cc: virtualizat...@lists.linux.dev
Cc: spice-devel@lists.freedesktop.org
Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
---
 drivers/gpu/drm/drm_gem_framebuffer_helper.c | 21 ++++++++------------
 drivers/gpu/drm/qxl/qxl_display.c            |  2 +-
 drivers/gpu/drm/rockchip/rockchip_drm_fb.c   |  3 ++-
 drivers/gpu/drm/xen/xen_drm_front_kms.c      |  2 +-
 include/drm/drm_gem_framebuffer_helper.h     |  2 ++
 5 files changed, 14 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/drm_gem_framebuffer_helper.c 
b/drivers/gpu/drm/drm_gem_framebuffer_helper.c
index dc9cb6cdcfd6..44016915c8fe 100644
--- a/drivers/gpu/drm/drm_gem_framebuffer_helper.c
+++ b/drivers/gpu/drm/drm_gem_framebuffer_helper.c
@@ -67,6 +67,7 @@ EXPORT_SYMBOL_GPL(drm_gem_fb_get_obj);
 static int
 drm_gem_fb_init(struct drm_device *dev,
                 struct drm_framebuffer *fb,
+                const struct drm_format_info *info,
                 const struct drm_mode_fb_cmd2 *mode_cmd,
                 struct drm_gem_object **obj, unsigned int num_planes,
                 const struct drm_framebuffer_funcs *funcs)
@@ -74,7 +75,7 @@ drm_gem_fb_init(struct drm_device *dev,
        unsigned int i;
        int ret;
 
-       drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd);
+       drm_helper_mode_fill_fb_struct(dev, fb, info, mode_cmd);
 
        for (i = 0; i < num_planes; i++)
                fb->obj[i] = obj[i];
@@ -151,21 +152,14 @@ EXPORT_SYMBOL(drm_gem_fb_create_handle);
 int drm_gem_fb_init_with_funcs(struct drm_device *dev,
                               struct drm_framebuffer *fb,
                               struct drm_file *file,
+                              const struct drm_format_info *info,
                               const struct drm_mode_fb_cmd2 *mode_cmd,
                               const struct drm_framebuffer_funcs *funcs)
 {
-       const struct drm_format_info *info;
        struct drm_gem_object *objs[DRM_FORMAT_MAX_PLANES];
        unsigned int i;
        int ret;
 
-       info = drm_get_format_info(dev, mode_cmd->pixel_format,
-                                  mode_cmd->modifier[0]);
-       if (!info) {
-               drm_dbg_kms(dev, "Failed to get FB format info\n");
-               return -EINVAL;
-       }
-
        if (drm_drv_uses_atomic_modeset(dev) &&
            !drm_any_plane_has_format(dev, mode_cmd->pixel_format,
                                      mode_cmd->modifier[0])) {
@@ -200,7 +194,7 @@ int drm_gem_fb_init_with_funcs(struct drm_device *dev,
                }
        }
 
-       ret = drm_gem_fb_init(dev, fb, mode_cmd, objs, i, funcs);
+       ret = drm_gem_fb_init(dev, fb, info, mode_cmd, objs, i, funcs);
        if (ret)
                goto err_gem_object_put;
 
@@ -233,6 +227,7 @@ EXPORT_SYMBOL_GPL(drm_gem_fb_init_with_funcs);
  */
 struct drm_framebuffer *
 drm_gem_fb_create_with_funcs(struct drm_device *dev, struct drm_file *file,
+                            const struct drm_format_info *info,
                             const struct drm_mode_fb_cmd2 *mode_cmd,
                             const struct drm_framebuffer_funcs *funcs)
 {
@@ -243,7 +238,7 @@ drm_gem_fb_create_with_funcs(struct drm_device *dev, struct 
drm_file *file,
        if (!fb)
                return ERR_PTR(-ENOMEM);
 
-       ret = drm_gem_fb_init_with_funcs(dev, fb, file, mode_cmd, funcs);
+       ret = drm_gem_fb_init_with_funcs(dev, fb, file, info, mode_cmd, funcs);
        if (ret) {
                kfree(fb);
                return ERR_PTR(ret);
@@ -285,7 +280,7 @@ drm_gem_fb_create(struct drm_device *dev, struct drm_file 
*file,
                  const struct drm_format_info *info,
                  const struct drm_mode_fb_cmd2 *mode_cmd)
 {
-       return drm_gem_fb_create_with_funcs(dev, file, mode_cmd,
+       return drm_gem_fb_create_with_funcs(dev, file, info, mode_cmd,
                                            &drm_gem_fb_funcs);
 }
 EXPORT_SYMBOL_GPL(drm_gem_fb_create);
@@ -324,7 +319,7 @@ drm_gem_fb_create_with_dirty(struct drm_device *dev, struct 
drm_file *file,
                             const struct drm_format_info *info,
                             const struct drm_mode_fb_cmd2 *mode_cmd)
 {
-       return drm_gem_fb_create_with_funcs(dev, file, mode_cmd,
+       return drm_gem_fb_create_with_funcs(dev, file, info, mode_cmd,
                                            &drm_gem_fb_funcs_dirtyfb);
 }
 EXPORT_SYMBOL_GPL(drm_gem_fb_create_with_dirty);
diff --git a/drivers/gpu/drm/qxl/qxl_display.c 
b/drivers/gpu/drm/qxl/qxl_display.c
index f7bc83f2d489..ae7e572b1b4a 100644
--- a/drivers/gpu/drm/qxl/qxl_display.c
+++ b/drivers/gpu/drm/qxl/qxl_display.c
@@ -1179,7 +1179,7 @@ qxl_user_framebuffer_create(struct drm_device *dev,
                            const struct drm_format_info *info,
                            const struct drm_mode_fb_cmd2 *mode_cmd)
 {
-       return drm_gem_fb_create_with_funcs(dev, file_priv, mode_cmd,
+       return drm_gem_fb_create_with_funcs(dev, file_priv, info, mode_cmd,
                                            &qxl_fb_funcs);
 }
 
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c 
b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
index d46297bec5f8..1211ca0ffa00 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
@@ -40,7 +40,8 @@ rockchip_fb_create(struct drm_device *dev, struct drm_file 
*file,
        if (!afbc_fb)
                return ERR_PTR(-ENOMEM);
 
-       ret = drm_gem_fb_init_with_funcs(dev, &afbc_fb->base, file, mode_cmd,
+       ret = drm_gem_fb_init_with_funcs(dev, &afbc_fb->base,
+                                        file, info, mode_cmd,
                                         &rockchip_drm_fb_funcs);
        if (ret) {
                kfree(afbc_fb);
diff --git a/drivers/gpu/drm/xen/xen_drm_front_kms.c 
b/drivers/gpu/drm/xen/xen_drm_front_kms.c
index a360003bee47..806ec66ee7f7 100644
--- a/drivers/gpu/drm/xen/xen_drm_front_kms.c
+++ b/drivers/gpu/drm/xen/xen_drm_front_kms.c
@@ -62,7 +62,7 @@ fb_create(struct drm_device *dev, struct drm_file *filp,
        struct drm_gem_object *gem_obj;
        int ret;
 
-       fb = drm_gem_fb_create_with_funcs(dev, filp, mode_cmd, &fb_funcs);
+       fb = drm_gem_fb_create_with_funcs(dev, filp, info, mode_cmd, &fb_funcs);
        if (IS_ERR(fb))
                return fb;
 
diff --git a/include/drm/drm_gem_framebuffer_helper.h 
b/include/drm/drm_gem_framebuffer_helper.h
index 4fdf9d3d1863..971d266ab1ba 100644
--- a/include/drm/drm_gem_framebuffer_helper.h
+++ b/include/drm/drm_gem_framebuffer_helper.h
@@ -25,10 +25,12 @@ int drm_gem_fb_create_handle(struct drm_framebuffer *fb, 
struct drm_file *file,
 int drm_gem_fb_init_with_funcs(struct drm_device *dev,
                               struct drm_framebuffer *fb,
                               struct drm_file *file,
+                              const struct drm_format_info *info,
                               const struct drm_mode_fb_cmd2 *mode_cmd,
                               const struct drm_framebuffer_funcs *funcs);
 struct drm_framebuffer *
 drm_gem_fb_create_with_funcs(struct drm_device *dev, struct drm_file *file,
+                            const struct drm_format_info *info,
                             const struct drm_mode_fb_cmd2 *mode_cmd,
                             const struct drm_framebuffer_funcs *funcs);
 struct drm_framebuffer *
-- 
2.49.0

Reply via email to