From: Ian Abbott Date: Thu, 4 Apr 2013 13:58:46 +0000 (+0100) Subject: staging: comedi: refactor comedi_free_board_minor() X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=24fb134d1c336b263f75d7659f56a96382aebb56;p=linux-beck.git 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 Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 70b2034116fc..8b5fa2fc9a82 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;