iio: adc: Use iio_push_to_buffers_with_ts() to provide length for runtime checks.
authorJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 13 Apr 2025 10:34:32 +0000 (11:34 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Wed, 21 May 2025 13:20:26 +0000 (14:20 +0100)
This new function allows us to perform debug checks in the helper to ensure
that the overrun does not occur.  Use it in all the simple cases where
either a static buffer or a structure is used in the drivers.

Reviewed-by: David Lechner <dlechner@baylibre.com>
Link: https://patch.msgid.link/20250413103443.2420727-10-jic23@kernel.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
34 files changed:
drivers/iio/adc/ad4000.c
drivers/iio/adc/ad4030.c
drivers/iio/adc/ad4695.c
drivers/iio/adc/ad7266.c
drivers/iio/adc/ad7298.c
drivers/iio/adc/ad7380.c
drivers/iio/adc/ad7476.c
drivers/iio/adc/ad7606.c
drivers/iio/adc/ad7768-1.c
drivers/iio/adc/ad7779.c
drivers/iio/adc/ad7923.c
drivers/iio/adc/dln2-adc.c
drivers/iio/adc/ina2xx-adc.c
drivers/iio/adc/max1118.c
drivers/iio/adc/max11410.c
drivers/iio/adc/max1363.c
drivers/iio/adc/mcp3911.c
drivers/iio/adc/mxs-lradc-adc.c
drivers/iio/adc/pac1921.c
drivers/iio/adc/rockchip_saradc.c
drivers/iio/adc/rtq6056.c
drivers/iio/adc/stm32-adc.c
drivers/iio/adc/ti-adc081c.c
drivers/iio/adc/ti-adc0832.c
drivers/iio/adc/ti-adc084s021.c
drivers/iio/adc/ti-adc12138.c
drivers/iio/adc/ti-ads1015.c
drivers/iio/adc/ti-ads1119.c
drivers/iio/adc/ti-ads124s08.c
drivers/iio/adc/ti-ads8688.c
drivers/iio/adc/ti-lmp92064.c
drivers/iio/adc/ti-tlc4541.c
drivers/iio/adc/ti-tsc2046.c
drivers/iio/adc/vf610_adc.c

index e69a9d2a3e8c34eb116474eb593b6e24f6ea26e4..93ecaf401f27386d50627723a3132f6af427d484 100644 (file)
@@ -793,7 +793,8 @@ static irqreturn_t ad4000_trigger_handler(int irq, void *p)
        if (ret < 0)
                goto err_out;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &st->scan, pf->timestamp);
+       iio_push_to_buffers_with_ts(indio_dev, &st->scan, sizeof(st->scan),
+                                   pf->timestamp);
 
 err_out:
        iio_trigger_notify_done(indio_dev->trig);
index 636f9f33e66af73d102722b984dc1230e1417d1e..5aa26dc3a2cefed9bcaec1b9f3cc127d06aff19a 100644 (file)
@@ -707,8 +707,8 @@ static irqreturn_t ad4030_trigger_handler(int irq, void *p)
        if (ret)
                goto out;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, st->rx_data.raw,
-                                          pf->timestamp);
+       iio_push_to_buffers_with_ts(indio_dev, &st->rx_data, sizeof(st->rx_data),
+                                   pf->timestamp);
 
 out:
        iio_trigger_notify_done(indio_dev->trig);
index 8222c8ab294021b5f3639238f0f16b734f3705de..68c6625db0d75f4cade7cb029e94191118dbcaa0 100644 (file)
@@ -801,7 +801,8 @@ static irqreturn_t ad4695_trigger_handler(int irq, void *p)
        if (ret)
                goto out;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, st->buf, pf->timestamp);
+       iio_push_to_buffers_with_ts(indio_dev, st->buf, sizeof(st->buf),
+                                   pf->timestamp);
 
 out:
        iio_trigger_notify_done(indio_dev->trig);
index 18559757f9085c589461fcec3d672d13cae21c20..d8288d91b1ef34c9075838bafebd9775f3f99bbc 100644 (file)
@@ -86,10 +86,9 @@ static irqreturn_t ad7266_trigger_handler(int irq, void *p)
        int ret;
 
        ret = spi_read(st->spi, st->data.sample, 4);
-       if (ret == 0) {
-               iio_push_to_buffers_with_timestamp(indio_dev, &st->data,
-                           pf->timestamp);
-       }
+       if (ret == 0)
+               iio_push_to_buffers_with_ts(indio_dev, &st->data, sizeof(st->data),
+                                           pf->timestamp);
 
        iio_trigger_notify_done(indio_dev->trig);
 
index 28b88092b4aa2d5b3f3c0abbad9fab9da14b8505..7c0538ea15c87812b8239a82d5c301fc7b4345e9 100644 (file)
@@ -155,8 +155,8 @@ static irqreturn_t ad7298_trigger_handler(int irq, void *p)
        if (b_sent)
                goto done;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, st->rx_buf,
-               iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, st->rx_buf, sizeof(st->rx_buf),
+                                   iio_get_time_ns(indio_dev));
 
 done:
        iio_trigger_notify_done(indio_dev->trig);
index 190ab411739feea32e189cb3ede925056ba4a87e..f93e6c67766aa89b18c1a7dec02ae8912f65261c 100644 (file)
@@ -1361,8 +1361,8 @@ static irqreturn_t ad7380_trigger_handler(int irq, void *p)
        if (ret)
                goto out;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &st->scan_data,
-                                          pf->timestamp);
+       iio_push_to_buffers_with_ts(indio_dev, &st->scan_data, sizeof(st->scan_data),
+                                   pf->timestamp);
 
 out:
        iio_trigger_notify_done(indio_dev->trig);
index 37b0515cf4fc2ef49d58673c4eee78a97b7a5149..ddb607ac186033bb1f5218d18898f1882a1849e4 100644 (file)
@@ -99,8 +99,8 @@ static irqreturn_t ad7476_trigger_handler(int irq, void  *p)
        if (b_sent < 0)
                goto done;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, st->data,
-               iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, st->data, sizeof(st->data),
+                                   iio_get_time_ns(indio_dev));
 done:
        iio_trigger_notify_done(indio_dev->trig);
 
index d36b2e212a0880c4365dc4cc2312ac0327da8094..aa96247d6757342b5216e311b61c664168c0fd29 100644 (file)
@@ -605,8 +605,8 @@ static irqreturn_t ad7606_trigger_handler(int irq, void *p)
        if (ret)
                goto error_ret;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &st->data,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &st->data, sizeof(st->data),
+                                   iio_get_time_ns(indio_dev));
 error_ret:
        iio_trigger_notify_done(indio_dev->trig);
        /* The rising edge of the CONVST signal starts a new conversion. */
index 09e4ab76e2b60d36dc501c7434e644966801550b..47a6ad43358558a41a9525f98f7ee6649885b489 100644 (file)
@@ -533,8 +533,9 @@ static irqreturn_t ad7768_trigger_handler(int irq, void *p)
        if (ret < 0)
                goto out;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &st->data.scan,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &st->data.scan,
+                                   sizeof(st->data.scan),
+                                   iio_get_time_ns(indio_dev));
 
 out:
        iio_trigger_notify_done(indio_dev->trig);
index a5d87faa5e12763856326ce74361eb520071b537..845adc510239c42db67e8860ddc9e2bc859af632 100644 (file)
@@ -595,7 +595,8 @@ static irqreturn_t ad7779_trigger_handler(int irq, void *p)
                goto exit_handler;
        }
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &st->data, pf->timestamp);
+       iio_push_to_buffers_with_ts(indio_dev, &st->data, sizeof(st->data),
+                                   pf->timestamp);
 
 exit_handler:
        iio_trigger_notify_done(indio_dev->trig);
index 87945efb940b3618fcbd6a9ec1c4251b1dad633e..0369151c7db1e142823bf0ad7d61994aa7c2d0ff 100644 (file)
@@ -207,8 +207,8 @@ static irqreturn_t ad7923_trigger_handler(int irq, void *p)
        if (b_sent)
                goto done;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, st->rx_buf,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, st->rx_buf, sizeof(st->rx_buf),
+                                   iio_get_time_ns(indio_dev));
 
 done:
        iio_trigger_notify_done(indio_dev->trig);
index a1e48a756a7b519105393f77c4aebde1f2f85d50..5ffb4b5f5c990dbedb9465627819251bb5475968 100644 (file)
@@ -488,8 +488,8 @@ static irqreturn_t dln2_adc_trigger_h(int irq, void *p)
                       (void *)dev_data.values + t->from, t->length);
        }
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &data,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &data, sizeof(data),
+                                   iio_get_time_ns(indio_dev));
 
 done:
        iio_trigger_notify_done(indio_dev->trig);
index 40d14faa71c50b3b6b54b4bedb754f77a6ae3687..857e1b69d6cd4d65d7ebe5de222fe92875eccdcc 100644 (file)
@@ -766,7 +766,7 @@ static int ina2xx_work_buffer(struct iio_dev *indio_dev)
                chip->scan.chan[i++] = val;
        }
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &chip->scan, time);
+       iio_push_to_buffers_with_ts(indio_dev, &chip->scan, sizeof(chip->scan), time);
 
        return 0;
 };
index 565ca2e21c0c23e02f191f03f4ac66666d727b3f..7d7001e8e3d96d1065171ced8f40066c756b857c 100644 (file)
@@ -188,8 +188,8 @@ static irqreturn_t max1118_trigger_handler(int irq, void *p)
                adc->scan.channels[i] = ret;
                i++;
        }
-       iio_push_to_buffers_with_timestamp(indio_dev, &adc->scan,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &adc->scan, sizeof(adc->scan),
+                                   iio_get_time_ns(indio_dev));
 out:
        mutex_unlock(&adc->lock);
 
index 437d9f24b5a1dc658f6c9878ab5c3f73d8c408fd..511b2f14dfaf70721f269c5ca7bdf55107753b27 100644 (file)
@@ -632,8 +632,8 @@ static irqreturn_t max11410_trigger_handler(int irq, void *p)
                goto out;
        }
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &st->scan,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &st->scan, sizeof(st->scan),
+                                   iio_get_time_ns(indio_dev));
 
 out:
        iio_trigger_notify_done(indio_dev->trig);
index d0546c681625a57be884623372274a4186f30b8f..a7e9912fb44af8584a658ae8ff3b6dd3ee317785 100644 (file)
@@ -1498,8 +1498,8 @@ static irqreturn_t max1363_trigger_handler(int irq, void *p)
        if (b_sent < 0)
                goto done;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &st->data,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &st->data, sizeof(st->data),
+                                   iio_get_time_ns(indio_dev));
 
 done:
        iio_trigger_notify_done(indio_dev->trig);
index 6748b44d568db68120172a950bbfffb6adc7cfa3..be18635ae616fe5944e81b65bcad398c620f4c4d 100644 (file)
@@ -516,8 +516,8 @@ static irqreturn_t mcp3911_trigger_handler(int irq, void *p)
                adc->scan.channels[i] = get_unaligned_be24(&adc->rx_buf[scan_chan->channel * 3]);
                i++;
        }
-       iio_push_to_buffers_with_timestamp(indio_dev, &adc->scan,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &adc->scan, sizeof(adc->scan),
+                                   iio_get_time_ns(indio_dev));
 out:
        iio_trigger_notify_done(indio_dev->trig);
 
index 8f1e6acea53ba19faa2cd6e0a90d39398d6d2e95..92baf3f5f5601b863c694eb03b6d8f287e4fe6ab 100644 (file)
@@ -425,7 +425,8 @@ static irqreturn_t mxs_lradc_adc_trigger_handler(int irq, void *p)
                j++;
        }
 
-       iio_push_to_buffers_with_timestamp(iio, adc->buffer, pf->timestamp);
+       iio_push_to_buffers_with_ts(iio, adc->buffer, sizeof(adc->buffer),
+                                   pf->timestamp);
 
        iio_trigger_notify_done(iio->trig);
 
index ef75e9e51c241a04163591ecb33176e4c46bef01..72aa4ca2e5a46b295305ee3295ad0135a13ab3b2 100644 (file)
@@ -1044,7 +1044,8 @@ static irqreturn_t pac1921_trigger_handler(int irq, void *p)
                priv->scan.chan[ch++] = val;
        }
 
-       iio_push_to_buffers_with_timestamp(idev, &priv->scan, pf->timestamp);
+       iio_push_to_buffers_with_ts(idev, &priv->scan, sizeof(priv->scan),
+                                   pf->timestamp);
 
 done:
        iio_trigger_notify_done(idev->trig);
index 9a099df7951891a7d917e382a5dcad17b544ecee..2162bff6991389cacae46c1da5c4c7dfd03f28ee 100644 (file)
@@ -425,7 +425,8 @@ static irqreturn_t rockchip_saradc_trigger_handler(int irq, void *p)
                j++;
        }
 
-       iio_push_to_buffers_with_timestamp(i_dev, &data, iio_get_time_ns(i_dev));
+       iio_push_to_buffers_with_ts(i_dev, &data, sizeof(data),
+                                   iio_get_time_ns(i_dev));
 out:
        mutex_unlock(&info->lock);
 
index 54239df61d86dd8470b820b19e8ee77af1e88268..6ff47415a2221436b1fd548aa0bc070ba5fbb774 100644 (file)
@@ -666,7 +666,8 @@ static irqreturn_t rtq6056_buffer_trigger_handler(int irq, void *p)
                data.vals[i++] = raw;
        }
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &data, iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &data, sizeof(data),
+                                   iio_get_time_ns(indio_dev));
 
 out:
        pm_runtime_mark_last_busy(dev);
index 27aec9a18a0f9668eec63e05ebb9825acabd3ca0..5159908a2a6100b62e5e64b2b469378ad778c35d 100644 (file)
@@ -1858,8 +1858,8 @@ static irqreturn_t stm32_adc_trigger_handler(int irq, void *p)
 
        /* reset buffer index */
        adc->bufi = 0;
-       iio_push_to_buffers_with_timestamp(indio_dev, adc->buffer,
-                                          pf->timestamp);
+       iio_push_to_buffers_with_ts(indio_dev, adc->buffer, sizeof(adc->buffer),
+                                   pf->timestamp);
        iio_trigger_notify_done(indio_dev->trig);
 
        /* re-enable eoc irq */
index 1af9be071d8deab3bcd8cae676008962bf875f07..4f514db5c26ea803660087ae02b2cf8ec71911e4 100644 (file)
@@ -140,8 +140,8 @@ static irqreturn_t adc081c_trigger_handler(int irq, void *p)
        if (ret < 0)
                goto out;
        data->scan.channel = ret;
-       iio_push_to_buffers_with_timestamp(indio_dev, &data->scan,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &data->scan, sizeof(data->scan),
+                                   iio_get_time_ns(indio_dev));
 out:
        iio_trigger_notify_done(indio_dev->trig);
        return IRQ_HANDLED;
index e2dbd070c7c4f2d86afe586ba44124fb384069fd..cfcdafbe284b103a069857028886411bc72dea4f 100644 (file)
@@ -225,8 +225,8 @@ static irqreturn_t adc0832_trigger_handler(int irq, void *p)
                adc->data[i] = ret;
                i++;
        }
-       iio_push_to_buffers_with_timestamp(indio_dev, adc->data,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, adc->data, sizeof(adc->data),
+                                   iio_get_time_ns(indio_dev));
 out:
        mutex_unlock(&adc->lock);
 
index 9c845ee01697c3527c1c198a3f39870e0de37d32..50a474f4d9f55f6a85673d7c5f429b8c656be8d9 100644 (file)
@@ -151,8 +151,8 @@ static irqreturn_t adc084s021_buffer_trigger_handler(int irq, void *pollfunc)
        if (adc084s021_adc_conversion(adc, adc->scan.channels) < 0)
                dev_err(&adc->spi->dev, "Failed to read data\n");
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &adc->scan,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &adc->scan, sizeof(adc->scan),
+                                   iio_get_time_ns(indio_dev));
        mutex_unlock(&adc->lock);
        iio_trigger_notify_done(indio_dev->trig);
 
index 7f065f457b3617c8672579c9f988a4ee204c5371..9dc465a10ffc8d9f596e34215af685999235d690 100644 (file)
@@ -376,8 +376,8 @@ static irqreturn_t adc12138_trigger_handler(int irq, void *p)
                }
        }
 
-       iio_push_to_buffers_with_timestamp(indio_dev, adc->data,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, adc->data, sizeof(adc->data),
+                                   iio_get_time_ns(indio_dev));
 out:
        mutex_unlock(&adc->lock);
 
index 705c146c7dc2e704e90e04965f684c99d0854c68..21181cc3bd852ba3bb05b295c98b3530d8c07d3d 100644 (file)
@@ -467,8 +467,8 @@ static irqreturn_t ads1015_trigger_handler(int irq, void *p)
        scan.chan = res;
        mutex_unlock(&data->lock);
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &scan,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &scan, sizeof(scan),
+                                   iio_get_time_ns(indio_dev));
 
 err:
        iio_trigger_notify_done(indio_dev->trig);
index f120e7e21cff5fc465744679ebd18047c79d7a8c..d280c949cf476c7bcbc1e046755619ac31d97c63 100644 (file)
@@ -534,8 +534,8 @@ static irqreturn_t ads1119_trigger_handler(int irq, void *private)
 
        scan.sample = ret;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &scan,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &scan, sizeof(scan),
+                                   iio_get_time_ns(indio_dev));
 done:
        iio_trigger_notify_done(indio_dev->trig);
        return IRQ_HANDLED;
index 77c299bb4ebcc1652780f947208afe1d5e75764b..8ea1269f74db09427a4a8d434ba1d63e7c63d038 100644 (file)
@@ -297,8 +297,8 @@ static irqreturn_t ads124s_trigger_handler(int irq, void *p)
                j++;
        }
 
-       iio_push_to_buffers_with_timestamp(indio_dev, priv->buffer,
-                       pf->timestamp);
+       iio_push_to_buffers_with_ts(indio_dev, priv->buffer, sizeof(priv->buffer),
+                                   pf->timestamp);
 
        iio_trigger_notify_done(indio_dev->trig);
 
index a31658b760a4ae79d1504d6af288470d0cc6d348..b0bf46cae0b69eb1fe8d7734c8a32ac642c5d0cd 100644 (file)
@@ -389,8 +389,8 @@ static irqreturn_t ads8688_trigger_handler(int irq, void *p)
                j++;
        }
 
-       iio_push_to_buffers_with_timestamp(indio_dev, buffer,
-                       iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, buffer, sizeof(buffer),
+                                   iio_get_time_ns(indio_dev));
 
        iio_trigger_notify_done(indio_dev->trig);
 
index 86eef3320de9e09087bd603a6a942575bfb6ce07..3f375c1f586c4153caf9b47c34a0dcf6d5c48266 100644 (file)
@@ -209,8 +209,8 @@ static irqreturn_t lmp92064_trigger_handler(int irq, void *p)
        if (ret)
                goto err;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &data,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &data, sizeof(data),
+                                   iio_get_time_ns(indio_dev));
 
 err:
        iio_trigger_notify_done(indio_dev->trig);
index 5a138be983ede197b2a85b022b6faa9e9e5be297..f67945c62c99f231cdf91c30ecbb64ff859de9ac 100644 (file)
@@ -99,8 +99,8 @@ static irqreturn_t tlc4541_trigger_handler(int irq, void *p)
        if (ret < 0)
                goto done;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, st->rx_buf,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, st->rx_buf, sizeof(st->rx_buf),
+                                   iio_get_time_ns(indio_dev));
 
 done:
        iio_trigger_notify_done(indio_dev->trig);
index 49560059f4b7b9add55cce97f65ca2c40ec92ce6..84a9a5e66526555b02497b105660c4822378483b 100644 (file)
@@ -418,8 +418,9 @@ static int tsc2046_adc_scan(struct iio_dev *indio_dev)
        for (group = 0; group < priv->groups; group++)
                priv->scan_buf.data[group] = tsc2046_adc_get_val(priv, group);
 
-       ret = iio_push_to_buffers_with_timestamp(indio_dev, &priv->scan_buf,
-                                                iio_get_time_ns(indio_dev));
+       ret = iio_push_to_buffers_with_ts(indio_dev, &priv->scan_buf,
+                                         sizeof(priv->scan_buf),
+                                         iio_get_time_ns(indio_dev));
        /* If the consumer is kfifo, we may get a EBUSY here - ignore it. */
        if (ret < 0 && ret != -EBUSY) {
                dev_err_ratelimited(dev, "Failed to push scan buffer %pe\n",
index 805e1973b090fb01d8949bdc2a46d77d3f1d73c8..6404b015234a4dea0ae3404d31739d1f0d74916b 100644 (file)
@@ -592,9 +592,9 @@ static irqreturn_t vf610_adc_isr(int irq, void *dev_id)
                info->value = vf610_adc_read_data(info);
                if (iio_buffer_enabled(indio_dev)) {
                        info->scan.chan = info->value;
-                       iio_push_to_buffers_with_timestamp(indio_dev,
-                                       &info->scan,
-                                       iio_get_time_ns(indio_dev));
+                       iio_push_to_buffers_with_ts(indio_dev, &info->scan,
+                                                   sizeof(info->scan),
+                                                   iio_get_time_ns(indio_dev));
                        iio_trigger_notify_done(indio_dev->trig);
                } else
                        complete(&info->completion);