Hi Saravana,

I love your patch! Yet something to improve:

[auto build test ERROR on gpio/for-next]
[also build test ERROR on v5.11-rc3 next-20210115]
[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/Saravana-Kannan/gpiolib-Bind-gpio_device-to-a-driver-to-enable-fw_devlink-on-by-default/20210116-050450
base:   https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git 
for-next
config: arm64-randconfig-r023-20210115 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 
5b42fd8dd4e7e29125a09a41a33af7c9cb57d144)
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 arm64 cross compiling tool for clang build
        # apt-get install binutils-aarch64-linux-gnu
        # 
https://github.com/0day-ci/linux/commit/8c370ef8f557575cb23e5e288c861d9447db0b3e
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review 
Saravana-Kannan/gpiolib-Bind-gpio_device-to-a-driver-to-enable-fw_devlink-on-by-default/20210116-050450
        git checkout 8c370ef8f557575cb23e5e288c861d9447db0b3e
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm64 

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

All errors (new ones prefixed by >>):

>> drivers/gpio/gpiolib.c:614:69: error: too few arguments to function call, 
>> expected 3, have 2
           if (!fwnode_dev && of_find_property(gdev->dev.of_node, 
"compatible")) {
                              ~~~~~~~~~~~~~~~~                                ^
   include/linux/compiler.h:56:47: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                                                 ^~~~
   include/linux/compiler.h:58:52: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                                      ^~~~
   include/linux/of.h:304:25: note: 'of_find_property' declared here
   extern struct property *of_find_property(const struct device_node *np,
                           ^
>> drivers/gpio/gpiolib.c:614:69: error: too few arguments to function call, 
>> expected 3, have 2
           if (!fwnode_dev && of_find_property(gdev->dev.of_node, 
"compatible")) {
                              ~~~~~~~~~~~~~~~~                                ^
   include/linux/compiler.h:56:47: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                                                 ^~~~
   include/linux/compiler.h:58:61: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                                               ^~~~
   include/linux/of.h:304:25: note: 'of_find_property' declared here
   extern struct property *of_find_property(const struct device_node *np,
                           ^
>> drivers/gpio/gpiolib.c:614:69: error: too few arguments to function call, 
>> expected 3, have 2
           if (!fwnode_dev && of_find_property(gdev->dev.of_node, 
"compatible")) {
                              ~~~~~~~~~~~~~~~~                                ^
   include/linux/compiler.h:56:47: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                                                 ^~~~
   include/linux/compiler.h:58:86: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                                                                
        ^~~~
   include/linux/compiler.h:69:3: note: expanded from macro '__trace_if_value'
           (cond) ?                                        \
            ^~~~
   include/linux/of.h:304:25: note: 'of_find_property' declared here
   extern struct property *of_find_property(const struct device_node *np,
                           ^
>> drivers/gpio/gpiolib.c:615:51: error: expected ')'
                   chip_warn(gc, "Create a real device for %pOF\n" of_node);
                                                                   ^
   drivers/gpio/gpiolib.c:615:3: note: to match this '('
                   chip_warn(gc, "Create a real device for %pOF\n" of_node);
                   ^
   drivers/gpio/gpiolib.h:182:2: note: expanded from macro 'chip_warn'
           dev_warn(&gc->gpiodev->dev, "(%s): " fmt, gc->label, ##__VA_ARGS__)
           ^
   include/linux/dev_printk.h:114:11: note: expanded from macro 'dev_warn'
           _dev_warn(dev, dev_fmt(fmt), ##__VA_ARGS__)
                    ^
   4 errors generated.


vim +614 drivers/gpio/gpiolib.c

   567  
   568  int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
   569                                 struct lock_class_key *lock_key,
   570                                 struct lock_class_key *request_key)
   571  {
   572          unsigned long   flags;
   573          int             ret = 0;
   574          unsigned        i;
   575          int             base = gc->base;
   576          struct gpio_device *gdev;
   577          struct device_node *of_node;
   578          struct fwnode_handle *fwnode;
   579          struct device *fwnode_dev;
   580  
   581          /*
   582           * First: allocate and populate the internal stat container, and
   583           * set up the struct device.
   584           */
   585          gdev = kzalloc(sizeof(*gdev), GFP_KERNEL);
   586          if (!gdev)
   587                  return -ENOMEM;
   588          gdev->dev.bus = &gpio_bus_type;
   589          gdev->chip = gc;
   590          gc->gpiodev = gdev;
   591          if (gc->parent) {
   592                  gdev->dev.parent = gc->parent;
   593                  gdev->dev.of_node = gc->parent->of_node;
   594          }
   595  
   596  #ifdef CONFIG_OF_GPIO
   597          /* If the gpiochip has an assigned OF node this takes 
precedence */
   598          if (gc->of_node)
   599                  gdev->dev.of_node = gc->of_node;
   600          else
   601                  gc->of_node = gdev->dev.of_node;
   602  
   603          of_node = gdev->dev.of_node;
   604          fwnode = of_fwnode_handle(of_node);
   605          fwnode_dev = get_dev_from_fwnode(fwnode);
   606  
   607          /*
   608           * If your driver hits this warning, it's because you are 
directly
   609           * parsing a device tree node with "compatible" property and
   610           * initializing it instead of using the standard DT + device 
driver
   611           * model of creating a struct device and then initializing it 
in the
   612           * probe function. Please refactor your driver.
   613           */
 > 614          if (!fwnode_dev && of_find_property(gdev->dev.of_node, 
 > "compatible")) {
 > 615                  chip_warn(gc, "Create a real device for %pOF\n" 
 > of_node);
   616                  gdev->dev.fwnode = fwnode;
   617          }
   618  #endif
   619  
   620          gdev->id = ida_alloc(&gpio_ida, GFP_KERNEL);
   621          if (gdev->id < 0) {
   622                  ret = gdev->id;
   623                  goto err_free_gdev;
   624          }
   625          dev_set_name(&gdev->dev, GPIOCHIP_NAME "%d", gdev->id);
   626          device_initialize(&gdev->dev);
   627          dev_set_drvdata(&gdev->dev, gdev);
   628          if (gc->parent && gc->parent->driver)
   629                  gdev->owner = gc->parent->driver->owner;
   630          else if (gc->owner)
   631                  /* TODO: remove chip->owner */
   632                  gdev->owner = gc->owner;
   633          else
   634                  gdev->owner = THIS_MODULE;
   635  
   636          gdev->descs = kcalloc(gc->ngpio, sizeof(gdev->descs[0]), 
GFP_KERNEL);
   637          if (!gdev->descs) {
   638                  ret = -ENOMEM;
   639                  goto err_free_ida;
   640          }
   641  
   642          if (gc->ngpio == 0) {
   643                  chip_err(gc, "tried to insert a GPIO chip with zero 
lines\n");
   644                  ret = -EINVAL;
   645                  goto err_free_descs;
   646          }
   647  
   648          if (gc->ngpio > FASTPATH_NGPIO)
   649                  chip_warn(gc, "line cnt %u is greater than fast path 
cnt %u\n",
   650                            gc->ngpio, FASTPATH_NGPIO);
   651  
   652          gdev->label = kstrdup_const(gc->label ?: "unknown", GFP_KERNEL);
   653          if (!gdev->label) {
   654                  ret = -ENOMEM;
   655                  goto err_free_descs;
   656          }
   657  
   658          gdev->ngpio = gc->ngpio;
   659          gdev->data = data;
   660  
   661          spin_lock_irqsave(&gpio_lock, flags);
   662  
   663          /*
   664           * TODO: this allocates a Linux GPIO number base in the global
   665           * GPIO numberspace for this chip. In the long run we want to
   666           * get *rid* of this numberspace and use only descriptors, but
   667           * it may be a pipe dream. It will not happen before we get rid
   668           * of the sysfs interface anyways.
   669           */
   670          if (base < 0) {
   671                  base = gpiochip_find_base(gc->ngpio);
   672                  if (base < 0) {
   673                          ret = base;
   674                          spin_unlock_irqrestore(&gpio_lock, flags);
   675                          goto err_free_label;
   676                  }
   677                  /*
   678                   * TODO: it should not be necessary to reflect the 
assigned
   679                   * base outside of the GPIO subsystem. Go over drivers 
and
   680                   * see if anyone makes use of this, else drop this and 
assign
   681                   * a poison instead.
   682                   */
   683                  gc->base = base;
   684          }
   685          gdev->base = base;
   686  
   687          ret = gpiodev_add_to_list(gdev);
   688          if (ret) {
   689                  spin_unlock_irqrestore(&gpio_lock, flags);
   690                  goto err_free_label;
   691          }
   692  
   693          for (i = 0; i < gc->ngpio; i++)
   694                  gdev->descs[i].gdev = gdev;
   695  
   696          spin_unlock_irqrestore(&gpio_lock, flags);
   697  
   698          BLOCKING_INIT_NOTIFIER_HEAD(&gdev->notifier);
   699  

---
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