Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1456390 > unrolled thread
| Started by | Daniel Wagner <wagi@monom.org> |
|---|---|
| First post | 2016-08-04 15:10 +0200 |
| Last post | 2016-08-04 15:10 +0200 |
| Articles | 3 — 1 participant |
Back to article view | Back to linux.kernel
[PATCH 0/2] Use complete() instead of complete_all() Daniel Wagner <wagi@monom.org> - 2016-08-04 15:10 +0200
[PATCH 1/2] iio: adc: Use complete() instead of complete_all() Daniel Wagner <wagi@monom.org> - 2016-08-04 15:10 +0200
[PATCH 2/2] iio: sx9500: Use complete() instead of complete_all() Daniel Wagner <wagi@monom.org> - 2016-08-04 15:10 +0200
| From | Daniel Wagner <wagi@monom.org> |
|---|---|
| Date | 2016-08-04 15:10 +0200 |
| Subject | [PATCH 0/2] Use complete() instead of complete_all() |
| Message-ID | <s2qzn-166-1@gated-at.bofh.it> |
From: Daniel Wagner <daniel.wagner@bmw-carit.de> Hi, Using complete_all() is not wrong per se but it suggest that there might be more than one reader. For -rt I am reviewing all complete_all() users and would like to leave only the real ones in the tree. The main problem for -rt about complete_all() is that it can be uses inside IRQ context and that can lead to unbounded amount work inside the interrupt handler. That is a no no for -rt. The patches grouped per subsystem and in small batches to allow reviewing. Unfortanatly I am not so good in coming up with unique commit message, so please bear with me in that regard. I could also squash them together, although each patch containts a very short reasoning why there is only one waiter. Let me know what you rather prefer. One patch which updates all complete_all() users or those 2 patches with some reasoning. It is only test compiled because I don't have the all the hardware. cheers, daniel Daniel Wagner (2): iio: adc: Use complete() instead of complete_all() iio: sx9500: Use complete() instead of complete_all() drivers/iio/adc/nau7802.c | 2 +- drivers/iio/proximity/sx9500.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) -- 2.7.4
[toc] | [next] | [standalone]
| From | Daniel Wagner <wagi@monom.org> |
|---|---|
| Date | 2016-08-04 15:10 +0200 |
| Subject | [PATCH 1/2] iio: adc: Use complete() instead of complete_all() |
| Message-ID | <s2qzn-166-9@gated-at.bofh.it> |
| In reply to | #1456390 |
From: Daniel Wagner <daniel.wagner@bmw-carit.de>
There is only one waiter for the completion, therefore there
is no need to use complete_all(). Let's make that clear by
using complete() instead of complete_all().
The usage pattern of the completion is:
waiter context waker context
nau7802_read_irq()
reinit_completion()
nau7802_read_conversion()
wait_for_completion_interruptible_timeout()
nau7802_eoc_trigger()
complete()
Signed-off-by: Daniel Wagner <daniel.wagner@bmw-carit.de>
---
drivers/iio/adc/nau7802.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/iio/adc/nau7802.c b/drivers/iio/adc/nau7802.c
index db9b829..08f4466 100644
--- a/drivers/iio/adc/nau7802.c
+++ b/drivers/iio/adc/nau7802.c
@@ -197,7 +197,7 @@ static irqreturn_t nau7802_eoc_trigger(int irq, void *private)
if (st->conversion_count < NAU7802_MIN_CONVERSIONS)
st->conversion_count++;
if (st->conversion_count >= NAU7802_MIN_CONVERSIONS)
- complete_all(&st->value_ok);
+ complete(&st->value_ok);
return IRQ_HANDLED;
}
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Daniel Wagner <wagi@monom.org> |
|---|---|
| Date | 2016-08-04 15:10 +0200 |
| Subject | [PATCH 2/2] iio: sx9500: Use complete() instead of complete_all() |
| Message-ID | <s2qzn-166-27@gated-at.bofh.it> |
| In reply to | #1456390 |
From: Daniel Wagner <daniel.wagner@bmw-carit.de>
There is only one waiter for the completion, therefore there
is no need to use complete_all(). Let's make that clear by
using complete() instead of complete_all().
The usage pattern of the completion is:
waiter context waker context
sx9500_read_proximity()
sx9500_inc_chan_users()
sx9500_inc_data_rdy_users()
wait_for_completion_interruptible()
s9500_irq_thread_handler()
complete()
reinit_completion()
Signed-off-by: Daniel Wagner <daniel.wagner@bmw-carit.de>
---
drivers/iio/proximity/sx9500.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/iio/proximity/sx9500.c b/drivers/iio/proximity/sx9500.c
index 1d74b3a..6f84f53 100644
--- a/drivers/iio/proximity/sx9500.c
+++ b/drivers/iio/proximity/sx9500.c
@@ -516,7 +516,7 @@ static irqreturn_t sx9500_irq_thread_handler(int irq, void *private)
sx9500_push_events(indio_dev);
if (val & SX9500_CONVDONE_IRQ)
- complete_all(&data->completion);
+ complete(&data->completion);
out:
mutex_unlock(&data->mutex);
--
2.7.4
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web