On Mon, May 11, 2015 at 1:00 PM, Sagi Grimberg <sagig@xxxxxxxxxxxx> wrote: > Some of us keep revisiting the code to decode enumerations that > appear in our logs. Let's borrow the nice logging helpers that > exists in xprtrdma and rds for CMA events, IB events and WC statuses. > > Signed-off-by: Sagi Grimberg <sagig@xxxxxxxxxxxx> > --- > drivers/infiniband/core/cma.c | 26 ++++++++++++++++ > drivers/infiniband/core/verbs.c | 61 +++++++++++++++++++++++++++++++++++++++ > include/rdma/ib_verbs.h | 4 ++ > include/rdma/rdma_cm.h | 2 + > 4 files changed, 93 insertions(+), 0 deletions(-) > > diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c > index d570030..1438dde 100644 > --- a/drivers/infiniband/core/cma.c > +++ b/drivers/infiniband/core/cma.c > @@ -65,6 +65,32 @@ MODULE_LICENSE("Dual BSD/GPL"); > #define CMA_CM_MRA_SETTING (IB_CM_MRA_FLAG_DELAY | 24) > #define CMA_IBOE_PACKET_LIFETIME 18 > > +static const char *cma_events[] = { > + [RDMA_CM_EVENT_ADDR_RESOLVED] = "ADDR_RESOLVED", > + [RDMA_CM_EVENT_ADDR_ERROR] = "ADDR_ERROR", > + [RDMA_CM_EVENT_ROUTE_RESOLVED] = "ROUTE_RESOLVED", > + [RDMA_CM_EVENT_ROUTE_ERROR] = "ROUTE_ERROR", > + [RDMA_CM_EVENT_CONNECT_REQUEST] = "CONNECT_REQUEST", > + [RDMA_CM_EVENT_CONNECT_RESPONSE]= "CONNECT_RESPONSE", > + [RDMA_CM_EVENT_CONNECT_ERROR] = "CONNECT_ERROR", > + [RDMA_CM_EVENT_UNREACHABLE] = "UNREACHABLE", > + [RDMA_CM_EVENT_REJECTED] = "REJECTED", > + [RDMA_CM_EVENT_ESTABLISHED] = "ESTABLISHED", > + [RDMA_CM_EVENT_DISCONNECTED] = "DISCONNECTED", > + [RDMA_CM_EVENT_DEVICE_REMOVAL] = "DEVICE_REMOVAL", > + [RDMA_CM_EVENT_MULTICAST_JOIN] = "MULTICAST_JOIN", > + [RDMA_CM_EVENT_MULTICAST_ERROR] = "MULTICAST_ERROR", > + [RDMA_CM_EVENT_ADDR_CHANGE] = "ADDR_CHANGE", > + [RDMA_CM_EVENT_TIMEWAIT_EXIT] = "TIMEWAIT_EXIT", > +}; > + > +__attribute_const__ const char *cma_event_msg(enum rdma_cm_event_type event) > +{ > + return event < ARRAY_SIZE(cma_events) ? > + cma_events[event] : "UNRECOGNIZED_EVENT"; > +} > +EXPORT_SYMBOL(cma_event_msg); I think rdma_ prefix has better fit here, e.g aligns with the rest of the rdma_cm API so rdma_event_msg > + > static void cma_add_one(struct ib_device *device); > static void cma_remove_one(struct ib_device *device); > > diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c > index f93eb8d..0cdf1b6 100644 > --- a/drivers/infiniband/core/verbs.c > +++ b/drivers/infiniband/core/verbs.c > @@ -48,6 +48,67 @@ > > #include "core_priv.h" > > +static const char *ib_events[] = { > + [IB_EVENT_CQ_ERR] = "CQ_ERR", > + [IB_EVENT_QP_FATAL] = "QP_FATAL", > + [IB_EVENT_QP_REQ_ERR] = "QP_REQ_ERR", > + [IB_EVENT_QP_ACCESS_ERR] = "QP_ACCESS_ERR", > + [IB_EVENT_COMM_EST] = "COMM_EST", > + [IB_EVENT_SQ_DRAINED] = "SQ_DRAINED", > + [IB_EVENT_PATH_MIG] = "PATH_MIG", > + [IB_EVENT_PATH_MIG_ERR] = "PATH_MIG_ERR", > + [IB_EVENT_DEVICE_FATAL] = "DEVICE_FATAL", > + [IB_EVENT_PORT_ACTIVE] = "PORT_ACTIVE", > + [IB_EVENT_PORT_ERR] = "PORT_ERR", > + [IB_EVENT_LID_CHANGE] = "LID_CHANGE", > + [IB_EVENT_PKEY_CHANGE] = "PKEY_CHANGE", > + [IB_EVENT_SM_CHANGE] = "SM_CHANGE", > + [IB_EVENT_SRQ_ERR] = "SRQ_ERR", > + [IB_EVENT_SRQ_LIMIT_REACHED] = "SRQ_LIMIT_REACHED", > + [IB_EVENT_QP_LAST_WQE_REACHED] = "QP_LAST_WQE_REACHED", > + [IB_EVENT_CLIENT_REREGISTER] = "CLIENT_REREGISTER", > + [IB_EVENT_GID_CHANGE] = "GID_CHANGE", > +}; > + > +__attribute_const__ const char *ib_event_msg(enum ib_event_type event) > +{ > + return event < ARRAY_SIZE(ib_events) ? > + ib_events[event] : "UNRECOGNIZED_EVENT"; > +} > +EXPORT_SYMBOL(ib_event_msg); > + > +static const char *wc_statuses[] = { > + [IB_WC_SUCCESS] = "SUCCESS", > + [IB_WC_LOC_LEN_ERR] = "LOC_LEN_ERR", > + [IB_WC_LOC_QP_OP_ERR] = "LOC_QP_OP_ERR", > + [IB_WC_LOC_EEC_OP_ERR] = "LOC_EEC_OP_ERR", > + [IB_WC_LOC_PROT_ERR] = "LOC_PROT_ERR", > + [IB_WC_WR_FLUSH_ERR] = "WR_FLUSH_ERR", > + [IB_WC_MW_BIND_ERR] = "MW_BIND_ERR", > + [IB_WC_BAD_RESP_ERR] = "BAD_RESP_ERR", > + [IB_WC_LOC_ACCESS_ERR] = "LOC_ACCESS_ERR", > + [IB_WC_REM_INV_REQ_ERR] = "REM_INV_REQ_ERR", > + [IB_WC_REM_ACCESS_ERR] = "REM_ACCESS_ERR", > + [IB_WC_REM_OP_ERR] = "REM_OP_ERR", > + [IB_WC_RETRY_EXC_ERR] = "RETRY_EXC_ERR", > + [IB_WC_RNR_RETRY_EXC_ERR] = "RNR_RETRY_EXC_ERR", > + [IB_WC_LOC_RDD_VIOL_ERR] = "LOC_RDD_VIOL_ERR", > + [IB_WC_REM_INV_RD_REQ_ERR] = "REM_INV_RD_REQ_ERR", > + [IB_WC_REM_ABORT_ERR] = "REM_ABORT_ERR", > + [IB_WC_INV_EECN_ERR] = "INV_EECN_ERR", > + [IB_WC_INV_EEC_STATE_ERR] = "INV_EEC_STATE_ERR", > + [IB_WC_FATAL_ERR] = "FATAL_ERR", > + [IB_WC_RESP_TIMEOUT_ERR] = "RESP_TIMEOUT_ERR", > + [IB_WC_GENERAL_ERR] = "GENERAL_ERR", > +}; > + > +__attribute_const__ const char *wc_status_msg(enum ib_wc_status status) > +{ > + return status < ARRAY_SIZE(wc_statuses) ? > + wc_statuses[status] : "UNRECOGNIZED_STATUS"; > +} > +EXPORT_SYMBOL(wc_status_msg); same here, ib_ prefix has nice fit here, e.g aligns with the rest of the verbs API so ib_wc_status_msg -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html