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 <lkp@xxxxxxxxx> 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-all@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip