Re: [PATCH 3/5] accel/ivpu: Do not use cons->aborted for job_done_thread

2023-11-13 Thread Jeffrey Hugo

On 11/13/2023 10:02 AM, Jacek Lawrynowicz wrote:

From: Stanislaw Gruszka 

This allow to simplify ivpu_ipc_receive() as now we do not have
to process all messages in aborted state - they will be freed in
ivpu_ipc_consumer_del().

Signed-off-by: Stanislaw Gruszka 
Signed-off-by: Jacek Lawrynowicz 


Reviewed-by: Jeffrey Hugo 


[PATCH 3/5] accel/ivpu: Do not use cons->aborted for job_done_thread

2023-11-13 Thread Jacek Lawrynowicz
From: Stanislaw Gruszka 

This allow to simplify ivpu_ipc_receive() as now we do not have
to process all messages in aborted state - they will be freed in
ivpu_ipc_consumer_del().

Signed-off-by: Stanislaw Gruszka 
Signed-off-by: Jacek Lawrynowicz 
---
 drivers/accel/ivpu/ivpu_ipc.c | 18 +-
 drivers/accel/ivpu/ivpu_job.c |  1 -
 2 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/drivers/accel/ivpu/ivpu_ipc.c b/drivers/accel/ivpu/ivpu_ipc.c
index 781c7e40505a..1dd4413dc88f 100644
--- a/drivers/accel/ivpu/ivpu_ipc.c
+++ b/drivers/accel/ivpu/ivpu_ipc.c
@@ -238,17 +238,16 @@ int ivpu_ipc_receive(struct ivpu_device *vdev, struct 
ivpu_ipc_consumer *cons,
return -ETIMEDOUT;
 
spin_lock_irq(>rx_lock);
+   if (cons->aborted) {
+   spin_unlock_irq(>rx_lock);
+   return -ECANCELED;
+   }
rx_msg = list_first_entry_or_null(>rx_msg_list, struct 
ivpu_ipc_rx_msg, link);
if (!rx_msg) {
spin_unlock_irq(>rx_lock);
return -EAGAIN;
}
list_del(_msg->link);
-   if (cons->aborted) {
-   spin_unlock_irq(>rx_lock);
-   ret = -ECANCELED;
-   goto out;
-   }
spin_unlock_irq(>rx_lock);
 
if (ipc_buf)
@@ -266,7 +265,6 @@ int ivpu_ipc_receive(struct ivpu_device *vdev, struct 
ivpu_ipc_consumer *cons,
}
 
ivpu_ipc_rx_mark_free(vdev, rx_msg->ipc_hdr, rx_msg->jsm_msg);
-out:
atomic_dec(>rx_msg_count);
kfree(rx_msg);
 
@@ -528,9 +526,11 @@ void ivpu_ipc_disable(struct ivpu_device *vdev)
 
spin_lock_irqsave(>cons_list_lock, flags);
list_for_each_entry_safe(cons, c, >cons_list, link) {
-   spin_lock(>rx_lock);
-   cons->aborted = true;
-   spin_unlock(>rx_lock);
+   if (cons->channel != VPU_IPC_CHAN_JOB_RET) {
+   spin_lock(>rx_lock);
+   cons->aborted = true;
+   spin_unlock(>rx_lock);
+   }
wake_up(>rx_msg_wq);
}
spin_unlock_irqrestore(>cons_list_lock, flags);
diff --git a/drivers/accel/ivpu/ivpu_job.c b/drivers/accel/ivpu/ivpu_job.c
index 02acd8dba02a..77b1b8abadd6 100644
--- a/drivers/accel/ivpu/ivpu_job.c
+++ b/drivers/accel/ivpu/ivpu_job.c
@@ -578,7 +578,6 @@ static int ivpu_job_done_thread(void *arg)
ivpu_ipc_consumer_add(vdev, , VPU_IPC_CHAN_JOB_RET);
 
while (!kthread_should_stop()) {
-   cons.aborted = false;
timeout = ivpu_tdr_timeout_ms ? ivpu_tdr_timeout_ms : 
vdev->timeout.tdr;
jobs_submitted = !xa_empty(>submitted_jobs_xa);
ret = ivpu_ipc_receive(vdev, , NULL, _msg, timeout);
-- 
2.42.0



Re: [PATCH 3/5] accel/ivpu: Do not use cons->aborted for job_done_thread

2023-11-09 Thread Jeffrey Hugo

On 11/7/2023 5:35 AM, Jacek Lawrynowicz wrote:

From: Stanislaw Gruszka 

This allow to simplify ivpu_ipc_receive() as now we do not have
to process all messages in aborted state - they will be freed in
ivpu_ipc_consumer_del().

Signed-off-by: Stanislaw Gruszka 


Missing SOB.

-Jeff


[PATCH 3/5] accel/ivpu: Do not use cons->aborted for job_done_thread

2023-11-07 Thread Jacek Lawrynowicz
From: Stanislaw Gruszka 

This allow to simplify ivpu_ipc_receive() as now we do not have
to process all messages in aborted state - they will be freed in
ivpu_ipc_consumer_del().

Signed-off-by: Stanislaw Gruszka 
---
 drivers/accel/ivpu/ivpu_ipc.c | 18 +-
 drivers/accel/ivpu/ivpu_job.c |  1 -
 2 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/drivers/accel/ivpu/ivpu_ipc.c b/drivers/accel/ivpu/ivpu_ipc.c
index 781c7e40505a..1dd4413dc88f 100644
--- a/drivers/accel/ivpu/ivpu_ipc.c
+++ b/drivers/accel/ivpu/ivpu_ipc.c
@@ -238,17 +238,16 @@ int ivpu_ipc_receive(struct ivpu_device *vdev, struct 
ivpu_ipc_consumer *cons,
return -ETIMEDOUT;
 
spin_lock_irq(>rx_lock);
+   if (cons->aborted) {
+   spin_unlock_irq(>rx_lock);
+   return -ECANCELED;
+   }
rx_msg = list_first_entry_or_null(>rx_msg_list, struct 
ivpu_ipc_rx_msg, link);
if (!rx_msg) {
spin_unlock_irq(>rx_lock);
return -EAGAIN;
}
list_del(_msg->link);
-   if (cons->aborted) {
-   spin_unlock_irq(>rx_lock);
-   ret = -ECANCELED;
-   goto out;
-   }
spin_unlock_irq(>rx_lock);
 
if (ipc_buf)
@@ -266,7 +265,6 @@ int ivpu_ipc_receive(struct ivpu_device *vdev, struct 
ivpu_ipc_consumer *cons,
}
 
ivpu_ipc_rx_mark_free(vdev, rx_msg->ipc_hdr, rx_msg->jsm_msg);
-out:
atomic_dec(>rx_msg_count);
kfree(rx_msg);
 
@@ -528,9 +526,11 @@ void ivpu_ipc_disable(struct ivpu_device *vdev)
 
spin_lock_irqsave(>cons_list_lock, flags);
list_for_each_entry_safe(cons, c, >cons_list, link) {
-   spin_lock(>rx_lock);
-   cons->aborted = true;
-   spin_unlock(>rx_lock);
+   if (cons->channel != VPU_IPC_CHAN_JOB_RET) {
+   spin_lock(>rx_lock);
+   cons->aborted = true;
+   spin_unlock(>rx_lock);
+   }
wake_up(>rx_msg_wq);
}
spin_unlock_irqrestore(>cons_list_lock, flags);
diff --git a/drivers/accel/ivpu/ivpu_job.c b/drivers/accel/ivpu/ivpu_job.c
index 02acd8dba02a..77b1b8abadd6 100644
--- a/drivers/accel/ivpu/ivpu_job.c
+++ b/drivers/accel/ivpu/ivpu_job.c
@@ -578,7 +578,6 @@ static int ivpu_job_done_thread(void *arg)
ivpu_ipc_consumer_add(vdev, , VPU_IPC_CHAN_JOB_RET);
 
while (!kthread_should_stop()) {
-   cons.aborted = false;
timeout = ivpu_tdr_timeout_ms ? ivpu_tdr_timeout_ms : 
vdev->timeout.tdr;
jobs_submitted = !xa_empty(>submitted_jobs_xa);
ret = ivpu_ipc_receive(vdev, , NULL, _msg, timeout);
-- 
2.42.0