staging: comedi: ni_660x: allocate counters early in (*auto_attach)
authorH Hartley Sweeten <hsweeten@visionengravers.com>
Tue, 22 Mar 2016 18:10:45 +0000 (11:10 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 28 Mar 2016 14:30:36 +0000 (07:30 -0700)
The ni_gpct_device_construct() could fail allocating the memory for
device and its counters. For aesthetics, call the function before
initializing the subdevices.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/ni_660x.c

index afe62bf2de8be8a34477ef0db330ee4d50144c4c..6366303801003b1f3ad2f5da585699af8b14a3f3 100644 (file)
@@ -914,6 +914,16 @@ static int ni_660x_auto_attach(struct comedi_device *dev,
 
        ni_660x_init_tio_chips(dev, board->n_chips);
 
+       n_counters = board->n_chips * NI660X_COUNTERS_PER_CHIP;
+       gpct_dev = ni_gpct_device_construct(dev,
+                                           ni_660x_gpct_write,
+                                           ni_660x_gpct_read,
+                                           ni_gpct_variant_660x,
+                                           n_counters);
+       if (!gpct_dev)
+               return -ENOMEM;
+       devpriv->counter_dev = gpct_dev;
+
        ret = comedi_alloc_subdevices(dev, 2 + NI660X_MAX_COUNTERS);
        if (ret)
                return ret;
@@ -986,16 +996,6 @@ static int ni_660x_auto_attach(struct comedi_device *dev,
        s->insn_bits    = ni_660x_dio_insn_bits;
        s->insn_config  = ni_660x_dio_insn_config;
 
-       n_counters = board->n_chips * NI660X_COUNTERS_PER_CHIP;
-       gpct_dev = ni_gpct_device_construct(dev,
-                                           ni_660x_gpct_write,
-                                           ni_660x_gpct_read,
-                                           ni_gpct_variant_660x,
-                                           n_counters);
-       if (!gpct_dev)
-               return -ENOMEM;
-       devpriv->counter_dev = gpct_dev;
-
        /* Counter subdevices (4 NI TIO General Purpose Counters per chip) */
        for (i = 0; i < NI660X_MAX_COUNTERS; ++i) {
                s = &dev->subdevices[subdev++];