From 22869747447c076748aa0bdff88432b9bc59b57f Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Wed, 6 May 2020 16:01:42 +0000 Subject: [PATCH] qla2x00t-32gbit: Add ring buffer for tracing debug logs Having this log in a ring buffer helps to diagnose qla2xxx driver and firmware issues instead of having to reproduce the problem with extended_logging enabled. This saves cycles and helps when it is hard to reproduce problem. Link: https://lore.kernel.org/r/1581557368-32080-1-git-send-email-rajan.shanmugavelu@oracle.com Reviewed-by: Joe Jin Acked-by: Himanshu Madhani Signed-off-by: Rajan Shanmugavelu Signed-off-by: Martin K. Petersen [ commit 598a90f2002c4c4daee24d76d24e8270c7075eef upstream ] git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8868 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- qla2x00t-32gbit/Makefile | 2 +- qla2x00t-32gbit/qla_dbg.c | 23 ++++++++++++++-- qla2x00t-32gbit/qla_nvme.c | 7 +++-- qla2x00t-32gbit/trace/events/qla.h | 44 ++++++++++++++++++++++++++++++ 4 files changed, 69 insertions(+), 7 deletions(-) create mode 100644 qla2x00t-32gbit/trace/events/qla.h diff --git a/qla2x00t-32gbit/Makefile b/qla2x00t-32gbit/Makefile index 9399cc155..c2cc64523 100644 --- a/qla2x00t-32gbit/Makefile +++ b/qla2x00t-32gbit/Makefile @@ -46,7 +46,7 @@ INSTALL_DIR := $(INSTALL_MOD_PATH)/lib/modules/$(KVER)/extra ifneq ($(PATCHLEVEL),) ccflags-y += $(call cc-option,-Wextra) -Wno-unused-parameter \ - -Wno-missing-field-initializers -I$(src)/../scst/include\ + -Wno-missing-field-initializers -I$(src)/../scst/include -I$(src)\ -DDEFAULT_SYMBOL_NAMESPACE=QLA32GB ifneq ($(CONFIG_SCSI_QLA2XXX_TARGET),) diff --git a/qla2x00t-32gbit/qla_dbg.c b/qla2x00t-32gbit/qla_dbg.c index 88a56e848..f301a8048 100644 --- a/qla2x00t-32gbit/qla_dbg.c +++ b/qla2x00t-32gbit/qla_dbg.c @@ -73,6 +73,8 @@ #include "qla_def.h" #include +#define CREATE_TRACE_POINTS +#include static uint32_t ql_dbg_offset = 0x800; @@ -2537,15 +2539,30 @@ ql_dbg(uint level, scsi_qla_host_t *vha, uint id, const char *fmt, ...) { va_list va; struct va_format vaf; - - if (!ql_mask_match(level)) - return; + char pbuf[64]; va_start(va, fmt); vaf.fmt = fmt; vaf.va = &va; + if (!ql_mask_match(level)) { + if (vha != NULL) { + const struct pci_dev *pdev = vha->hw->pdev; + /* : Message */ + snprintf(pbuf, sizeof(pbuf), "%s [%s]-%04x:%ld: ", + QL_MSGHDR, dev_name(&(pdev->dev)), id, + vha->host_no); + } else { + snprintf(pbuf, sizeof(pbuf), "%s [%s]-%04x: : ", + QL_MSGHDR, "0000:00:00.0", id); + } + pbuf[sizeof(pbuf) - 1] = 0; + trace_ql_dbg_log(pbuf, &vaf); + va_end(va); + return; + } + if (vha != NULL) { const struct pci_dev *pdev = vha->hw->pdev; /* : Message */ diff --git a/qla2x00t-32gbit/qla_nvme.c b/qla2x00t-32gbit/qla_nvme.c index 0937121db..41fc64a68 100644 --- a/qla2x00t-32gbit/qla_nvme.c +++ b/qla2x00t-32gbit/qla_nvme.c @@ -621,11 +621,12 @@ static void qla_nvme_remoteport_delete(struct nvme_fc_remote_port *rport) } static struct nvme_fc_port_template qla_nvme_fc_transport = { -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 5, 0) && \ - LINUX_VERSION_CODE < KERNEL_VERSION(5, 7, 0) +#if 0 /* * See also commit 863fbae929c7 ("nvme_fc: add module to ops template - * to allow module references"). + * to allow module references"). See also commit 8c5c66052920 + * ("nvme-fc: Revert "add module to ops template to allow module + * references"") # v5.7-rc1. */ .module = THIS_MODULE, #endif diff --git a/qla2x00t-32gbit/trace/events/qla.h b/qla2x00t-32gbit/trace/events/qla.h new file mode 100644 index 000000000..737a667ab --- /dev/null +++ b/qla2x00t-32gbit/trace/events/qla.h @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#if !defined(_TRACE_QLA_H_) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_QLA_H_ + +#include + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM qla + +#define QLA_MSG_MAX 256 + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsuggest-attribute=format" + +DECLARE_EVENT_CLASS(qla_log_event, + TP_PROTO(const char *buf, + struct va_format *vaf), + + TP_ARGS(buf, vaf), + + TP_STRUCT__entry( + __string(buf, buf) + __dynamic_array(char, msg, QLA_MSG_MAX) + ), + TP_fast_assign( + __assign_str(buf, buf); + vsnprintf(__get_str(msg), QLA_MSG_MAX, vaf->fmt, *vaf->va); + ), + + TP_printk("%s %s", __get_str(buf), __get_str(msg)) +); + +DEFINE_EVENT(qla_log_event, ql_dbg_log, + TP_PROTO(const char *buf, struct va_format *vaf), + TP_ARGS(buf, vaf) +); + +#pragma GCC diagnostic pop + +#endif /* _TRACE_QLA_H */ + +#define TRACE_INCLUDE_FILE qla + +#include