]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
accel/habanalabs/gaudi2: fix undef opcode reporting
authorDafna Hirschfeld <dhirschfeld@habana.ai>
Tue, 31 Oct 2023 11:51:10 +0000 (13:51 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 5 Feb 2024 20:17:01 +0000 (20:17 +0000)
[ Upstream commit 0ec346779644039c4c05cfa7f071b1a24e54d8d9 ]

currently the undefined opcode event bit in set only for lower cp and
only if 'write_enable' is true. It should be set anyway and for all
streams in order to report that event to userspace.

Signed-off-by: Dafna Hirschfeld <dhirschfeld@habana.ai>
Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/accel/habanalabs/gaudi2/gaudi2.c

index 819660c684cfc95dfbcf6173fe6440805417e640..bc6e338ef2fd6c7cec81c37c9f617d0a00580ebf 100644 (file)
@@ -7929,21 +7929,19 @@ static int gaudi2_handle_qman_err_generic(struct hl_device *hdev, u16 event_type
                                error_count++;
                        }
 
-               if (i == QMAN_STREAMS && error_count) {
-                       /* check for undefined opcode */
-                       if (glbl_sts_val & PDMA0_QM_GLBL_ERR_STS_CP_UNDEF_CMD_ERR_MASK &&
-                                       hdev->captured_err_info.undef_opcode.write_enable) {
+               /* check for undefined opcode */
+               if (glbl_sts_val & PDMA0_QM_GLBL_ERR_STS_CP_UNDEF_CMD_ERR_MASK) {
+                       *event_mask |= HL_NOTIFIER_EVENT_UNDEFINED_OPCODE;
+                       if (hdev->captured_err_info.undef_opcode.write_enable) {
                                memset(&hdev->captured_err_info.undef_opcode, 0,
                                                sizeof(hdev->captured_err_info.undef_opcode));
-
-                               hdev->captured_err_info.undef_opcode.write_enable = false;
                                hdev->captured_err_info.undef_opcode.timestamp = ktime_get();
                                hdev->captured_err_info.undef_opcode.engine_id =
                                                        gaudi2_queue_id_to_engine_id[qid_base];
-                               *event_mask |= HL_NOTIFIER_EVENT_UNDEFINED_OPCODE;
                        }
 
-                       handle_lower_qman_data_on_err(hdev, qman_base, *event_mask);
+                       if (i == QMAN_STREAMS)
+                               handle_lower_qman_data_on_err(hdev, qman_base, *event_mask);
                }
        }