Re: [PATCH 1/6] accel/ivpu: Use ratelimited warn and err in IPC/JSM

2023-10-20 Thread Jeffrey Hugo

On 10/20/2023 4:44 AM, Stanislaw Gruszka wrote:

From: Krystian Pradzynski 

Quite often during test corner cases IPC, JSM functions can flood
dmesg with warn or err messages. With that lost dmesg history.
Change warn, err to ratelimited versions in IPC, JSM to suppress
dmesg spam occurrence during fail test scenarios.

Signed-off-by: Krystian Pradzynski 
Reviewed-by: Stanislaw Gruszka 
Signed-off-by: Stanislaw Gruszka 


Reviewed-by: Jeffrey Hugo 


[PATCH 1/6] accel/ivpu: Use ratelimited warn and err in IPC/JSM

2023-10-20 Thread Stanislaw Gruszka
From: Krystian Pradzynski 

Quite often during test corner cases IPC, JSM functions can flood
dmesg with warn or err messages. With that lost dmesg history.
Change warn, err to ratelimited versions in IPC, JSM to suppress
dmesg spam occurrence during fail test scenarios.

Signed-off-by: Krystian Pradzynski 
Reviewed-by: Stanislaw Gruszka 
Signed-off-by: Stanislaw Gruszka 
---
 drivers/accel/ivpu/ivpu_ipc.c | 29 -
 drivers/accel/ivpu/ivpu_jsm_msg.c | 18 ++
 2 files changed, 26 insertions(+), 21 deletions(-)

diff --git a/drivers/accel/ivpu/ivpu_ipc.c b/drivers/accel/ivpu/ivpu_ipc.c
index c2541035a30f..f0137536d7c6 100644
--- a/drivers/accel/ivpu/ivpu_ipc.c
+++ b/drivers/accel/ivpu/ivpu_ipc.c
@@ -79,8 +79,8 @@ ivpu_ipc_tx_prepare(struct ivpu_device *vdev, struct 
ivpu_ipc_consumer *cons,
 
tx_buf_vpu_addr = gen_pool_alloc(ipc->mm_tx, sizeof(*tx_buf));
if (!tx_buf_vpu_addr) {
-   ivpu_err(vdev, "Failed to reserve IPC buffer, size %ld\n",
-sizeof(*tx_buf));
+   ivpu_err_ratelimited(vdev, "Failed to reserve IPC buffer, size 
%ld\n",
+sizeof(*tx_buf));
return -ENOMEM;
}
 
@@ -93,12 +93,12 @@ ivpu_ipc_tx_prepare(struct ivpu_device *vdev, struct 
ivpu_ipc_consumer *cons,
jsm_vpu_addr = tx_buf_vpu_addr + offsetof(struct ivpu_ipc_tx_buf, jsm);
 
if (tx_buf->ipc.status != IVPU_IPC_HDR_FREE)
-   ivpu_warn(vdev, "IPC message vpu:0x%x not released by 
firmware\n",
- tx_buf_vpu_addr);
+   ivpu_warn_ratelimited(vdev, "IPC message vpu:0x%x not released 
by firmware\n",
+ tx_buf_vpu_addr);
 
if (tx_buf->jsm.status != VPU_JSM_MSG_FREE)
-   ivpu_warn(vdev, "JSM message vpu:0x%x not released by 
firmware\n",
- jsm_vpu_addr);
+   ivpu_warn_ratelimited(vdev, "JSM message vpu:0x%x not released 
by firmware\n",
+ jsm_vpu_addr);
 
memset(tx_buf, 0, sizeof(*tx_buf));
tx_buf->ipc.data_addr = jsm_vpu_addr;
@@ -266,18 +266,19 @@ ivpu_ipc_send_receive_internal(struct ivpu_device *vdev, 
struct vpu_jsm_msg *req
 
ret = ivpu_ipc_send(vdev, &cons, req);
if (ret) {
-   ivpu_warn(vdev, "IPC send failed: %d\n", ret);
+   ivpu_warn_ratelimited(vdev, "IPC send failed: %d\n", ret);
goto consumer_del;
}
 
ret = ivpu_ipc_receive(vdev, &cons, NULL, resp, timeout_ms);
if (ret) {
-   ivpu_warn(vdev, "IPC receive failed: type 0x%x, ret %d\n", 
req->type, ret);
+   ivpu_warn_ratelimited(vdev, "IPC receive failed: type 0x%x, ret 
%d\n",
+ req->type, ret);
goto consumer_del;
}
 
if (resp->type != expected_resp_type) {
-   ivpu_warn(vdev, "Invalid JSM response type: 0x%x\n", 
resp->type);
+   ivpu_warn_ratelimited(vdev, "Invalid JSM response type: 
0x%x\n", resp->type);
ret = -EBADE;
}
 
@@ -375,13 +376,13 @@ int ivpu_ipc_irq_handler(struct ivpu_device *vdev)
while (ivpu_hw_reg_ipc_rx_count_get(vdev)) {
vpu_addr = ivpu_hw_reg_ipc_rx_addr_get(vdev);
if (vpu_addr == REG_IO_ERROR) {
-   ivpu_err(vdev, "Failed to read IPC rx addr register\n");
+   ivpu_err_ratelimited(vdev, "Failed to read IPC rx addr 
register\n");
return -EIO;
}
 
ipc_hdr = ivpu_to_cpu_addr(ipc->mem_rx, vpu_addr);
if (!ipc_hdr) {
-   ivpu_warn(vdev, "IPC msg 0x%x out of range\n", 
vpu_addr);
+   ivpu_warn_ratelimited(vdev, "IPC msg 0x%x out of 
range\n", vpu_addr);
continue;
}
ivpu_ipc_msg_dump(vdev, "RX", ipc_hdr, vpu_addr);
@@ -390,7 +391,8 @@ int ivpu_ipc_irq_handler(struct ivpu_device *vdev)
if (ipc_hdr->channel != IVPU_IPC_CHAN_BOOT_MSG) {
jsm_msg = ivpu_to_cpu_addr(ipc->mem_rx, 
ipc_hdr->data_addr);
if (!jsm_msg) {
-   ivpu_warn(vdev, "JSM msg 0x%x out of range\n", 
ipc_hdr->data_addr);
+   ivpu_warn_ratelimited(vdev, "JSM msg 0x%x out 
of range\n",
+ ipc_hdr->data_addr);
ivpu_ipc_rx_mark_free(vdev, ipc_hdr, NULL);
continue;
}
@@ -398,7 +400,8 @@ int ivpu_ipc_irq_handler(struct ivpu_device *vdev)
}
 
if (atomic_read(&ipc->rx_msg_count) > IPC_MAX_RX_MSG) {
-   ivpu_warn(vdev, "IPC RX msg dropped, msg count %d\n", 
IPC_MAX_RX_MSG);
+