Re: [PATCH 3/3] drm/fb-helper: Use a per-driver FB deferred I/O handler

From: kernel test robot
Date: Fri Jan 20 2023 - 23:02:03 EST


Hi Javier,

I love your patch! Yet something to improve:

[auto build test ERROR on drm-misc/drm-misc-next]
[also build test ERROR on linus/master v6.2-rc4 next-20230120]
[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/Javier-Martinez-Canillas/fbdev-Remove-unused-struct-fb_deferred_io-first_io-field/20230120-201143
base: git://anongit.freedesktop.org/drm/drm-misc drm-misc-next
patch link: https://lore.kernel.org/r/20230120120822.2536032-4-javierm%40redhat.com
patch subject: [PATCH 3/3] drm/fb-helper: Use a per-driver FB deferred I/O handler
config: x86_64-defconfig (https://download.01.org/0day-ci/archive/20230121/202301211139.vzFLFznY-lkp@xxxxxxxxx/config)
compiler: gcc-11 (Debian 11.3.0-8) 11.3.0
reproduce (this is a W=1 build):
# https://github.com/intel-lab-lkp/linux/commit/21185713f8ccb3dc34c91fcecff9464c4a8790fa
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Javier-Martinez-Canillas/fbdev-Remove-unused-struct-fb_deferred_io-first_io-field/20230120-201143
git checkout 21185713f8ccb3dc34c91fcecff9464c4a8790fa
# save the config file
mkdir build_dir && cp config build_dir/.config
make W=1 O=build_dir ARCH=x86_64 olddefconfig
make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@xxxxxxxxx>

All errors (new ones prefixed by >>):

In file included from drivers/gpu/drm/drm_modeset_helper.c:24:
>> include/drm/drm_fb_helper.h:215:31: error: field 'fbdefio' has incomplete type
215 | struct fb_deferred_io fbdefio;
| ^~~~~~~


vim +/fbdefio +215 include/drm/drm_fb_helper.h

103
104 /**
105 * struct drm_fb_helper - main structure to emulate fbdev on top of KMS
106 * @fb: Scanout framebuffer object
107 * @dev: DRM device
108 * @funcs: driver callbacks for fb helper
109 * @info: emulated fbdev device info struct
110 * @pseudo_palette: fake palette of 16 colors
111 * @damage_clip: clip rectangle used with deferred_io to accumulate damage to
112 * the screen buffer
113 * @damage_lock: spinlock protecting @damage_clip
114 * @damage_work: worker used to flush the framebuffer
115 * @resume_work: worker used during resume if the console lock is already taken
116 *
117 * This is the main structure used by the fbdev helpers. Drivers supporting
118 * fbdev emulation should embedded this into their overall driver structure.
119 * Drivers must also fill out a &struct drm_fb_helper_funcs with a few
120 * operations.
121 */
122 struct drm_fb_helper {
123 /**
124 * @client:
125 *
126 * DRM client used by the generic fbdev emulation.
127 */
128 struct drm_client_dev client;
129
130 /**
131 * @buffer:
132 *
133 * Framebuffer used by the generic fbdev emulation.
134 */
135 struct drm_client_buffer *buffer;
136
137 struct drm_framebuffer *fb;
138 struct drm_device *dev;
139 const struct drm_fb_helper_funcs *funcs;
140 struct fb_info *info;
141 u32 pseudo_palette[17];
142 struct drm_clip_rect damage_clip;
143 spinlock_t damage_lock;
144 struct work_struct damage_work;
145 struct work_struct resume_work;
146
147 /**
148 * @lock:
149 *
150 * Top-level FBDEV helper lock. This protects all internal data
151 * structures and lists, such as @connector_info and @crtc_info.
152 *
153 * FIXME: fbdev emulation locking is a mess and long term we want to
154 * protect all helper internal state with this lock as well as reduce
155 * core KMS locking as much as possible.
156 */
157 struct mutex lock;
158
159 /**
160 * @kernel_fb_list:
161 *
162 * Entry on the global kernel_fb_helper_list, used for kgdb entry/exit.
163 */
164 struct list_head kernel_fb_list;
165
166 /**
167 * @delayed_hotplug:
168 *
169 * A hotplug was received while fbdev wasn't in control of the DRM
170 * device, i.e. another KMS master was active. The output configuration
171 * needs to be reprobe when fbdev is in control again.
172 */
173 bool delayed_hotplug;
174
175 /**
176 * @deferred_setup:
177 *
178 * If no outputs are connected (disconnected or unknown) the FB helper
179 * code will defer setup until at least one of the outputs shows up.
180 * This field keeps track of the status so that setup can be retried
181 * at every hotplug event until it succeeds eventually.
182 *
183 * Protected by @lock.
184 */
185 bool deferred_setup;
186
187 /**
188 * @preferred_bpp:
189 *
190 * Temporary storage for the driver's preferred BPP setting passed to
191 * FB helper initialization. This needs to be tracked so that deferred
192 * FB helper setup can pass this on.
193 *
194 * See also: @deferred_setup
195 */
196 int preferred_bpp;
197
198 /**
199 * @hint_leak_smem_start:
200 *
201 * Hint to the fbdev emulation to store the framebuffer's physical
202 * address in struct &fb_info.fix.smem_start. If the hint is unset,
203 * the smem_start field should always be cleared to zero.
204 */
205 bool hint_leak_smem_start;
206
207 /**
208 * @fbdefio:
209 *
210 * Temporary storage for the driver's FB deferred I/O handler. If the
211 * driver uses the DRM fbdev emulation layer, this is set by the core
212 * to a generic deferred I/O handler if a driver is preferring to use
213 * a shadow buffer.
214 */
> 215 struct fb_deferred_io fbdefio;
216 };
217

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests