linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] driver: firmware: stratix10-svc: schedule thread out when there is no data reveived
@ 2021-11-09  7:46 Meng Li
  2021-11-12 19:35 ` Dinh Nguyen
  0 siblings, 1 reply; 3+ messages in thread
From: Meng Li @ 2021-11-09  7:46 UTC (permalink / raw)
  To: dinguyen, gregkh, richard.gong, atull; +Cc: linux-kernel, meng.li

From: Meng Li <meng.li@windriver.com>

In thread svc_normal_to_secure_thread(), function kfifo_out_spinlocked()
always return, so this thread can't release cpu even if there is no data
received, and cause cpu is under heave load status. System performance
is poor.

This issue is introduced by commit 7ca5ce896524("firmware: add Intel
Stratix10 service layer driver")

Therefore, schedule this thread out when there is no data reveived, and
wake it up after sending data to it.

Fixes: 7ca5ce896524 ("firmware: add Intel Stratix10 service layer driver")
Cc: stable@vger.kernel.org
Signed-off-by: Meng Li <Meng.Li@windriver.com>
---
 drivers/firmware/stratix10-svc.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/firmware/stratix10-svc.c b/drivers/firmware/stratix10-svc.c
index 2a7687911c09..ddb86d441726 100644
--- a/drivers/firmware/stratix10-svc.c
+++ b/drivers/firmware/stratix10-svc.c
@@ -365,8 +365,10 @@ static int svc_normal_to_secure_thread(void *data)
 						pdata, sizeof(*pdata),
 						&ctrl->svc_fifo_lock);
 
-		if (!ret_fifo)
+		if (!ret_fifo) {
+			schedule_timeout_interruptible(MAX_SCHEDULE_TIMEOUT);
 			continue;
+		}
 
 		pr_debug("get from FIFO pa=0x%016x, command=%u, size=%u\n",
 			 (unsigned int)pdata->paddr, pdata->command,
@@ -861,6 +863,7 @@ int stratix10_svc_send(struct stratix10_svc_chan *chan, void *msg)
 	ret = kfifo_in_spinlocked(&chan->ctrl->svc_fifo, p_data,
 				  sizeof(*p_data),
 				  &chan->ctrl->svc_fifo_lock);
+	wake_up_process(chan->ctrl->task);
 
 	kfree(p_data);
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] driver: firmware: stratix10-svc: schedule thread out when there is no data reveived
  2021-11-09  7:46 [PATCH] driver: firmware: stratix10-svc: schedule thread out when there is no data reveived Meng Li
@ 2021-11-12 19:35 ` Dinh Nguyen
  2021-11-15  1:45   ` Li, Meng
  0 siblings, 1 reply; 3+ messages in thread
From: Dinh Nguyen @ 2021-11-12 19:35 UTC (permalink / raw)
  To: Meng Li, gregkh; +Cc: linux-kernel



On 11/9/21 1:46 AM, Meng Li wrote:
> From: Meng Li <meng.li@windriver.com>
> 
> In thread svc_normal_to_secure_thread(), function kfifo_out_spinlocked()
> always return, so this thread can't release cpu even if there is no data
> received, and cause cpu is under heave load status. System performance

do you mean "heavy"?

> is poor.
> 
> This issue is introduced by commit 7ca5ce896524("firmware: add Intel
> Stratix10 service layer driver")
> 
> Therefore, schedule this thread out when there is no data reveived, and

s/reveived/received

> wake it up after sending data to it.
> 
> Fixes: 7ca5ce896524 ("firmware: add Intel Stratix10 service layer driver")
> Cc: stable@vger.kernel.org
> Signed-off-by: Meng Li <Meng.Li@windriver.com>
> ---
>   drivers/firmware/stratix10-svc.c | 5 ++++-
>   1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/firmware/stratix10-svc.c b/drivers/firmware/stratix10-svc.c
> index 2a7687911c09..ddb86d441726 100644
> --- a/drivers/firmware/stratix10-svc.c
> +++ b/drivers/firmware/stratix10-svc.c
> @@ -365,8 +365,10 @@ static int svc_normal_to_secure_thread(void *data)
>   						pdata, sizeof(*pdata),
>   						&ctrl->svc_fifo_lock);
>   
> -		if (!ret_fifo)
> +		if (!ret_fifo) {
> +			schedule_timeout_interruptible(MAX_SCHEDULE_TIMEOUT);
>   			continue;
> +		}
>   
>   		pr_debug("get from FIFO pa=0x%016x, command=%u, size=%u\n",
>   			 (unsigned int)pdata->paddr, pdata->command,
> @@ -861,6 +863,7 @@ int stratix10_svc_send(struct stratix10_svc_chan *chan, void *msg)
>   	ret = kfifo_in_spinlocked(&chan->ctrl->svc_fifo, p_data,
>   				  sizeof(*p_data),
>   				  &chan->ctrl->svc_fifo_lock);
> +	wake_up_process(chan->ctrl->task);
>   
>   	kfree(p_data);
>   
> 

I've made above spelling fixes and have applied it.

Thanks,
Dinh

^ permalink raw reply	[flat|nested] 3+ messages in thread

* RE: [PATCH] driver: firmware: stratix10-svc: schedule thread out when there is no data reveived
  2021-11-12 19:35 ` Dinh Nguyen
@ 2021-11-15  1:45   ` Li, Meng
  0 siblings, 0 replies; 3+ messages in thread
From: Li, Meng @ 2021-11-15  1:45 UTC (permalink / raw)
  To: Dinh Nguyen, gregkh; +Cc: linux-kernel



> -----Original Message-----
> From: Dinh Nguyen <dinguyen@kernel.org>
> Sent: Saturday, November 13, 2021 3:35 AM
> To: Li, Meng <Meng.Li@windriver.com>; gregkh@linuxfoundation.org
> Cc: linux-kernel@vger.kernel.org
> Subject: Re: [PATCH] driver: firmware: stratix10-svc: schedule thread out
> when there is no data reveived
> 
> [Please note: This e-mail is from an EXTERNAL e-mail address]
> 
> On 11/9/21 1:46 AM, Meng Li wrote:
> > From: Meng Li <meng.li@windriver.com>
> >
> > In thread svc_normal_to_secure_thread(), function
> > kfifo_out_spinlocked() always return, so this thread can't release cpu
> > even if there is no data received, and cause cpu is under heave load
> > status. System performance
> 
> do you mean "heavy"?

Yes!

Thanks for fixing these typos.
I will pay more attention next time.

Regards,
Limeng

> 
> > is poor.
> >
> > This issue is introduced by commit 7ca5ce896524("firmware: add Intel
> > Stratix10 service layer driver")
> >
> > Therefore, schedule this thread out when there is no data reveived,
> > and
> 
> s/reveived/received
> 
> > wake it up after sending data to it.
> >
> > Fixes: 7ca5ce896524 ("firmware: add Intel Stratix10 service layer
> > driver")
> > Cc: stable@vger.kernel.org
> > Signed-off-by: Meng Li <Meng.Li@windriver.com>
> > ---
> >   drivers/firmware/stratix10-svc.c | 5 ++++-
> >   1 file changed, 4 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/firmware/stratix10-svc.c
> > b/drivers/firmware/stratix10-svc.c
> > index 2a7687911c09..ddb86d441726 100644
> > --- a/drivers/firmware/stratix10-svc.c
> > +++ b/drivers/firmware/stratix10-svc.c
> > @@ -365,8 +365,10 @@ static int svc_normal_to_secure_thread(void
> *data)
> >                                               pdata, sizeof(*pdata),
> >                                               &ctrl->svc_fifo_lock);
> >
> > -             if (!ret_fifo)
> > +             if (!ret_fifo) {
> > +
> > + schedule_timeout_interruptible(MAX_SCHEDULE_TIMEOUT);
> >                       continue;
> > +             }
> >
> >               pr_debug("get from FIFO pa=0x%016x, command=%u, size=%u\n",
> >                        (unsigned int)pdata->paddr, pdata->command, @@
> > -861,6 +863,7 @@ int stratix10_svc_send(struct stratix10_svc_chan *chan,
> void *msg)
> >       ret = kfifo_in_spinlocked(&chan->ctrl->svc_fifo, p_data,
> >                                 sizeof(*p_data),
> >                                 &chan->ctrl->svc_fifo_lock);
> > +     wake_up_process(chan->ctrl->task);
> >
> >       kfree(p_data);
> >
> >
> 
> I've made above spelling fixes and have applied it.
> 
> Thanks,
> Dinh

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-11-15  1:45 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-09  7:46 [PATCH] driver: firmware: stratix10-svc: schedule thread out when there is no data reveived Meng Li
2021-11-12 19:35 ` Dinh Nguyen
2021-11-15  1:45   ` Li, Meng

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).