Thread (4 messages) 4 messages, 4 authors, 2018-12-22

Re: [PATCH] powerpc: eeh_event: convert semaphore to completion

From: Oliver <oohall@gmail.com>
Date: 2018-12-10 23:18:45
Also in: lkml

On Tue, Dec 11, 2018 at 8:52 AM Arnd Bergmann [off-list ref] wrote:
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.
IIRC Sam has been reworking the locking used inside of EEH so this is
probably going to clash with his changes. Converting to a completion
is probably a good idea, but we might want to do it as a part of his
series since it's going to collide with this anyway.

Sam, what do you think?
quoted hunk ↗ jump to hunk
Signed-off-by: Arnd Bergmann <arnd@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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help