All of lore.kernel.org
 help / color / mirror / Atom feed
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 --]

  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.