[PATCH 19/37] staging: comedi: set hw_dev in comedi_alloc_board_minor()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Call `comedi_set_hw_dev()` to set the `hw_dev` member of `struct
comedi_device` in `comedi_alloc_board_minor()` instead of in
`comedi_auto_config()`.  Don't bother to check for an error returned by
`comedi_set_hw_dev()` here; it only fails when changing a non-NULL
pointer to a different non-NULL pointer and since the `struct
comedi_device` has just been allocated and initialized, its `hw_dev`
will be NULL already.  Calling `comedi_set_hw_dev()` with a non-NULL
hardware device pointer increments the kref counter for the hardware
device.

If `comedi_alloc_board_minor()` fails further down the function, we rely
on its call to `comedi_device_cleanup()` to call `comedi_clear_hw_dev()`
(via `comedi_device_detach()` and `cleanup_device()`) to clear `hw_dev`
and decrement its kref counter.  (That's the "beneficial side-effect"
mentioned in the patch that replaced `__comedi_device_detach()`.)

Remove the call to `comedi_set_hw_dev()` from `comedi_auto_config()` as
the call to `comedi_alloc_board_minor()` does it for us.

Signed-off-by: Ian Abbott <abbotti@xxxxxxxxx>
---
 drivers/staging/comedi/comedi_fops.c | 1 +
 drivers/staging/comedi/drivers.c     | 1 -
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c
index 229be41..b3e5337 100644
--- a/drivers/staging/comedi/comedi_fops.c
+++ b/drivers/staging/comedi/comedi_fops.c
@@ -2326,6 +2326,7 @@ struct comedi_device *comedi_alloc_board_minor(struct device *hardware_device)
 	info->device = dev;
 	info->hardware_device = hardware_device;
 	comedi_device_init(dev);
+	comedi_set_hw_dev(dev, hardware_device);
 	mutex_lock(&dev->mutex);
 	spin_lock(&comedi_file_info_table_lock);
 	for (i = hardware_device ? comedi_num_legacy_minors : 0;
diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c
index fe2ad91..81705fb 100644
--- a/drivers/staging/comedi/drivers.c
+++ b/drivers/staging/comedi/drivers.c
@@ -422,7 +422,6 @@ int comedi_auto_config(struct device *hardware_device,
 		return PTR_ERR(comedi_dev);
 	/* Note: comedi_alloc_board_minor() locked comedi_dev->mutex. */
 
-	comedi_set_hw_dev(comedi_dev, hardware_device);
 	comedi_dev->driver = driver;
 	ret = driver->auto_attach(comedi_dev, context);
 	if (ret >= 0)
-- 
1.8.1.5

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel




[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux