Hi Rafael,

[auto build test WARNING on drm/drm-next -- if it's inappropriate base, please 
ignore]

config: mn10300-allyesconfig (attached as .config)
reproduce:
        wget 
https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross
 -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=mn10300 

All warnings (new ones prefixed by >>):

   In file included from include/linux/list.h:8:0,
                    from include/linux/kobject.h:20,
                    from include/linux/device.h:17,
                    from drivers/gpu/drm/drm_dp_aux_dev.c:28:
   drivers/gpu/drm/drm_dp_aux_dev.c: In function 'auxdev_read':
   include/linux/kernel.h:722:17: warning: comparison of distinct pointer types 
lacks a cast
     (void) (&_min1 == &_min2);  \
                    ^
>> drivers/gpu/drm/drm_dp_aux_dev.c:180:18: note: in expansion of macro 'min'
      ssize_t todo = min(bytes_pending, sizeof(localbuf));
                     ^
   drivers/gpu/drm/drm_dp_aux_dev.c: In function 'auxdev_write':
   include/linux/kernel.h:722:17: warning: comparison of distinct pointer types 
lacks a cast
     (void) (&_min1 == &_min2);  \
                    ^
   drivers/gpu/drm/drm_dp_aux_dev.c:220:18: note: in expansion of macro 'min'
      ssize_t todo = min(bytes_pending, sizeof(localbuf));
                     ^

vim +/min +180 drivers/gpu/drm/drm_dp_aux_dev.c

    22   *
    23   * Authors:
    24   *    Rafael Antognolli <rafael.antognolli at intel.com>
    25   *
    26   */
    27  
  > 28  #include <linux/device.h>
    29  #include <linux/fs.h>
    30  #include <linux/slab.h>
    31  #include <linux/init.h>
    32  #include <linux/kernel.h>
    33  #include <linux/module.h>
    34  #include <asm/uaccess.h>
    35  #include <drm/drm_dp_helper.h>
    36  #include <drm/drm_crtc.h>
    37  
    38  struct drm_dp_aux_dev {
    39          unsigned index;
    40          struct drm_dp_aux *aux;
    41          struct device *dev;
    42          struct kref refcount;
    43          bool removed;
    44          spinlock_t removed_lock;
    45  };
    46  
    47  #define DRM_AUX_MINORS  256
    48  #define AUX_MAX_OFFSET  (1 << 20)
    49  static DEFINE_IDR(aux_idr);
    50  static DEFINE_SPINLOCK(aux_idr_lock);
    51  static struct class *drm_dp_aux_dev_class;
    52  static int drm_dev_major = -1;
    53  
    54  static struct drm_dp_aux_dev *drm_dp_aux_dev_get_by_minor(unsigned 
index)
    55  {
    56          struct drm_dp_aux_dev *aux_dev = NULL;
    57  
    58          spin_lock(&aux_idr_lock);
    59          aux_dev = idr_find(&aux_idr, index);
    60          if (!kref_get_unless_zero(&aux_dev->refcount))
    61                  aux_dev = NULL;
    62          spin_unlock(&aux_idr_lock);
    63  
    64          return aux_dev;
    65  }
    66  
    67  static struct drm_dp_aux_dev *alloc_drm_dp_aux_dev(struct drm_dp_aux 
*aux)
    68  {
    69          struct drm_dp_aux_dev *aux_dev;
    70          int index;
    71  
    72  
    73          aux_dev = kzalloc(sizeof(*aux_dev), GFP_KERNEL);
    74          if (!aux_dev)
    75                  return ERR_PTR(-ENOMEM);
    76          aux_dev->aux = aux;
    77          aux_dev->removed = false;
    78          spin_lock_init(&aux_dev->removed_lock);
    79          kref_init(&aux_dev->refcount);
    80  
    81          idr_preload(GFP_KERNEL);
    82          spin_lock(&aux_idr_lock);
    83          index = idr_alloc_cyclic(&aux_idr, aux_dev, 0, DRM_AUX_MINORS,
    84                                   GFP_NOWAIT);
    85          spin_unlock(&aux_idr_lock);
    86          idr_preload_end();
    87          if (index < 0) {
    88                  kfree(aux_dev);
    89                  return ERR_PTR(-ENOMEM);
    90          }
    91          aux_dev->index = index;
    92  
    93          return aux_dev;
    94  }
    95  
    96  static void free_drm_dp_aux_dev(struct drm_dp_aux_dev *aux_dev)
    97  {
    98          spin_lock(&aux_idr_lock);
    99          idr_remove(&aux_idr, aux_dev->index);
   100          spin_unlock(&aux_idr_lock);
   101          kfree(aux_dev);
   102  }
   103  
   104  static void release_drm_dp_aux_dev(struct kref *ref)
   105  {
   106          int minor;
   107          struct drm_dp_aux_dev *aux_dev =
   108                  container_of(ref, struct drm_dp_aux_dev, refcount);
   109          minor = aux_dev->index;
   110          device_destroy(drm_dp_aux_dev_class, MKDEV(drm_dev_major, 
minor));
   111  
   112          free_drm_dp_aux_dev(aux_dev);
   113  }
   114  
   115  static ssize_t name_show(struct device *dev,
   116                           struct device_attribute *attr, char *buf)
   117  {
   118          ssize_t res;
   119          struct drm_dp_aux_dev *aux_dev =
   120                  drm_dp_aux_dev_get_by_minor(MINOR(dev->devt));
   121  
   122          if (!aux_dev)
   123                  return -ENODEV;
   124  
   125          res = sprintf(buf, "%s\n", aux_dev->aux->name);
   126          kref_put(&aux_dev->refcount, release_drm_dp_aux_dev);
   127  
   128          return res;
   129  }
   130  static DEVICE_ATTR_RO(name);
   131  
   132  static struct attribute *drm_dp_aux_attrs[] = {
   133          &dev_attr_name.attr,
   134          NULL,
   135  };
   136  ATTRIBUTE_GROUPS(drm_dp_aux);
   137  
   138  static int auxdev_open(struct inode *inode, struct file *file)
   139  {
   140          unsigned int minor = iminor(inode);
   141          struct drm_dp_aux_dev *aux_dev;
   142  
   143          aux_dev = drm_dp_aux_dev_get_by_minor(minor);
   144          if (!aux_dev)
   145                  return -ENODEV;
   146  
   147          file->private_data = aux_dev;
   148          return 0;
   149  }
   150  
   151  static loff_t auxdev_llseek(struct file *file, loff_t offset, int 
whence)
   152  {
   153          return fixed_size_llseek(file, offset, whence, AUX_MAX_OFFSET);
   154  }
   155  
   156  static ssize_t auxdev_read(struct file *file, char __user *buf, size_t 
count,
   157                             loff_t *offset)
   158  {
   159          size_t bytes_pending, num_bytes_processed = 0;
   160          struct drm_dp_aux_dev *aux_dev = file->private_data;
   161          bool aux_removed;
   162  
   163          if (count < 0)
   164                  return -EINVAL;
   165  
   166          spin_lock(&aux_dev->removed_lock);
   167          aux_removed = aux_dev->removed;
   168          spin_unlock(&aux_dev->removed_lock);
   169          if (aux_removed)
   170                  return -ENODEV;
   171  
   172          bytes_pending = min((loff_t)count, AUX_MAX_OFFSET - (*offset));
   173  
   174          if (!access_ok(VERIFY_WRITE, buf, bytes_pending))
   175                  return -EFAULT;
   176  
   177          while (bytes_pending > 0) {
   178                  uint8_t localbuf[DP_AUX_MAX_PAYLOAD_BYTES];
   179                  ssize_t res;
 > 180                  ssize_t todo = min(bytes_pending, sizeof(localbuf));
   181  
   182                  res = drm_dp_dpcd_read(aux_dev->aux, *offset, localbuf, 
todo);
   183                  if (res <= 0)

---
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: 36227 bytes
Desc: not available
URL: 
<http://lists.freedesktop.org/archives/dri-devel/attachments/20151010/8a5d919a/attachment-0001.obj>

Reply via email to