diff options
author | Ian Abbott <abbotti@mev.co.uk> | 2013-04-04 13:59:01 (GMT) |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-04-05 21:33:19 (GMT) |
commit | da619f5575e111f176f9f6d888dbeaf3210ff1f2 (patch) | |
tree | 74c64eab994f341196b4cece8c06b0c25a0b87ac | |
parent | db2e3487a5fa1f650680c672e0742d943039d2cc (diff) | |
download | linux-fsl-qoriq-da619f5575e111f176f9f6d888dbeaf3210ff1f2.tar.xz |
staging: comedi: change comedi_file_info_table_lock to mutex
The spin-lock `comedi_file_info_table_lock` is used to protect against
simultaneous modification and access of `comedi_file_info_table[]`.
Change it from a spin-lock to a mutex as it is only used in contexts
where sleeping is allowed.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Reviewed-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/staging/comedi/comedi_fops.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index b3e5337..873860f 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -84,7 +84,7 @@ struct comedi_file_info { struct device *hardware_device; }; -static DEFINE_SPINLOCK(comedi_file_info_table_lock); +static DEFINE_MUTEX(comedi_file_info_table_lock); static struct comedi_file_info *comedi_file_info_table[COMEDI_NUM_MINORS]; static struct class *comedi_class; @@ -121,10 +121,10 @@ static struct comedi_file_info *comedi_clear_minor(unsigned minor) { struct comedi_file_info *info; - spin_lock(&comedi_file_info_table_lock); + mutex_lock(&comedi_file_info_table_lock); info = comedi_file_info_table[minor]; comedi_file_info_table[minor] = NULL; - spin_unlock(&comedi_file_info_table_lock); + mutex_unlock(&comedi_file_info_table_lock); return info; } @@ -149,9 +149,9 @@ static struct comedi_file_info *comedi_file_info_from_minor(unsigned minor) struct comedi_file_info *info; BUG_ON(minor >= COMEDI_NUM_MINORS); - spin_lock(&comedi_file_info_table_lock); + mutex_lock(&comedi_file_info_table_lock); info = comedi_file_info_table[minor]; - spin_unlock(&comedi_file_info_table_lock); + mutex_unlock(&comedi_file_info_table_lock); return info; } @@ -2328,7 +2328,7 @@ struct comedi_device *comedi_alloc_board_minor(struct 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); + mutex_lock(&comedi_file_info_table_lock); for (i = hardware_device ? comedi_num_legacy_minors : 0; i < COMEDI_NUM_BOARD_MINORS; ++i) { if (comedi_file_info_table[i] == NULL) { @@ -2336,7 +2336,7 @@ struct comedi_device *comedi_alloc_board_minor(struct device *hardware_device) break; } } - spin_unlock(&comedi_file_info_table_lock); + mutex_unlock(&comedi_file_info_table_lock); if (i == COMEDI_NUM_BOARD_MINORS) { mutex_unlock(&dev->mutex); comedi_device_cleanup(dev); @@ -2369,15 +2369,15 @@ void comedi_release_hardware_device(struct device *hardware_device) for (minor = comedi_num_legacy_minors; minor < COMEDI_NUM_BOARD_MINORS; minor++) { - spin_lock(&comedi_file_info_table_lock); + mutex_lock(&comedi_file_info_table_lock); info = comedi_file_info_table[minor]; if (info && info->hardware_device == hardware_device) { comedi_file_info_table[minor] = NULL; - spin_unlock(&comedi_file_info_table_lock); + mutex_unlock(&comedi_file_info_table_lock); comedi_free_board_file_info(info); break; } - spin_unlock(&comedi_file_info_table_lock); + mutex_unlock(&comedi_file_info_table_lock); } } @@ -2396,14 +2396,14 @@ int comedi_alloc_subdevice_minor(struct comedi_subdevice *s) info->read_subdevice = s; if (s->subdev_flags & SDF_CMD_WRITE) info->write_subdevice = s; - spin_lock(&comedi_file_info_table_lock); + mutex_lock(&comedi_file_info_table_lock); for (i = COMEDI_FIRST_SUBDEVICE_MINOR; i < COMEDI_NUM_MINORS; ++i) { if (comedi_file_info_table[i] == NULL) { comedi_file_info_table[i] = info; break; } } - spin_unlock(&comedi_file_info_table_lock); + mutex_unlock(&comedi_file_info_table_lock); if (i == COMEDI_NUM_MINORS) { kfree(info); pr_err("comedi: error: ran out of minor numbers for subdevice files.\n"); |