Message ID | 20250410163218.15130-8-ville.syrjala@linux.intel.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | drm: Eliminate redundant drm_format_info lookups | expand |
Hi Ville, Thank you for the patch. On Thu, Apr 10, 2025 at 07:32:06PM +0300, Ville Syrjala wrote: > From: Ville Syrjälä <ville.syrjala@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 <airlied@redhat.com> > Cc: Gerd Hoffmann <kraxel@redhat.com> > Cc: Sandy Huang <hjc@rock-chips.com> > Cc: "Heiko Stübner" <heiko@sntech.de> > Cc: Andy Yan <andy.yan@rock-chips.com> > Cc: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com> > Cc: virtualization@lists.linux.dev > Cc: spice-devel@lists.freedesktop.org > Signed-off-by: Ville Syrjälä <ville.syrjala@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); Missing documentation update. Please make sure to build to documentation when testing the next version of the series. > 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); > */ Same here. > 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 *
Hi Ville, kernel test robot noticed the following build warnings: [auto build test WARNING on linus/master] [also build test WARNING on v6.15-rc1 next-20250410] [cannot apply to drm-exynos/exynos-drm-next tegra/for-next rmk-arm/drm-armada-devel rmk-arm/drm-armada-fixes] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Ville-Syrjala/drm-Pass-pixel_format-modifier-to-get_format_info/20250411-005845 base: linus/master patch link: https://lore.kernel.org/r/20250410163218.15130-8-ville.syrjala%40linux.intel.com patch subject: [PATCH 07/19] drm/gem: Pass along the format info from .fb_create() to drm_helper_mode_fill_fb_struct() config: hexagon-randconfig-001-20250411 (https://download.01.org/0day-ci/archive/20250411/202504110656.rvb8s8fd-lkp@intel.com/config) compiler: clang version 21.0.0git (https://github.com/llvm/llvm-project f819f46284f2a79790038e1f6649172789734ae8) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250411/202504110656.rvb8s8fd-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202504110656.rvb8s8fd-lkp@intel.com/ All warnings (new ones prefixed by >>): >> drivers/gpu/drm/drm_gem_framebuffer_helper.c:158: warning: Function parameter or struct member 'info' not described in 'drm_gem_fb_init_with_funcs' >> drivers/gpu/drm/drm_gem_framebuffer_helper.c:233: warning: Function parameter or struct member 'info' not described in 'drm_gem_fb_create_with_funcs' drivers/gpu/drm/drm_gem_framebuffer_helper.c:282: warning: Function parameter or struct member 'info' not described in 'drm_gem_fb_create' drivers/gpu/drm/drm_gem_framebuffer_helper.c:321: warning: Function parameter or struct member 'info' not described in 'drm_gem_fb_create_with_dirty' vim +158 drivers/gpu/drm/drm_gem_framebuffer_helper.c 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 129 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 130 /** f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 131 * drm_gem_fb_init_with_funcs() - Helper function for implementing 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 132 * &drm_mode_config_funcs.fb_create f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 133 * callback in cases when the driver f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 134 * allocates a subclass of f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 135 * struct drm_framebuffer 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 136 * @dev: DRM device f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 137 * @fb: framebuffer object 2e187b2099034a Noralf Trønnes 2017-09-22 138 * @file: DRM file that holds the GEM handle(s) backing the framebuffer 2e187b2099034a Noralf Trønnes 2017-09-22 139 * @mode_cmd: Metadata from the userspace framebuffer creation request 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 140 * @funcs: vtable to be used for the new framebuffer object 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 141 * dbd62e16fd53d3 Noralf Trønnes 2019-01-15 142 * This function can be used to set &drm_framebuffer_funcs for drivers that need dbd62e16fd53d3 Noralf Trønnes 2019-01-15 143 * custom framebuffer callbacks. Use drm_gem_fb_create() if you don't need to dbd62e16fd53d3 Noralf Trønnes 2019-01-15 144 * change &drm_framebuffer_funcs. The function does buffer size validation. f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 145 * The buffer size validation is for a general case, though, so users should f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 146 * pay attention to the checks being appropriate for them or, at least, f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 147 * non-conflicting. 2e187b2099034a Noralf Trønnes 2017-09-22 148 * 2e187b2099034a Noralf Trønnes 2017-09-22 149 * Returns: f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 150 * Zero or a negative error code. 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 151 */ f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 152 int drm_gem_fb_init_with_funcs(struct drm_device *dev, f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 153 struct drm_framebuffer *fb, f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 154 struct drm_file *file, 18613f4711126b Ville Syrjälä 2025-04-10 155 const struct drm_format_info *info, 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 156 const struct drm_mode_fb_cmd2 *mode_cmd, 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 157 const struct drm_framebuffer_funcs *funcs) 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 @158 { 279cc2e9543eb3 Thomas Zimmermann 2021-07-30 159 struct drm_gem_object *objs[DRM_FORMAT_MAX_PLANES]; 279cc2e9543eb3 Thomas Zimmermann 2021-07-30 160 unsigned int i; 279cc2e9543eb3 Thomas Zimmermann 2021-07-30 161 int ret; 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 162 c91acda3a380bc Maíra Canal 2023-04-12 163 if (drm_drv_uses_atomic_modeset(dev) && c91acda3a380bc Maíra Canal 2023-04-12 164 !drm_any_plane_has_format(dev, mode_cmd->pixel_format, c91acda3a380bc Maíra Canal 2023-04-12 165 mode_cmd->modifier[0])) { a8b0a7fd535fae Geert Uytterhoeven 2023-07-28 166 drm_dbg_kms(dev, "Unsupported pixel format %p4cc / modifier 0x%llx\n", c91acda3a380bc Maíra Canal 2023-04-12 167 &mode_cmd->pixel_format, mode_cmd->modifier[0]); c91acda3a380bc Maíra Canal 2023-04-12 168 return -EINVAL; c91acda3a380bc Maíra Canal 2023-04-12 169 } c91acda3a380bc Maíra Canal 2023-04-12 170 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 171 for (i = 0; i < info->num_planes; i++) { 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 172 unsigned int width = mode_cmd->width / (i ? info->hsub : 1); 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 173 unsigned int height = mode_cmd->height / (i ? info->vsub : 1); 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 174 unsigned int min_size; 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 175 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 176 objs[i] = drm_gem_object_lookup(file, mode_cmd->handles[i]); 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 177 if (!objs[i]) { 24f03be4aa7922 Jani Nikula 2019-12-10 178 drm_dbg_kms(dev, "Failed to lookup GEM object\n"); 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 179 ret = -ENOENT; 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 180 goto err_gem_object_put; 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 181 } 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 182 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 183 min_size = (height - 1) * mode_cmd->pitches[i] 042bf753842ddb Alexandru Gheorghe 2018-11-01 184 + drm_format_info_min_pitch(info, i, width) 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 185 + mode_cmd->offsets[i]; 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 186 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 187 if (objs[i]->size < min_size) { f7f525030854b1 Simon Ser 2021-05-03 188 drm_dbg_kms(dev, f7f525030854b1 Simon Ser 2021-05-03 189 "GEM object size (%zu) smaller than minimum size (%u) for plane %d\n", f7f525030854b1 Simon Ser 2021-05-03 190 objs[i]->size, min_size, i); be6ee102341bc4 Emil Velikov 2020-05-15 191 drm_gem_object_put(objs[i]); 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 192 ret = -EINVAL; 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 193 goto err_gem_object_put; 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 194 } 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 195 } 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 196 18613f4711126b Ville Syrjälä 2025-04-10 197 ret = drm_gem_fb_init(dev, fb, info, mode_cmd, objs, i, funcs); f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 198 if (ret) 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 199 goto err_gem_object_put; 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 200 f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 201 return 0; 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 202 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 203 err_gem_object_put: 279cc2e9543eb3 Thomas Zimmermann 2021-07-30 204 while (i > 0) { 279cc2e9543eb3 Thomas Zimmermann 2021-07-30 205 --i; be6ee102341bc4 Emil Velikov 2020-05-15 206 drm_gem_object_put(objs[i]); 279cc2e9543eb3 Thomas Zimmermann 2021-07-30 207 } f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 208 return ret; f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 209 } f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 210 EXPORT_SYMBOL_GPL(drm_gem_fb_init_with_funcs); f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 211 f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 212 /** f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 213 * drm_gem_fb_create_with_funcs() - Helper function for the f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 214 * &drm_mode_config_funcs.fb_create f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 215 * callback f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 216 * @dev: DRM device f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 217 * @file: DRM file that holds the GEM handle(s) backing the framebuffer f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 218 * @mode_cmd: Metadata from the userspace framebuffer creation request f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 219 * @funcs: vtable to be used for the new framebuffer object f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 220 * f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 221 * This function can be used to set &drm_framebuffer_funcs for drivers that need f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 222 * custom framebuffer callbacks. Use drm_gem_fb_create() if you don't need to f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 223 * change &drm_framebuffer_funcs. The function does buffer size validation. f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 224 * f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 225 * Returns: f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 226 * Pointer to a &drm_framebuffer on success or an error pointer on failure. f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 227 */ f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 228 struct drm_framebuffer * f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 229 drm_gem_fb_create_with_funcs(struct drm_device *dev, struct drm_file *file, 18613f4711126b Ville Syrjälä 2025-04-10 230 const struct drm_format_info *info, f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 231 const struct drm_mode_fb_cmd2 *mode_cmd, f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 232 const struct drm_framebuffer_funcs *funcs) f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 @233 { f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 234 struct drm_framebuffer *fb; f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 235 int ret; f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 236 f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 237 fb = kzalloc(sizeof(*fb), GFP_KERNEL); f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 238 if (!fb) f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 239 return ERR_PTR(-ENOMEM); f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 240 18613f4711126b Ville Syrjälä 2025-04-10 241 ret = drm_gem_fb_init_with_funcs(dev, fb, file, info, mode_cmd, funcs); f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 242 if (ret) { f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 243 kfree(fb); 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 244 return ERR_PTR(ret); 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 245 } f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 246 f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 247 return fb; f2b816d78a9431 Andrzej Pietrasiewicz 2020-03-11 248 } 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 249 EXPORT_SYMBOL_GPL(drm_gem_fb_create_with_funcs); 4c3dbb2c312c9f Noralf Trønnes 2017-08-13 250
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 *