]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sif: xrc: Add handling for xrc_domain_violation & invalid_xrceth events
authorVinay Shaw <vinay.shaw@oracle.com>
Sat, 16 Jul 2016 06:32:54 +0000 (08:32 +0200)
committerSantosh Shilimkar <santosh.shilimkar@oracle.com>
Wed, 27 Jul 2016 17:24:22 +0000 (10:24 -0700)
XRC spec defines xrc_domain_violation and invalid_xrceth events as
affiliated asynchronous error on XRC TGTQP, the QP is marked in ERROR.
Map these to ofed's IB_EVENT_QP_FATAL type and qp event handler.

Orabug: 24318556

Signed-off-by: Vinay Shaw <vinay.shaw@oracle.com>
Reviewed-by: Knut Omang <knut.omang@oracle.com>
drivers/infiniband/hw/sif/sif_eq.c

index 1dfa00d5be9539ecd3ac2a5460de5918eac14841..bf1bc691d9762c713b0e3b98566757eb3f60b888 100644 (file)
@@ -947,7 +947,10 @@ static int dispatch_eq(struct sif_eq *eq)
                             leqe.event_status_communication_established ||
                             leqe.event_status_path_migrated ||
                             leqe.event_status_srq_limit_reached ||
-                            leqe.event_status_srq_catastrophic_error)) {
+                            leqe.event_status_srq_catastrophic_error ||
+                            /* Affiliated async. error on XRC TGTQP mapped to IB_EVENT_QP_FATAL */
+                            leqe.event_status_invalid_xrceth ||
+                            leqe.event_status_xrc_domain_violation)) {
                        struct sif_qp *sif_qp_elem = safe_get_sif_qp(sdev, leqe.qp);
                        bool is_srq_event = (leqe.event_status_srq_limit_reached ||
                                              leqe.event_status_srq_catastrophic_error);
@@ -996,7 +999,9 @@ static int dispatch_eq(struct sif_eq *eq)
                        nevents += handle_event(eq, port_elem, IB_EVENT_CLIENT_REREGISTER);
                if (leqe.event_status_port_active)
                        nevents += handle_event(eq, port_elem, IB_EVENT_PORT_ACTIVE);
-               if (leqe.event_status_local_work_queue_catastrophic_error) {
+               if (leqe.event_status_local_work_queue_catastrophic_error ||
+                       leqe.event_status_xrc_domain_violation ||
+                       leqe.event_status_invalid_xrceth) {
                        nevents += handle_event(eq, qp_elem, IB_EVENT_QP_FATAL);
                        dump_eq_entry(SIF_INFO, "Got Fatal error", &leqe);
                }
@@ -1033,8 +1038,6 @@ static int dispatch_eq(struct sif_eq *eq)
 
                /* TBD: These are the ones that do not map directly to IB errors */
                check_for_psif_event(event_status_port_changed);
-               check_for_psif_event(event_status_invalid_xrceth);
-               check_for_psif_event(event_status_xrc_domain_violation);
 
                if (!nevents) {
                        sif_log(eq->ba.sdev, SIF_INTR, "eq %d: Warning: No events found for seq 0x%x",