diff options
author | Ian Abbott <abbotti@mev.co.uk> | 2013-04-04 13:58:46 (GMT) |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-04-05 21:33:16 (GMT) |
commit | 24fb134d1c336b263f75d7659f56a96382aebb56 (patch) | |
tree | 1edef41cc49136865d29d8bf450b0c26b1d68a97 /drivers/staging/comedi | |
parent | a649a6754d246d5b5447f74b86ed4b947e5f5446 (diff) | |
download | linux-fsl-qoriq-24fb134d1c336b263f75d7659f56a96382aebb56.tar.xz |
staging: comedi: refactor comedi_free_board_minor()
Split out the part of `comedi_free_board_minor()` that clears the
`comedi_file_info_table[]` element into new function
`comedi_clear_minor()`. Split out the remainder of the original
function into new function `comedi_free_board_file_info()`.
Also re-use a call to `comedi_clear_minor()` in
`comedi_free_subdevice_minor()` instead of doing the same thing inline.
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>
Diffstat (limited to 'drivers/staging/comedi')
-rw-r--r-- | drivers/staging/comedi/comedi_fops.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 70b2034..8b5fa2f 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -2315,16 +2315,19 @@ int comedi_alloc_board_minor(struct device *hardware_device) return i; } -void comedi_free_board_minor(unsigned minor) +static struct comedi_file_info *comedi_clear_minor(unsigned minor) { struct comedi_file_info *info; - BUG_ON(minor >= COMEDI_NUM_BOARD_MINORS); spin_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); + return info; +} +static void comedi_free_board_file_info(struct comedi_file_info *info) +{ if (info) { struct comedi_device *dev = info->device; if (dev) { @@ -2339,6 +2342,12 @@ void comedi_free_board_minor(unsigned minor) } } +void comedi_free_board_minor(unsigned minor) +{ + BUG_ON(minor >= COMEDI_NUM_BOARD_MINORS); + comedi_free_board_file_info(comedi_clear_minor(minor)); +} + int comedi_find_board_minor(struct device *hardware_device) { int minor; @@ -2407,11 +2416,7 @@ void comedi_free_subdevice_minor(struct comedi_subdevice *s) BUG_ON(s->minor >= COMEDI_NUM_MINORS); BUG_ON(s->minor < COMEDI_FIRST_SUBDEVICE_MINOR); - spin_lock(&comedi_file_info_table_lock); - info = comedi_file_info_table[s->minor]; - comedi_file_info_table[s->minor] = NULL; - spin_unlock(&comedi_file_info_table_lock); - + info = comedi_clear_minor(s->minor); if (s->class_dev) { device_destroy(comedi_class, MKDEV(COMEDI_MAJOR, s->minor)); s->class_dev = NULL; |