Hi Ryan,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on next-20210712]
[also build test ERROR 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: x86_64-randconfig-a013-20210712 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 
8d69635ed9ecf36fd0ca85906bfde17949671cbe)
reproduce (this is a W=1 build):
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install x86_64 cross compiling tool for clang build
        # apt-get install binutils-x86-64-linux-gnu
        # 
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
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <l...@intel.com>

All error/warnings (new ones prefixed by >>):

>> drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:156:5: warning: no previous 
>> prototype for function 'amdgpu_vkms_crtc_init' [-Wmissing-prototypes]
   int amdgpu_vkms_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
       ^
   drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:156:1: note: declare 'static' if 
the function is not intended to be used outside of this translation unit
   int amdgpu_vkms_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
   ^
   static 
>> drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:323:20: error: incompatible 
>> function pointer types initializing 'void (*)(struct drm_plane *, struct 
>> drm_atomic_state *)' with an expression of type 'void (struct drm_plane *, 
>> struct drm_plane_state *)' [-Werror,-Wincompatible-function-pointer-types]
           .atomic_update          = amdgpu_vkms_plane_atomic_update,
                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:324:19: error: incompatible 
>> function pointer types initializing 'int (*)(struct drm_plane *, struct 
>> drm_atomic_state *)' with an expression of type 'int (struct drm_plane *, 
>> struct drm_plane_state *)' [-Werror,-Wincompatible-function-pointer-types]
           .atomic_check           = amdgpu_vkms_plane_atomic_check,
                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:329:19: warning: no previous 
>> prototype for function 'amdgpu_vkms_plane_init' [-Wmissing-prototypes]
   struct drm_plane *amdgpu_vkms_plane_init(struct drm_device *dev,
                     ^
   drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c:329:1: note: declare 'static' if 
the function is not intended to be used outside of this translation unit
   struct drm_plane *amdgpu_vkms_plane_init(struct drm_device *dev,
   ^
   static 
   2 warnings and 2 errors generated.


vim +323 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-...@lists.01.org

Attachment: .config.gz
Description: application/gzip

Reply via email to