Hi Matti, Thanks for your reply! > I think the suggested-by tag is a bit of an overkill :) I don't feel > like taking the credit - you spotted the problem and fixed it! You did help me figure out the real issue here and how to fix it :) > Do you think you could fix the removal of the duplicates too? Sure, I can help to implement the deduplication logic. Here is a potential patch for it based on your help. Besides, I changed the stop condition in the inner loop to `j < idx` since the current last index should be `idx - 1`. --- diff --git a/drivers/iio/industrialio-gts-helper.c b/drivers/iio/industrialio-gts-helper.c index 7653261d2dc2..32f0635ffc18 100644 --- a/drivers/iio/industrialio-gts-helper.c +++ b/drivers/iio/industrialio-gts-helper.c @@ -375,17 +375,20 @@ static int iio_gts_build_avail_time_table(struct iio_gts *gts) for (i = gts->num_itime - 1; i >= 0; i--) { int new = gts->itime_table[i].time_us; - if (times[idx] < new) { + if (idx == 0 || times[idx - 1] < new) { times[idx++] = new; continue; } - for (j = 0; j <= idx; j++) { + for (j = 0; j < idx; j++) { + if (times[j] == new) + break; if (times[j] > new) { memmove(×[j + 1], ×[j], (idx - j) * sizeof(int)); times[j] = new; idx++; + break; } } }