powerpc: eeh_event: convert semaphore to completion
authorArnd Bergmann <arnd@arndb.de>
Mon, 10 Dec 2018 21:51:57 +0000 (22:51 +0100)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 20 Dec 2018 11:21:20 +0000 (22:21 +1100)
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 <arnd@arndb.de>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kernel/eeh_event.c

index 61c9356bf9c97bcd61cffb2855ff109b0ebe9dbb..227e57f980df155f789e994d440392ad2d916c1b 100644 (file)
@@ -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;
 }