Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7638ffcb authored by Ian Abbott's avatar Ian Abbott Committed by Greg Kroah-Hartman
Browse files

staging: comedi: change comedi_alloc_board_minor() to return pointer



Change `comedi_alloc_board_minor()` to return a pointer to the allocated
`struct comedi_device` instead of a minor device number.  Return an
`ERR_PTR()` value on error instead of a negative error number.  This
saves a call to `comedi_dev_from_minor()` in `comedi_auto_config()`.

Also change it to use a local variable `dev` to hold the pointer to the
`struct comedi_device` instead of using `info->device` all the time.

Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
Reviewed-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 70f30c37
Loading
Loading
Loading
Loading
+18 −16
Original line number Diff line number Diff line
@@ -2274,22 +2274,24 @@ static void comedi_device_cleanup(struct comedi_device *dev)
	mutex_destroy(&dev->mutex);
}

int comedi_alloc_board_minor(struct device *hardware_device)
struct comedi_device *comedi_alloc_board_minor(struct device *hardware_device)
{
	struct comedi_file_info *info;
	struct comedi_device *dev;
	struct device *csdev;
	unsigned i;

	info = kzalloc(sizeof(*info), GFP_KERNEL);
	if (info == NULL)
		return -ENOMEM;
	info->device = kzalloc(sizeof(struct comedi_device), GFP_KERNEL);
	if (info->device == NULL) {
		return ERR_PTR(-ENOMEM);
	dev = kzalloc(sizeof(struct comedi_device), GFP_KERNEL);
	if (dev == NULL) {
		kfree(info);
		return -ENOMEM;
		return ERR_PTR(-ENOMEM);
	}
	info->device = dev;
	info->hardware_device = hardware_device;
	comedi_device_init(info->device);
	comedi_device_init(dev);
	spin_lock(&comedi_file_info_table_lock);
	for (i = 0; i < COMEDI_NUM_BOARD_MINORS; ++i) {
		if (comedi_file_info_table[i] == NULL) {
@@ -2299,20 +2301,20 @@ int comedi_alloc_board_minor(struct device *hardware_device)
	}
	spin_unlock(&comedi_file_info_table_lock);
	if (i == COMEDI_NUM_BOARD_MINORS) {
		comedi_device_cleanup(info->device);
		kfree(info->device);
		comedi_device_cleanup(dev);
		kfree(dev);
		kfree(info);
		pr_err("comedi: error: ran out of minor numbers for board device files.\n");
		return -EBUSY;
		return ERR_PTR(-EBUSY);
	}
	info->device->minor = i;
	dev->minor = i;
	csdev = device_create(comedi_class, hardware_device,
			      MKDEV(COMEDI_MAJOR, i), NULL, "comedi%i", i);
	if (!IS_ERR(csdev))
		info->device->class_dev = csdev;
		dev->class_dev = csdev;
	dev_set_drvdata(csdev, info);

	return i;
	return dev;
}

static struct comedi_file_info *comedi_clear_minor(unsigned minor)
@@ -2475,14 +2477,14 @@ static int __init comedi_init(void)

	/* create devices files for legacy/manual use */
	for (i = 0; i < comedi_num_legacy_minors; i++) {
		int minor;
		minor = comedi_alloc_board_minor(NULL);
		if (minor < 0) {
		struct comedi_device *dev;
		dev = comedi_alloc_board_minor(NULL);
		if (IS_ERR(dev)) {
			comedi_cleanup_board_minors();
			cdev_del(&comedi_cdev);
			unregister_chrdev_region(MKDEV(COMEDI_MAJOR, 0),
						 COMEDI_NUM_MINORS);
			return minor;
			return PTR_ERR(dev);
		}
	}

+1 −1
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@
 */
int do_rangeinfo_ioctl(struct comedi_device *dev,
		       struct comedi_rangeinfo __user *arg);
int comedi_alloc_board_minor(struct device *hardware_device);
struct comedi_device *comedi_alloc_board_minor(struct device *hardware_device);
void comedi_release_hardware_device(struct device *hardware_device);
int comedi_alloc_subdevice_minor(struct comedi_subdevice *s);
void comedi_free_subdevice_minor(struct comedi_subdevice *s);
+3 −6
Original line number Diff line number Diff line
@@ -406,7 +406,6 @@ int comedi_device_attach(struct comedi_device *dev, struct comedi_devconfig *it)
int comedi_auto_config(struct device *hardware_device,
		       struct comedi_driver *driver, unsigned long context)
{
	int minor;
	struct comedi_device *comedi_dev;
	int ret;

@@ -427,11 +426,9 @@ int comedi_auto_config(struct device *hardware_device,
		return -EINVAL;
	}

	minor = comedi_alloc_board_minor(hardware_device);
	if (minor < 0)
		return minor;

	comedi_dev = comedi_dev_from_minor(minor);
	comedi_dev = comedi_alloc_board_minor(hardware_device);
	if (IS_ERR(comedi_dev))
		return PTR_ERR(comedi_dev);

	mutex_lock(&comedi_dev->mutex);
	if (comedi_dev->attached)