Hi Wei,

I love your patch! Yet something to improve:

[auto build test ERROR on net-next/master]
[also build test ERROR on v4.18-rc1 next-20180615]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/Wei-Li/eth-phy-add-mdio-bus-char-device-interface/20180618-115206
config: xtensa-allmodconfig (attached as .config)
compiler: xtensa-linux-gcc (GCC) 8.1.0
reproduce:
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=8.1.0 make.cross ARCH=xtensa 

Note: the 
linux-review/Wei-Li/eth-phy-add-mdio-bus-char-device-interface/20180618-115206 
HEAD 611497ceadd8527fc1e4aa0eb8936171906118dd builds fine.
      It only hurts bisectibility.

All errors (new ones prefixed by >>):

   drivers/net/phy/mdio-dev.c: In function 'mdiodev_attach_bus':
>> drivers/net/phy/mdio-dev.c:250:21: error: 'mdio_bus_class' undeclared (first 
>> use in this function); did you mean 'mdio_dev_class'?
     if (dev->class != &mdio_bus_class)
                        ^~~~~~~~~~~~~~
                        mdio_dev_class
   drivers/net/phy/mdio-dev.c:250:21: note: each undeclared identifier is 
reported only once for each function it appears in
   drivers/net/phy/mdio-dev.c: In function 'mdiodev_detach_bus':
   drivers/net/phy/mdio-dev.c:288:21: error: 'mdio_bus_class' undeclared (first 
use in this function); did you mean 'mdio_dev_class'?
     if (dev->class != &mdio_bus_class)
                        ^~~~~~~~~~~~~~
                        mdio_dev_class
   drivers/net/phy/mdio-dev.c: In function 'mdio_dev_init':
>> drivers/net/phy/mdio-dev.c:345:8: error: implicit declaration of function 
>> 'mdiobus_register_notifier'; did you mean 'bus_register_notifier'? 
>> [-Werror=implicit-function-declaration]
     res = mdiobus_register_notifier(&mdiodev_notifier);
           ^~~~~~~~~~~~~~~~~~~~~~~~~
           bus_register_notifier
   drivers/net/phy/mdio-dev.c:350:25: error: 'mdio_bus_class' undeclared (first 
use in this function); did you mean 'mdio_dev_class'?
     class_for_each_device(&mdio_bus_class, NULL, NULL, mdiodev_attach_bus);
                            ^~~~~~~~~~~~~~
                            mdio_dev_class
   drivers/net/phy/mdio-dev.c: In function 'mdio_dev_exit':
>> drivers/net/phy/mdio-dev.c:365:2: error: implicit declaration of function 
>> 'mdiobus_unregister_notifier'; did you mean 'bus_unregister_notifier'? 
>> [-Werror=implicit-function-declaration]
     mdiobus_unregister_notifier(&mdiodev_notifier);
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~
     bus_unregister_notifier
   drivers/net/phy/mdio-dev.c:366:25: error: 'mdio_bus_class' undeclared (first 
use in this function); did you mean 'mdio_dev_class'?
     class_for_each_device(&mdio_bus_class, NULL, NULL, mdiodev_detach_bus);
                            ^~~~~~~~~~~~~~
                            mdio_dev_class
   cc1: some warnings being treated as errors

vim +250 drivers/net/phy/mdio-dev.c

   243  
   244  static int mdiodev_attach_bus(struct device *dev, void *dummy)
   245  {
   246          struct mii_bus *bus;
   247          struct mdio_dev *mdio_dev;
   248          int res;
   249  
 > 250          if (dev->class != &mdio_bus_class)
   251                  return 0;
   252          bus = to_mii_bus(dev);
   253  
   254          mdio_dev = get_free_mdio_dev(bus);
   255          if (IS_ERR(mdio_dev))
   256                  return PTR_ERR(mdio_dev);
   257  
   258          cdev_init(&mdio_dev->cdev, &mdiodev_fops);
   259          mdio_dev->cdev.owner = THIS_MODULE;
   260          res = cdev_add(&mdio_dev->cdev, MKDEV(mdio_major, 
mdio_dev->nr), 1);
   261          if (res)
   262                  goto error_cdev;
   263  
   264          /* register this mdio device with the driver core */
   265          mdio_dev->dev = device_create(mdio_dev_class, &bus->dev,
   266                                                  MKDEV(mdio_major, 
mdio_dev->nr), NULL,
   267                                                  "mdio-%d", 
mdio_dev->nr);
   268          if (IS_ERR(mdio_dev->dev)) {
   269                  res = PTR_ERR(mdio_dev->dev);
   270                  goto error;
   271          }
   272  
   273          pr_debug("mdio-dev: bus [%s] registered as minor %d\n",
   274                          bus->name, mdio_dev->nr);
   275          return 0;
   276  error:
   277          cdev_del(&mdio_dev->cdev);
   278  error_cdev:
   279          put_mdio_dev(mdio_dev);
   280          return res;
   281  }
   282  
   283  static int mdiodev_detach_bus(struct device *dev, void *dummy)
   284  {
   285          struct mii_bus *bus;
   286          struct mdio_dev *mdio_dev;
   287  
   288          if (dev->class != &mdio_bus_class)
   289                  return 0;
   290          bus = to_mii_bus(dev);
   291  
   292          mdio_dev = mdio_dev_get_by_bus(bus);
   293          if (!mdio_dev) /* attach_bus must have failed */
   294                  return 0;
   295  
   296          cdev_del(&mdio_dev->cdev);
   297          device_destroy(mdio_dev_class, MKDEV(mdio_major, mdio_dev->nr));
   298          put_mdio_dev(mdio_dev);
   299  
   300          pr_debug("mdio-dev: bus [%s] unregistered\n", bus->name);
   301          return 0;
   302  }
   303  
   304  static int mdiodev_notifier_call(struct notifier_block *nb, unsigned 
long action,
   305                          void *data)
   306  {
   307          struct device *dev = data;
   308  
   309          switch (action) {
   310          case BUS_NOTIFY_ADD_DEVICE:
   311                  return mdiodev_attach_bus(dev, NULL);
   312          case BUS_NOTIFY_DEL_DEVICE:
   313                  return mdiodev_detach_bus(dev, NULL);
   314          }
   315  
   316          return 0;
   317  }
   318  
   319  static struct notifier_block mdiodev_notifier = {
   320          .notifier_call = mdiodev_notifier_call,
   321  };
   322  
   323  
/*-------------------------------------------------------------------------*/
   324  
   325  static int __init mdio_dev_init(void)
   326  {
   327          int res;
   328          dev_t devid;
   329  
   330          printk(KERN_INFO "mdio /dev entries driver\n");
   331  
   332          res = alloc_chrdev_region(&devid, 0, MDIO_MINORS, "mdio");
   333          if (res)
   334                  goto out;
   335  
   336          mdio_major = MAJOR(devid);
   337          mdio_dev_class = class_create(THIS_MODULE, "mdio-dev");
   338          if (IS_ERR(mdio_dev_class)) {
   339                  res = PTR_ERR(mdio_dev_class);
   340                  goto out_unreg_chrdev;
   341          }
   342          mdio_dev_class->dev_groups = mdio_groups;
   343  
   344          /* Keep track of buses which will be added or removed later */
 > 345          res = mdiobus_register_notifier(&mdiodev_notifier);
   346          if (res)
   347                  goto out_unreg_class;
   348  
   349          /* Bind to already existing buses right away */
   350          class_for_each_device(&mdio_bus_class, NULL, NULL, 
mdiodev_attach_bus);
   351  
   352          return 0;
   353  
   354  out_unreg_class:
   355          class_destroy(mdio_dev_class);
   356  out_unreg_chrdev:
   357          unregister_chrdev_region(MKDEV(mdio_major, 0), MDIO_MINORS);
   358  out:
   359          printk(KERN_ERR "%s: Driver Initialisation failed\n", __FILE__);
   360          return res;
   361  }
   362  
   363  static void __exit mdio_dev_exit(void)
   364  {
 > 365          mdiobus_unregister_notifier(&mdiodev_notifier);
   366          class_for_each_device(&mdio_bus_class, NULL, NULL, 
mdiodev_detach_bus);
   367          class_destroy(mdio_dev_class);
   368          unregister_chrdev_region(MKDEV(mdio_major, 0), MDIO_MINORS);
   369  }
   370  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to