On Fri, Oct 23, 2015 at 02:47:49AM +0800, kbuild test robot wrote:
> Hi Daniel,
> 
> [auto build test WARNING on drm/drm-next -- if it's inappropriate base, 
> please suggest rules for selecting the more suitable base]
> 
> url:    
> https://github.com/0day-ci/linux/commits/Daniel-Vetter/drm-Update-GEM-refcounting-docs/20151023-011317
> config: x86_64-randconfig-s1-10230205 (attached as .config)
> reproduce:
>         # save the attached .config to linux build tree
>         make ARCH=x86_64 
> 
> All warnings (new ones prefixed by >>):
> 
>    In file included from include/uapi/linux/stddef.h:1:0,
>                     from include/linux/stddef.h:4,
>                     from include/uapi/linux/posix_types.h:4,
>                     from include/uapi/linux/types.h:13,
>                     from include/linux/types.h:5,
>                     from include/linux/list.h:4,
>                     from include/linux/module.h:9,
>                     from drivers/gpu/drm/vgem/vgem_drv.c:33:
>    drivers/gpu/drm/vgem/vgem_drv.c: In function 'vgem_gem_dumb_map':
>    drivers/gpu/drm/vgem/vgem_drv.c:211:7: error: implicit declaration of 
> function 'drm_vma_node_has_offset' [-Werror=implicit-function-declaration]
>      if (!drm_vma_node_has_offset(&obj->vma_node)) {
>           ^
>    include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
>      if (__builtin_constant_p((cond)) ? !!(cond) :   \
>                                ^
> >> drivers/gpu/drm/vgem/vgem_drv.c:211:2: note: in expansion of macro 'if'
>      if (!drm_vma_node_has_offset(&obj->vma_node)) {
>      ^
>    cc1: some warnings being treated as errors

Argh, I've forgotten that the vgem patch in my tree isn't merged yet. So
that one needs to go in (to remove another dubious use of has_offset())
before we can pull in this one.
-Daniel

> 
> vim +/if +211 drivers/gpu/drm/vgem/vgem_drv.c
> 
> 502e95c6 Zach Reizner       2015-03-04   27  
> 502e95c6 Zach Reizner       2015-03-04   28  /**
> 502e95c6 Zach Reizner       2015-03-04   29   * This is vgem, a 
> (non-hardware-backed) GEM service.  This is used by Mesa's
> 502e95c6 Zach Reizner       2015-03-04   30   * software renderer and the X 
> server for efficient buffer sharing.
> 502e95c6 Zach Reizner       2015-03-04   31   */
> 502e95c6 Zach Reizner       2015-03-04   32  
> 502e95c6 Zach Reizner       2015-03-04  @33  #include <linux/module.h>
> 502e95c6 Zach Reizner       2015-03-04   34  #include <linux/ramfs.h>
> 502e95c6 Zach Reizner       2015-03-04   35  #include <linux/shmem_fs.h>
> 502e95c6 Zach Reizner       2015-03-04   36  #include <linux/dma-buf.h>
> 502e95c6 Zach Reizner       2015-03-04   37  #include "vgem_drv.h"
> 502e95c6 Zach Reizner       2015-03-04   38  
> 502e95c6 Zach Reizner       2015-03-04   39  #define DRIVER_NAME      "vgem"
> 502e95c6 Zach Reizner       2015-03-04   40  #define DRIVER_DESC      
> "Virtual GEM provider"
> 502e95c6 Zach Reizner       2015-03-04   41  #define DRIVER_DATE      
> "20120112"
> 502e95c6 Zach Reizner       2015-03-04   42  #define DRIVER_MAJOR     1
> 502e95c6 Zach Reizner       2015-03-04   43  #define DRIVER_MINOR     0
> 502e95c6 Zach Reizner       2015-03-04   44  
> 502e95c6 Zach Reizner       2015-03-04   45  void vgem_gem_put_pages(struct 
> drm_vgem_gem_object *obj)
> 502e95c6 Zach Reizner       2015-03-04   46  {
> 502e95c6 Zach Reizner       2015-03-04   47   drm_gem_put_pages(&obj->base, 
> obj->pages, false, false);
> 502e95c6 Zach Reizner       2015-03-04   48   obj->pages = NULL;
> 502e95c6 Zach Reizner       2015-03-04   49  }
> 502e95c6 Zach Reizner       2015-03-04   50  
> 502e95c6 Zach Reizner       2015-03-04   51  static void 
> vgem_gem_free_object(struct drm_gem_object *obj)
> 502e95c6 Zach Reizner       2015-03-04   52  {
> 502e95c6 Zach Reizner       2015-03-04   53   struct drm_vgem_gem_object 
> *vgem_obj = to_vgem_bo(obj);
> 502e95c6 Zach Reizner       2015-03-04   54  
> 502e95c6 Zach Reizner       2015-03-04   55   drm_gem_free_mmap_offset(obj);
> 502e95c6 Zach Reizner       2015-03-04   56  
> 502e95c6 Zach Reizner       2015-03-04   57   if (vgem_obj->use_dma_buf && 
> obj->dma_buf) {
> 502e95c6 Zach Reizner       2015-03-04   58           
> dma_buf_put(obj->dma_buf);
> 502e95c6 Zach Reizner       2015-03-04   59           obj->dma_buf = NULL;
> 502e95c6 Zach Reizner       2015-03-04   60   }
> 502e95c6 Zach Reizner       2015-03-04   61  
> 502e95c6 Zach Reizner       2015-03-04   62   drm_gem_object_release(obj);
> 502e95c6 Zach Reizner       2015-03-04   63  
> 502e95c6 Zach Reizner       2015-03-04   64   if (vgem_obj->pages)
> 502e95c6 Zach Reizner       2015-03-04   65           
> vgem_gem_put_pages(vgem_obj);
> 502e95c6 Zach Reizner       2015-03-04   66  
> 502e95c6 Zach Reizner       2015-03-04   67   vgem_obj->pages = NULL;
> 502e95c6 Zach Reizner       2015-03-04   68  
> 502e95c6 Zach Reizner       2015-03-04   69   kfree(vgem_obj);
> 502e95c6 Zach Reizner       2015-03-04   70  }
> 502e95c6 Zach Reizner       2015-03-04   71  
> 502e95c6 Zach Reizner       2015-03-04   72  int vgem_gem_get_pages(struct 
> drm_vgem_gem_object *obj)
> 502e95c6 Zach Reizner       2015-03-04   73  {
> 502e95c6 Zach Reizner       2015-03-04   74   struct page **pages;
> 502e95c6 Zach Reizner       2015-03-04   75  
> 502e95c6 Zach Reizner       2015-03-04   76   if (obj->pages || 
> obj->use_dma_buf)
> 502e95c6 Zach Reizner       2015-03-04   77           return 0;
> 502e95c6 Zach Reizner       2015-03-04   78  
> 502e95c6 Zach Reizner       2015-03-04   79   pages = 
> drm_gem_get_pages(&obj->base);
> 502e95c6 Zach Reizner       2015-03-04   80   if (IS_ERR(pages)) {
> 502e95c6 Zach Reizner       2015-03-04   81           return PTR_ERR(pages);
> 502e95c6 Zach Reizner       2015-03-04   82   }
> 502e95c6 Zach Reizner       2015-03-04   83  
> 502e95c6 Zach Reizner       2015-03-04   84   obj->pages = pages;
> 502e95c6 Zach Reizner       2015-03-04   85  
> 502e95c6 Zach Reizner       2015-03-04   86   return 0;
> 502e95c6 Zach Reizner       2015-03-04   87  }
> 502e95c6 Zach Reizner       2015-03-04   88  
> 502e95c6 Zach Reizner       2015-03-04   89  static int vgem_gem_fault(struct 
> vm_area_struct *vma, struct vm_fault *vmf)
> 502e95c6 Zach Reizner       2015-03-04   90  {
> 502e95c6 Zach Reizner       2015-03-04   91   struct drm_vgem_gem_object *obj 
> = vma->vm_private_data;
> 502e95c6 Zach Reizner       2015-03-04   92   struct drm_device *dev = 
> obj->base.dev;
> 502e95c6 Zach Reizner       2015-03-04   93   loff_t num_pages;
> 502e95c6 Zach Reizner       2015-03-04   94   pgoff_t page_offset;
> 502e95c6 Zach Reizner       2015-03-04   95   int ret;
> 502e95c6 Zach Reizner       2015-03-04   96  
> 502e95c6 Zach Reizner       2015-03-04   97   /* We don't use vmf->pgoff 
> since that has the fake offset */
> 502e95c6 Zach Reizner       2015-03-04   98   page_offset = ((unsigned 
> long)vmf->virtual_address - vma->vm_start) >>
> 502e95c6 Zach Reizner       2015-03-04   99           PAGE_SHIFT;
> 502e95c6 Zach Reizner       2015-03-04  100  
> 502e95c6 Zach Reizner       2015-03-04  101   num_pages = 
> DIV_ROUND_UP(obj->base.size, PAGE_SIZE);
> 502e95c6 Zach Reizner       2015-03-04  102  
> 502e95c6 Zach Reizner       2015-03-04  103   if (page_offset > num_pages)
> 502e95c6 Zach Reizner       2015-03-04  104           return VM_FAULT_SIGBUS;
> 502e95c6 Zach Reizner       2015-03-04  105  
> 502e95c6 Zach Reizner       2015-03-04  106   mutex_lock(&dev->struct_mutex);
> 502e95c6 Zach Reizner       2015-03-04  107  
> 502e95c6 Zach Reizner       2015-03-04  108   ret = vm_insert_page(vma, 
> (unsigned long)vmf->virtual_address,
> 502e95c6 Zach Reizner       2015-03-04  109                        
> obj->pages[page_offset]);
> 502e95c6 Zach Reizner       2015-03-04  110  
> 502e95c6 Zach Reizner       2015-03-04  111   
> mutex_unlock(&dev->struct_mutex);
> 502e95c6 Zach Reizner       2015-03-04  112   switch (ret) {
> 502e95c6 Zach Reizner       2015-03-04  113   case 0:
> 502e95c6 Zach Reizner       2015-03-04  114           return VM_FAULT_NOPAGE;
> 502e95c6 Zach Reizner       2015-03-04  115   case -ENOMEM:
> 502e95c6 Zach Reizner       2015-03-04  116           return VM_FAULT_OOM;
> 502e95c6 Zach Reizner       2015-03-04  117   case -EBUSY:
> 502e95c6 Zach Reizner       2015-03-04  118           return VM_FAULT_RETRY;
> 502e95c6 Zach Reizner       2015-03-04  119   case -EFAULT:
> 502e95c6 Zach Reizner       2015-03-04  120   case -EINVAL:
> 502e95c6 Zach Reizner       2015-03-04  121           return VM_FAULT_SIGBUS;
> 502e95c6 Zach Reizner       2015-03-04  122   default:
> 502e95c6 Zach Reizner       2015-03-04  123           WARN_ON(1);
> 502e95c6 Zach Reizner       2015-03-04  124           return VM_FAULT_SIGBUS;
> 502e95c6 Zach Reizner       2015-03-04  125   }
> 502e95c6 Zach Reizner       2015-03-04  126  }
> 502e95c6 Zach Reizner       2015-03-04  127  
> 7cbea8dc Kirill A. Shutemov 2015-09-09  128  static const struct 
> vm_operations_struct vgem_gem_vm_ops = {
> 502e95c6 Zach Reizner       2015-03-04  129   .fault = vgem_gem_fault,
> 502e95c6 Zach Reizner       2015-03-04  130   .open = drm_gem_vm_open,
> 502e95c6 Zach Reizner       2015-03-04  131   .close = drm_gem_vm_close,
> 502e95c6 Zach Reizner       2015-03-04  132  };
> 502e95c6 Zach Reizner       2015-03-04  133  
> 502e95c6 Zach Reizner       2015-03-04  134  /* ioctls */
> 502e95c6 Zach Reizner       2015-03-04  135  
> 502e95c6 Zach Reizner       2015-03-04  136  static struct drm_gem_object 
> *vgem_gem_create(struct drm_device *dev,
> 502e95c6 Zach Reizner       2015-03-04  137                                   
>       struct drm_file *file,
> 502e95c6 Zach Reizner       2015-03-04  138                                   
>       unsigned int *handle,
> 502e95c6 Zach Reizner       2015-03-04  139                                   
>       unsigned long size)
> 502e95c6 Zach Reizner       2015-03-04  140  {
> 502e95c6 Zach Reizner       2015-03-04  141   struct drm_vgem_gem_object *obj;
> 502e95c6 Zach Reizner       2015-03-04  142   struct drm_gem_object 
> *gem_object;
> 502e95c6 Zach Reizner       2015-03-04  143   int err;
> 502e95c6 Zach Reizner       2015-03-04  144  
> 502e95c6 Zach Reizner       2015-03-04  145   size = roundup(size, PAGE_SIZE);
> 502e95c6 Zach Reizner       2015-03-04  146  
> 502e95c6 Zach Reizner       2015-03-04  147   obj = kzalloc(sizeof(*obj), 
> GFP_KERNEL);
> 502e95c6 Zach Reizner       2015-03-04  148   if (!obj)
> 502e95c6 Zach Reizner       2015-03-04  149           return ERR_PTR(-ENOMEM);
> 502e95c6 Zach Reizner       2015-03-04  150  
> 502e95c6 Zach Reizner       2015-03-04  151   gem_object = &obj->base;
> 502e95c6 Zach Reizner       2015-03-04  152  
> 502e95c6 Zach Reizner       2015-03-04  153   err = drm_gem_object_init(dev, 
> gem_object, size);
> 502e95c6 Zach Reizner       2015-03-04  154   if (err)
> 502e95c6 Zach Reizner       2015-03-04  155           goto out;
> 502e95c6 Zach Reizner       2015-03-04  156  
> 502e95c6 Zach Reizner       2015-03-04  157   err = 
> drm_gem_handle_create(file, gem_object, handle);
> 502e95c6 Zach Reizner       2015-03-04  158   if (err)
> 502e95c6 Zach Reizner       2015-03-04  159           goto handle_out;
> 502e95c6 Zach Reizner       2015-03-04  160  
> 502e95c6 Zach Reizner       2015-03-04  161   
> drm_gem_object_unreference_unlocked(gem_object);
> 502e95c6 Zach Reizner       2015-03-04  162  
> 502e95c6 Zach Reizner       2015-03-04  163   return gem_object;
> 502e95c6 Zach Reizner       2015-03-04  164  
> 502e95c6 Zach Reizner       2015-03-04  165  handle_out:
> 502e95c6 Zach Reizner       2015-03-04  166   
> drm_gem_object_release(gem_object);
> 502e95c6 Zach Reizner       2015-03-04  167  out:
> 502e95c6 Zach Reizner       2015-03-04  168   kfree(obj);
> 502e95c6 Zach Reizner       2015-03-04  169   return ERR_PTR(err);
> 502e95c6 Zach Reizner       2015-03-04  170  }
> 502e95c6 Zach Reizner       2015-03-04  171  
> 502e95c6 Zach Reizner       2015-03-04  172  static int 
> vgem_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
> 502e95c6 Zach Reizner       2015-03-04  173                           struct 
> drm_mode_create_dumb *args)
> 502e95c6 Zach Reizner       2015-03-04  174  {
> 502e95c6 Zach Reizner       2015-03-04  175   struct drm_gem_object 
> *gem_object;
> 502e95c6 Zach Reizner       2015-03-04  176   uint64_t size;
> 502e95c6 Zach Reizner       2015-03-04  177   uint64_t pitch = args->width * 
> DIV_ROUND_UP(args->bpp, 8);
> 502e95c6 Zach Reizner       2015-03-04  178  
> 502e95c6 Zach Reizner       2015-03-04  179   size = args->height * pitch;
> 502e95c6 Zach Reizner       2015-03-04  180   if (size == 0)
> 502e95c6 Zach Reizner       2015-03-04  181           return -EINVAL;
> 502e95c6 Zach Reizner       2015-03-04  182  
> 502e95c6 Zach Reizner       2015-03-04  183   gem_object = 
> vgem_gem_create(dev, file, &args->handle, size);
> 502e95c6 Zach Reizner       2015-03-04  184  
> 502e95c6 Zach Reizner       2015-03-04  185   if (IS_ERR(gem_object)) {
> 502e95c6 Zach Reizner       2015-03-04  186           
> DRM_DEBUG_DRIVER("object creation failed\n");
> 502e95c6 Zach Reizner       2015-03-04  187           return 
> PTR_ERR(gem_object);
> 502e95c6 Zach Reizner       2015-03-04  188   }
> 502e95c6 Zach Reizner       2015-03-04  189  
> 502e95c6 Zach Reizner       2015-03-04  190   args->size = gem_object->size;
> 502e95c6 Zach Reizner       2015-03-04  191   args->pitch = pitch;
> 502e95c6 Zach Reizner       2015-03-04  192  
> 502e95c6 Zach Reizner       2015-03-04  193   DRM_DEBUG_DRIVER("Created 
> object of size %lld\n", size);
> 502e95c6 Zach Reizner       2015-03-04  194  
> 502e95c6 Zach Reizner       2015-03-04  195   return 0;
> 502e95c6 Zach Reizner       2015-03-04  196  }
> 502e95c6 Zach Reizner       2015-03-04  197  
> 502e95c6 Zach Reizner       2015-03-04  198  int vgem_gem_dumb_map(struct 
> drm_file *file, struct drm_device *dev,
> 502e95c6 Zach Reizner       2015-03-04  199                 uint32_t handle, 
> uint64_t *offset)
> 502e95c6 Zach Reizner       2015-03-04  200  {
> 502e95c6 Zach Reizner       2015-03-04  201   int ret = 0;
> 502e95c6 Zach Reizner       2015-03-04  202   struct drm_gem_object *obj;
> 502e95c6 Zach Reizner       2015-03-04  203  
> 502e95c6 Zach Reizner       2015-03-04  204   mutex_lock(&dev->struct_mutex);
> 502e95c6 Zach Reizner       2015-03-04  205   obj = 
> drm_gem_object_lookup(dev, file, handle);
> 502e95c6 Zach Reizner       2015-03-04  206   if (!obj) {
> 502e95c6 Zach Reizner       2015-03-04  207           ret = -ENOENT;
> 502e95c6 Zach Reizner       2015-03-04  208           goto unlock;
> 502e95c6 Zach Reizner       2015-03-04  209   }
> 502e95c6 Zach Reizner       2015-03-04  210  
> 502e95c6 Zach Reizner       2015-03-04 @211   if 
> (!drm_vma_node_has_offset(&obj->vma_node)) {
> 502e95c6 Zach Reizner       2015-03-04  212           ret = 
> drm_gem_create_mmap_offset(obj);
> 502e95c6 Zach Reizner       2015-03-04  213           if (ret)
> 502e95c6 Zach Reizner       2015-03-04  214                   goto unref;
> 
> :::::: The code at line 211 was first introduced by commit
> :::::: 502e95c6678505474f1056480310cd9382bacbac drm/vgem: implement virtual 
> GEM
> 
> :::::: TO: Zach Reizner <zachr at google.com>
> :::::: CC: Dave Airlie <airlied at redhat.com>
> 
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation



-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

Reply via email to