From: kernel test robot <lkp@intel.com>
To: Ryan Taylor <Ryan.Taylor@amd.com>,
dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org
Cc: melissa.srw@gmail.com, daniel.vetter@ffwll.ch,
rodrigo.siqueira@amd.com, kbuild-all@lists.01.org,
Ryan Taylor <Ryan.Taylor@amd.com>
Subject: Re: [PATCH 1/3] drm/amdgpu: create amdgpu_vkms
Date: Tue, 13 Jul 2021 08:44:59 +0800 [thread overview]
Message-ID: <202107130805.mzX2RsBc-lkp@intel.com> (raw)
In-Reply-To: <20210712194629.4569-2-Ryan.Taylor@amd.com>
[-- Attachment #1: Type: text/plain, Size: 9545 bytes --]
Hi Ryan,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on next-20210712]
[also build test WARNING on v5.14-rc1]
[cannot apply to drm-intel/for-linux-next drm-tip/drm-tip drm-exynos/exynos-drm-next tegra-drm/drm/tegra/for-next linus/master drm/drm-next v5.14-rc1 v5.13 v5.13-rc7]
[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]
url: https://github.com/0day-ci/linux/commits/Ryan-Taylor/drm-amdgpu-modernize-virtual-display-feature/20210713-034827
base: db503865b9ba6284edfee3825846a464cc4f4c61
config: i386-randconfig-r013-20210712 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
# https://github.com/0day-ci/linux/commit/96f64e3b91a195cc37720de206b86c3f0378abbb
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Ryan-Taylor/drm-amdgpu-modernize-virtual-display-feature/20210713-034827
git checkout 96f64e3b91a195cc37720de206b86c3f0378abbb
# save the attached .config to linux build tree
make W=1 ARCH=i386
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:156:5: warning: no previous prototype for 'amdgpu_vkms_crtc_init' [-Wmissing-prototypes]
156 | int amdgpu_vkms_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
| ^~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:323:20: error: initialization of 'void (*)(struct drm_plane *, struct drm_atomic_state *)' from incompatible pointer type 'void (*)(struct drm_plane *, struct drm_plane_state *)' [-Werror=incompatible-pointer-types]
323 | .atomic_update = amdgpu_vkms_plane_atomic_update,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:323:20: note: (near initialization for 'amdgpu_vkms_primary_helper_funcs.atomic_update')
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:324:19: error: initialization of 'int (*)(struct drm_plane *, struct drm_atomic_state *)' from incompatible pointer type 'int (*)(struct drm_plane *, struct drm_plane_state *)' [-Werror=incompatible-pointer-types]
324 | .atomic_check = amdgpu_vkms_plane_atomic_check,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:324:19: note: (near initialization for 'amdgpu_vkms_primary_helper_funcs.atomic_check')
>> drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:329:19: warning: no previous prototype for 'amdgpu_vkms_plane_init' [-Wmissing-prototypes]
329 | struct drm_plane *amdgpu_vkms_plane_init(struct drm_device *dev,
| ^~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +/amdgpu_vkms_crtc_init +156 drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
155
> 156 int amdgpu_vkms_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
157 struct drm_plane *primary, struct drm_plane *cursor)
158 {
159 int ret;
160
161 ret = drm_crtc_init_with_planes(dev, crtc, primary, cursor,
162 &amdgpu_vkms_crtc_funcs, NULL);
163 if (ret) {
164 DRM_ERROR("Failed to init CRTC\n");
165 return ret;
166 }
167
168 drm_crtc_helper_add(crtc, &amdgpu_vkms_crtc_helper_funcs);
169
170 return ret;
171 }
172
173 static const struct drm_connector_funcs amdgpu_vkms_connector_funcs = {
174 .fill_modes = drm_helper_probe_single_connector_modes,
175 .destroy = drm_connector_cleanup,
176 .reset = drm_atomic_helper_connector_reset,
177 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
178 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
179 };
180
181 static int amdgpu_vkms_conn_get_modes(struct drm_connector *connector)
182 {
183 int count;
184
185 count = drm_add_modes_noedid(connector, XRES_MAX, YRES_MAX);
186 drm_set_preferred_mode(connector, XRES_DEF, YRES_DEF);
187
188 return count;
189 }
190
191 static const struct drm_connector_helper_funcs amdgpu_vkms_conn_helper_funcs = {
192 .get_modes = amdgpu_vkms_conn_get_modes,
193 };
194
195 static const struct drm_plane_funcs amdgpu_vkms_plane_funcs = {
196 .update_plane = drm_atomic_helper_update_plane,
197 .disable_plane = drm_atomic_helper_disable_plane,
198 .destroy = drm_plane_cleanup,
199 .reset = drm_atomic_helper_plane_reset,
200 .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
201 .atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
202 };
203
204 static void amdgpu_vkms_plane_atomic_update(struct drm_plane *plane,
205 struct drm_plane_state *old_state)
206 {
207 return;
208 }
209
210 static int amdgpu_vkms_plane_atomic_check(struct drm_plane *plane,
211 struct drm_plane_state *state)
212 {
213 struct drm_crtc_state *crtc_state;
214 bool can_position = false;
215 int ret;
216
217 if (!state->fb || WARN_ON(!state->crtc))
218 return 0;
219
220 crtc_state = drm_atomic_get_crtc_state(state->state, state->crtc);
221 if (IS_ERR(crtc_state))
222 return PTR_ERR(crtc_state);
223
224 ret = drm_atomic_helper_check_plane_state(state, crtc_state,
225 DRM_PLANE_HELPER_NO_SCALING,
226 DRM_PLANE_HELPER_NO_SCALING,
227 can_position, true);
228 if (ret != 0)
229 return ret;
230
231 /* for now primary plane must be visible and full screen */
232 if (!state->visible && !can_position)
233 return -EINVAL;
234
235 return 0;
236 }
237
238 static int amdgpu_vkms_prepare_fb(struct drm_plane *plane,
239 struct drm_plane_state *new_state)
240 {
241 struct amdgpu_framebuffer *afb;
242 struct drm_gem_object *obj;
243 struct amdgpu_device *adev;
244 struct amdgpu_bo *rbo;
245 struct list_head list;
246 struct ttm_validate_buffer tv;
247 struct ww_acquire_ctx ticket;
248 uint32_t domain;
249 int r;
250
251 if (!new_state->fb) {
252 DRM_DEBUG_KMS("No FB bound\n");
253 return 0;
254 }
255 afb = to_amdgpu_framebuffer(new_state->fb);
256 obj = new_state->fb->obj[0];
257 rbo = gem_to_amdgpu_bo(obj);
258 adev = amdgpu_ttm_adev(rbo->tbo.bdev);
259 INIT_LIST_HEAD(&list);
260
261 tv.bo = &rbo->tbo;
262 tv.num_shared = 1;
263 list_add(&tv.head, &list);
264
265 r = ttm_eu_reserve_buffers(&ticket, &list, false, NULL);
266 if (r) {
267 dev_err(adev->dev, "fail to reserve bo (%d)\n", r);
268 return r;
269 }
270
271 if (plane->type != DRM_PLANE_TYPE_CURSOR)
272 domain = amdgpu_display_supported_domains(adev, rbo->flags);
273 else
274 domain = AMDGPU_GEM_DOMAIN_VRAM;
275
276 r = amdgpu_bo_pin(rbo, domain);
277 if (unlikely(r != 0)) {
278 if (r != -ERESTARTSYS)
279 DRM_ERROR("Failed to pin framebuffer with error %d\n", r);
280 ttm_eu_backoff_reservation(&ticket, &list);
281 return r;
282 }
283
284 r = amdgpu_ttm_alloc_gart(&rbo->tbo);
285 if (unlikely(r != 0)) {
286 amdgpu_bo_unpin(rbo);
287 ttm_eu_backoff_reservation(&ticket, &list);
288 DRM_ERROR("%p bind failed\n", rbo);
289 return r;
290 }
291
292 ttm_eu_backoff_reservation(&ticket, &list);
293
294 afb->address = amdgpu_bo_gpu_offset(rbo);
295
296 amdgpu_bo_ref(rbo);
297
298 return 0;
299 }
300
301 static void amdgpu_vkms_cleanup_fb(struct drm_plane *plane,
302 struct drm_plane_state *old_state)
303 {
304 struct amdgpu_bo *rbo;
305 int r;
306
307 if (!old_state->fb)
308 return;
309
310 rbo = gem_to_amdgpu_bo(old_state->fb->obj[0]);
311 r = amdgpu_bo_reserve(rbo, false);
312 if (unlikely(r)) {
313 DRM_ERROR("failed to reserve rbo before unpin\n");
314 return;
315 }
316
317 amdgpu_bo_unpin(rbo);
318 amdgpu_bo_unreserve(rbo);
319 amdgpu_bo_unref(&rbo);
320 }
321
322 static const struct drm_plane_helper_funcs amdgpu_vkms_primary_helper_funcs = {
323 .atomic_update = amdgpu_vkms_plane_atomic_update,
324 .atomic_check = amdgpu_vkms_plane_atomic_check,
325 .prepare_fb = amdgpu_vkms_prepare_fb,
326 .cleanup_fb = amdgpu_vkms_cleanup_fb,
327 };
328
> 329 struct drm_plane *amdgpu_vkms_plane_init(struct drm_device *dev,
330 enum drm_plane_type type, int index)
331 {
332 struct drm_plane *plane;
333 int ret;
334
335 plane = kzalloc(sizeof(*plane), GFP_KERNEL);
336 if (!plane)
337 return ERR_PTR(-ENOMEM);
338
339 ret = drm_universal_plane_init(dev, plane, 1 << index,
340 &amdgpu_vkms_plane_funcs,
341 amdgpu_vkms_formats,
342 ARRAY_SIZE(amdgpu_vkms_formats),
343 NULL, type, NULL);
344 if (ret) {
345 kfree(plane);
346 return ERR_PTR(ret);
347 }
348
349 drm_plane_helper_add(plane, &amdgpu_vkms_primary_helper_funcs);
350
351 return plane;
352 }
353
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 46284 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Ryan Taylor <Ryan.Taylor@amd.com>,
dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org
Cc: melissa.srw@gmail.com, daniel.vetter@ffwll.ch,
rodrigo.siqueira@amd.com, kbuild-all@lists.01.org,
Ryan Taylor <Ryan.Taylor@amd.com>
Subject: Re: [PATCH 1/3] drm/amdgpu: create amdgpu_vkms
Date: Tue, 13 Jul 2021 08:44:59 +0800 [thread overview]
Message-ID: <202107130805.mzX2RsBc-lkp@intel.com> (raw)
In-Reply-To: <20210712194629.4569-2-Ryan.Taylor@amd.com>
[-- Attachment #1: Type: text/plain, Size: 9545 bytes --]
Hi Ryan,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on next-20210712]
[also build test WARNING on v5.14-rc1]
[cannot apply to drm-intel/for-linux-next drm-tip/drm-tip drm-exynos/exynos-drm-next tegra-drm/drm/tegra/for-next linus/master drm/drm-next v5.14-rc1 v5.13 v5.13-rc7]
[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]
url: https://github.com/0day-ci/linux/commits/Ryan-Taylor/drm-amdgpu-modernize-virtual-display-feature/20210713-034827
base: db503865b9ba6284edfee3825846a464cc4f4c61
config: i386-randconfig-r013-20210712 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
# https://github.com/0day-ci/linux/commit/96f64e3b91a195cc37720de206b86c3f0378abbb
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Ryan-Taylor/drm-amdgpu-modernize-virtual-display-feature/20210713-034827
git checkout 96f64e3b91a195cc37720de206b86c3f0378abbb
# save the attached .config to linux build tree
make W=1 ARCH=i386
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:156:5: warning: no previous prototype for 'amdgpu_vkms_crtc_init' [-Wmissing-prototypes]
156 | int amdgpu_vkms_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
| ^~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:323:20: error: initialization of 'void (*)(struct drm_plane *, struct drm_atomic_state *)' from incompatible pointer type 'void (*)(struct drm_plane *, struct drm_plane_state *)' [-Werror=incompatible-pointer-types]
323 | .atomic_update = amdgpu_vkms_plane_atomic_update,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:323:20: note: (near initialization for 'amdgpu_vkms_primary_helper_funcs.atomic_update')
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:324:19: error: initialization of 'int (*)(struct drm_plane *, struct drm_atomic_state *)' from incompatible pointer type 'int (*)(struct drm_plane *, struct drm_plane_state *)' [-Werror=incompatible-pointer-types]
324 | .atomic_check = amdgpu_vkms_plane_atomic_check,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:324:19: note: (near initialization for 'amdgpu_vkms_primary_helper_funcs.atomic_check')
>> drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:329:19: warning: no previous prototype for 'amdgpu_vkms_plane_init' [-Wmissing-prototypes]
329 | struct drm_plane *amdgpu_vkms_plane_init(struct drm_device *dev,
| ^~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +/amdgpu_vkms_crtc_init +156 drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
155
> 156 int amdgpu_vkms_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
157 struct drm_plane *primary, struct drm_plane *cursor)
158 {
159 int ret;
160
161 ret = drm_crtc_init_with_planes(dev, crtc, primary, cursor,
162 &amdgpu_vkms_crtc_funcs, NULL);
163 if (ret) {
164 DRM_ERROR("Failed to init CRTC\n");
165 return ret;
166 }
167
168 drm_crtc_helper_add(crtc, &amdgpu_vkms_crtc_helper_funcs);
169
170 return ret;
171 }
172
173 static const struct drm_connector_funcs amdgpu_vkms_connector_funcs = {
174 .fill_modes = drm_helper_probe_single_connector_modes,
175 .destroy = drm_connector_cleanup,
176 .reset = drm_atomic_helper_connector_reset,
177 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
178 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
179 };
180
181 static int amdgpu_vkms_conn_get_modes(struct drm_connector *connector)
182 {
183 int count;
184
185 count = drm_add_modes_noedid(connector, XRES_MAX, YRES_MAX);
186 drm_set_preferred_mode(connector, XRES_DEF, YRES_DEF);
187
188 return count;
189 }
190
191 static const struct drm_connector_helper_funcs amdgpu_vkms_conn_helper_funcs = {
192 .get_modes = amdgpu_vkms_conn_get_modes,
193 };
194
195 static const struct drm_plane_funcs amdgpu_vkms_plane_funcs = {
196 .update_plane = drm_atomic_helper_update_plane,
197 .disable_plane = drm_atomic_helper_disable_plane,
198 .destroy = drm_plane_cleanup,
199 .reset = drm_atomic_helper_plane_reset,
200 .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
201 .atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
202 };
203
204 static void amdgpu_vkms_plane_atomic_update(struct drm_plane *plane,
205 struct drm_plane_state *old_state)
206 {
207 return;
208 }
209
210 static int amdgpu_vkms_plane_atomic_check(struct drm_plane *plane,
211 struct drm_plane_state *state)
212 {
213 struct drm_crtc_state *crtc_state;
214 bool can_position = false;
215 int ret;
216
217 if (!state->fb || WARN_ON(!state->crtc))
218 return 0;
219
220 crtc_state = drm_atomic_get_crtc_state(state->state, state->crtc);
221 if (IS_ERR(crtc_state))
222 return PTR_ERR(crtc_state);
223
224 ret = drm_atomic_helper_check_plane_state(state, crtc_state,
225 DRM_PLANE_HELPER_NO_SCALING,
226 DRM_PLANE_HELPER_NO_SCALING,
227 can_position, true);
228 if (ret != 0)
229 return ret;
230
231 /* for now primary plane must be visible and full screen */
232 if (!state->visible && !can_position)
233 return -EINVAL;
234
235 return 0;
236 }
237
238 static int amdgpu_vkms_prepare_fb(struct drm_plane *plane,
239 struct drm_plane_state *new_state)
240 {
241 struct amdgpu_framebuffer *afb;
242 struct drm_gem_object *obj;
243 struct amdgpu_device *adev;
244 struct amdgpu_bo *rbo;
245 struct list_head list;
246 struct ttm_validate_buffer tv;
247 struct ww_acquire_ctx ticket;
248 uint32_t domain;
249 int r;
250
251 if (!new_state->fb) {
252 DRM_DEBUG_KMS("No FB bound\n");
253 return 0;
254 }
255 afb = to_amdgpu_framebuffer(new_state->fb);
256 obj = new_state->fb->obj[0];
257 rbo = gem_to_amdgpu_bo(obj);
258 adev = amdgpu_ttm_adev(rbo->tbo.bdev);
259 INIT_LIST_HEAD(&list);
260
261 tv.bo = &rbo->tbo;
262 tv.num_shared = 1;
263 list_add(&tv.head, &list);
264
265 r = ttm_eu_reserve_buffers(&ticket, &list, false, NULL);
266 if (r) {
267 dev_err(adev->dev, "fail to reserve bo (%d)\n", r);
268 return r;
269 }
270
271 if (plane->type != DRM_PLANE_TYPE_CURSOR)
272 domain = amdgpu_display_supported_domains(adev, rbo->flags);
273 else
274 domain = AMDGPU_GEM_DOMAIN_VRAM;
275
276 r = amdgpu_bo_pin(rbo, domain);
277 if (unlikely(r != 0)) {
278 if (r != -ERESTARTSYS)
279 DRM_ERROR("Failed to pin framebuffer with error %d\n", r);
280 ttm_eu_backoff_reservation(&ticket, &list);
281 return r;
282 }
283
284 r = amdgpu_ttm_alloc_gart(&rbo->tbo);
285 if (unlikely(r != 0)) {
286 amdgpu_bo_unpin(rbo);
287 ttm_eu_backoff_reservation(&ticket, &list);
288 DRM_ERROR("%p bind failed\n", rbo);
289 return r;
290 }
291
292 ttm_eu_backoff_reservation(&ticket, &list);
293
294 afb->address = amdgpu_bo_gpu_offset(rbo);
295
296 amdgpu_bo_ref(rbo);
297
298 return 0;
299 }
300
301 static void amdgpu_vkms_cleanup_fb(struct drm_plane *plane,
302 struct drm_plane_state *old_state)
303 {
304 struct amdgpu_bo *rbo;
305 int r;
306
307 if (!old_state->fb)
308 return;
309
310 rbo = gem_to_amdgpu_bo(old_state->fb->obj[0]);
311 r = amdgpu_bo_reserve(rbo, false);
312 if (unlikely(r)) {
313 DRM_ERROR("failed to reserve rbo before unpin\n");
314 return;
315 }
316
317 amdgpu_bo_unpin(rbo);
318 amdgpu_bo_unreserve(rbo);
319 amdgpu_bo_unref(&rbo);
320 }
321
322 static const struct drm_plane_helper_funcs amdgpu_vkms_primary_helper_funcs = {
323 .atomic_update = amdgpu_vkms_plane_atomic_update,
324 .atomic_check = amdgpu_vkms_plane_atomic_check,
325 .prepare_fb = amdgpu_vkms_prepare_fb,
326 .cleanup_fb = amdgpu_vkms_cleanup_fb,
327 };
328
> 329 struct drm_plane *amdgpu_vkms_plane_init(struct drm_device *dev,
330 enum drm_plane_type type, int index)
331 {
332 struct drm_plane *plane;
333 int ret;
334
335 plane = kzalloc(sizeof(*plane), GFP_KERNEL);
336 if (!plane)
337 return ERR_PTR(-ENOMEM);
338
339 ret = drm_universal_plane_init(dev, plane, 1 << index,
340 &amdgpu_vkms_plane_funcs,
341 amdgpu_vkms_formats,
342 ARRAY_SIZE(amdgpu_vkms_formats),
343 NULL, type, NULL);
344 if (ret) {
345 kfree(plane);
346 return ERR_PTR(ret);
347 }
348
349 drm_plane_helper_add(plane, &amdgpu_vkms_primary_helper_funcs);
350
351 return plane;
352 }
353
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 46284 bytes --]
[-- Attachment #3: Type: text/plain, Size: 154 bytes --]
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH 1/3] drm/amdgpu: create amdgpu_vkms
Date: Tue, 13 Jul 2021 08:44:59 +0800 [thread overview]
Message-ID: <202107130805.mzX2RsBc-lkp@intel.com> (raw)
In-Reply-To: <20210712194629.4569-2-Ryan.Taylor@amd.com>
[-- Attachment #1: Type: text/plain, Size: 9795 bytes --]
Hi Ryan,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on next-20210712]
[also build test WARNING on v5.14-rc1]
[cannot apply to drm-intel/for-linux-next drm-tip/drm-tip drm-exynos/exynos-drm-next tegra-drm/drm/tegra/for-next linus/master drm/drm-next v5.14-rc1 v5.13 v5.13-rc7]
[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]
url: https://github.com/0day-ci/linux/commits/Ryan-Taylor/drm-amdgpu-modernize-virtual-display-feature/20210713-034827
base: db503865b9ba6284edfee3825846a464cc4f4c61
config: i386-randconfig-r013-20210712 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
# https://github.com/0day-ci/linux/commit/96f64e3b91a195cc37720de206b86c3f0378abbb
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Ryan-Taylor/drm-amdgpu-modernize-virtual-display-feature/20210713-034827
git checkout 96f64e3b91a195cc37720de206b86c3f0378abbb
# save the attached .config to linux build tree
make W=1 ARCH=i386
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:156:5: warning: no previous prototype for 'amdgpu_vkms_crtc_init' [-Wmissing-prototypes]
156 | int amdgpu_vkms_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
| ^~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:323:20: error: initialization of 'void (*)(struct drm_plane *, struct drm_atomic_state *)' from incompatible pointer type 'void (*)(struct drm_plane *, struct drm_plane_state *)' [-Werror=incompatible-pointer-types]
323 | .atomic_update = amdgpu_vkms_plane_atomic_update,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:323:20: note: (near initialization for 'amdgpu_vkms_primary_helper_funcs.atomic_update')
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:324:19: error: initialization of 'int (*)(struct drm_plane *, struct drm_atomic_state *)' from incompatible pointer type 'int (*)(struct drm_plane *, struct drm_plane_state *)' [-Werror=incompatible-pointer-types]
324 | .atomic_check = amdgpu_vkms_plane_atomic_check,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:324:19: note: (near initialization for 'amdgpu_vkms_primary_helper_funcs.atomic_check')
>> drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:329:19: warning: no previous prototype for 'amdgpu_vkms_plane_init' [-Wmissing-prototypes]
329 | struct drm_plane *amdgpu_vkms_plane_init(struct drm_device *dev,
| ^~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +/amdgpu_vkms_crtc_init +156 drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
155
> 156 int amdgpu_vkms_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
157 struct drm_plane *primary, struct drm_plane *cursor)
158 {
159 int ret;
160
161 ret = drm_crtc_init_with_planes(dev, crtc, primary, cursor,
162 &amdgpu_vkms_crtc_funcs, NULL);
163 if (ret) {
164 DRM_ERROR("Failed to init CRTC\n");
165 return ret;
166 }
167
168 drm_crtc_helper_add(crtc, &amdgpu_vkms_crtc_helper_funcs);
169
170 return ret;
171 }
172
173 static const struct drm_connector_funcs amdgpu_vkms_connector_funcs = {
174 .fill_modes = drm_helper_probe_single_connector_modes,
175 .destroy = drm_connector_cleanup,
176 .reset = drm_atomic_helper_connector_reset,
177 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
178 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
179 };
180
181 static int amdgpu_vkms_conn_get_modes(struct drm_connector *connector)
182 {
183 int count;
184
185 count = drm_add_modes_noedid(connector, XRES_MAX, YRES_MAX);
186 drm_set_preferred_mode(connector, XRES_DEF, YRES_DEF);
187
188 return count;
189 }
190
191 static const struct drm_connector_helper_funcs amdgpu_vkms_conn_helper_funcs = {
192 .get_modes = amdgpu_vkms_conn_get_modes,
193 };
194
195 static const struct drm_plane_funcs amdgpu_vkms_plane_funcs = {
196 .update_plane = drm_atomic_helper_update_plane,
197 .disable_plane = drm_atomic_helper_disable_plane,
198 .destroy = drm_plane_cleanup,
199 .reset = drm_atomic_helper_plane_reset,
200 .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
201 .atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
202 };
203
204 static void amdgpu_vkms_plane_atomic_update(struct drm_plane *plane,
205 struct drm_plane_state *old_state)
206 {
207 return;
208 }
209
210 static int amdgpu_vkms_plane_atomic_check(struct drm_plane *plane,
211 struct drm_plane_state *state)
212 {
213 struct drm_crtc_state *crtc_state;
214 bool can_position = false;
215 int ret;
216
217 if (!state->fb || WARN_ON(!state->crtc))
218 return 0;
219
220 crtc_state = drm_atomic_get_crtc_state(state->state, state->crtc);
221 if (IS_ERR(crtc_state))
222 return PTR_ERR(crtc_state);
223
224 ret = drm_atomic_helper_check_plane_state(state, crtc_state,
225 DRM_PLANE_HELPER_NO_SCALING,
226 DRM_PLANE_HELPER_NO_SCALING,
227 can_position, true);
228 if (ret != 0)
229 return ret;
230
231 /* for now primary plane must be visible and full screen */
232 if (!state->visible && !can_position)
233 return -EINVAL;
234
235 return 0;
236 }
237
238 static int amdgpu_vkms_prepare_fb(struct drm_plane *plane,
239 struct drm_plane_state *new_state)
240 {
241 struct amdgpu_framebuffer *afb;
242 struct drm_gem_object *obj;
243 struct amdgpu_device *adev;
244 struct amdgpu_bo *rbo;
245 struct list_head list;
246 struct ttm_validate_buffer tv;
247 struct ww_acquire_ctx ticket;
248 uint32_t domain;
249 int r;
250
251 if (!new_state->fb) {
252 DRM_DEBUG_KMS("No FB bound\n");
253 return 0;
254 }
255 afb = to_amdgpu_framebuffer(new_state->fb);
256 obj = new_state->fb->obj[0];
257 rbo = gem_to_amdgpu_bo(obj);
258 adev = amdgpu_ttm_adev(rbo->tbo.bdev);
259 INIT_LIST_HEAD(&list);
260
261 tv.bo = &rbo->tbo;
262 tv.num_shared = 1;
263 list_add(&tv.head, &list);
264
265 r = ttm_eu_reserve_buffers(&ticket, &list, false, NULL);
266 if (r) {
267 dev_err(adev->dev, "fail to reserve bo (%d)\n", r);
268 return r;
269 }
270
271 if (plane->type != DRM_PLANE_TYPE_CURSOR)
272 domain = amdgpu_display_supported_domains(adev, rbo->flags);
273 else
274 domain = AMDGPU_GEM_DOMAIN_VRAM;
275
276 r = amdgpu_bo_pin(rbo, domain);
277 if (unlikely(r != 0)) {
278 if (r != -ERESTARTSYS)
279 DRM_ERROR("Failed to pin framebuffer with error %d\n", r);
280 ttm_eu_backoff_reservation(&ticket, &list);
281 return r;
282 }
283
284 r = amdgpu_ttm_alloc_gart(&rbo->tbo);
285 if (unlikely(r != 0)) {
286 amdgpu_bo_unpin(rbo);
287 ttm_eu_backoff_reservation(&ticket, &list);
288 DRM_ERROR("%p bind failed\n", rbo);
289 return r;
290 }
291
292 ttm_eu_backoff_reservation(&ticket, &list);
293
294 afb->address = amdgpu_bo_gpu_offset(rbo);
295
296 amdgpu_bo_ref(rbo);
297
298 return 0;
299 }
300
301 static void amdgpu_vkms_cleanup_fb(struct drm_plane *plane,
302 struct drm_plane_state *old_state)
303 {
304 struct amdgpu_bo *rbo;
305 int r;
306
307 if (!old_state->fb)
308 return;
309
310 rbo = gem_to_amdgpu_bo(old_state->fb->obj[0]);
311 r = amdgpu_bo_reserve(rbo, false);
312 if (unlikely(r)) {
313 DRM_ERROR("failed to reserve rbo before unpin\n");
314 return;
315 }
316
317 amdgpu_bo_unpin(rbo);
318 amdgpu_bo_unreserve(rbo);
319 amdgpu_bo_unref(&rbo);
320 }
321
322 static const struct drm_plane_helper_funcs amdgpu_vkms_primary_helper_funcs = {
323 .atomic_update = amdgpu_vkms_plane_atomic_update,
324 .atomic_check = amdgpu_vkms_plane_atomic_check,
325 .prepare_fb = amdgpu_vkms_prepare_fb,
326 .cleanup_fb = amdgpu_vkms_cleanup_fb,
327 };
328
> 329 struct drm_plane *amdgpu_vkms_plane_init(struct drm_device *dev,
330 enum drm_plane_type type, int index)
331 {
332 struct drm_plane *plane;
333 int ret;
334
335 plane = kzalloc(sizeof(*plane), GFP_KERNEL);
336 if (!plane)
337 return ERR_PTR(-ENOMEM);
338
339 ret = drm_universal_plane_init(dev, plane, 1 << index,
340 &amdgpu_vkms_plane_funcs,
341 amdgpu_vkms_formats,
342 ARRAY_SIZE(amdgpu_vkms_formats),
343 NULL, type, NULL);
344 if (ret) {
345 kfree(plane);
346 return ERR_PTR(ret);
347 }
348
349 drm_plane_helper_add(plane, &amdgpu_vkms_primary_helper_funcs);
350
351 return plane;
352 }
353
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 46284 bytes --]
next prev parent reply other threads:[~2021-07-13 0:45 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-12 19:46 [PATCH 0/3] drm/amdgpu: modernize virtual display feature Ryan Taylor
2021-07-12 19:46 ` Ryan Taylor
2021-07-12 19:46 ` [PATCH 1/3] drm/amdgpu: create amdgpu_vkms Ryan Taylor
2021-07-12 19:46 ` Ryan Taylor
2021-07-13 0:44 ` kernel test robot [this message]
2021-07-13 0:44 ` kernel test robot
2021-07-13 0:44 ` kernel test robot
2021-07-13 1:01 ` kernel test robot
2021-07-13 1:01 ` kernel test robot
2021-07-13 1:01 ` kernel test robot
2021-07-12 19:46 ` [PATCH 2/3] drm/amdgpu: cleanup dce_virtual Ryan Taylor
2021-07-12 19:46 ` Ryan Taylor
2021-07-12 19:46 ` [PATCH 3/3] drm/amdgpu: replace dce_virtual with amdgpu_vkms Ryan Taylor
2021-07-12 19:46 ` Ryan Taylor
2021-07-12 23:21 ` kernel test robot
2021-07-12 23:21 ` kernel test robot
2021-07-12 23:21 ` kernel test robot
2021-07-13 1:14 ` kernel test robot
2021-07-13 1:14 ` kernel test robot
2021-07-13 1:14 ` kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202107130805.mzX2RsBc-lkp@intel.com \
--to=lkp@intel.com \
--cc=Ryan.Taylor@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=kbuild-all@lists.01.org \
--cc=melissa.srw@gmail.com \
--cc=rodrigo.siqueira@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.