From patchwork Thu Sep 17 06:34:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 78002 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8A80DA04B6; Thu, 17 Sep 2020 08:37:54 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 50C7A1D5A9; Thu, 17 Sep 2020 08:35:48 +0200 (CEST) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id AD7AF1D54E for ; Thu, 17 Sep 2020 08:35:25 +0200 (CEST) Received: from mx1-us1.ppe-hosted.com (unknown [10.7.65.62]) by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 3AE0360058 for ; Thu, 17 Sep 2020 06:35:25 +0000 (UTC) Received: from us4-mdac16-68.ut7.mdlocal (unknown [10.7.64.187]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 3B1268009E for ; Thu, 17 Sep 2020 06:35:25 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.7.66.30]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id AEDAE280050 for ; Thu, 17 Sep 2020 06:35:24 +0000 (UTC) Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 4654A10006E for ; Thu, 17 Sep 2020 06:35:24 +0000 (UTC) Received: from ukex01.SolarFlarecom.com (10.17.10.4) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 17 Sep 2020 07:35:12 +0100 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 17 Sep 2020 07:35:12 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id 08H6ZCXq002499 for ; Thu, 17 Sep 2020 07:35:12 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 5DC581613A9 for ; Thu, 17 Sep 2020 07:35:12 +0100 (BST) From: Andrew Rybchenko To: Date: Thu, 17 Sep 2020 07:34:36 +0100 Message-ID: <1600324483-23153-11-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1600324483-23153-1-git-send-email-arybchenko@solarflare.com> References: <1599556475-27820-1-git-send-email-arybchenko@solarflare.com> <1600324483-23153-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.6.1012-25670.003 X-TM-AS-Result: No-15.476000-8.000000-10 X-TMASE-MatchedRID: q1pm6qPPK/2bX4K/DqV0NcXfQl57nu/G2csA2In0nrZwkdIrVt8X1ciT Wug2C4DNaBlE1XNBqpjE2B1VA3GwSiHhSBQfglfsA9lly13c/gHAmOfzKotToo+Ixb7djOSCfVU ABWHMm0s+FZALrdQw27VYhmmQ16xDEGrGKgXI3I8dt2/pSR7zwIZ6Q5tE4bB0x5B+7qLBJ+z6O4 3MfdK6t+8wp+H295Osy/h3/XXam+iqJxP8CL5wCW6HurDH4PpP8gryAriuOnIRQQ4kFqjjJACJT p5CwDqKGSUXbuI5f3+Jkhd2ZcbBKHnYsjCinlm920204SCJw/qnLZXtX62Wm3S7//lqxurTHXPt gR0gN1zSJsMPesp+yyYRyYlpEhDLENHwxbanitm2+eU4nrUrehdoyFlJ5UUMFBQ5IKls/A7PR1u d0AS9ADhME59DakTsbMYatN9zEWEiRWw1gHaWS6IBnfMCFBiCLPSJu5jov2YUZ5IS2TgivU2p3Z j/R/ne4vM1YF6AJbbCCfuIMF6xLbxAi7jPoeEQftwZ3X11IV0= X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--15.476000-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.6.1012-25670.003 X-MDID: 1600324525-Eo5Wwio16h4R Subject: [dpdk-dev] [PATCH v2 10/17] net/sfc: use own logging helper macros X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Network driver logging macros depends on sfc_adapter which is specific to the driver and cannot be used in common code. Signed-off-by: Andrew Rybchenko Reviewed-by: Andy Moreton --- drivers/net/sfc/sfc.h | 2 + drivers/net/sfc/sfc_ethdev.c | 13 ++++++ drivers/net/sfc/sfc_log.h | 12 ++--- drivers/net/sfc/sfc_mcdi.c | 86 +++++++++++++++++++++++------------- drivers/net/sfc/sfc_mcdi.h | 1 + 5 files changed, 75 insertions(+), 39 deletions(-) diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index b3ac752334..b20fecb4f8 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -22,6 +22,7 @@ #include "efx.h" #include "sfc_debug.h" +#include "sfc_log.h" #include "sfc_filter.h" #include "sfc_mcdi.h" @@ -170,6 +171,7 @@ struct sfc_adapter_shared { boolean_t isolated; uint32_t tunnel_encaps; + char log_prefix[SFC_LOG_PREFIX_MAX]; struct rte_pci_addr pci_addr; uint16_t port_id; diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 1a58e0df84..6c96118007 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -2136,6 +2136,7 @@ sfc_eth_dev_init(struct rte_eth_dev *dev) int rc; const efx_nic_cfg_t *encp; const struct rte_ether_addr *from; + int ret; sfc_register_dp(); @@ -2147,6 +2148,18 @@ sfc_eth_dev_init(struct rte_eth_dev *dev) return -sfc_eth_dev_secondary_init(dev, logtype_main); /* Required for logging */ + ret = snprintf(sas->log_prefix, sizeof(sas->log_prefix), + "PMD: sfc_efx " PCI_PRI_FMT " #%" PRIu16 ": ", + pci_dev->addr.domain, pci_dev->addr.bus, + pci_dev->addr.devid, pci_dev->addr.function, + dev->data->port_id); + if (ret < 0 || ret >= (int)sizeof(sas->log_prefix)) { + SFC_GENERIC_LOG(ERR, + "reserved log prefix is too short for " PCI_PRI_FMT, + pci_dev->addr.domain, pci_dev->addr.bus, + pci_dev->addr.devid, pci_dev->addr.function); + return -EINVAL; + } sas->pci_addr = pci_dev->addr; sas->port_id = dev->data->port_id; diff --git a/drivers/net/sfc/sfc_log.h b/drivers/net/sfc/sfc_log.h index 4bf44b1f15..a2d714afb7 100644 --- a/drivers/net/sfc/sfc_log.h +++ b/drivers/net/sfc/sfc_log.h @@ -28,20 +28,16 @@ extern uint32_t sfc_logtype_driver; /** Device MCDI log type name prefix */ #define SFC_LOGTYPE_MCDI_STR SFC_LOGTYPE_PREFIX "mcdi" +#define SFC_LOG_PREFIX_MAX 32 + /* Log PMD message, automatically add prefix and \n */ #define SFC_LOG(sas, level, type, ...) \ do { \ const struct sfc_adapter_shared *_sas = (sas); \ \ rte_log(level, type, \ - RTE_FMT("PMD: sfc_efx " \ - PCI_PRI_FMT " #%" PRIu16 \ - ": " RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \ - _sas->pci_addr.domain, \ - _sas->pci_addr.bus, \ - _sas->pci_addr.devid, \ - _sas->pci_addr.function, \ - _sas->port_id, \ + RTE_FMT("%s" RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \ + _sas->log_prefix, \ RTE_FMT_TAIL(__VA_ARGS__,))); \ } while (0) diff --git a/drivers/net/sfc/sfc_mcdi.c b/drivers/net/sfc/sfc_mcdi.c index 35e1f3940d..5f6ad0a4aa 100644 --- a/drivers/net/sfc/sfc_mcdi.c +++ b/drivers/net/sfc/sfc_mcdi.c @@ -23,21 +23,37 @@ #define SFC_EFX_MCDI_POLL_INTERVAL_MAX_US (US_PER_S / 10) /* 100ms */ #define SFC_EFX_MCDI_WATCHDOG_INTERVAL_US (10 * US_PER_S) /* 10s */ -/** Level value used by MCDI log statements */ -#define SFC_EFX_LOG_LEVEL_MCDI RTE_LOG_INFO - -#define sfc_efx_log_mcdi(sa, ...) \ +#define sfc_efx_mcdi_log(mcdi, level, ...) \ do { \ - const struct sfc_adapter *_sa = (sa); \ + const struct sfc_efx_mcdi *_mcdi = (mcdi); \ \ - SFC_LOG(_sa->priv.shared, SFC_EFX_LOG_LEVEL_MCDI, \ - _sa->mcdi.logtype, __VA_ARGS__); \ + rte_log(level, _mcdi->logtype, \ + RTE_FMT("%s" RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \ + _mcdi->log_prefix, \ + RTE_FMT_TAIL(__VA_ARGS__,))); \ } while (0) +#define sfc_efx_mcdi_err(mcdi, ...) \ + sfc_efx_mcdi_log(mcdi, RTE_LOG_ERR, __VA_ARGS__) + +#define sfc_efx_mcdi_warn(mcdi, ...) \ + sfc_efx_mcdi_log(mcdi, RTE_LOG_WARNING, __VA_ARGS__) + +#define sfc_efx_mcdi_info(mcdi, ...) \ + sfc_efx_mcdi_log(mcdi, RTE_LOG_INFO, __VA_ARGS__) + +/** Level value used by MCDI log statements */ +#define SFC_EFX_LOG_LEVEL_MCDI RTE_LOG_INFO + +#define sfc_efx_log_mcdi(mcdi, ...) \ + sfc_efx_mcdi_log(mcdi, SFC_EFX_LOG_LEVEL_MCDI, __VA_ARGS__) + static void sfc_efx_mcdi_timeout(struct sfc_adapter *sa) { - sfc_warn(sa, "MC TIMEOUT"); + struct sfc_efx_mcdi *mcdi = &sa->mcdi; + + sfc_efx_mcdi_warn(mcdi, "MC TIMEOUT"); sfc_panic(sa, "MCDI timeout handling is not implemented\n"); } @@ -125,7 +141,7 @@ sfc_efx_mcdi_execute(void *arg, efx_mcdi_req_t *emrp) if ((mcdi->proxy_handle != 0) && (mcdi->proxy_handle != proxy_handle)) { - sfc_err(sa, "Unexpected MCDI proxy event"); + sfc_efx_mcdi_err(mcdi, "Unexpected MCDI proxy event"); emrp->emr_rc = EFAULT; } else if (mcdi->proxy_result == 0) { /* @@ -136,9 +152,9 @@ sfc_efx_mcdi_execute(void *arg, efx_mcdi_req_t *emrp) sfc_efx_mcdi_poll(sa, B_FALSE); } else { emrp->emr_rc = mcdi->proxy_result; - sfc_err(sa, "MCDI proxy authorization failed " - "(handle=%08x, result=%d)", - proxy_handle, mcdi->proxy_result); + sfc_efx_mcdi_err(mcdi, + "MCDI proxy authorization failed (handle=%08x, result=%d)", + proxy_handle, mcdi->proxy_result); } } @@ -162,8 +178,9 @@ static void sfc_efx_mcdi_exception(void *arg, efx_mcdi_exception_t eme) { struct sfc_adapter *sa = (struct sfc_adapter *)arg; + struct sfc_efx_mcdi *mcdi = &sa->mcdi; - sfc_warn(sa, "MC %s", + sfc_efx_mcdi_warn(mcdi, "MC %s", (eme == EFX_MCDI_EXCEPTION_MC_REBOOT) ? "REBOOT" : (eme == EFX_MCDI_EXCEPTION_MC_BADASSERT) ? "BADASSERT" : "UNKNOWN"); @@ -173,7 +190,7 @@ sfc_efx_mcdi_exception(void *arg, efx_mcdi_exception_t eme) #define SFC_MCDI_LOG_BUF_SIZE 128 static size_t -sfc_efx_mcdi_do_log(const struct sfc_adapter *sa, +sfc_efx_mcdi_do_log(const struct sfc_efx_mcdi *mcdi, char *buffer, void *data, size_t data_size, size_t pfxsize, size_t position) { @@ -189,7 +206,7 @@ sfc_efx_mcdi_do_log(const struct sfc_adapter *sa, * at the end which is required by netlogdecode. */ buffer[position] = '\0'; - sfc_efx_log_mcdi(sa, "%s \\", buffer); + sfc_efx_log_mcdi(mcdi, "%s \\", buffer); /* Preserve prefix for the next log message */ position = pfxsize; } @@ -207,6 +224,7 @@ sfc_efx_mcdi_logger(void *arg, efx_log_msg_t type, void *data, size_t data_size) { struct sfc_adapter *sa = (struct sfc_adapter *)arg; + struct sfc_efx_mcdi *mcdi = &sa->mcdi; char buffer[SFC_MCDI_LOG_BUF_SIZE]; size_t pfxsize; size_t start; @@ -218,7 +236,7 @@ sfc_efx_mcdi_logger(void *arg, efx_log_msg_t type, * * To avoid wasting time, the actual level is examined in advance. */ - if (rte_log_get_level(sa->mcdi.logtype) < (int)SFC_EFX_LOG_LEVEL_MCDI) + if (rte_log_get_level(mcdi->logtype) < (int)SFC_EFX_LOG_LEVEL_MCDI) return; /* The format including prefix added by sfc_efx_log_mcdi() is the @@ -227,13 +245,13 @@ sfc_efx_mcdi_logger(void *arg, efx_log_msg_t type, pfxsize = snprintf(buffer, sizeof(buffer), "MCDI RPC %s:", type == EFX_LOG_MCDI_REQUEST ? "REQ" : type == EFX_LOG_MCDI_RESPONSE ? "RESP" : "???"); - start = sfc_efx_mcdi_do_log(sa, buffer, header, header_size, + start = sfc_efx_mcdi_do_log(mcdi, buffer, header, header_size, pfxsize, pfxsize); - start = sfc_efx_mcdi_do_log(sa, buffer, data, data_size, + start = sfc_efx_mcdi_do_log(mcdi, buffer, data, data_size, pfxsize, start); if (start != pfxsize) { buffer[start] = '\0'; - sfc_efx_log_mcdi(sa, "%s", buffer); + sfc_efx_log_mcdi(mcdi, "%s", buffer); } } @@ -248,30 +266,28 @@ sfc_efx_mcdi_ev_proxy_response(void *arg, uint32_t handle, efx_rc_t result) } static int -sfc_efx_mcdi_init(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi) +sfc_efx_mcdi_init(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi, + uint32_t logtype, const char *log_prefix) { size_t max_msg_size; efx_mcdi_transport_t *emtp; int rc; - sfc_log_init(sa, "entry"); - SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_UNINITIALIZED); rte_spinlock_init(&mcdi->lock); mcdi->state = SFC_EFX_MCDI_INITIALIZED; + mcdi->logtype = logtype; + mcdi->log_prefix = log_prefix; + max_msg_size = sizeof(uint32_t) + MCDI_CTL_SDU_LEN_MAX_V2; rc = sfc_dma_alloc(sa, "mcdi", 0, max_msg_size, sa->socket_id, &mcdi->mem); if (rc != 0) goto fail_dma_alloc; - mcdi->logtype = sfc_register_logtype(&sa->priv.shared->pci_addr, - SFC_LOGTYPE_MCDI_STR, - RTE_LOG_NOTICE); - emtp = &mcdi->transport; emtp->emt_context = sa; emtp->emt_dma_mem = &mcdi->mem; @@ -281,7 +297,7 @@ sfc_efx_mcdi_init(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi) emtp->emt_logger = sfc_efx_mcdi_logger; emtp->emt_ev_proxy_response = sfc_efx_mcdi_ev_proxy_response; - sfc_log_init(sa, "init MCDI"); + sfc_efx_mcdi_info(mcdi, "init MCDI"); rc = efx_mcdi_init(sa->nic, emtp); if (rc != 0) goto fail_mcdi_init; @@ -302,8 +318,6 @@ sfc_efx_mcdi_fini(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi) { efx_mcdi_transport_t *emtp; - sfc_log_init(sa, "entry"); - emtp = &mcdi->transport; rte_spinlock_lock(&mcdi->lock); @@ -311,7 +325,7 @@ sfc_efx_mcdi_fini(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi) SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED); mcdi->state = SFC_EFX_MCDI_UNINITIALIZED; - sfc_log_init(sa, "fini MCDI"); + sfc_efx_mcdi_info(mcdi, "fini MCDI"); efx_mcdi_fini(sa->nic); memset(emtp, 0, sizeof(*emtp)); @@ -323,11 +337,21 @@ sfc_efx_mcdi_fini(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi) int sfc_mcdi_init(struct sfc_adapter *sa) { - return sfc_efx_mcdi_init(sa, &sa->mcdi); + uint32_t logtype; + + sfc_log_init(sa, "entry"); + + logtype = sfc_register_logtype(&sa->priv.shared->pci_addr, + SFC_LOGTYPE_MCDI_STR, + RTE_LOG_NOTICE); + + return sfc_efx_mcdi_init(sa, &sa->mcdi, logtype, + sa->priv.shared->log_prefix); } void sfc_mcdi_fini(struct sfc_adapter *sa) { + sfc_log_init(sa, "entry"); sfc_efx_mcdi_fini(sa, &sa->mcdi); } diff --git a/drivers/net/sfc/sfc_mcdi.h b/drivers/net/sfc/sfc_mcdi.h index 10f5bab666..0194825bfa 100644 --- a/drivers/net/sfc/sfc_mcdi.h +++ b/drivers/net/sfc/sfc_mcdi.h @@ -39,6 +39,7 @@ struct sfc_efx_mcdi { uint32_t logtype; uint32_t proxy_handle; efx_rc_t proxy_result; + const char *log_prefix; }; #ifdef __cplusplus