[kbuild] Re: [PATCH v3 1/2] char: xillybus: Move class-related functions to new xillybus_class.c

Dan Carpenter dan.carpenter at oracle.com
Tue Mar 9 16:03:26 UTC 2021


url:    https://github.com/0day-ci/linux/commits/eli-billauer-gmail-com/Submission-of-XillyUSB-driver/20210309-193645
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git  080951f99de1e483a9a48f34c079b634f2912a54
config: x86_64-randconfig-m001-20210309 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp at intel.com>
Reported-by: Dan Carpenter <dan.carpenter at oracle.com>

smatch warnings:
drivers/char/xillybus/xillybus_class.c:86 xillybus_init_chrdev() warn: ignoring unreachable code.
drivers/char/xillybus/xillybus_class.c:96 xillybus_init_chrdev() warn: missing error code 'rc'

vim +86 drivers/char/xillybus/xillybus_class.c

10702b71f93292 Eli Billauer 2021-03-09   42  int xillybus_init_chrdev(struct device *dev,
10702b71f93292 Eli Billauer 2021-03-09   43  			 const struct file_operations *fops,
10702b71f93292 Eli Billauer 2021-03-09   44  			 struct module *owner,
10702b71f93292 Eli Billauer 2021-03-09   45  			 void *private_data,
10702b71f93292 Eli Billauer 2021-03-09   46  			 unsigned char *idt, unsigned int len,
10702b71f93292 Eli Billauer 2021-03-09   47  			 int num_nodes,
10702b71f93292 Eli Billauer 2021-03-09   48  			 const char *prefix, bool enumerate)
10702b71f93292 Eli Billauer 2021-03-09   49  {
10702b71f93292 Eli Billauer 2021-03-09   50  	int rc;
10702b71f93292 Eli Billauer 2021-03-09   51  	dev_t mdev;
10702b71f93292 Eli Billauer 2021-03-09   52  	int i;
10702b71f93292 Eli Billauer 2021-03-09   53  	char devname[48];
10702b71f93292 Eli Billauer 2021-03-09   54  
10702b71f93292 Eli Billauer 2021-03-09   55  	struct device *device;
10702b71f93292 Eli Billauer 2021-03-09   56  	size_t namelen;
10702b71f93292 Eli Billauer 2021-03-09   57  	struct xilly_unit *unit, *u;
10702b71f93292 Eli Billauer 2021-03-09   58  
10702b71f93292 Eli Billauer 2021-03-09   59  	unit = kzalloc(sizeof(*unit), GFP_KERNEL);
10702b71f93292 Eli Billauer 2021-03-09   60  
10702b71f93292 Eli Billauer 2021-03-09   61  	if (!unit)
10702b71f93292 Eli Billauer 2021-03-09   62  		return -ENOMEM;
10702b71f93292 Eli Billauer 2021-03-09   63  
10702b71f93292 Eli Billauer 2021-03-09   64  	mutex_lock(&unit_mutex);
10702b71f93292 Eli Billauer 2021-03-09   65  
10702b71f93292 Eli Billauer 2021-03-09   66  	if (!enumerate)
10702b71f93292 Eli Billauer 2021-03-09   67  		snprintf(unit->name, UNITNAMELEN, "%s", prefix);
10702b71f93292 Eli Billauer 2021-03-09   68  
10702b71f93292 Eli Billauer 2021-03-09   69  	for (i = 0; enumerate; i++) {
10702b71f93292 Eli Billauer 2021-03-09   70  		snprintf(unit->name, UNITNAMELEN, "%s_%02d",
10702b71f93292 Eli Billauer 2021-03-09   71  			 prefix, i);
10702b71f93292 Eli Billauer 2021-03-09   72  
10702b71f93292 Eli Billauer 2021-03-09   73  		enumerate = false;
10702b71f93292 Eli Billauer 2021-03-09   74  		list_for_each_entry(u, &unit_list, list_entry)
10702b71f93292 Eli Billauer 2021-03-09   75  			if (!strcmp(unit->name, u->name)) {
10702b71f93292 Eli Billauer 2021-03-09   76  				enumerate = true;
10702b71f93292 Eli Billauer 2021-03-09   77  				break;
10702b71f93292 Eli Billauer 2021-03-09   78  			}
10702b71f93292 Eli Billauer 2021-03-09   79  	}
10702b71f93292 Eli Billauer 2021-03-09   80  
10702b71f93292 Eli Billauer 2021-03-09   81  	rc = alloc_chrdev_region(&mdev, 0, num_nodes, unit->name);
10702b71f93292 Eli Billauer 2021-03-09   82  
10702b71f93292 Eli Billauer 2021-03-09   83  	if (rc) {
10702b71f93292 Eli Billauer 2021-03-09   84  		dev_warn(dev, "Failed to obtain major/minors");
10702b71f93292 Eli Billauer 2021-03-09   85  		goto fail_obtain;
                                                        ^^^^^^^^^^^^^^^^^
10702b71f93292 Eli Billauer 2021-03-09  @86  		return rc;
                                                        ^^^^^^^^^^
Unreachable

10702b71f93292 Eli Billauer 2021-03-09   87  	}
10702b71f93292 Eli Billauer 2021-03-09   88  
10702b71f93292 Eli Billauer 2021-03-09   89  	unit->major = MAJOR(mdev);
10702b71f93292 Eli Billauer 2021-03-09   90  	unit->lowest_minor = MINOR(mdev);
10702b71f93292 Eli Billauer 2021-03-09   91  	unit->num_nodes = num_nodes;
10702b71f93292 Eli Billauer 2021-03-09   92  	unit->private_data = private_data;
10702b71f93292 Eli Billauer 2021-03-09   93  
10702b71f93292 Eli Billauer 2021-03-09   94  	unit->cdev = cdev_alloc();
10702b71f93292 Eli Billauer 2021-03-09   95  	if (!unit->cdev)
10702b71f93292 Eli Billauer 2021-03-09  @96  		goto unregister_chrdev;

"rc = -ENOMEM;"

10702b71f93292 Eli Billauer 2021-03-09   97  
10702b71f93292 Eli Billauer 2021-03-09   98  	unit->cdev->ops = fops;
10702b71f93292 Eli Billauer 2021-03-09   99  	unit->cdev->owner = owner;
10702b71f93292 Eli Billauer 2021-03-09  100  
10702b71f93292 Eli Billauer 2021-03-09  101  	rc = cdev_add(unit->cdev, MKDEV(unit->major, unit->lowest_minor),
10702b71f93292 Eli Billauer 2021-03-09  102  		      unit->num_nodes);
10702b71f93292 Eli Billauer 2021-03-09  103  	if (rc) {
10702b71f93292 Eli Billauer 2021-03-09  104  		dev_err(dev, "Failed to add cdev.\n");
10702b71f93292 Eli Billauer 2021-03-09  105  		/* kobject_put() is normally done by cdev_del() */
10702b71f93292 Eli Billauer 2021-03-09  106  		kobject_put(&unit->cdev->kobj);
10702b71f93292 Eli Billauer 2021-03-09  107  		goto unregister_chrdev;
10702b71f93292 Eli Billauer 2021-03-09  108  	}
10702b71f93292 Eli Billauer 2021-03-09  109  
10702b71f93292 Eli Billauer 2021-03-09  110  	for (i = 0; i < num_nodes; i++) {
10702b71f93292 Eli Billauer 2021-03-09  111  		namelen = strnlen(idt, len);
10702b71f93292 Eli Billauer 2021-03-09  112  
10702b71f93292 Eli Billauer 2021-03-09  113  		if (namelen == len) {
10702b71f93292 Eli Billauer 2021-03-09  114  			dev_err(dev, "IDT's list of names is too short. This is exceptionally weird, because its CRC is OK\n");
10702b71f93292 Eli Billauer 2021-03-09  115  			rc = -ENODEV;
10702b71f93292 Eli Billauer 2021-03-09  116  			goto unroll_device_create;
10702b71f93292 Eli Billauer 2021-03-09  117  		}
10702b71f93292 Eli Billauer 2021-03-09  118  
10702b71f93292 Eli Billauer 2021-03-09  119  		snprintf(devname, sizeof(devname), "%s_%s",
10702b71f93292 Eli Billauer 2021-03-09  120  			 unit->name, idt);
10702b71f93292 Eli Billauer 2021-03-09  121  
10702b71f93292 Eli Billauer 2021-03-09  122  		len -= namelen + 1;
10702b71f93292 Eli Billauer 2021-03-09  123  		idt += namelen + 1;
10702b71f93292 Eli Billauer 2021-03-09  124  
10702b71f93292 Eli Billauer 2021-03-09  125  		device = device_create(xillybus_class,
10702b71f93292 Eli Billauer 2021-03-09  126  				       NULL,
10702b71f93292 Eli Billauer 2021-03-09  127  				       MKDEV(unit->major,
10702b71f93292 Eli Billauer 2021-03-09  128  					     i + unit->lowest_minor),
10702b71f93292 Eli Billauer 2021-03-09  129  				       NULL,
10702b71f93292 Eli Billauer 2021-03-09  130  				       "%s", devname);
10702b71f93292 Eli Billauer 2021-03-09  131  
10702b71f93292 Eli Billauer 2021-03-09  132  		if (IS_ERR(device)) {
10702b71f93292 Eli Billauer 2021-03-09  133  			dev_err(dev, "Failed to create %s device. Aborting.\n",
10702b71f93292 Eli Billauer 2021-03-09  134  				devname);
10702b71f93292 Eli Billauer 2021-03-09  135  			rc = -ENODEV;
10702b71f93292 Eli Billauer 2021-03-09  136  			goto unroll_device_create;
10702b71f93292 Eli Billauer 2021-03-09  137  		}
10702b71f93292 Eli Billauer 2021-03-09  138  	}
10702b71f93292 Eli Billauer 2021-03-09  139  
10702b71f93292 Eli Billauer 2021-03-09  140  	if (len) {
10702b71f93292 Eli Billauer 2021-03-09  141  		dev_err(dev, "IDT's list of names is too long. This is exceptionally weird, because its CRC is OK\n");
10702b71f93292 Eli Billauer 2021-03-09  142  		rc = -ENODEV;
10702b71f93292 Eli Billauer 2021-03-09  143  		goto unroll_device_create;
10702b71f93292 Eli Billauer 2021-03-09  144  	}
10702b71f93292 Eli Billauer 2021-03-09  145  
10702b71f93292 Eli Billauer 2021-03-09  146  	list_add_tail(&unit->list_entry, &unit_list);
10702b71f93292 Eli Billauer 2021-03-09  147  
10702b71f93292 Eli Billauer 2021-03-09  148  	dev_info(dev, "Created %d device files.\n", num_nodes);
10702b71f93292 Eli Billauer 2021-03-09  149  
10702b71f93292 Eli Billauer 2021-03-09  150  	mutex_unlock(&unit_mutex);
10702b71f93292 Eli Billauer 2021-03-09  151  
10702b71f93292 Eli Billauer 2021-03-09  152  	return 0;
10702b71f93292 Eli Billauer 2021-03-09  153  
10702b71f93292 Eli Billauer 2021-03-09  154  unroll_device_create:
10702b71f93292 Eli Billauer 2021-03-09  155  	for (i--; i >= 0; i--)
10702b71f93292 Eli Billauer 2021-03-09  156  		device_destroy(xillybus_class, MKDEV(unit->major,
10702b71f93292 Eli Billauer 2021-03-09  157  						     i + unit->lowest_minor));
10702b71f93292 Eli Billauer 2021-03-09  158  
10702b71f93292 Eli Billauer 2021-03-09  159  	cdev_del(unit->cdev);
10702b71f93292 Eli Billauer 2021-03-09  160  
10702b71f93292 Eli Billauer 2021-03-09  161  unregister_chrdev:
10702b71f93292 Eli Billauer 2021-03-09  162  	unregister_chrdev_region(MKDEV(unit->major, unit->lowest_minor),
10702b71f93292 Eli Billauer 2021-03-09  163  				 unit->num_nodes);
10702b71f93292 Eli Billauer 2021-03-09  164  
10702b71f93292 Eli Billauer 2021-03-09  165  fail_obtain:
10702b71f93292 Eli Billauer 2021-03-09  166  	mutex_unlock(&unit_mutex);
10702b71f93292 Eli Billauer 2021-03-09  167  
10702b71f93292 Eli Billauer 2021-03-09  168  	kfree(unit);
10702b71f93292 Eli Billauer 2021-03-09  169  
10702b71f93292 Eli Billauer 2021-03-09  170  	return rc;
10702b71f93292 Eli Billauer 2021-03-09  171  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 41421 bytes
Desc: not available
URL: <http://driverdev.linuxdriverproject.org/pipermail/driverdev-devel/attachments/20210309/5be4de05/attachment-0001.bin>
-------------- next part --------------
_______________________________________________
kbuild mailing list -- kbuild at lists.01.org
To unsubscribe send an email to kbuild-leave at lists.01.org


More information about the devel mailing list