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>
---
arch/powerpc/kernel/eeh_event.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
@@ -55,7 +55,7 @@ static int eeh_event_handler(void * dummy)structeeh_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)structtask_struct*t;intret=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);return0;}
From: Oliver <oohall@gmail.com> Date: 2018-12-10 23:18:45
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?
@@ -55,7 +55,7 @@ static int eeh_event_handler(void * dummy)structeeh_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)structtask_struct*t;intret=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);return0;}--
From: Sam Bobroff <hidden> Date: 2018-12-10 23:33:15
On Tue, Dec 11, 2018 at 10:18:31AM +1100, Oliver wrote:
On Tue, Dec 11, 2018 at 8:52 AM Arnd Bergmann [off-list ref] wrote:
quoted
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?
It's such a small change, I don't think it will cause any problems for
the rework. Anyway it seems like a good change, so I'd prefer to see it
go in :-)
Cheers,
Sam.
@@ -55,7 +55,7 @@ static int eeh_event_handler(void * dummy)structeeh_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)structtask_struct*t;intret=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);return0;}--
From: Michael Ellerman <hidden> Date: 2018-12-22 17:02:09
On Mon, 2018-12-10 at 21:51:57 UTC, Arnd Bergmann 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.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>