For this use case, completions and semaphores are equivalent,
but semaphores are an awkward interface that should generally
be avoided, so use the completion instead.

Signed-off-by: Arnd Bergmann <a...@arndb.de>
---
 arch/powerpc/kernel/eeh_event.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/arch/powerpc/kernel/eeh_event.c b/arch/powerpc/kernel/eeh_event.c
index 61c9356bf9c9..227e57f980df 100644
--- a/arch/powerpc/kernel/eeh_event.c
+++ b/arch/powerpc/kernel/eeh_event.c
@@ -35,7 +35,7 @@
  */
 
 static DEFINE_SPINLOCK(eeh_eventlist_lock);
-static struct semaphore eeh_eventlist_sem;
+static DECLARE_COMPLETION(eeh_eventlist_event);
 static LIST_HEAD(eeh_eventlist);
 
 /**
@@ -55,7 +55,7 @@ static int eeh_event_handler(void * dummy)
        struct eeh_pe *pe;
 
        while (!kthread_should_stop()) {
-               if (down_interruptible(&eeh_eventlist_sem))
+               if (wait_for_completion_interruptible(&eeh_eventlist_event))
                        break;
 
                /* Fetch EEH event from the queue */
@@ -102,9 +102,6 @@ int eeh_event_init(void)
        struct task_struct *t;
        int ret = 0;
 
-       /* Initialize semaphore */
-       sema_init(&eeh_eventlist_sem, 0);
-
        t = kthread_run(eeh_event_handler, NULL, "eehd");
        if (IS_ERR(t)) {
                ret = PTR_ERR(t);
@@ -142,7 +139,7 @@ int eeh_send_failure_event(struct eeh_pe *pe)
        spin_unlock_irqrestore(&eeh_eventlist_lock, flags);
 
        /* For EEH deamon to knick in */
-       up(&eeh_eventlist_sem);
+       complete(&eeh_eventlist_event);
 
        return 0;
 }
-- 
2.20.0

Reply via email to