Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1456390 > unrolled thread

[PATCH 0/2] Use complete() instead of complete_all()

Started byDaniel Wagner <wagi@monom.org>
First post2016-08-04 15:10 +0200
Last post2016-08-04 15:10 +0200
Articles 3 — 1 participant

Back to article view | Back to linux.kernel


Contents

  [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

#1456390 — [PATCH 0/2] Use complete() instead of complete_all()

FromDaniel Wagner <wagi@monom.org>
Date2016-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]


#1456391 — [PATCH 1/2] iio: adc: Use complete() instead of complete_all()

FromDaniel Wagner <wagi@monom.org>
Date2016-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]


#1456395 — [PATCH 2/2] iio: sx9500: Use complete() instead of complete_all()

FromDaniel Wagner <wagi@monom.org>
Date2016-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