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

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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/octet-stream
Size: 19274 bytes
Desc: not available
URL: 
<http://lists.freedesktop.org/archives/dri-devel/attachments/20151023/1726e093/attachment-0001.obj>

Reply via email to