net/mlx5: convert to dynamic logs
cover net/mlx5: convert to dynamic logs
This series applies on top of [1]
[1] https://dpdk.org/dev/patchwork/patch/35650/
Nelio Laranjeiro (2):
net/mlx5: use port id in PMD log
net/mlx5: use dynamic logging
drivers/net/mlx5/mlx5.c | 227 +++++++++++++++++++------------- drivers/net/mlx5/mlx5_ethdev.c | 112 ++++++++++------ drivers/net/mlx5/mlx5_flow.c | 97 +++++++++----- drivers/net/mlx5/mlx5_mac.c | 11 +- drivers/net/mlx5/mlx5_mr.c | 77 ++++++----- drivers/net/mlx5/mlx5_rxmode.c | 16 +-- drivers/net/mlx5/mlx5_rxq.c | 285 +++++++++++++++++++++++----------------- drivers/net/mlx5/mlx5_rxtx.h | 20 +-- drivers/net/mlx5/mlx5_socket.c | 58 +++++--- drivers/net/mlx5/mlx5_stats.c | 35 +++-- drivers/net/mlx5/mlx5_trigger.c | 28 ++-- drivers/net/mlx5/mlx5_txq.c | 153 ++++++++++++--------- drivers/net/mlx5/mlx5_utils.h | 27 ++-- drivers/net/mlx5/mlx5_vlan.c | 21 +-- 14 files changed, 697 insertions(+), 470 deletions(-)
Signature · 1 line
2.11.0
PATCH 1/2 net/mlx5: use port id in PMD log
--- drivers/net/mlx5/mlx5.c | 79 +++++++++------- drivers/net/mlx5/mlx5_ethdev.c | 86 +++++++++-------- drivers/net/mlx5/mlx5_flow.c | 82 +++++++++------- drivers/net/mlx5/mlx5_mac.c | 9 +- drivers/net/mlx5/mlx5_mr.c | 58 +++++++----- drivers/net/mlx5/mlx5_rxmode.c | 16 ++-- drivers/net/mlx5/mlx5_rxq.c | 201 ++++++++++++++++++++++------------------ drivers/net/mlx5/mlx5_rxtx.h | 7 +- drivers/net/mlx5/mlx5_socket.c | 47 ++++++---- drivers/net/mlx5/mlx5_stats.c | 29 +++--- drivers/net/mlx5/mlx5_trigger.c | 26 +++--- drivers/net/mlx5/mlx5_txq.c | 125 ++++++++++++++----------- drivers/net/mlx5/mlx5_vlan.c | 21 +++-- 13 files changed, 446 insertions(+), 340 deletions(-)
drivers/net/mlx5/mlx5.c +45 -34
@@ -132,7 +132,6 @@ mlx5_alloc_verbs_buf(size_t size, void *data) ret =rte_malloc_socket (__func__, size, alignment, socket);if (!ret && size) rte_errno =ENOMEM ; -DEBUG ("Extern alloc size: %lu, align: %lu: %p" , size, alignment, ret);return ret; }
@@ -148,7 +147,6 @@ static void mlx5_free_verbs_buf(void *ptr, void *data __rte_unused) {assert (data !=NULL ); -DEBUG ("Extern free request: %p" , ptr);rte_free (ptr); }
@@ -167,8 +165,8 @@ mlx5_dev_close(struct rte_eth_dev *dev)unsigned int i;int ret; -DEBUG ("%p: closing device \"%s\"" , - (void *)dev, +DEBUG ("port %u closing device \"%s\"" , + dev->data->port_id, ((priv->ctx !=NULL ) ? priv->ctx->device->name :"" ));/* In case mlx5_dev_stop() has not been called. */ mlx5_dev_interrupt_handler_uninstall (dev);
@@ -206,28 +204,35 @@ mlx5_dev_close(struct rte_eth_dev *dev)mlx5_socket_uninit (dev); ret =mlx5_hrxq_ibv_verify (dev);if (ret) -WARN ("%p: some Hash Rx queue still remain" , (void *)dev); +WARN ("port %u some hash Rx queue still remain" , + dev->data->port_id); ret =mlx5_ind_table_ibv_verify (dev);if (ret) -WARN ("%p: some Indirection table still remain" , (void *)dev); +WARN ("port %u some indirection table still remain" , + dev->data->port_id); ret =mlx5_rxq_ibv_verify (dev);if (ret) -WARN ("%p: some Verbs Rx queue still remain" , (void *)dev); +WARN ("port %u some Verbs Rx queue still remain" , + dev->data->port_id); ret =mlx5_rxq_verify (dev);if (ret) -WARN ("%p: some Rx Queues still remain" , (void *)dev); +WARN ("port %u some Rx queues still remain" , + dev->data->port_id); ret =mlx5_txq_ibv_verify (dev);if (ret) -WARN ("%p: some Verbs Tx queue still remain" , (void *)dev); +WARN ("port %u some Verbs Tx queue still remain" , + dev->data->port_id); ret =mlx5_txq_verify (dev);if (ret) -WARN ("%p: some Tx Queues still remain" , (void *)dev); +WARN ("port %u some Tx queues still remain" , + dev->data->port_id); ret =mlx5_flow_verify (dev);if (ret) -WARN ("%p: some flows still remain" , (void *)dev); +WARN ("port %u some flows still remain" , dev->data->port_id); ret =mlx5_mr_verify (dev);if (ret) -WARN ("%p: some Memory Region still remain" , (void *)dev); +WARN ("port %u some memory region still remain" , + dev->data->port_id);memset (priv,0 ,sizeof (*priv)); }
@@ -503,15 +508,17 @@ mlx5_uar_init_primary(struct rte_eth_dev *dev) addr =mmap (addr,MLX5_UAR_SIZE ,PROT_NONE ,MAP_PRIVATE |MAP_ANONYMOUS ,-1 ,0 );if (addr ==MAP_FAILED ) { -ERROR ("Failed to reserve UAR address space, please adjust " -"MLX5_UAR_SIZE or try --base-virtaddr" ); +ERROR ("port %u failed to reserve UAR address space, please" +" adjust MLX5_UAR_SIZE or try --base-virtaddr" , + dev->data->port_id); rte_errno =ENOMEM ;return -rte_errno; }/* Accept either same addr or a new addr returned from mmap if target * range occupied. */ -INFO ("Reserved UAR address space: %p" , addr); +INFO ("port %u reserved UAR address space: %p" , dev->data->port_id, + addr); priv->uar_base = addr;/* for primary and secondary UAR re-mmap. */ uar_base = addr;/* process local, don't reserve again. */ return 0 ;
@@ -542,20 +549,21 @@ mlx5_uar_init_secondary(struct rte_eth_dev *dev) addr =mmap (priv->uar_base,MLX5_UAR_SIZE ,PROT_NONE ,MAP_PRIVATE |MAP_ANONYMOUS ,-1 ,0 );if (addr ==MAP_FAILED ) { -ERROR ("UAR mmap failed: %p size: %llu" , - priv->uar_base,MLX5_UAR_SIZE ); +ERROR ("port %u UAR mmap failed: %p size: %llu" , + dev->data->port_id, priv->uar_base,MLX5_UAR_SIZE ); rte_errno =ENXIO ;return -rte_errno; }if (priv->uar_base != addr) { -ERROR ("UAR address %p size %llu occupied, please adjust " +ERROR ("port %u UAR address %p size %llu occupied, please adjust " "MLX5_UAR_OFFSET or try EAL parameter --base-virtaddr" , - priv->uar_base,MLX5_UAR_SIZE ); + dev->data->port_id, priv->uar_base,MLX5_UAR_SIZE ); rte_errno =ENXIO ;return -rte_errno; } uar_base = addr;/* process local, don't reserve again */ -INFO ("Reserved UAR address space: %p" , addr); +INFO ("port %u reserved UAR address space: %p" , dev->data->port_id, + addr);return 0 ; }
@@ -659,7 +667,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, mlx5_glue->dv_query_device (attr_ctx, &attrs_out);if (attrs_out.flags &MLX5DV_CONTEXT_FLAGS_MPW_ALLOWED ) {if (attrs_out.flags &MLX5DV_CONTEXT_FLAGS_ENHANCED_MPW ) { -DEBUG ("Enhanced MPW is supported" ); +DEBUG ("enhanced MPW is supported" ); mps =MLX5_MPW_ENHANCED ; }else {DEBUG ("MPW is supported" );
@@ -681,9 +689,9 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, (attrs_out.tunnel_offloads_caps & MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_GRE)); } -DEBUG ("Tunnel offloading is %ssupported" , tunnel_en ?"" :"not " ); +DEBUG ("tunnel offloading is %ssupported" , tunnel_en ?"" :"not " );#else -WARN ("Tunnel offloading disabled due to old OFED/rdma-core version" ); +WARN ("tunnel offloading disabled due to old OFED/rdma-core version" );#endif if (mlx5_glue->query_device_ex (attr_ctx,NULL , &device_attr)) { err = errno;
@@ -829,7 +837,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,if (config.ind_table_max_size > (unsigned int )ETH_RSS_RETA_SIZE_512 ) config.ind_table_max_size =ETH_RSS_RETA_SIZE_512 ; -DEBUG ("maximum RX indirection table size is %u" , +DEBUG ("maximum Rx indirection table size is %u" , config.ind_table_max_size); config.hw_vlan_strip = !!(device_attr_ex.raw_packet_caps &IBV_RAW_PACKET_CAP_CVLAN_STRIPPING );
@@ -844,7 +852,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,#ifdef HAVE_IBV_WQ_FLAG_RX_END_PADDING config.hw_padding = !!device_attr_ex.rx_pad_end_addr_align;#endif -DEBUG ("hardware RX end alignment padding is %ssupported" , +DEBUG ("hardware Rx end alignment padding is %ssupported" , (config.hw_padding ?"" :"not " )); config.tso = ((device_attr_ex.tso_caps.max_tso > 0) && (device_attr_ex.tso_caps.supported_qpts &
@@ -858,8 +866,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, err =ENOTSUP ; goto port_error; } -INFO ("%sMPS is %s" , - config.mps ==MLX5_MPW_ENHANCED ?"Enhanced " :"" , +INFO ("%s MPS is %s" , + config.mps ==MLX5_MPW_ENHANCED ?"enhanced " :"" , config.mps !=MLX5_MPW_DISABLED ?"enabled" :"disabled" );if (config.cqe_comp && !cqe_comp) {WARN ("Rx CQE compression isn't supported" );
@@ -882,13 +890,14 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, goto port_error;/* Configure the first MAC address by default. */ if (mlx5_get_mac (eth_dev, &mac.addr_bytes)) { -ERROR ("cannot get MAC address, is mlx5_en loaded?" -" (errno: %s)" ,strerror (errno)); +ERROR ("port %u cannot get MAC address, is mlx5_en" +" loaded? (errno: %s)" , eth_dev->data->port_id, +strerror (errno)); err =ENODEV ; goto port_error; }INFO ("port %u MAC address is %02x:%02x:%02x:%02x:%02x:%02x" , - priv->port, + eth_dev->data->port_id, mac.addr_bytes[0 ], mac.addr_bytes[1 ], mac.addr_bytes[2 ], mac.addr_bytes[3 ], mac.addr_bytes[4 ], mac.addr_bytes[5 ]);
@@ -898,16 +907,17 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,if (mlx5_get_ifname (eth_dev, &ifname) ==0 )DEBUG ("port %u ifname is \"%s\"" , - priv->port, ifname); + eth_dev->data->port_id, ifname);else - DEBUG("port %u ifname is unknown", priv->port); +DEBUG ("port %u ifname is unknown" , + eth_dev->data->port_id); }#endif /* Get actual MTU if possible. */ err =mlx5_get_mtu (eth_dev, &priv->mtu);if (err) goto port_error; -DEBUG ("port %u MTU is %u" , priv->port, priv->mtu); +DEBUG ("port %u MTU is %u" , eth_dev->data->port_id, priv->mtu);/* * Initialize burst functions to prevent crashes before link-up. */
@@ -928,7 +938,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,MLX5DV_CTX_ATTR_BUF_ALLOCATORS , (void *)((uintptr_t)&alctr));/* Bring Ethernet device up. */ -DEBUG ("forcing Ethernet interface up" ); +DEBUG ("port %u forcing Ethernet interface up" , + eth_dev->data->port_id);mlx5_set_flags (eth_dev, ~IFF_UP ,IFF_UP );/* Store device configuration on private structure. */ priv->config = config;
drivers/net/mlx5/mlx5_ethdev.c +47 -39
212 lines not on this page · raw message
drivers/net/mlx5/mlx5_flow.c +50 -32
231 lines not on this page · raw message
drivers/net/mlx5/mlx5_mac.c +5 -4
@@ -73,8 +73,8 @@ mlx5_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index)int ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("%p cannot remove mac address: %s" , (void *)dev, -strerror (rte_errno)); +ERROR ("port %u cannot remove mac address: %s" , + dev->data->port_id,strerror (rte_errno)); } }
@@ -130,8 +130,9 @@ mlx5_mac_addr_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr) {int ret; -DEBUG ("%p: setting primary MAC address" , (void *)dev); +DEBUG ("port %u setting primary MAC address" , dev->data->port_id); ret =mlx5_mac_addr_add (dev, mac_addr,0 ,0 );if (ret) -ERROR ("cannot set mac address: %s" ,strerror (rte_errno)); +ERROR ("port %u cannot set mac address: %s" , + dev->data->port_id,strerror (rte_errno)); }
drivers/net/mlx5/mlx5_mr.c +33 -25
136 lines not on this page · raw message
drivers/net/mlx5/mlx5_rxmode.c +8 -8
@@ -37,8 +37,8 @@ mlx5_promiscuous_enable(struct rte_eth_dev *dev) dev->data->promiscuous =1 ; ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("%p cannot enable promiscuous mode: %s" , (void *)dev, -strerror (rte_errno)); +ERROR ("port %u cannot enable promiscuous mode: %s" , + dev->data->port_id,strerror (rte_errno)); }/**
@@ -55,8 +55,8 @@ mlx5_promiscuous_disable(struct rte_eth_dev *dev) dev->data->promiscuous =0 ; ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("%p cannot disable promiscuous mode: %s" , (void *)dev, -strerror (rte_errno)); +ERROR ("port %u cannot disable promiscuous mode: %s" , + dev->data->port_id,strerror (rte_errno)); }/**
@@ -73,8 +73,8 @@ mlx5_allmulticast_enable(struct rte_eth_dev *dev) dev->data->all_multicast =1 ; ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("%p cannot enable allmulicast mode: %s" , (void *)dev, -strerror (rte_errno)); +ERROR ("port %u cannot enable allmulicast mode: %s" , + dev->data->port_id,strerror (rte_errno)); }/**
@@ -91,6 +91,6 @@ mlx5_allmulticast_disable(struct rte_eth_dev *dev) dev->data->all_multicast =0 ; ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("%p cannot disable allmulicast mode: %s" , (void *)dev, -strerror (rte_errno)); +ERROR ("port %u cannot disable allmulicast mode: %s" , + dev->data->port_id,strerror (rte_errno)); }
drivers/net/mlx5/mlx5_rxq.c +111 -90
478 lines not on this page · raw message
drivers/net/mlx5/mlx5_rxtx.h +5 -2
@@ -126,6 +126,7 @@ struct mlx5_rxq_ctrl {struct mlx5_rxq_data rxq;/* Data path structure. */ unsigned int socket;/* CPU socket ID for allocations. */ unsigned int irq:1; /* Whether IRQ is enabled. */ +uint16_t idx;/* Queue index. */ };/* Indirection table. */
@@ -187,6 +188,7 @@ struct mlx5_txq_data {struct mlx5_txq_ibv {LIST_ENTRY (mlx5_txq_ibv) next;/* Pointer to the next element. */ rte_atomic32_t refcnt;/* Reference counter. */ +struct mlx5_txq_ctrl *txq_ctrl;/* Pointer to the control queue. */ struct ibv_cq *cq;/* Completion Queue. */ struct ibv_qp *qp;/* Queue Pair. */ };
@@ -203,6 +205,7 @@ struct mlx5_txq_ctrl {struct mlx5_txq_data txq;/* Data path structure. */ off_t uar_mmap_offset;/* UAR mmap offset for non-primary process. */ volatile void *bf_reg_orig;/* Blueflame register from verbs. */ +uint16_t idx;/* Queue index. */ };/* mlx5_rxq.c */
@@ -446,7 +449,7 @@ mlx5_tx_complete(struct mlx5_txq_data *txq)if ((MLX5_CQE_OPCODE (cqe->op_own) ==MLX5_CQE_RESP_ERR ) || (MLX5_CQE_OPCODE (cqe->op_own) ==MLX5_CQE_REQ_ERR )) {if (!check_cqe_seen (cqe)) { -ERROR ("unexpected error CQE, TX stopped" ); +ERROR ("unexpected error CQE, Tx stopped" ); rte_hexdump(stderr, "MLX5 TXQ:", (const void *)((uintptr_t)txq->wqes), ((1 << txq->wqe_n) *
@@ -563,7 +566,7 @@ mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct rte_mbuf *mb) }else {struct rte_mempool *mp =mlx5_tx_mb2mp (mb); -WARN ("Failed to register mempool 0x%p(%s)" , +WARN ("failed to register mempool 0x%p(%s)" , (void *)mp, mp->name); }return (uint32_t )-1 ;
drivers/net/mlx5/mlx5_socket.c +27 -20
146 lines not on this page · raw message
drivers/net/mlx5/mlx5_stats.c +18 -11
@@ -148,7 +148,8 @@ mlx5_read_dev_counters(struct rte_eth_dev *dev, uint64_t *stats) ifr.ifr_data = (caddr_t )et_stats; ret =mlx5_ifreq (dev,SIOCETHTOOL , &ifr);if (ret) { -WARN ("unable to read statistic values from device" ); +WARN ("port %u unable to read statistic values from device" , + dev->data->port_id);return ret; }for (i =0 ; i != xstats_n; ++i) {
@@ -194,7 +195,8 @@ mlx5_ethtool_get_stats_n(struct rte_eth_dev *dev) { ifr.ifr_data = (caddr_t)&drvinfo; ret =mlx5_ifreq (dev,SIOCETHTOOL , &ifr);if (ret) { -WARN ("unable to query number of statistics" ); +WARN ("port %u unable to query number of statistics" , + dev->data->port_id);return ret; }return drvinfo.n_stats;
@@ -221,7 +223,8 @@ mlx5_xstats_init(struct rte_eth_dev *dev) ret =mlx5_ethtool_get_stats_n (dev);if (ret <0 ) { -WARN ("no extended statistics available" ); +WARN ("port %u no extended statistics available" , + dev->data->port_id);return ; } dev_stats_n = ret;
@@ -232,7 +235,8 @@ mlx5_xstats_init(struct rte_eth_dev *dev)rte_malloc ("xstats_strings" , str_sz +sizeof (struct ethtool_gstrings ),0 );if (!strings) { -WARN ("unable to allocate memory for xstats" ); +WARN ("port %u unable to allocate memory for xstats" , + dev->data->port_id);return ; } strings->cmd =ETHTOOL_GSTRINGS ;
@@ -241,7 +245,8 @@ mlx5_xstats_init(struct rte_eth_dev *dev) ifr.ifr_data = (caddr_t )strings; ret =mlx5_ifreq (dev,SIOCETHTOOL , &ifr);if (ret) { -WARN ("unable to get statistic names" ); +WARN ("port %u unable to get statistic names" , + dev->data->port_id); goto free; }for (j =0 ; j != xstats_n; ++j)
@@ -262,7 +267,8 @@ mlx5_xstats_init(struct rte_eth_dev *dev)if (mlx5_counters_init[j].ib)continue ;if (xstats_ctrl->dev_table_idx[j] >= dev_stats_n) { -WARN ("counter \"%s\" is not recognized" , +WARN ("port %u counter \"%s\" is not recognized" , + dev->data->port_id, mlx5_counters_init[j].dpdk_name); goto free; }
@@ -271,7 +277,8 @@ mlx5_xstats_init(struct rte_eth_dev *dev)assert (xstats_n <=MLX5_MAX_XSTATS ); ret =mlx5_read_dev_counters (dev, xstats_ctrl->base);if (ret) -ERROR ("cannot read device counters: %s" ,strerror (rte_errno)); +ERROR ("port %u cannot read device counters: %s" , + dev->data->port_id,strerror (rte_errno)); free:rte_free (strings); }
@@ -438,7 +445,7 @@ mlx5_xstats_reset(struct rte_eth_dev *dev) stats_n =mlx5_ethtool_get_stats_n (dev);if (stats_n <0 ) { -ERROR ("%p cannot get stats: %s" , (void *)dev, +ERROR ("port %u cannot get stats: %s" , dev->data->port_id,strerror (-stats_n));return ; }
@@ -446,8 +453,8 @@ mlx5_xstats_reset(struct rte_eth_dev *dev)mlx5_xstats_init (dev); ret =mlx5_read_dev_counters (dev, counters);if (ret) { -ERROR ("%p cannot read device counters: %s" , (void *)dev, -strerror (rte_errno)); +ERROR ("port %u cannot read device counters: %s" , + dev->data->port_id,strerror (rte_errno));return ; }for (i =0 ; i != n; ++i)
@@ -469,7 +476,7 @@ mlx5_xstats_reset(struct rte_eth_dev *dev)*/ int mlx5_xstats_get_names(struct rte_eth_dev *dev __rte_unused, -struct rte_eth_xstat_name *xstats_names,unsigned int n) +struct rte_eth_xstat_name *xstats_names,unsigned int n) {unsigned int i;
drivers/net/mlx5/mlx5_trigger.c +14 -12
@@ -150,37 +150,38 @@ mlx5_dev_start(struct rte_eth_dev *dev) dev->data->dev_started =1 ; ret =mlx5_flow_create_drop_queue (dev);if (ret) { -ERROR ("%p: Drop queue allocation failed: %s" , - (void *)dev,strerror (rte_errno)); +ERROR ("port %u drop queue allocation failed: %s" , + dev->data->port_id,strerror (rte_errno)); goto error; } -DEBUG ("%p: allocating and configuring hash RX queues" , (void *)dev); +DEBUG ("port %u allocating and configuring hash Rx queues" , + dev->data->port_id);rte_mempool_walk (mlx5_mp2mr_iter, priv); ret =mlx5_txq_start (dev);if (ret) { -ERROR ("%p: Tx Queue allocation failed: %s" , - (void *)dev,strerror (rte_errno)); +ERROR ("port %u Tx queue allocation failed: %s" , + dev->data->port_id,strerror (rte_errno)); goto error; } ret =mlx5_rxq_start (dev);if (ret) { -ERROR ("%p: Rx Queue allocation failed: %s" , - (void *)dev,strerror (rte_errno)); +ERROR ("port %u Rx queue allocation failed: %s" , + dev->data->port_id,strerror (rte_errno)); goto error; } ret =mlx5_rx_intr_vec_enable (dev);if (ret) { -ERROR ("%p: Rx interrupt vector creation failed" , - (void *)dev); +ERROR ("port %u Rx interrupt vector creation failed" , + dev->data->port_id); goto error; }mlx5_xstats_init (dev);/* Update link status and Tx/Rx callbacks for the first time. */ memset (&dev->data->dev_link,0 ,sizeof (struct rte_eth_link )); -INFO ("Forcing port %u link to be up" , dev->data->port_id); +INFO ("port %u forcing link to be up" , dev->data->port_id); ret =mlx5_force_link_status_change (dev,ETH_LINK_UP );if (ret) { -DEBUG ("Failed to set port %u link to be up" , +DEBUG ("failed to set port %u link to be up" , dev->data->port_id); goto error; }
@@ -221,7 +222,8 @@ mlx5_dev_stop(struct rte_eth_dev *dev) dev->tx_pkt_burst = removed_tx_burst;rte_wmb ();usleep (1000 * priv->rxqs_n); -DEBUG ("%p: cleaning up and destroying hash RX queues" , (void *)dev); +DEBUG ("port %u cleaning up and destroying hash Rx queues" , + dev->data->port_id);mlx5_flow_stop (dev, &priv->flows);mlx5_traffic_disable (dev);mlx5_rx_intr_vec_disable (dev);
drivers/net/mlx5/mlx5_txq.c +71 -54
301 lines not on this page · raw message
drivers/net/mlx5/mlx5_vlan.c +12 -9
@@ -45,8 +45,8 @@ mlx5_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)struct priv *priv = dev->data->dev_private;unsigned int i; -DEBUG ("%p: %s VLAN filter ID %" PRIu16, - (void *)dev, (on ?"enable" :"disable" ), vlan_id); +DEBUG ("port %u %s VLAN filter ID %" PRIu16, + dev->data->port_id, (on ?"enable" :"disable" ), vlan_id);assert (priv->vlan_filter_n <=RTE_DIM (priv->vlan_filter));for (i =0 ; (i != priv->vlan_filter_n); ++i)if (priv->vlan_filter[i] == vlan_id)
@@ -108,16 +108,18 @@ mlx5_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on)/* Validate hw support */ if (!priv->config.hw_vlan_strip) { -ERROR ("VLAN stripping is not supported" ); +ERROR ("port %u VLAN stripping is not supported" , + dev->data->port_id);return ; }/* Validate queue number */ if (queue >= priv->rxqs_n) { -ERROR ("VLAN stripping, invalid queue number %d" , queue); +ERROR ("port %u VLAN stripping, invalid queue number %d" , + dev->data->port_id, queue);return ; } -DEBUG ("set VLAN offloads 0x%x for port %d queue %d" , - vlan_offloads, rxq->port_id, queue); +DEBUG ("port %u set VLAN offloads 0x%x for port %uqueue %d" , + dev->data->port_id, vlan_offloads, rxq->port_id, queue);if (!rxq_ctrl->ibv) {/* Update related bits in RX queue. */ rxq->vlan_strip = !!on;
@@ -130,8 +132,8 @@ mlx5_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on) }; ret = mlx5_glue->modify_wq (rxq_ctrl->ibv->wq, &mod);if (ret) { -ERROR ("%p: failed to modified stripping mode: %s" , - (void *)dev,strerror (rte_errno)); +ERROR ("port %u failed to modified stripping mode: %s" , + dev->data->port_id,strerror (rte_errno));return ; }/* Update related bits in RX queue. */
@@ -160,7 +162,8 @@ mlx5_vlan_offload_set(struct rte_eth_dev *dev, int mask) DEV_RX_OFFLOAD_VLAN_STRIP);if (!priv->config.hw_vlan_strip) { -ERROR ("VLAN stripping is not supported" ); +ERROR ("port %u VLAN stripping is not supported" , + dev->data->port_id);return 0 ; }/* Run on every RX queue and set/reset VLAN stripping. */
Signature · 1 line
2.11.0
PATCH 2/2 net/mlx5: use dynamic logging
In reply to Nelio Laranjeiro--- drivers/net/mlx5/mlx5.c | 238 ++++++++++++++++++-------------- drivers/net/mlx5/mlx5_ethdev.c | 118 +++++++++------- drivers/net/mlx5/mlx5_flow.c | 109 ++++++++------- drivers/net/mlx5/mlx5_mac.c | 12 +- drivers/net/mlx5/mlx5_mr.c | 85 ++++++------ drivers/net/mlx5/mlx5_rxmode.c | 16 +-- drivers/net/mlx5/mlx5_rxq.c | 298 ++++++++++++++++++++++------------------ drivers/net/mlx5/mlx5_rxtx.h | 17 +-- drivers/net/mlx5/mlx5_socket.c | 65 +++++---- drivers/net/mlx5/mlx5_stats.c | 38 ++--- drivers/net/mlx5/mlx5_trigger.c | 30 ++-- drivers/net/mlx5/mlx5_txq.c | 164 ++++++++++++---------- drivers/net/mlx5/mlx5_utils.h | 27 ++-- drivers/net/mlx5/mlx5_vlan.c | 24 ++-- 14 files changed, 681 insertions(+), 560 deletions(-)
drivers/net/mlx5/mlx5.c +135 -103
@@ -77,6 +77,9 @@#define MLX5DV_CONTEXT_FLAGS_CQE_128B_COMP (1 << 4)#endif +/** Driver-specific log messages type. */ +int mlx5_logtype; +/** * Retrieve integer value from environment variable. *
@@ -165,9 +168,9 @@ mlx5_dev_close(struct rte_eth_dev *dev)unsigned int i;int ret; -DEBUG ("port %u closing device \"%s\"" , - dev->data->port_id, - ((priv->ctx !=NULL ) ? priv->ctx->device->name :"" )); +DRV_LOG (DEBUG ,"port %u closing device \"%s\"" , + dev->data->port_id, + ((priv->ctx !=NULL ) ? priv->ctx->device->name :"" ));/* In case mlx5_dev_stop() has not been called. */ mlx5_dev_interrupt_handler_uninstall (dev);mlx5_traffic_disable (dev);
@@ -204,35 +207,36 @@ mlx5_dev_close(struct rte_eth_dev *dev)mlx5_socket_uninit (dev); ret =mlx5_hrxq_ibv_verify (dev);if (ret) -WARN ("port %u some hash Rx queue still remain" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u some hash Rx queue still remain" , + dev->data->port_id); ret =mlx5_ind_table_ibv_verify (dev);if (ret) -WARN ("port %u some indirection table still remain" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u some indirection table still remain" , + dev->data->port_id); ret =mlx5_rxq_ibv_verify (dev);if (ret) -WARN ("port %u some Verbs Rx queue still remain" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u some Verbs Rx queue still remain" , + dev->data->port_id); ret =mlx5_rxq_verify (dev);if (ret) -WARN ("port %u some Rx queues still remain" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u some Rx queues still remain" , + dev->data->port_id); ret =mlx5_txq_ibv_verify (dev);if (ret) -WARN ("port %u some Verbs Tx queue still remain" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u some Verbs Tx queue still remain" , + dev->data->port_id); ret =mlx5_txq_verify (dev);if (ret) -WARN ("port %u some Tx queues still remain" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u some Tx queues still remain" , + dev->data->port_id); ret =mlx5_flow_verify (dev);if (ret) -WARN ("port %u some flows still remain" , dev->data->port_id); +DRV_LOG (WARNING ,"port %u some flows still remain" , + dev->data->port_id); ret =mlx5_mr_verify (dev);if (ret) -WARN ("port %u some memory region still remain" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u some memory region still remain" , + dev->data->port_id);memset (priv,0 ,sizeof (*priv)); }
@@ -384,7 +388,7 @@ mlx5_args_check(const char *key, const char *val, void *opaque) tmp =strtoul (val,NULL ,0 );if (errno) { rte_errno = errno; -WARN ("%s: \"%s\" is not a valid integer" , key, val); +DRV_LOG (WARNING ,"%s: \"%s\" is not a valid integer" , key, val);return -rte_errno; }if (strcmp (MLX5_RXQ_CQE_COMP_EN , key) ==0 ) {
@@ -404,7 +408,7 @@ mlx5_args_check(const char *key, const char *val, void *opaque) }else if (strcmp (MLX5_RX_VEC_EN , key) ==0 ) { config->rx_vec_en = !!tmp; }else { -WARN ("%s: unknown parameter" , key); +DRV_LOG (WARNING ,"%s: unknown parameter" , key); rte_errno =EINVAL ;return -rte_errno; }
@@ -508,17 +512,18 @@ mlx5_uar_init_primary(struct rte_eth_dev *dev) addr =mmap (addr,MLX5_UAR_SIZE ,PROT_NONE ,MAP_PRIVATE |MAP_ANONYMOUS ,-1 ,0 );if (addr ==MAP_FAILED ) { -ERROR ("port %u failed to reserve UAR address space, please" -" adjust MLX5_UAR_SIZE or try --base-virtaddr" , - dev->data->port_id); +DRV_LOG (ERR , +"port %u failed to reserve UAR address space, please" +" adjust MLX5_UAR_SIZE or try --base-virtaddr" , + dev->data->port_id); rte_errno =ENOMEM ;return -rte_errno; }/* Accept either same addr or a new addr returned from mmap if target * range occupied. */ -INFO ("port %u reserved UAR address space: %p" , dev->data->port_id, - addr); +DRV_LOG (INFO ,"port %u reserved UAR address space: %p" , + dev->data->port_id, addr); priv->uar_base = addr;/* for primary and secondary UAR re-mmap. */ uar_base = addr;/* process local, don't reserve again. */ return 0 ;
@@ -549,21 +554,23 @@ mlx5_uar_init_secondary(struct rte_eth_dev *dev) addr =mmap (priv->uar_base,MLX5_UAR_SIZE ,PROT_NONE ,MAP_PRIVATE |MAP_ANONYMOUS ,-1 ,0 );if (addr ==MAP_FAILED ) { -ERROR ("port %u UAR mmap failed: %p size: %llu" , - dev->data->port_id, priv->uar_base,MLX5_UAR_SIZE ); +DRV_LOG (ERR ,"port %u UAR mmap failed: %p size: %llu" , + dev->data->port_id, priv->uar_base,MLX5_UAR_SIZE ); rte_errno =ENXIO ;return -rte_errno; }if (priv->uar_base != addr) { -ERROR ("port %u UAR address %p size %llu occupied, please adjust " -"MLX5_UAR_OFFSET or try EAL parameter --base-virtaddr" , - dev->data->port_id, priv->uar_base,MLX5_UAR_SIZE ); +DRV_LOG (ERR , +"port %u UAR address %p size %llu occupied, please" +" adjust MLX5_UAR_OFFSET or try EAL parameter" +" --base-virtaddr" , + dev->data->port_id, priv->uar_base,MLX5_UAR_SIZE ); rte_errno =ENXIO ;return -rte_errno; } uar_base = addr;/* process local, don't reserve again */ -INFO ("port %u reserved UAR address space: %p" , dev->data->port_id, - addr); +DRV_LOG (INFO ,"port %u reserved UAR address space: %p" , + dev->data->port_id, addr);return 0 ; }
@@ -604,11 +611,11 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,/* Get mlx5_dev[] index. */ idx =mlx5_dev_idx (&pci_dev->addr);if (idx ==-1 ) { -ERROR ("this driver cannot support any more adapters" ); +DRV_LOG (ERR ,"this driver cannot support any more adapters" ); err =ENOMEM ; goto error; } -DEBUG ("using driver device index %d" , idx); +DRV_LOG (DEBUG ,"using driver device index %d" , idx);/* Save PCI address. */ mlx5_dev[idx].pci_addr = pci_dev->addr; list = mlx5_glue->get_device_list (&i);
@@ -616,7 +623,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,assert (errno); err = errno;if (errno ==ENOSYS ) -ERROR ("cannot list devices, is ib_uverbs loaded?" ); +DRV_LOG (ERR , +"cannot list devices, is ib_uverbs loaded?" ); goto error; }assert (i >=0 );
@@ -628,7 +636,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,struct rte_pci_addr pci_addr; --i; -DEBUG ("checking device \"%s\"" , list[i]->name); +DRV_LOG (DEBUG ,"checking device \"%s\"" , list[i]->name);if (mlx5_ibv_device_to_pci_addr (list[i], &pci_addr))continue ; if ((pci_dev->addr.domain != pci_addr.domain) ||
@@ -636,8 +644,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, (pci_dev->addr.devid != pci_addr.devid) || (pci_dev->addr.function != pci_addr.function)) continue; -INFO ("PCI information matches, using device \"%s\"" , - list[i]->name); +DRV_LOG (INFO ,"PCI information matches, using device \"%s\"" , + list[i]->name); attr_ctx = mlx5_glue->open_device (list[i]); rte_errno = errno; err = rte_errno;
@@ -647,16 +655,18 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, mlx5_glue->free_device_list (list);switch (err) {case 0 : -ERROR ("cannot access device, is mlx5_ib loaded?" ); +DRV_LOG (ERR , +"cannot access device, is mlx5_ib loaded?" ); err =ENODEV ; goto error;case EINVAL : -ERROR ("cannot use device, are drivers up to date?" ); +DRV_LOG (ERR , +"cannot use device, are drivers up to date?" ); goto error; } } ibv_dev = list[i]; -DEBUG ("device opened" ); +DRV_LOG (DEBUG ,"device opened" );/* * Multi-packet send is supported by ConnectX-4 Lx PF as well * as all ConnectX-5 devices.
@@ -667,14 +677,14 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, mlx5_glue->dv_query_device (attr_ctx, &attrs_out);if (attrs_out.flags &MLX5DV_CONTEXT_FLAGS_MPW_ALLOWED ) {if (attrs_out.flags &MLX5DV_CONTEXT_FLAGS_ENHANCED_MPW ) { -DEBUG ("enhanced MPW is supported" ); +DRV_LOG (DEBUG ,"enhanced MPW is supported" ); mps =MLX5_MPW_ENHANCED ; }else { -DEBUG ("MPW is supported" ); +DRV_LOG (DEBUG ,"MPW is supported" ); mps =MLX5_MPW ; } }else { -DEBUG ("MPW isn't supported" ); +DRV_LOG (DEBUG ,"MPW isn't supported" ); mps =MLX5_MPW_DISABLED ; } if (RTE_CACHE_LINE_SIZE == 128 &&
@@ -689,15 +699,18 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, (attrs_out.tunnel_offloads_caps & MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_GRE)); } -DEBUG ("tunnel offloading is %ssupported" , tunnel_en ?"" :"not " ); +DRV_LOG (DEBUG ,"tunnel offloading is %ssupported" , + tunnel_en ?"" :"not " );#else -WARN ("tunnel offloading disabled due to old OFED/rdma-core version" ); +DRV_LOG (WARNING , +"tunnel offloading disabled due to old OFED/rdma-core version" );#endif if (mlx5_glue->query_device_ex (attr_ctx,NULL , &device_attr)) { err = errno; goto error; } -INFO ("%u port(s) detected" , device_attr.orig_attr.phys_port_cnt); +DRV_LOG (INFO ,"%u port(s) detected" , + device_attr.orig_attr.phys_port_cnt);for (i =0 ; i < device_attr.orig_attr.phys_port_cnt; i++) {char name[RTE_ETH_NAME_MAX_LEN ];int len;
@@ -732,7 +745,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,if (rte_eal_process_type () ==RTE_PROC_SECONDARY ) { eth_dev =rte_eth_dev_attach_secondary (name);if (eth_dev ==NULL ) { -ERROR ("can not attach rte ethdev" ); +DRV_LOG (ERR ,"can not attach rte ethdev" ); rte_errno =ENOMEM ; err = rte_errno; goto error;
@@ -761,7 +774,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,mlx5_select_tx_function (eth_dev);continue ; } -DEBUG ("using port %u (%08" PRIx32")" , port, test); +DRV_LOG (DEBUG ,"using port %u (%08" PRIx32")" , port, test); ctx = mlx5_glue->open_device (ibv_dev);if (ctx ==NULL ) { err =ENODEV ;
@@ -771,23 +784,25 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,/* Check port status. */ err = mlx5_glue->query_port (ctx, port, &port_attr);if (err) { -ERROR ("port query failed: %s" ,strerror (err)); +DRV_LOG (ERR ,"port query failed: %s" ,strerror (err)); goto port_error; }if (port_attr.link_layer !=IBV_LINK_LAYER_ETHERNET ) { -ERROR ("port %d is not configured in Ethernet mode" , - port); +DRV_LOG (ERR , +"port %d is not configured in Ethernet mode" , + port); err =EINVAL ; goto port_error; }if (port_attr.state !=IBV_PORT_ACTIVE ) -DEBUG ("port %d is not active: \"%s\" (%d)" , - port, mlx5_glue->port_state_str (port_attr.state), - port_attr.state); +DRV_LOG (DEBUG ,"port %d is not active: \"%s\" (%d)" , + port, + mlx5_glue->port_state_str (port_attr.state), + port_attr.state);/* Allocate protection domain. */ pd = mlx5_glue->alloc_pd (ctx);if (pd ==NULL ) { -ERROR ("PD allocation failure" ); +DRV_LOG (ERR ,"PD allocation failure" ); err =ENOMEM ; goto port_error; }
@@ -797,7 +812,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,sizeof (*priv), RTE_CACHE_LINE_SIZE);if (priv ==NULL ) { -ERROR ("priv allocation failure" ); +DRV_LOG (ERR ,"priv allocation failure" ); err =ENOMEM ; goto port_error; }
@@ -810,25 +825,26 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, priv->mtu =ETHER_MTU ; err =mlx5_args (&config, pci_dev->device.devargs);if (err) { -ERROR ("failed to process device arguments: %s" , -strerror (err)); +DRV_LOG (ERR ,"failed to process device arguments: %s" , +strerror (err)); goto port_error; }if (mlx5_glue->query_device_ex (ctx,NULL , &device_attr_ex)) { -ERROR ("ibv_query_device_ex() failed" ); +DRV_LOG (ERR ,"ibv_query_device_ex() failed" ); err = errno; goto port_error; } config.hw_csum = !!(device_attr_ex.device_cap_flags_ex &IBV_DEVICE_RAW_IP_CSUM ); -DEBUG ("checksum offloading is %ssupported" , - (config.hw_csum ?"" :"not " )); +DRV_LOG (DEBUG ,"checksum offloading is %ssupported" , + (config.hw_csum ?"" :"not " ));#ifdef HAVE_IBV_DEVICE_COUNTERS_SET_SUPPORT config.flow_counter_en = !!(device_attr.max_counter_sets); mlx5_glue->describe_counter_set (ctx,0 , &cs_desc); -DEBUG ("counter type = %d, num of cs = %ld, attributes = %d" , - cs_desc.counter_type, cs_desc.num_of_cs, - cs_desc.attributes); +DRV_LOG (DEBUG , +"counter type = %d, num of cs = %ld, attributes = %d" , + cs_desc.counter_type, cs_desc.num_of_cs, + cs_desc.attributes);#endif config.ind_table_max_size = device_attr_ex.rss_caps.max_rwq_indirection_table_size;
@@ -837,23 +853,24 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,if (config.ind_table_max_size > (unsigned int )ETH_RSS_RETA_SIZE_512 ) config.ind_table_max_size =ETH_RSS_RETA_SIZE_512 ; -DEBUG ("maximum Rx indirection table size is %u" , - config.ind_table_max_size); +DRV_LOG (DEBUG ,"maximum Rx indirection table size is %u" , + config.ind_table_max_size); config.hw_vlan_strip = !!(device_attr_ex.raw_packet_caps &IBV_RAW_PACKET_CAP_CVLAN_STRIPPING ); -DEBUG ("VLAN stripping is %ssupported" , - (config.hw_vlan_strip ?"" :"not " )); +DRV_LOG (DEBUG ,"VLAN stripping is %ssupported" , + (config.hw_vlan_strip ?"" :"not " )); config.hw_fcs_strip = !!(device_attr_ex.raw_packet_caps &IBV_RAW_PACKET_CAP_SCATTER_FCS ); -DEBUG ("FCS stripping configuration is %ssupported" , - (config.hw_fcs_strip ?"" :"not " )); +DRV_LOG (DEBUG ,"FCS stripping configuration is %ssupported" , + (config.hw_fcs_strip ?"" :"not " ));#ifdef HAVE_IBV_WQ_FLAG_RX_END_PADDING config.hw_padding = !!device_attr_ex.rx_pad_end_addr_align;#endif -DEBUG ("hardware Rx end alignment padding is %ssupported" , - (config.hw_padding ?"" :"not " )); +DRV_LOG (DEBUG , +"hardware Rx end alignment padding is %ssupported" , + (config.hw_padding ?"" :"not " )); config.tso = ((device_attr_ex.tso_caps.max_tso >0 ) && (device_attr_ex.tso_caps.supported_qpts & (1 <<IBV_QPT_RAW_PACKET )));
@@ -861,21 +878,23 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, config.tso_max_payload_sz = device_attr_ex.tso_caps.max_tso;if (config.mps && !mps) { -ERROR ("multi-packet send not supported on this device" -" (" MLX5_TXQ_MPW_EN ")" ); +DRV_LOG (ERR , +"multi-packet send not supported on this device" +" (" MLX5_TXQ_MPW_EN ")" ); err =ENOTSUP ; goto port_error; } -INFO ("%s MPS is %s" , - config.mps ==MLX5_MPW_ENHANCED ?"enhanced " :"" , - config.mps !=MLX5_MPW_DISABLED ?"enabled" :"disabled" ); +DRV_LOG (INFO ,"%s MPS is %s" , + config.mps ==MLX5_MPW_ENHANCED ?"enhanced " :"" , + config.mps !=MLX5_MPW_DISABLED ?"enabled" : +"disabled" );if (config.cqe_comp && !cqe_comp) { -WARN ("Rx CQE compression isn't supported" ); +DRV_LOG (WARNING ,"Rx CQE compression isn't supported" ); config.cqe_comp =0 ; } eth_dev =rte_eth_dev_allocate (name);if (eth_dev ==NULL ) { -ERROR ("can not allocate rte ethdev" ); +DRV_LOG (ERR ,"can not allocate rte ethdev" ); err =ENOMEM ; goto port_error; }
@@ -890,34 +909,37 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, goto port_error;/* Configure the first MAC address by default. */ if (mlx5_get_mac (eth_dev, &mac.addr_bytes)) { -ERROR ("port %u cannot get MAC address, is mlx5_en" -" loaded? (errno: %s)" , eth_dev->data->port_id, -strerror (errno)); +DRV_LOG (ERR , +"port %u cannot get MAC address, is mlx5_en" +" loaded? (errno: %s)" , + eth_dev->data->port_id,strerror (errno)); err =ENODEV ; goto port_error; } -INFO ("port %u MAC address is %02x:%02x:%02x:%02x:%02x:%02x" , - eth_dev->data->port_id, - mac.addr_bytes[0 ], mac.addr_bytes[1 ], - mac.addr_bytes[2 ], mac.addr_bytes[3 ], - mac.addr_bytes[4 ], mac.addr_bytes[5 ]); +DRV_LOG (INFO , +"port %u MAC address is %02x:%02x:%02x:%02x:%02x:%02x" , + eth_dev->data->port_id, + mac.addr_bytes[0 ], mac.addr_bytes[1 ], + mac.addr_bytes[2 ], mac.addr_bytes[3 ], + mac.addr_bytes[4 ], mac.addr_bytes[5 ]);#ifndef NDEBUG {char ifname[IF_NAMESIZE ];if (mlx5_get_ifname (eth_dev, &ifname) ==0 ) -DEBUG ("port %u ifname is \"%s\"" , - eth_dev->data->port_id, ifname); +DRV_LOG (DEBUG ,"port %u ifname is \"%s\"" , + eth_dev->data->port_id, ifname);else -DEBUG ("port %u ifname is unknown" , - eth_dev->data->port_id); +DRV_LOG (DEBUG ,"port %u ifname is unknown" , + eth_dev->data->port_id); }#endif /* Get actual MTU if possible. */ err =mlx5_get_mtu (eth_dev, &priv->mtu);if (err) goto port_error; -DEBUG ("port %u MTU is %u" , eth_dev->data->port_id, priv->mtu); +DRV_LOG (DEBUG ,"port %u MTU is %u" , eth_dev->data->port_id, + priv->mtu);/* * Initialize burst functions to prevent crashes before link-up. */
@@ -938,8 +960,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,MLX5DV_CTX_ATTR_BUF_ALLOCATORS , (void *)((uintptr_t)&alctr));/* Bring Ethernet device up. */ -DEBUG ("port %u forcing Ethernet interface up" , - eth_dev->data->port_id); +DRV_LOG (DEBUG ,"port %u forcing Ethernet interface up" , + eth_dev->data->port_id);mlx5_set_flags (eth_dev, ~IFF_UP ,IFF_UP );/* Store device configuration on private structure. */ priv->config = config;
@@ -1069,7 +1091,8 @@ mlx5_glue_init(void)break ;if (sizeof (name) != (size_t )ret +1 )continue ; -DEBUG ("looking for rdma-core glue as \"%s\"" , name); +DRV_LOG (DEBUG ,"looking for rdma-core glue as \"%s\"" , + name); handle =dlopen (name,RTLD_LAZY );break ; }while (1 );
@@ -1081,7 +1104,7 @@ mlx5_glue_init(void) rte_errno =EINVAL ; dlmsg =dlerror ();if (dlmsg) -WARN ("cannot load glue library: %s" , dlmsg); +DRV_LOG (WARNING ,"cannot load glue library: %s" , dlmsg); goto glue_error; } sym =dlsym (handle,"mlx5_glue" );
@@ -1089,7 +1112,7 @@ mlx5_glue_init(void) rte_errno =EINVAL ; dlmsg =dlerror ();if (dlmsg) -ERROR ("cannot resolve glue symbol: %s" , dlmsg); +DRV_LOG (ERR ,"cannot resolve glue symbol: %s" , dlmsg); goto glue_error; } mlx5_glue = *sym;
@@ -1097,9 +1120,9 @@ mlx5_glue_init(void) glue_error:if (handle)dlclose (handle); -WARN ("cannot initialize PMD due to missing run-time" -" dependency on rdma-core libraries (libibverbs," -" libmlx5)" ); +DRV_LOG (WARNING , +"cannot initialize PMD due to missing run-time dependency on" +" rdma-core libraries (libibverbs, libmlx5)" );return -rte_errno; }
@@ -1139,8 +1162,9 @@ rte_mlx5_pmd_init(void) }#endif if (strcmp (mlx5_glue->version,MLX5_GLUE_VERSION )) { -ERROR ("rdma-core glue \"%s\" mismatch: \"%s\" is required" , - mlx5_glue->version,MLX5_GLUE_VERSION ); +DRV_LOG (ERR , +"rdma-core glue \"%s\" mismatch: \"%s\" is required" , + mlx5_glue->version,MLX5_GLUE_VERSION );return ; } mlx5_glue->fork_init ();
@@ -1150,3 +1174,11 @@ rte_mlx5_pmd_init(void)RTE_PMD_EXPORT_NAME (net_mlx5, __COUNTER__);RTE_PMD_REGISTER_PCI_TABLE (net_mlx5, mlx5_pci_id_map);RTE_PMD_REGISTER_KMOD_DEP (net_mlx5,"* ib_uverbs & mlx5_core & mlx5_ib" ); + +/** Initialize driver log type. */ +RTE_INIT (vdev_netvsc_init_log) +{ + mlx5_logtype =rte_log_register ("pmd.net.mlx5" ); +if (mlx5_logtype >=0 ) +rte_log_set_level (mlx5_logtype,RTE_LOG_NOTICE ); +}
drivers/net/mlx5/mlx5_ethdev.c +70 -48
243 lines not on this page · raw message
drivers/net/mlx5/mlx5_flow.c +58 -51
242 lines not on this page · raw message
drivers/net/mlx5/mlx5_mac.c +7 -5
@@ -73,8 +73,8 @@ mlx5_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index)int ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("port %u cannot remove mac address: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u cannot remove mac address: %s" , + dev->data->port_id,strerror (rte_errno)); } }
@@ -130,9 +130,11 @@ mlx5_mac_addr_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr) {int ret; -DEBUG ("port %u setting primary MAC address" , dev->data->port_id); +DRV_LOG (DEBUG ,"port %u setting primary MAC address" , + dev->data->port_id); + ret =mlx5_mac_addr_add (dev, mac_addr,0 ,0 );if (ret) -ERROR ("port %u cannot set mac address: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u cannot set mac address: %s" , + dev->data->port_id,strerror (rte_errno)); }
drivers/net/mlx5/mlx5_mr.c +46 -39
161 lines not on this page · raw message
drivers/net/mlx5/mlx5_rxmode.c +8 -8
@@ -37,8 +37,8 @@ mlx5_promiscuous_enable(struct rte_eth_dev *dev) dev->data->promiscuous =1 ; ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("port %u cannot enable promiscuous mode: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u cannot enable promiscuous mode: %s" , + dev->data->port_id,strerror (rte_errno)); }/**
@@ -55,8 +55,8 @@ mlx5_promiscuous_disable(struct rte_eth_dev *dev) dev->data->promiscuous =0 ; ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("port %u cannot disable promiscuous mode: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u cannot disable promiscuous mode: %s" , + dev->data->port_id,strerror (rte_errno)); }/**
@@ -73,8 +73,8 @@ mlx5_allmulticast_enable(struct rte_eth_dev *dev) dev->data->all_multicast =1 ; ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("port %u cannot enable allmulicast mode: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u cannot enable allmulicast mode: %s" , + dev->data->port_id,strerror (rte_errno)); }/**
@@ -91,6 +91,6 @@ mlx5_allmulticast_disable(struct rte_eth_dev *dev) dev->data->all_multicast =0 ; ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("port %u cannot disable allmulicast mode: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u cannot disable allmulicast mode: %s" , + dev->data->port_id,strerror (rte_errno)); }
drivers/net/mlx5/mlx5_rxq.c +163 -135
553 lines not on this page · raw message
drivers/net/mlx5/mlx5_rxtx.h +9 -8
@@ -377,9 +377,10 @@ check_cqe(volatile struct mlx5_cqe *cqe, (syndrome == MLX5_CQE_SYNDROME_REMOTE_ABORTED_ERR))return 0 ;if (!check_cqe_seen (cqe)) { -ERROR ("unexpected CQE error %u (0x%02x)" -" syndrome 0x%02x" , - op_code, op_code, syndrome); +DRV_LOG (ERR , +"unexpected CQE error %u (0x%02x) syndrome" +" 0x%02x" , + op_code, op_code, syndrome);rte_hexdump (stderr,"MLX5 Error CQE:" , (const void *)((uintptr_t )err_cqe),sizeof (*err_cqe));
@@ -388,8 +389,8 @@ check_cqe(volatile struct mlx5_cqe *cqe, }else if ((op_code !=MLX5_CQE_RESP_SEND ) && (op_code !=MLX5_CQE_REQ )) {if (!check_cqe_seen (cqe)) { -ERROR ("unexpected CQE opcode %u (0x%02x)" , - op_code, op_code); +DRV_LOG (ERR ,"unexpected CQE opcode %u (0x%02x)" , + op_code, op_code);rte_hexdump (stderr,"MLX5 CQE:" , (const void *)((uintptr_t )cqe),sizeof (*cqe));
@@ -449,7 +450,7 @@ mlx5_tx_complete(struct mlx5_txq_data *txq)if ((MLX5_CQE_OPCODE (cqe->op_own) ==MLX5_CQE_RESP_ERR ) || (MLX5_CQE_OPCODE (cqe->op_own) ==MLX5_CQE_REQ_ERR )) {if (!check_cqe_seen (cqe)) { -ERROR ("unexpected error CQE, Tx stopped" ); +DRV_LOG (ERR ,"unexpected error CQE, Tx stopped" ); rte_hexdump(stderr, "MLX5 TXQ:", (const void *)((uintptr_t)txq->wqes), ((1 << txq->wqe_n) *
@@ -566,8 +567,8 @@ mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct rte_mbuf *mb) }else {struct rte_mempool *mp =mlx5_tx_mb2mp (mb); -WARN ("failed to register mempool 0x%p(%s)" , - (void *)mp, mp->name); +DRV_LOG (WARNING ,"failed to register mempool 0x%p(%s)" , + (void *)mp, mp->name); }return (uint32_t )-1 ; }
drivers/net/mlx5/mlx5_socket.c +38 -27
164 lines not on this page · raw message
drivers/net/mlx5/mlx5_stats.c +20 -18
@@ -148,8 +148,9 @@ mlx5_read_dev_counters(struct rte_eth_dev *dev, uint64_t *stats) ifr.ifr_data = (caddr_t )et_stats; ret =mlx5_ifreq (dev,SIOCETHTOOL , &ifr);if (ret) { -WARN ("port %u unable to read statistic values from device" , - dev->data->port_id); +DRV_LOG (WARNING , +"port %u unable to read statistic values from device" , + dev->data->port_id);return ret; }for (i =0 ; i != xstats_n; ++i) {
@@ -195,8 +196,8 @@ mlx5_ethtool_get_stats_n(struct rte_eth_dev *dev) { ifr.ifr_data = (caddr_t)&drvinfo; ret =mlx5_ifreq (dev,SIOCETHTOOL , &ifr);if (ret) { -WARN ("port %u unable to query number of statistics" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u unable to query number of statistics" , + dev->data->port_id);return ret; }return drvinfo.n_stats;
@@ -223,8 +224,8 @@ mlx5_xstats_init(struct rte_eth_dev *dev) ret =mlx5_ethtool_get_stats_n (dev);if (ret <0 ) { -WARN ("port %u no extended statistics available" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u no extended statistics available" , + dev->data->port_id);return ; } dev_stats_n = ret;
@@ -235,7 +236,7 @@ mlx5_xstats_init(struct rte_eth_dev *dev)rte_malloc ("xstats_strings" , str_sz +sizeof (struct ethtool_gstrings ),0 );if (!strings) { -WARN ("port %u unable to allocate memory for xstats" , +DRV_LOG (WARNING ,"port %u unable to allocate memory for xstats" , dev->data->port_id);return ; }
@@ -245,8 +246,8 @@ mlx5_xstats_init(struct rte_eth_dev *dev) ifr.ifr_data = (caddr_t )strings; ret =mlx5_ifreq (dev,SIOCETHTOOL , &ifr);if (ret) { -WARN ("port %u unable to get statistic names" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u unable to get statistic names" , + dev->data->port_id); goto free; }for (j =0 ; j != xstats_n; ++j)
@@ -267,9 +268,10 @@ mlx5_xstats_init(struct rte_eth_dev *dev)if (mlx5_counters_init[j].ib)continue ;if (xstats_ctrl->dev_table_idx[j] >= dev_stats_n) { -WARN ("port %u counter \"%s\" is not recognized" , - dev->data->port_id, - mlx5_counters_init[j].dpdk_name); +DRV_LOG (WARNING , +"port %u counter \"%s\" is not recognized" , + dev->data->port_id, + mlx5_counters_init[j].dpdk_name); goto free; } }
@@ -277,8 +279,8 @@ mlx5_xstats_init(struct rte_eth_dev *dev)assert (xstats_n <=MLX5_MAX_XSTATS ); ret =mlx5_read_dev_counters (dev, xstats_ctrl->base);if (ret) -ERROR ("port %u cannot read device counters: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u cannot read device counters: %s" , + dev->data->port_id,strerror (rte_errno)); free:rte_free (strings); }
@@ -445,16 +447,16 @@ mlx5_xstats_reset(struct rte_eth_dev *dev) stats_n =mlx5_ethtool_get_stats_n (dev);if (stats_n <0 ) { -ERROR ("port %u cannot get stats: %s" , dev->data->port_id, -strerror (-stats_n)); +DRV_LOG (ERR ,"port %u cannot get stats: %s" , dev->data->port_id, +strerror (-stats_n));return ; }if (xstats_ctrl->stats_n != stats_n)mlx5_xstats_init (dev); ret =mlx5_read_dev_counters (dev, counters);if (ret) { -ERROR ("port %u cannot read device counters: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u cannot read device counters: %s" , + dev->data->port_id,strerror (rte_errno));return ; }for (i =0 ; i != n; ++i)
drivers/net/mlx5/mlx5_trigger.c +15 -15
@@ -150,39 +150,39 @@ mlx5_dev_start(struct rte_eth_dev *dev) dev->data->dev_started =1 ; ret =mlx5_flow_create_drop_queue (dev);if (ret) { -ERROR ("port %u drop queue allocation failed: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u drop queue allocation failed: %s" , + dev->data->port_id,strerror (rte_errno)); goto error; } -DEBUG ("port %u allocating and configuring hash Rx queues" , - dev->data->port_id); +DRV_LOG (DEBUG ,"port %u allocating and configuring hash Rx queues" , + dev->data->port_id);rte_mempool_walk (mlx5_mp2mr_iter, priv); ret =mlx5_txq_start (dev);if (ret) { -ERROR ("port %u Tx queue allocation failed: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u Tx queue allocation failed: %s" , + dev->data->port_id,strerror (rte_errno)); goto error; } ret =mlx5_rxq_start (dev);if (ret) { -ERROR ("port %u Rx queue allocation failed: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u Rx queue allocation failed: %s" , + dev->data->port_id,strerror (rte_errno)); goto error; } ret =mlx5_rx_intr_vec_enable (dev);if (ret) { -ERROR ("port %u Rx interrupt vector creation failed" , - dev->data->port_id); +DRV_LOG (ERR ,"port %u Rx interrupt vector creation failed" , + dev->data->port_id); goto error; }mlx5_xstats_init (dev);/* Update link status and Tx/Rx callbacks for the first time. */ memset (&dev->data->dev_link,0 ,sizeof (struct rte_eth_link )); -INFO ("port %u forcing link to be up" , dev->data->port_id); +DRV_LOG (INFO ,"forcing port %u link to be up" , dev->data->port_id); ret =mlx5_force_link_status_change (dev,ETH_LINK_UP );if (ret) { -DEBUG ("failed to set port %u link to be up" , - dev->data->port_id); +DRV_LOG (DEBUG ,"failed to set port %u link to be up" , + dev->data->port_id); goto error; }mlx5_dev_interrupt_handler_install (dev);
@@ -222,8 +222,8 @@ mlx5_dev_stop(struct rte_eth_dev *dev) dev->tx_pkt_burst = removed_tx_burst;rte_wmb ();usleep (1000 * priv->rxqs_n); -DEBUG ("port %u cleaning up and destroying hash Rx queues" , - dev->data->port_id); +DRV_LOG (DEBUG ,"port %u cleaning up and destroying hash Rx queues" , + dev->data->port_id);mlx5_flow_stop (dev, &priv->flows);mlx5_traffic_disable (dev);mlx5_rx_intr_vec_disable (dev);
drivers/net/mlx5/mlx5_txq.c +89 -75
324 lines not on this page · raw message
drivers/net/mlx5/mlx5_utils.h +11 -16
@@ -61,14 +61,21 @@ pmd_drv_log_basename(const char *s)return s; } +extern int mlx5_logtype; + +#define PMD_DRV_LOG___ (level, ...) \ + rte_log(RTE_LOG_ ## level, \ + mlx5_logtype, \ + RTE_FMT(MLX5_DRIVER_NAME ": " \ + RTE_FMT_HEAD(__VA_ARGS__,), \ + RTE_FMT_TAIL(__VA_ARGS__,))) +/* * When debugging is enabled (NDEBUG not defined), file, line and function * information replace the driver name (MLX5_DRIVER_NAME) in log messages. */ #ifndef NDEBUG -#define PMD_DRV_LOG___ (level, ...) \ - ERRNO_SAFE(RTE_LOG(level, PMD, __VA_ARGS__))#define PMD_DRV_LOG__ (level, ...) \ PMD_DRV_LOG___(level, "%s:%u: %s(): " __VA_ARGS__)#define PMD_DRV_LOG_ (level, s, ...) \
@@ -80,9 +87,6 @@ pmd_drv_log_basename(const char *s) __VA_ARGS__)#else /* NDEBUG */ - -#define PMD_DRV_LOG___ (level, ...) \ - ERRNO_SAFE(RTE_LOG(level, PMD, MLX5_DRIVER_NAME ": " __VA_ARGS__))#define PMD_DRV_LOG__ (level, ...) \ PMD_DRV_LOG___(level, __VA_ARGS__)#define PMD_DRV_LOG_ (level, s, ...) \
@@ -91,33 +95,24 @@ pmd_drv_log_basename(const char *s)#endif /* NDEBUG */ /* Generic printf()-like logging macro with automatic line feed. */ -#define PMD_DRV_LOG (level, ...) \ +#define DRV_LOG (level, ...) \ PMD_DRV_LOG_(level, \ __VA_ARGS__ PMD_DRV_LOG_STRIP PMD_DRV_LOG_OPAREN, \ PMD_DRV_LOG_CPAREN) -/* -* Like assert(), DEBUG() becomes a no-op and claim_zero() does not perform -* any check when debugging is disabled. -*/ +/* claim_zero() does not perform any check when debugging is disabled. */ #ifndef NDEBUG -#define DEBUG (...) PMD_DRV_LOG(DEBUG, __VA_ARGS__)#define claim_zero (...) assert((__VA_ARGS__) == 0)#define claim_nonzero (...) assert((__VA_ARGS__) != 0)#else /* NDEBUG */ -#define DEBUG (...) (void)0#define claim_zero (...) (__VA_ARGS__)#define claim_nonzero (...) (__VA_ARGS__)#endif /* NDEBUG */ -#define INFO (...) PMD_DRV_LOG(INFO, __VA_ARGS__) -#define WARN (...) PMD_DRV_LOG(WARNING, __VA_ARGS__) -#define ERROR (...) PMD_DRV_LOG(ERR, __VA_ARGS__) -/* Convenience macros for accessing mbuf fields. */ #define NEXT (m) ((m)->next)#define DATA_LEN (m) ((m)->data_len)
drivers/net/mlx5/mlx5_vlan.c +12 -12
@@ -45,8 +45,8 @@ mlx5_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)struct priv *priv = dev->data->dev_private;unsigned int i; -DEBUG ("port %u %s VLAN filter ID %" PRIu16, - dev->data->port_id, (on ?"enable" :"disable" ), vlan_id); +DRV_LOG (DEBUG ,"port %u %s VLAN filter ID %" PRIu16, + dev->data->port_id, (on ?"enable" :"disable" ), vlan_id);assert (priv->vlan_filter_n <=RTE_DIM (priv->vlan_filter));for (i =0 ; (i != priv->vlan_filter_n); ++i)if (priv->vlan_filter[i] == vlan_id)
@@ -108,18 +108,18 @@ mlx5_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on)/* Validate hw support */ if (!priv->config.hw_vlan_strip) { -ERROR ("port %u VLAN stripping is not supported" , - dev->data->port_id); +DRV_LOG (ERR ,"port %u VLAN stripping is not supported" , + dev->data->port_id);return ; }/* Validate queue number */ if (queue >= priv->rxqs_n) { -ERROR ("port %u VLAN stripping, invalid queue number %d" , - dev->data->port_id, queue); +DRV_LOG (ERR ,"port %u VLAN stripping, invalid queue number %d" , + dev->data->port_id, queue);return ; } -DEBUG ("port %u set VLAN offloads 0x%x for port %uqueue %d" , - dev->data->port_id, vlan_offloads, rxq->port_id, queue); +DRV_LOG (DEBUG ,"port %u set VLAN offloads 0x%x for port %uqueue %d" , + dev->data->port_id, vlan_offloads, rxq->port_id, queue);if (!rxq_ctrl->ibv) {/* Update related bits in RX queue. */ rxq->vlan_strip = !!on;
@@ -132,8 +132,8 @@ mlx5_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on) }; ret = mlx5_glue->modify_wq (rxq_ctrl->ibv->wq, &mod);if (ret) { -ERROR ("port %u failed to modified stripping mode: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u failed to modified stripping mode: %s" , + dev->data->port_id,strerror (rte_errno));return ; }/* Update related bits in RX queue. */
@@ -162,8 +162,8 @@ mlx5_vlan_offload_set(struct rte_eth_dev *dev, int mask) DEV_RX_OFFLOAD_VLAN_STRIP);if (!priv->config.hw_vlan_strip) { -ERROR ("port %u VLAN stripping is not supported" , - dev->data->port_id); +DRV_LOG (ERR ,"port %u VLAN stripping is not supported" , + dev->data->port_id);return 0 ; }/* Run on every RX queue and set/reset VLAN stripping. */
Signature · 1 line
2.11.0
v2 cover net/mlx5: convert to dynamic logs
In reply to Nelio LaranjeiroThis series applies on top of [1]
[1] https://dpdk.org/dev/patchwork/patch/35650/
Changes in v2:
- modified the ERROR new print added in
commit b0203fdb37ef ("net/mlx: fix rdma-core glue path with EAL plugins")
Nelio Laranjeiro (2):
net/mlx5: use port id in PMD log
net/mlx5: use dynamic logging
drivers/net/mlx5/mlx5.c | 234 +++++++++++++++++++-------------- drivers/net/mlx5/mlx5_ethdev.c | 112 ++++++++++------ drivers/net/mlx5/mlx5_flow.c | 97 +++++++++----- drivers/net/mlx5/mlx5_mac.c | 11 +- drivers/net/mlx5/mlx5_mr.c | 77 ++++++----- drivers/net/mlx5/mlx5_rxmode.c | 16 +-- drivers/net/mlx5/mlx5_rxq.c | 285 +++++++++++++++++++++++----------------- drivers/net/mlx5/mlx5_rxtx.h | 20 +-- drivers/net/mlx5/mlx5_socket.c | 58 +++++--- drivers/net/mlx5/mlx5_stats.c | 35 +++-- drivers/net/mlx5/mlx5_trigger.c | 28 ++-- drivers/net/mlx5/mlx5_txq.c | 153 ++++++++++++--------- drivers/net/mlx5/mlx5_utils.h | 27 ++-- drivers/net/mlx5/mlx5_vlan.c | 21 +-- 14 files changed, 701 insertions(+), 473 deletions(-)
Signature · 1 line
2.11.0
PATCH v2 1/2 net/mlx5: use port id in PMD log
--- drivers/net/mlx5/mlx5.c | 79 +++++++++------- drivers/net/mlx5/mlx5_ethdev.c | 86 +++++++++-------- drivers/net/mlx5/mlx5_flow.c | 82 +++++++++------- drivers/net/mlx5/mlx5_mac.c | 9 +- drivers/net/mlx5/mlx5_mr.c | 58 +++++++----- drivers/net/mlx5/mlx5_rxmode.c | 16 ++-- drivers/net/mlx5/mlx5_rxq.c | 201 ++++++++++++++++++++++------------------ drivers/net/mlx5/mlx5_rxtx.h | 7 +- drivers/net/mlx5/mlx5_socket.c | 47 ++++++---- drivers/net/mlx5/mlx5_stats.c | 29 +++--- drivers/net/mlx5/mlx5_trigger.c | 26 +++--- drivers/net/mlx5/mlx5_txq.c | 125 ++++++++++++++----------- drivers/net/mlx5/mlx5_vlan.c | 21 +++-- 13 files changed, 446 insertions(+), 340 deletions(-)
drivers/net/mlx5/mlx5.c +45 -34
@@ -132,7 +132,6 @@ mlx5_alloc_verbs_buf(size_t size, void *data) ret =rte_malloc_socket (__func__, size, alignment, socket);if (!ret && size) rte_errno =ENOMEM ; -DEBUG ("Extern alloc size: %lu, align: %lu: %p" , size, alignment, ret);return ret; }
@@ -148,7 +147,6 @@ static void mlx5_free_verbs_buf(void *ptr, void *data __rte_unused) {assert (data !=NULL ); -DEBUG ("Extern free request: %p" , ptr);rte_free (ptr); }
@@ -167,8 +165,8 @@ mlx5_dev_close(struct rte_eth_dev *dev)unsigned int i;int ret; -DEBUG ("%p: closing device \"%s\"" , - (void *)dev, +DEBUG ("port %u closing device \"%s\"" , + dev->data->port_id, ((priv->ctx !=NULL ) ? priv->ctx->device->name :"" ));/* In case mlx5_dev_stop() has not been called. */ mlx5_dev_interrupt_handler_uninstall (dev);
@@ -206,28 +204,35 @@ mlx5_dev_close(struct rte_eth_dev *dev)mlx5_socket_uninit (dev); ret =mlx5_hrxq_ibv_verify (dev);if (ret) -WARN ("%p: some Hash Rx queue still remain" , (void *)dev); +WARN ("port %u some hash Rx queue still remain" , + dev->data->port_id); ret =mlx5_ind_table_ibv_verify (dev);if (ret) -WARN ("%p: some Indirection table still remain" , (void *)dev); +WARN ("port %u some indirection table still remain" , + dev->data->port_id); ret =mlx5_rxq_ibv_verify (dev);if (ret) -WARN ("%p: some Verbs Rx queue still remain" , (void *)dev); +WARN ("port %u some Verbs Rx queue still remain" , + dev->data->port_id); ret =mlx5_rxq_verify (dev);if (ret) -WARN ("%p: some Rx Queues still remain" , (void *)dev); +WARN ("port %u some Rx queues still remain" , + dev->data->port_id); ret =mlx5_txq_ibv_verify (dev);if (ret) -WARN ("%p: some Verbs Tx queue still remain" , (void *)dev); +WARN ("port %u some Verbs Tx queue still remain" , + dev->data->port_id); ret =mlx5_txq_verify (dev);if (ret) -WARN ("%p: some Tx Queues still remain" , (void *)dev); +WARN ("port %u some Tx queues still remain" , + dev->data->port_id); ret =mlx5_flow_verify (dev);if (ret) -WARN ("%p: some flows still remain" , (void *)dev); +WARN ("port %u some flows still remain" , dev->data->port_id); ret =mlx5_mr_verify (dev);if (ret) -WARN ("%p: some Memory Region still remain" , (void *)dev); +WARN ("port %u some memory region still remain" , + dev->data->port_id);memset (priv,0 ,sizeof (*priv)); }
@@ -503,15 +508,17 @@ mlx5_uar_init_primary(struct rte_eth_dev *dev) addr =mmap (addr,MLX5_UAR_SIZE ,PROT_NONE ,MAP_PRIVATE |MAP_ANONYMOUS ,-1 ,0 );if (addr ==MAP_FAILED ) { -ERROR ("Failed to reserve UAR address space, please adjust " -"MLX5_UAR_SIZE or try --base-virtaddr" ); +ERROR ("port %u failed to reserve UAR address space, please" +" adjust MLX5_UAR_SIZE or try --base-virtaddr" , + dev->data->port_id); rte_errno =ENOMEM ;return -rte_errno; }/* Accept either same addr or a new addr returned from mmap if target * range occupied. */ -INFO ("Reserved UAR address space: %p" , addr); +INFO ("port %u reserved UAR address space: %p" , dev->data->port_id, + addr); priv->uar_base = addr;/* for primary and secondary UAR re-mmap. */ uar_base = addr;/* process local, don't reserve again. */ return 0 ;
@@ -542,20 +549,21 @@ mlx5_uar_init_secondary(struct rte_eth_dev *dev) addr =mmap (priv->uar_base,MLX5_UAR_SIZE ,PROT_NONE ,MAP_PRIVATE |MAP_ANONYMOUS ,-1 ,0 );if (addr ==MAP_FAILED ) { -ERROR ("UAR mmap failed: %p size: %llu" , - priv->uar_base,MLX5_UAR_SIZE ); +ERROR ("port %u UAR mmap failed: %p size: %llu" , + dev->data->port_id, priv->uar_base,MLX5_UAR_SIZE ); rte_errno =ENXIO ;return -rte_errno; }if (priv->uar_base != addr) { -ERROR ("UAR address %p size %llu occupied, please adjust " +ERROR ("port %u UAR address %p size %llu occupied, please adjust " "MLX5_UAR_OFFSET or try EAL parameter --base-virtaddr" , - priv->uar_base,MLX5_UAR_SIZE ); + dev->data->port_id, priv->uar_base,MLX5_UAR_SIZE ); rte_errno =ENXIO ;return -rte_errno; } uar_base = addr;/* process local, don't reserve again */ -INFO ("Reserved UAR address space: %p" , addr); +INFO ("port %u reserved UAR address space: %p" , dev->data->port_id, + addr);return 0 ; }
@@ -659,7 +667,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, mlx5_glue->dv_query_device (attr_ctx, &attrs_out);if (attrs_out.flags &MLX5DV_CONTEXT_FLAGS_MPW_ALLOWED ) {if (attrs_out.flags &MLX5DV_CONTEXT_FLAGS_ENHANCED_MPW ) { -DEBUG ("Enhanced MPW is supported" ); +DEBUG ("enhanced MPW is supported" ); mps =MLX5_MPW_ENHANCED ; }else {DEBUG ("MPW is supported" );
@@ -681,9 +689,9 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, (attrs_out.tunnel_offloads_caps & MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_GRE)); } -DEBUG ("Tunnel offloading is %ssupported" , tunnel_en ?"" :"not " ); +DEBUG ("tunnel offloading is %ssupported" , tunnel_en ?"" :"not " );#else -WARN ("Tunnel offloading disabled due to old OFED/rdma-core version" ); +WARN ("tunnel offloading disabled due to old OFED/rdma-core version" );#endif if (mlx5_glue->query_device_ex (attr_ctx,NULL , &device_attr)) { err = errno;
@@ -829,7 +837,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,if (config.ind_table_max_size > (unsigned int )ETH_RSS_RETA_SIZE_512 ) config.ind_table_max_size =ETH_RSS_RETA_SIZE_512 ; -DEBUG ("maximum RX indirection table size is %u" , +DEBUG ("maximum Rx indirection table size is %u" , config.ind_table_max_size); config.hw_vlan_strip = !!(device_attr_ex.raw_packet_caps &IBV_RAW_PACKET_CAP_CVLAN_STRIPPING );
@@ -844,7 +852,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,#ifdef HAVE_IBV_WQ_FLAG_RX_END_PADDING config.hw_padding = !!device_attr_ex.rx_pad_end_addr_align;#endif -DEBUG ("hardware RX end alignment padding is %ssupported" , +DEBUG ("hardware Rx end alignment padding is %ssupported" , (config.hw_padding ?"" :"not " )); config.tso = ((device_attr_ex.tso_caps.max_tso > 0) && (device_attr_ex.tso_caps.supported_qpts &
@@ -858,8 +866,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, err =ENOTSUP ; goto port_error; } -INFO ("%sMPS is %s" , - config.mps ==MLX5_MPW_ENHANCED ?"Enhanced " :"" , +INFO ("%s MPS is %s" , + config.mps ==MLX5_MPW_ENHANCED ?"enhanced " :"" , config.mps !=MLX5_MPW_DISABLED ?"enabled" :"disabled" );if (config.cqe_comp && !cqe_comp) {WARN ("Rx CQE compression isn't supported" );
@@ -882,13 +890,14 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, goto port_error;/* Configure the first MAC address by default. */ if (mlx5_get_mac (eth_dev, &mac.addr_bytes)) { -ERROR ("cannot get MAC address, is mlx5_en loaded?" -" (errno: %s)" ,strerror (errno)); +ERROR ("port %u cannot get MAC address, is mlx5_en" +" loaded? (errno: %s)" , eth_dev->data->port_id, +strerror (errno)); err =ENODEV ; goto port_error; }INFO ("port %u MAC address is %02x:%02x:%02x:%02x:%02x:%02x" , - priv->port, + eth_dev->data->port_id, mac.addr_bytes[0 ], mac.addr_bytes[1 ], mac.addr_bytes[2 ], mac.addr_bytes[3 ], mac.addr_bytes[4 ], mac.addr_bytes[5 ]);
@@ -898,16 +907,17 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,if (mlx5_get_ifname (eth_dev, &ifname) ==0 )DEBUG ("port %u ifname is \"%s\"" , - priv->port, ifname); + eth_dev->data->port_id, ifname);else - DEBUG("port %u ifname is unknown", priv->port); +DEBUG ("port %u ifname is unknown" , + eth_dev->data->port_id); }#endif /* Get actual MTU if possible. */ err =mlx5_get_mtu (eth_dev, &priv->mtu);if (err) goto port_error; -DEBUG ("port %u MTU is %u" , priv->port, priv->mtu); +DEBUG ("port %u MTU is %u" , eth_dev->data->port_id, priv->mtu);/* * Initialize burst functions to prevent crashes before link-up. */
@@ -928,7 +938,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,MLX5DV_CTX_ATTR_BUF_ALLOCATORS , (void *)((uintptr_t)&alctr));/* Bring Ethernet device up. */ -DEBUG ("forcing Ethernet interface up" ); +DEBUG ("port %u forcing Ethernet interface up" , + eth_dev->data->port_id);mlx5_set_flags (eth_dev, ~IFF_UP ,IFF_UP );/* Store device configuration on private structure. */ priv->config = config;
drivers/net/mlx5/mlx5_ethdev.c +47 -39
212 lines not on this page · raw message
drivers/net/mlx5/mlx5_flow.c +50 -32
231 lines not on this page · raw message
drivers/net/mlx5/mlx5_mac.c +5 -4
@@ -73,8 +73,8 @@ mlx5_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index)int ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("%p cannot remove mac address: %s" , (void *)dev, -strerror (rte_errno)); +ERROR ("port %u cannot remove mac address: %s" , + dev->data->port_id,strerror (rte_errno)); } }
@@ -130,8 +130,9 @@ mlx5_mac_addr_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr) {int ret; -DEBUG ("%p: setting primary MAC address" , (void *)dev); +DEBUG ("port %u setting primary MAC address" , dev->data->port_id); ret =mlx5_mac_addr_add (dev, mac_addr,0 ,0 );if (ret) -ERROR ("cannot set mac address: %s" ,strerror (rte_errno)); +ERROR ("port %u cannot set mac address: %s" , + dev->data->port_id,strerror (rte_errno)); }
drivers/net/mlx5/mlx5_mr.c +33 -25
136 lines not on this page · raw message
drivers/net/mlx5/mlx5_rxmode.c +8 -8
@@ -37,8 +37,8 @@ mlx5_promiscuous_enable(struct rte_eth_dev *dev) dev->data->promiscuous =1 ; ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("%p cannot enable promiscuous mode: %s" , (void *)dev, -strerror (rte_errno)); +ERROR ("port %u cannot enable promiscuous mode: %s" , + dev->data->port_id,strerror (rte_errno)); }/**
@@ -55,8 +55,8 @@ mlx5_promiscuous_disable(struct rte_eth_dev *dev) dev->data->promiscuous =0 ; ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("%p cannot disable promiscuous mode: %s" , (void *)dev, -strerror (rte_errno)); +ERROR ("port %u cannot disable promiscuous mode: %s" , + dev->data->port_id,strerror (rte_errno)); }/**
@@ -73,8 +73,8 @@ mlx5_allmulticast_enable(struct rte_eth_dev *dev) dev->data->all_multicast =1 ; ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("%p cannot enable allmulicast mode: %s" , (void *)dev, -strerror (rte_errno)); +ERROR ("port %u cannot enable allmulicast mode: %s" , + dev->data->port_id,strerror (rte_errno)); }/**
@@ -91,6 +91,6 @@ mlx5_allmulticast_disable(struct rte_eth_dev *dev) dev->data->all_multicast =0 ; ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("%p cannot disable allmulicast mode: %s" , (void *)dev, -strerror (rte_errno)); +ERROR ("port %u cannot disable allmulicast mode: %s" , + dev->data->port_id,strerror (rte_errno)); }
drivers/net/mlx5/mlx5_rxq.c +111 -90
478 lines not on this page · raw message
drivers/net/mlx5/mlx5_rxtx.h +5 -2
@@ -126,6 +126,7 @@ struct mlx5_rxq_ctrl {struct mlx5_rxq_data rxq;/* Data path structure. */ unsigned int socket;/* CPU socket ID for allocations. */ unsigned int irq:1; /* Whether IRQ is enabled. */ +uint16_t idx;/* Queue index. */ };/* Indirection table. */
@@ -187,6 +188,7 @@ struct mlx5_txq_data {struct mlx5_txq_ibv {LIST_ENTRY (mlx5_txq_ibv) next;/* Pointer to the next element. */ rte_atomic32_t refcnt;/* Reference counter. */ +struct mlx5_txq_ctrl *txq_ctrl;/* Pointer to the control queue. */ struct ibv_cq *cq;/* Completion Queue. */ struct ibv_qp *qp;/* Queue Pair. */ };
@@ -203,6 +205,7 @@ struct mlx5_txq_ctrl {struct mlx5_txq_data txq;/* Data path structure. */ off_t uar_mmap_offset;/* UAR mmap offset for non-primary process. */ volatile void *bf_reg_orig;/* Blueflame register from verbs. */ +uint16_t idx;/* Queue index. */ };/* mlx5_rxq.c */
@@ -446,7 +449,7 @@ mlx5_tx_complete(struct mlx5_txq_data *txq)if ((MLX5_CQE_OPCODE (cqe->op_own) ==MLX5_CQE_RESP_ERR ) || (MLX5_CQE_OPCODE (cqe->op_own) ==MLX5_CQE_REQ_ERR )) {if (!check_cqe_seen (cqe)) { -ERROR ("unexpected error CQE, TX stopped" ); +ERROR ("unexpected error CQE, Tx stopped" ); rte_hexdump(stderr, "MLX5 TXQ:", (const void *)((uintptr_t)txq->wqes), ((1 << txq->wqe_n) *
@@ -563,7 +566,7 @@ mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct rte_mbuf *mb) }else {struct rte_mempool *mp =mlx5_tx_mb2mp (mb); -WARN ("Failed to register mempool 0x%p(%s)" , +WARN ("failed to register mempool 0x%p(%s)" , (void *)mp, mp->name); }return (uint32_t )-1 ;
drivers/net/mlx5/mlx5_socket.c +27 -20
146 lines not on this page · raw message
drivers/net/mlx5/mlx5_stats.c +18 -11
@@ -148,7 +148,8 @@ mlx5_read_dev_counters(struct rte_eth_dev *dev, uint64_t *stats) ifr.ifr_data = (caddr_t )et_stats; ret =mlx5_ifreq (dev,SIOCETHTOOL , &ifr);if (ret) { -WARN ("unable to read statistic values from device" ); +WARN ("port %u unable to read statistic values from device" , + dev->data->port_id);return ret; }for (i =0 ; i != xstats_n; ++i) {
@@ -194,7 +195,8 @@ mlx5_ethtool_get_stats_n(struct rte_eth_dev *dev) { ifr.ifr_data = (caddr_t)&drvinfo; ret =mlx5_ifreq (dev,SIOCETHTOOL , &ifr);if (ret) { -WARN ("unable to query number of statistics" ); +WARN ("port %u unable to query number of statistics" , + dev->data->port_id);return ret; }return drvinfo.n_stats;
@@ -221,7 +223,8 @@ mlx5_xstats_init(struct rte_eth_dev *dev) ret =mlx5_ethtool_get_stats_n (dev);if (ret <0 ) { -WARN ("no extended statistics available" ); +WARN ("port %u no extended statistics available" , + dev->data->port_id);return ; } dev_stats_n = ret;
@@ -232,7 +235,8 @@ mlx5_xstats_init(struct rte_eth_dev *dev)rte_malloc ("xstats_strings" , str_sz +sizeof (struct ethtool_gstrings ),0 );if (!strings) { -WARN ("unable to allocate memory for xstats" ); +WARN ("port %u unable to allocate memory for xstats" , + dev->data->port_id);return ; } strings->cmd =ETHTOOL_GSTRINGS ;
@@ -241,7 +245,8 @@ mlx5_xstats_init(struct rte_eth_dev *dev) ifr.ifr_data = (caddr_t )strings; ret =mlx5_ifreq (dev,SIOCETHTOOL , &ifr);if (ret) { -WARN ("unable to get statistic names" ); +WARN ("port %u unable to get statistic names" , + dev->data->port_id); goto free; }for (j =0 ; j != xstats_n; ++j)
@@ -262,7 +267,8 @@ mlx5_xstats_init(struct rte_eth_dev *dev)if (mlx5_counters_init[j].ib)continue ;if (xstats_ctrl->dev_table_idx[j] >= dev_stats_n) { -WARN ("counter \"%s\" is not recognized" , +WARN ("port %u counter \"%s\" is not recognized" , + dev->data->port_id, mlx5_counters_init[j].dpdk_name); goto free; }
@@ -271,7 +277,8 @@ mlx5_xstats_init(struct rte_eth_dev *dev)assert (xstats_n <=MLX5_MAX_XSTATS ); ret =mlx5_read_dev_counters (dev, xstats_ctrl->base);if (ret) -ERROR ("cannot read device counters: %s" ,strerror (rte_errno)); +ERROR ("port %u cannot read device counters: %s" , + dev->data->port_id,strerror (rte_errno)); free:rte_free (strings); }
@@ -438,7 +445,7 @@ mlx5_xstats_reset(struct rte_eth_dev *dev) stats_n =mlx5_ethtool_get_stats_n (dev);if (stats_n <0 ) { -ERROR ("%p cannot get stats: %s" , (void *)dev, +ERROR ("port %u cannot get stats: %s" , dev->data->port_id,strerror (-stats_n));return ; }
@@ -446,8 +453,8 @@ mlx5_xstats_reset(struct rte_eth_dev *dev)mlx5_xstats_init (dev); ret =mlx5_read_dev_counters (dev, counters);if (ret) { -ERROR ("%p cannot read device counters: %s" , (void *)dev, -strerror (rte_errno)); +ERROR ("port %u cannot read device counters: %s" , + dev->data->port_id,strerror (rte_errno));return ; }for (i =0 ; i != n; ++i)
@@ -469,7 +476,7 @@ mlx5_xstats_reset(struct rte_eth_dev *dev)*/ int mlx5_xstats_get_names(struct rte_eth_dev *dev __rte_unused, -struct rte_eth_xstat_name *xstats_names,unsigned int n) +struct rte_eth_xstat_name *xstats_names,unsigned int n) {unsigned int i;
drivers/net/mlx5/mlx5_trigger.c +14 -12
@@ -150,37 +150,38 @@ mlx5_dev_start(struct rte_eth_dev *dev) dev->data->dev_started =1 ; ret =mlx5_flow_create_drop_queue (dev);if (ret) { -ERROR ("%p: Drop queue allocation failed: %s" , - (void *)dev,strerror (rte_errno)); +ERROR ("port %u drop queue allocation failed: %s" , + dev->data->port_id,strerror (rte_errno)); goto error; } -DEBUG ("%p: allocating and configuring hash RX queues" , (void *)dev); +DEBUG ("port %u allocating and configuring hash Rx queues" , + dev->data->port_id);rte_mempool_walk (mlx5_mp2mr_iter, priv); ret =mlx5_txq_start (dev);if (ret) { -ERROR ("%p: Tx Queue allocation failed: %s" , - (void *)dev,strerror (rte_errno)); +ERROR ("port %u Tx queue allocation failed: %s" , + dev->data->port_id,strerror (rte_errno)); goto error; } ret =mlx5_rxq_start (dev);if (ret) { -ERROR ("%p: Rx Queue allocation failed: %s" , - (void *)dev,strerror (rte_errno)); +ERROR ("port %u Rx queue allocation failed: %s" , + dev->data->port_id,strerror (rte_errno)); goto error; } ret =mlx5_rx_intr_vec_enable (dev);if (ret) { -ERROR ("%p: Rx interrupt vector creation failed" , - (void *)dev); +ERROR ("port %u Rx interrupt vector creation failed" , + dev->data->port_id); goto error; }mlx5_xstats_init (dev);/* Update link status and Tx/Rx callbacks for the first time. */ memset (&dev->data->dev_link,0 ,sizeof (struct rte_eth_link )); -INFO ("Forcing port %u link to be up" , dev->data->port_id); +INFO ("port %u forcing link to be up" , dev->data->port_id); ret =mlx5_force_link_status_change (dev,ETH_LINK_UP );if (ret) { -DEBUG ("Failed to set port %u link to be up" , +DEBUG ("failed to set port %u link to be up" , dev->data->port_id); goto error; }
@@ -221,7 +222,8 @@ mlx5_dev_stop(struct rte_eth_dev *dev) dev->tx_pkt_burst = removed_tx_burst;rte_wmb ();usleep (1000 * priv->rxqs_n); -DEBUG ("%p: cleaning up and destroying hash RX queues" , (void *)dev); +DEBUG ("port %u cleaning up and destroying hash Rx queues" , + dev->data->port_id);mlx5_flow_stop (dev, &priv->flows);mlx5_traffic_disable (dev);mlx5_rx_intr_vec_disable (dev);
drivers/net/mlx5/mlx5_txq.c +71 -54
301 lines not on this page · raw message
drivers/net/mlx5/mlx5_vlan.c +12 -9
@@ -45,8 +45,8 @@ mlx5_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)struct priv *priv = dev->data->dev_private;unsigned int i; -DEBUG ("%p: %s VLAN filter ID %" PRIu16, - (void *)dev, (on ?"enable" :"disable" ), vlan_id); +DEBUG ("port %u %s VLAN filter ID %" PRIu16, + dev->data->port_id, (on ?"enable" :"disable" ), vlan_id);assert (priv->vlan_filter_n <=RTE_DIM (priv->vlan_filter));for (i =0 ; (i != priv->vlan_filter_n); ++i)if (priv->vlan_filter[i] == vlan_id)
@@ -108,16 +108,18 @@ mlx5_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on)/* Validate hw support */ if (!priv->config.hw_vlan_strip) { -ERROR ("VLAN stripping is not supported" ); +ERROR ("port %u VLAN stripping is not supported" , + dev->data->port_id);return ; }/* Validate queue number */ if (queue >= priv->rxqs_n) { -ERROR ("VLAN stripping, invalid queue number %d" , queue); +ERROR ("port %u VLAN stripping, invalid queue number %d" , + dev->data->port_id, queue);return ; } -DEBUG ("set VLAN offloads 0x%x for port %d queue %d" , - vlan_offloads, rxq->port_id, queue); +DEBUG ("port %u set VLAN offloads 0x%x for port %uqueue %d" , + dev->data->port_id, vlan_offloads, rxq->port_id, queue);if (!rxq_ctrl->ibv) {/* Update related bits in RX queue. */ rxq->vlan_strip = !!on;
@@ -130,8 +132,8 @@ mlx5_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on) }; ret = mlx5_glue->modify_wq (rxq_ctrl->ibv->wq, &mod);if (ret) { -ERROR ("%p: failed to modified stripping mode: %s" , - (void *)dev,strerror (rte_errno)); +ERROR ("port %u failed to modified stripping mode: %s" , + dev->data->port_id,strerror (rte_errno));return ; }/* Update related bits in RX queue. */
@@ -160,7 +162,8 @@ mlx5_vlan_offload_set(struct rte_eth_dev *dev, int mask) DEV_RX_OFFLOAD_VLAN_STRIP);if (!priv->config.hw_vlan_strip) { -ERROR ("VLAN stripping is not supported" ); +ERROR ("port %u VLAN stripping is not supported" , + dev->data->port_id);return 0 ; }/* Run on every RX queue and set/reset VLAN stripping. */
Signature · 1 line
2.11.0
PATCH v2 2/2 net/mlx5: use dynamic logging
In reply to Nelio Laranjeiro--- drivers/net/mlx5/mlx5.c | 245 +++++++++++++++++++-------------- drivers/net/mlx5/mlx5_ethdev.c | 118 +++++++++------- drivers/net/mlx5/mlx5_flow.c | 109 ++++++++------- drivers/net/mlx5/mlx5_mac.c | 12 +- drivers/net/mlx5/mlx5_mr.c | 85 ++++++------ drivers/net/mlx5/mlx5_rxmode.c | 16 +-- drivers/net/mlx5/mlx5_rxq.c | 298 ++++++++++++++++++++++------------------ drivers/net/mlx5/mlx5_rxtx.h | 17 +-- drivers/net/mlx5/mlx5_socket.c | 65 +++++---- drivers/net/mlx5/mlx5_stats.c | 38 ++--- drivers/net/mlx5/mlx5_trigger.c | 30 ++-- drivers/net/mlx5/mlx5_txq.c | 164 ++++++++++++---------- drivers/net/mlx5/mlx5_utils.h | 27 ++-- drivers/net/mlx5/mlx5_vlan.c | 24 ++-- 14 files changed, 685 insertions(+), 563 deletions(-)
drivers/net/mlx5/mlx5.c +139 -106
@@ -77,6 +77,9 @@#define MLX5DV_CONTEXT_FLAGS_CQE_128B_COMP (1 << 4)#endif +/** Driver-specific log messages type. */ +int mlx5_logtype; +/** * Retrieve integer value from environment variable. *
@@ -165,9 +168,9 @@ mlx5_dev_close(struct rte_eth_dev *dev)unsigned int i;int ret; -DEBUG ("port %u closing device \"%s\"" , - dev->data->port_id, - ((priv->ctx !=NULL ) ? priv->ctx->device->name :"" )); +DRV_LOG (DEBUG ,"port %u closing device \"%s\"" , + dev->data->port_id, + ((priv->ctx !=NULL ) ? priv->ctx->device->name :"" ));/* In case mlx5_dev_stop() has not been called. */ mlx5_dev_interrupt_handler_uninstall (dev);mlx5_traffic_disable (dev);
@@ -204,35 +207,36 @@ mlx5_dev_close(struct rte_eth_dev *dev)mlx5_socket_uninit (dev); ret =mlx5_hrxq_ibv_verify (dev);if (ret) -WARN ("port %u some hash Rx queue still remain" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u some hash Rx queue still remain" , + dev->data->port_id); ret =mlx5_ind_table_ibv_verify (dev);if (ret) -WARN ("port %u some indirection table still remain" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u some indirection table still remain" , + dev->data->port_id); ret =mlx5_rxq_ibv_verify (dev);if (ret) -WARN ("port %u some Verbs Rx queue still remain" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u some Verbs Rx queue still remain" , + dev->data->port_id); ret =mlx5_rxq_verify (dev);if (ret) -WARN ("port %u some Rx queues still remain" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u some Rx queues still remain" , + dev->data->port_id); ret =mlx5_txq_ibv_verify (dev);if (ret) -WARN ("port %u some Verbs Tx queue still remain" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u some Verbs Tx queue still remain" , + dev->data->port_id); ret =mlx5_txq_verify (dev);if (ret) -WARN ("port %u some Tx queues still remain" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u some Tx queues still remain" , + dev->data->port_id); ret =mlx5_flow_verify (dev);if (ret) -WARN ("port %u some flows still remain" , dev->data->port_id); +DRV_LOG (WARNING ,"port %u some flows still remain" , + dev->data->port_id); ret =mlx5_mr_verify (dev);if (ret) -WARN ("port %u some memory region still remain" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u some memory region still remain" , + dev->data->port_id);memset (priv,0 ,sizeof (*priv)); }
@@ -384,7 +388,7 @@ mlx5_args_check(const char *key, const char *val, void *opaque) tmp =strtoul (val,NULL ,0 );if (errno) { rte_errno = errno; -WARN ("%s: \"%s\" is not a valid integer" , key, val); +DRV_LOG (WARNING ,"%s: \"%s\" is not a valid integer" , key, val);return -rte_errno; }if (strcmp (MLX5_RXQ_CQE_COMP_EN , key) ==0 ) {
@@ -404,7 +408,7 @@ mlx5_args_check(const char *key, const char *val, void *opaque) }else if (strcmp (MLX5_RX_VEC_EN , key) ==0 ) { config->rx_vec_en = !!tmp; }else { -WARN ("%s: unknown parameter" , key); +DRV_LOG (WARNING ,"%s: unknown parameter" , key); rte_errno =EINVAL ;return -rte_errno; }
@@ -508,17 +512,18 @@ mlx5_uar_init_primary(struct rte_eth_dev *dev) addr =mmap (addr,MLX5_UAR_SIZE ,PROT_NONE ,MAP_PRIVATE |MAP_ANONYMOUS ,-1 ,0 );if (addr ==MAP_FAILED ) { -ERROR ("port %u failed to reserve UAR address space, please" -" adjust MLX5_UAR_SIZE or try --base-virtaddr" , - dev->data->port_id); +DRV_LOG (ERR , +"port %u failed to reserve UAR address space, please" +" adjust MLX5_UAR_SIZE or try --base-virtaddr" , + dev->data->port_id); rte_errno =ENOMEM ;return -rte_errno; }/* Accept either same addr or a new addr returned from mmap if target * range occupied. */ -INFO ("port %u reserved UAR address space: %p" , dev->data->port_id, - addr); +DRV_LOG (INFO ,"port %u reserved UAR address space: %p" , + dev->data->port_id, addr); priv->uar_base = addr;/* for primary and secondary UAR re-mmap. */ uar_base = addr;/* process local, don't reserve again. */ return 0 ;
@@ -549,21 +554,23 @@ mlx5_uar_init_secondary(struct rte_eth_dev *dev) addr =mmap (priv->uar_base,MLX5_UAR_SIZE ,PROT_NONE ,MAP_PRIVATE |MAP_ANONYMOUS ,-1 ,0 );if (addr ==MAP_FAILED ) { -ERROR ("port %u UAR mmap failed: %p size: %llu" , - dev->data->port_id, priv->uar_base,MLX5_UAR_SIZE ); +DRV_LOG (ERR ,"port %u UAR mmap failed: %p size: %llu" , + dev->data->port_id, priv->uar_base,MLX5_UAR_SIZE ); rte_errno =ENXIO ;return -rte_errno; }if (priv->uar_base != addr) { -ERROR ("port %u UAR address %p size %llu occupied, please adjust " -"MLX5_UAR_OFFSET or try EAL parameter --base-virtaddr" , - dev->data->port_id, priv->uar_base,MLX5_UAR_SIZE ); +DRV_LOG (ERR , +"port %u UAR address %p size %llu occupied, please" +" adjust MLX5_UAR_OFFSET or try EAL parameter" +" --base-virtaddr" , + dev->data->port_id, priv->uar_base,MLX5_UAR_SIZE ); rte_errno =ENXIO ;return -rte_errno; } uar_base = addr;/* process local, don't reserve again */ -INFO ("port %u reserved UAR address space: %p" , dev->data->port_id, - addr); +DRV_LOG (INFO ,"port %u reserved UAR address space: %p" , + dev->data->port_id, addr);return 0 ; }
@@ -604,11 +611,11 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,/* Get mlx5_dev[] index. */ idx =mlx5_dev_idx (&pci_dev->addr);if (idx ==-1 ) { -ERROR ("this driver cannot support any more adapters" ); +DRV_LOG (ERR ,"this driver cannot support any more adapters" ); err =ENOMEM ; goto error; } -DEBUG ("using driver device index %d" , idx); +DRV_LOG (DEBUG ,"using driver device index %d" , idx);/* Save PCI address. */ mlx5_dev[idx].pci_addr = pci_dev->addr; list = mlx5_glue->get_device_list (&i);
@@ -616,7 +623,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,assert (errno); err = errno;if (errno ==ENOSYS ) -ERROR ("cannot list devices, is ib_uverbs loaded?" ); +DRV_LOG (ERR , +"cannot list devices, is ib_uverbs loaded?" ); goto error; }assert (i >=0 );
@@ -628,7 +636,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,struct rte_pci_addr pci_addr; --i; -DEBUG ("checking device \"%s\"" , list[i]->name); +DRV_LOG (DEBUG ,"checking device \"%s\"" , list[i]->name);if (mlx5_ibv_device_to_pci_addr (list[i], &pci_addr))continue ; if ((pci_dev->addr.domain != pci_addr.domain) ||
@@ -636,8 +644,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, (pci_dev->addr.devid != pci_addr.devid) || (pci_dev->addr.function != pci_addr.function)) continue; -INFO ("PCI information matches, using device \"%s\"" , - list[i]->name); +DRV_LOG (INFO ,"PCI information matches, using device \"%s\"" , + list[i]->name); attr_ctx = mlx5_glue->open_device (list[i]); rte_errno = errno; err = rte_errno;
@@ -647,16 +655,18 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, mlx5_glue->free_device_list (list);switch (err) {case 0 : -ERROR ("cannot access device, is mlx5_ib loaded?" ); +DRV_LOG (ERR , +"cannot access device, is mlx5_ib loaded?" ); err =ENODEV ; goto error;case EINVAL : -ERROR ("cannot use device, are drivers up to date?" ); +DRV_LOG (ERR , +"cannot use device, are drivers up to date?" ); goto error; } } ibv_dev = list[i]; -DEBUG ("device opened" ); +DRV_LOG (DEBUG ,"device opened" );/* * Multi-packet send is supported by ConnectX-4 Lx PF as well * as all ConnectX-5 devices.
@@ -667,14 +677,14 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, mlx5_glue->dv_query_device (attr_ctx, &attrs_out);if (attrs_out.flags &MLX5DV_CONTEXT_FLAGS_MPW_ALLOWED ) {if (attrs_out.flags &MLX5DV_CONTEXT_FLAGS_ENHANCED_MPW ) { -DEBUG ("enhanced MPW is supported" ); +DRV_LOG (DEBUG ,"enhanced MPW is supported" ); mps =MLX5_MPW_ENHANCED ; }else { -DEBUG ("MPW is supported" ); +DRV_LOG (DEBUG ,"MPW is supported" ); mps =MLX5_MPW ; } }else { -DEBUG ("MPW isn't supported" ); +DRV_LOG (DEBUG ,"MPW isn't supported" ); mps =MLX5_MPW_DISABLED ; } if (RTE_CACHE_LINE_SIZE == 128 &&
@@ -689,15 +699,18 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, (attrs_out.tunnel_offloads_caps & MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_GRE)); } -DEBUG ("tunnel offloading is %ssupported" , tunnel_en ?"" :"not " ); +DRV_LOG (DEBUG ,"tunnel offloading is %ssupported" , + tunnel_en ?"" :"not " );#else -WARN ("tunnel offloading disabled due to old OFED/rdma-core version" ); +DRV_LOG (WARNING , +"tunnel offloading disabled due to old OFED/rdma-core version" );#endif if (mlx5_glue->query_device_ex (attr_ctx,NULL , &device_attr)) { err = errno; goto error; } -INFO ("%u port(s) detected" , device_attr.orig_attr.phys_port_cnt); +DRV_LOG (INFO ,"%u port(s) detected" , + device_attr.orig_attr.phys_port_cnt);for (i =0 ; i < device_attr.orig_attr.phys_port_cnt; i++) {char name[RTE_ETH_NAME_MAX_LEN ];int len;
@@ -732,7 +745,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,if (rte_eal_process_type () ==RTE_PROC_SECONDARY ) { eth_dev =rte_eth_dev_attach_secondary (name);if (eth_dev ==NULL ) { -ERROR ("can not attach rte ethdev" ); +DRV_LOG (ERR ,"can not attach rte ethdev" ); rte_errno =ENOMEM ; err = rte_errno; goto error;
@@ -761,7 +774,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,mlx5_select_tx_function (eth_dev);continue ; } -DEBUG ("using port %u (%08" PRIx32")" , port, test); +DRV_LOG (DEBUG ,"using port %u (%08" PRIx32")" , port, test); ctx = mlx5_glue->open_device (ibv_dev);if (ctx ==NULL ) { err =ENODEV ;
@@ -771,23 +784,25 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,/* Check port status. */ err = mlx5_glue->query_port (ctx, port, &port_attr);if (err) { -ERROR ("port query failed: %s" ,strerror (err)); +DRV_LOG (ERR ,"port query failed: %s" ,strerror (err)); goto port_error; }if (port_attr.link_layer !=IBV_LINK_LAYER_ETHERNET ) { -ERROR ("port %d is not configured in Ethernet mode" , - port); +DRV_LOG (ERR , +"port %d is not configured in Ethernet mode" , + port); err =EINVAL ; goto port_error; }if (port_attr.state !=IBV_PORT_ACTIVE ) -DEBUG ("port %d is not active: \"%s\" (%d)" , - port, mlx5_glue->port_state_str (port_attr.state), - port_attr.state); +DRV_LOG (DEBUG ,"port %d is not active: \"%s\" (%d)" , + port, + mlx5_glue->port_state_str (port_attr.state), + port_attr.state);/* Allocate protection domain. */ pd = mlx5_glue->alloc_pd (ctx);if (pd ==NULL ) { -ERROR ("PD allocation failure" ); +DRV_LOG (ERR ,"PD allocation failure" ); err =ENOMEM ; goto port_error; }
@@ -797,7 +812,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,sizeof (*priv), RTE_CACHE_LINE_SIZE);if (priv ==NULL ) { -ERROR ("priv allocation failure" ); +DRV_LOG (ERR ,"priv allocation failure" ); err =ENOMEM ; goto port_error; }
@@ -810,25 +825,26 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, priv->mtu =ETHER_MTU ; err =mlx5_args (&config, pci_dev->device.devargs);if (err) { -ERROR ("failed to process device arguments: %s" , -strerror (err)); +DRV_LOG (ERR ,"failed to process device arguments: %s" , +strerror (err)); goto port_error; }if (mlx5_glue->query_device_ex (ctx,NULL , &device_attr_ex)) { -ERROR ("ibv_query_device_ex() failed" ); +DRV_LOG (ERR ,"ibv_query_device_ex() failed" ); err = errno; goto port_error; } config.hw_csum = !!(device_attr_ex.device_cap_flags_ex &IBV_DEVICE_RAW_IP_CSUM ); -DEBUG ("checksum offloading is %ssupported" , - (config.hw_csum ?"" :"not " )); +DRV_LOG (DEBUG ,"checksum offloading is %ssupported" , + (config.hw_csum ?"" :"not " ));#ifdef HAVE_IBV_DEVICE_COUNTERS_SET_SUPPORT config.flow_counter_en = !!(device_attr.max_counter_sets); mlx5_glue->describe_counter_set (ctx,0 , &cs_desc); -DEBUG ("counter type = %d, num of cs = %ld, attributes = %d" , - cs_desc.counter_type, cs_desc.num_of_cs, - cs_desc.attributes); +DRV_LOG (DEBUG , +"counter type = %d, num of cs = %ld, attributes = %d" , + cs_desc.counter_type, cs_desc.num_of_cs, + cs_desc.attributes);#endif config.ind_table_max_size = device_attr_ex.rss_caps.max_rwq_indirection_table_size;
@@ -837,23 +853,24 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,if (config.ind_table_max_size > (unsigned int )ETH_RSS_RETA_SIZE_512 ) config.ind_table_max_size =ETH_RSS_RETA_SIZE_512 ; -DEBUG ("maximum Rx indirection table size is %u" , - config.ind_table_max_size); +DRV_LOG (DEBUG ,"maximum Rx indirection table size is %u" , + config.ind_table_max_size); config.hw_vlan_strip = !!(device_attr_ex.raw_packet_caps &IBV_RAW_PACKET_CAP_CVLAN_STRIPPING ); -DEBUG ("VLAN stripping is %ssupported" , - (config.hw_vlan_strip ?"" :"not " )); +DRV_LOG (DEBUG ,"VLAN stripping is %ssupported" , + (config.hw_vlan_strip ?"" :"not " )); config.hw_fcs_strip = !!(device_attr_ex.raw_packet_caps &IBV_RAW_PACKET_CAP_SCATTER_FCS ); -DEBUG ("FCS stripping configuration is %ssupported" , - (config.hw_fcs_strip ?"" :"not " )); +DRV_LOG (DEBUG ,"FCS stripping configuration is %ssupported" , + (config.hw_fcs_strip ?"" :"not " ));#ifdef HAVE_IBV_WQ_FLAG_RX_END_PADDING config.hw_padding = !!device_attr_ex.rx_pad_end_addr_align;#endif -DEBUG ("hardware Rx end alignment padding is %ssupported" , - (config.hw_padding ?"" :"not " )); +DRV_LOG (DEBUG , +"hardware Rx end alignment padding is %ssupported" , + (config.hw_padding ?"" :"not " )); config.tso = ((device_attr_ex.tso_caps.max_tso >0 ) && (device_attr_ex.tso_caps.supported_qpts & (1 <<IBV_QPT_RAW_PACKET )));
@@ -861,21 +878,23 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, config.tso_max_payload_sz = device_attr_ex.tso_caps.max_tso;if (config.mps && !mps) { -ERROR ("multi-packet send not supported on this device" -" (" MLX5_TXQ_MPW_EN ")" ); +DRV_LOG (ERR , +"multi-packet send not supported on this device" +" (" MLX5_TXQ_MPW_EN ")" ); err =ENOTSUP ; goto port_error; } -INFO ("%s MPS is %s" , - config.mps ==MLX5_MPW_ENHANCED ?"enhanced " :"" , - config.mps !=MLX5_MPW_DISABLED ?"enabled" :"disabled" ); +DRV_LOG (INFO ,"%s MPS is %s" , + config.mps ==MLX5_MPW_ENHANCED ?"enhanced " :"" , + config.mps !=MLX5_MPW_DISABLED ?"enabled" : +"disabled" );if (config.cqe_comp && !cqe_comp) { -WARN ("Rx CQE compression isn't supported" ); +DRV_LOG (WARNING ,"Rx CQE compression isn't supported" ); config.cqe_comp =0 ; } eth_dev =rte_eth_dev_allocate (name);if (eth_dev ==NULL ) { -ERROR ("can not allocate rte ethdev" ); +DRV_LOG (ERR ,"can not allocate rte ethdev" ); err =ENOMEM ; goto port_error; }
@@ -890,34 +909,37 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, goto port_error;/* Configure the first MAC address by default. */ if (mlx5_get_mac (eth_dev, &mac.addr_bytes)) { -ERROR ("port %u cannot get MAC address, is mlx5_en" -" loaded? (errno: %s)" , eth_dev->data->port_id, -strerror (errno)); +DRV_LOG (ERR , +"port %u cannot get MAC address, is mlx5_en" +" loaded? (errno: %s)" , + eth_dev->data->port_id,strerror (errno)); err =ENODEV ; goto port_error; } -INFO ("port %u MAC address is %02x:%02x:%02x:%02x:%02x:%02x" , - eth_dev->data->port_id, - mac.addr_bytes[0 ], mac.addr_bytes[1 ], - mac.addr_bytes[2 ], mac.addr_bytes[3 ], - mac.addr_bytes[4 ], mac.addr_bytes[5 ]); +DRV_LOG (INFO , +"port %u MAC address is %02x:%02x:%02x:%02x:%02x:%02x" , + eth_dev->data->port_id, + mac.addr_bytes[0 ], mac.addr_bytes[1 ], + mac.addr_bytes[2 ], mac.addr_bytes[3 ], + mac.addr_bytes[4 ], mac.addr_bytes[5 ]);#ifndef NDEBUG {char ifname[IF_NAMESIZE ];if (mlx5_get_ifname (eth_dev, &ifname) ==0 ) -DEBUG ("port %u ifname is \"%s\"" , - eth_dev->data->port_id, ifname); +DRV_LOG (DEBUG ,"port %u ifname is \"%s\"" , + eth_dev->data->port_id, ifname);else -DEBUG ("port %u ifname is unknown" , - eth_dev->data->port_id); +DRV_LOG (DEBUG ,"port %u ifname is unknown" , + eth_dev->data->port_id); }#endif /* Get actual MTU if possible. */ err =mlx5_get_mtu (eth_dev, &priv->mtu);if (err) goto port_error; -DEBUG ("port %u MTU is %u" , eth_dev->data->port_id, priv->mtu); +DRV_LOG (DEBUG ,"port %u MTU is %u" , eth_dev->data->port_id, + priv->mtu);/* * Initialize burst functions to prevent crashes before link-up. */
@@ -938,8 +960,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,MLX5DV_CTX_ATTR_BUF_ALLOCATORS , (void *)((uintptr_t)&alctr));/* Bring Ethernet device up. */ -DEBUG ("port %u forcing Ethernet interface up" , - eth_dev->data->port_id); +DRV_LOG (DEBUG ,"port %u forcing Ethernet interface up" , + eth_dev->data->port_id);mlx5_set_flags (eth_dev, ~IFF_UP ,IFF_UP );/* Store device configuration on private structure. */ priv->config = config;
@@ -1060,9 +1082,10 @@ mlx5_glue_path(char *buf, size_t size) goto error;return buf; error: -ERROR ("unable to append \"-glue\" to last component of" -" RTE_EAL_PMD_PATH (\"" RTE_EAL_PMD_PATH "\")," -" please re-configure DPDK" ); +DRV_LOG (ERR , +"unable to append \"-glue\" to last component of" +" RTE_EAL_PMD_PATH (\"" RTE_EAL_PMD_PATH "\")," +" please re-configure DPDK" );return NULL ; }
@@ -1117,7 +1140,8 @@ mlx5_glue_init(void)break ;if (sizeof (name) != (size_t )ret +1 )continue ; -DEBUG ("looking for rdma-core glue as \"%s\"" , name); +DRV_LOG (DEBUG ,"looking for rdma-core glue as \"%s\"" , + name); handle =dlopen (name,RTLD_LAZY );break ; }while (1 );
@@ -1129,7 +1153,7 @@ mlx5_glue_init(void) rte_errno =EINVAL ; dlmsg =dlerror ();if (dlmsg) -WARN ("cannot load glue library: %s" , dlmsg); +DRV_LOG (WARNING ,"cannot load glue library: %s" , dlmsg); goto glue_error; } sym =dlsym (handle,"mlx5_glue" );
@@ -1137,7 +1161,7 @@ mlx5_glue_init(void) rte_errno =EINVAL ; dlmsg =dlerror ();if (dlmsg) -ERROR ("cannot resolve glue symbol: %s" , dlmsg); +DRV_LOG (ERR ,"cannot resolve glue symbol: %s" , dlmsg); goto glue_error; } mlx5_glue = *sym;
@@ -1145,9 +1169,9 @@ mlx5_glue_init(void) glue_error:if (handle)dlclose (handle); -WARN ("cannot initialize PMD due to missing run-time" -" dependency on rdma-core libraries (libibverbs," -" libmlx5)" ); +DRV_LOG (WARNING , +"cannot initialize PMD due to missing run-time dependency on" +" rdma-core libraries (libibverbs, libmlx5)" );return -rte_errno; }
@@ -1187,8 +1211,9 @@ rte_mlx5_pmd_init(void) }#endif if (strcmp (mlx5_glue->version,MLX5_GLUE_VERSION )) { -ERROR ("rdma-core glue \"%s\" mismatch: \"%s\" is required" , - mlx5_glue->version,MLX5_GLUE_VERSION ); +DRV_LOG (ERR , +"rdma-core glue \"%s\" mismatch: \"%s\" is required" , + mlx5_glue->version,MLX5_GLUE_VERSION );return ; } mlx5_glue->fork_init ();
@@ -1198,3 +1223,11 @@ rte_mlx5_pmd_init(void)RTE_PMD_EXPORT_NAME (net_mlx5, __COUNTER__);RTE_PMD_REGISTER_PCI_TABLE (net_mlx5, mlx5_pci_id_map);RTE_PMD_REGISTER_KMOD_DEP (net_mlx5,"* ib_uverbs & mlx5_core & mlx5_ib" ); + +/** Initialize driver log type. */ +RTE_INIT (vdev_netvsc_init_log) +{ + mlx5_logtype =rte_log_register ("pmd.net.mlx5" ); +if (mlx5_logtype >=0 ) +rte_log_set_level (mlx5_logtype,RTE_LOG_NOTICE ); +}
drivers/net/mlx5/mlx5_ethdev.c +70 -48
243 lines not on this page · raw message
drivers/net/mlx5/mlx5_flow.c +58 -51
242 lines not on this page · raw message
drivers/net/mlx5/mlx5_mac.c +7 -5
@@ -73,8 +73,8 @@ mlx5_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index)int ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("port %u cannot remove mac address: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u cannot remove mac address: %s" , + dev->data->port_id,strerror (rte_errno)); } }
@@ -130,9 +130,11 @@ mlx5_mac_addr_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr) {int ret; -DEBUG ("port %u setting primary MAC address" , dev->data->port_id); +DRV_LOG (DEBUG ,"port %u setting primary MAC address" , + dev->data->port_id); + ret =mlx5_mac_addr_add (dev, mac_addr,0 ,0 );if (ret) -ERROR ("port %u cannot set mac address: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u cannot set mac address: %s" , + dev->data->port_id,strerror (rte_errno)); }
drivers/net/mlx5/mlx5_mr.c +46 -39
161 lines not on this page · raw message
drivers/net/mlx5/mlx5_rxmode.c +8 -8
@@ -37,8 +37,8 @@ mlx5_promiscuous_enable(struct rte_eth_dev *dev) dev->data->promiscuous =1 ; ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("port %u cannot enable promiscuous mode: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u cannot enable promiscuous mode: %s" , + dev->data->port_id,strerror (rte_errno)); }/**
@@ -55,8 +55,8 @@ mlx5_promiscuous_disable(struct rte_eth_dev *dev) dev->data->promiscuous =0 ; ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("port %u cannot disable promiscuous mode: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u cannot disable promiscuous mode: %s" , + dev->data->port_id,strerror (rte_errno)); }/**
@@ -73,8 +73,8 @@ mlx5_allmulticast_enable(struct rte_eth_dev *dev) dev->data->all_multicast =1 ; ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("port %u cannot enable allmulicast mode: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u cannot enable allmulicast mode: %s" , + dev->data->port_id,strerror (rte_errno)); }/**
@@ -91,6 +91,6 @@ mlx5_allmulticast_disable(struct rte_eth_dev *dev) dev->data->all_multicast =0 ; ret =mlx5_traffic_restart (dev);if (ret) -ERROR ("port %u cannot disable allmulicast mode: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u cannot disable allmulicast mode: %s" , + dev->data->port_id,strerror (rte_errno)); }
drivers/net/mlx5/mlx5_rxq.c +163 -135
553 lines not on this page · raw message
drivers/net/mlx5/mlx5_rxtx.h +9 -8
@@ -377,9 +377,10 @@ check_cqe(volatile struct mlx5_cqe *cqe, (syndrome == MLX5_CQE_SYNDROME_REMOTE_ABORTED_ERR))return 0 ;if (!check_cqe_seen (cqe)) { -ERROR ("unexpected CQE error %u (0x%02x)" -" syndrome 0x%02x" , - op_code, op_code, syndrome); +DRV_LOG (ERR , +"unexpected CQE error %u (0x%02x) syndrome" +" 0x%02x" , + op_code, op_code, syndrome);rte_hexdump (stderr,"MLX5 Error CQE:" , (const void *)((uintptr_t )err_cqe),sizeof (*err_cqe));
@@ -388,8 +389,8 @@ check_cqe(volatile struct mlx5_cqe *cqe, }else if ((op_code !=MLX5_CQE_RESP_SEND ) && (op_code !=MLX5_CQE_REQ )) {if (!check_cqe_seen (cqe)) { -ERROR ("unexpected CQE opcode %u (0x%02x)" , - op_code, op_code); +DRV_LOG (ERR ,"unexpected CQE opcode %u (0x%02x)" , + op_code, op_code);rte_hexdump (stderr,"MLX5 CQE:" , (const void *)((uintptr_t )cqe),sizeof (*cqe));
@@ -449,7 +450,7 @@ mlx5_tx_complete(struct mlx5_txq_data *txq)if ((MLX5_CQE_OPCODE (cqe->op_own) ==MLX5_CQE_RESP_ERR ) || (MLX5_CQE_OPCODE (cqe->op_own) ==MLX5_CQE_REQ_ERR )) {if (!check_cqe_seen (cqe)) { -ERROR ("unexpected error CQE, Tx stopped" ); +DRV_LOG (ERR ,"unexpected error CQE, Tx stopped" ); rte_hexdump(stderr, "MLX5 TXQ:", (const void *)((uintptr_t)txq->wqes), ((1 << txq->wqe_n) *
@@ -566,8 +567,8 @@ mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct rte_mbuf *mb) }else {struct rte_mempool *mp =mlx5_tx_mb2mp (mb); -WARN ("failed to register mempool 0x%p(%s)" , - (void *)mp, mp->name); +DRV_LOG (WARNING ,"failed to register mempool 0x%p(%s)" , + (void *)mp, mp->name); }return (uint32_t )-1 ; }
drivers/net/mlx5/mlx5_socket.c +38 -27
164 lines not on this page · raw message
drivers/net/mlx5/mlx5_stats.c +20 -18
@@ -148,8 +148,9 @@ mlx5_read_dev_counters(struct rte_eth_dev *dev, uint64_t *stats) ifr.ifr_data = (caddr_t )et_stats; ret =mlx5_ifreq (dev,SIOCETHTOOL , &ifr);if (ret) { -WARN ("port %u unable to read statistic values from device" , - dev->data->port_id); +DRV_LOG (WARNING , +"port %u unable to read statistic values from device" , + dev->data->port_id);return ret; }for (i =0 ; i != xstats_n; ++i) {
@@ -195,8 +196,8 @@ mlx5_ethtool_get_stats_n(struct rte_eth_dev *dev) { ifr.ifr_data = (caddr_t)&drvinfo; ret =mlx5_ifreq (dev,SIOCETHTOOL , &ifr);if (ret) { -WARN ("port %u unable to query number of statistics" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u unable to query number of statistics" , + dev->data->port_id);return ret; }return drvinfo.n_stats;
@@ -223,8 +224,8 @@ mlx5_xstats_init(struct rte_eth_dev *dev) ret =mlx5_ethtool_get_stats_n (dev);if (ret <0 ) { -WARN ("port %u no extended statistics available" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u no extended statistics available" , + dev->data->port_id);return ; } dev_stats_n = ret;
@@ -235,7 +236,7 @@ mlx5_xstats_init(struct rte_eth_dev *dev)rte_malloc ("xstats_strings" , str_sz +sizeof (struct ethtool_gstrings ),0 );if (!strings) { -WARN ("port %u unable to allocate memory for xstats" , +DRV_LOG (WARNING ,"port %u unable to allocate memory for xstats" , dev->data->port_id);return ; }
@@ -245,8 +246,8 @@ mlx5_xstats_init(struct rte_eth_dev *dev) ifr.ifr_data = (caddr_t )strings; ret =mlx5_ifreq (dev,SIOCETHTOOL , &ifr);if (ret) { -WARN ("port %u unable to get statistic names" , - dev->data->port_id); +DRV_LOG (WARNING ,"port %u unable to get statistic names" , + dev->data->port_id); goto free; }for (j =0 ; j != xstats_n; ++j)
@@ -267,9 +268,10 @@ mlx5_xstats_init(struct rte_eth_dev *dev)if (mlx5_counters_init[j].ib)continue ;if (xstats_ctrl->dev_table_idx[j] >= dev_stats_n) { -WARN ("port %u counter \"%s\" is not recognized" , - dev->data->port_id, - mlx5_counters_init[j].dpdk_name); +DRV_LOG (WARNING , +"port %u counter \"%s\" is not recognized" , + dev->data->port_id, + mlx5_counters_init[j].dpdk_name); goto free; } }
@@ -277,8 +279,8 @@ mlx5_xstats_init(struct rte_eth_dev *dev)assert (xstats_n <=MLX5_MAX_XSTATS ); ret =mlx5_read_dev_counters (dev, xstats_ctrl->base);if (ret) -ERROR ("port %u cannot read device counters: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u cannot read device counters: %s" , + dev->data->port_id,strerror (rte_errno)); free:rte_free (strings); }
@@ -445,16 +447,16 @@ mlx5_xstats_reset(struct rte_eth_dev *dev) stats_n =mlx5_ethtool_get_stats_n (dev);if (stats_n <0 ) { -ERROR ("port %u cannot get stats: %s" , dev->data->port_id, -strerror (-stats_n)); +DRV_LOG (ERR ,"port %u cannot get stats: %s" , dev->data->port_id, +strerror (-stats_n));return ; }if (xstats_ctrl->stats_n != stats_n)mlx5_xstats_init (dev); ret =mlx5_read_dev_counters (dev, counters);if (ret) { -ERROR ("port %u cannot read device counters: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u cannot read device counters: %s" , + dev->data->port_id,strerror (rte_errno));return ; }for (i =0 ; i != n; ++i)
drivers/net/mlx5/mlx5_trigger.c +15 -15
@@ -150,39 +150,39 @@ mlx5_dev_start(struct rte_eth_dev *dev) dev->data->dev_started =1 ; ret =mlx5_flow_create_drop_queue (dev);if (ret) { -ERROR ("port %u drop queue allocation failed: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u drop queue allocation failed: %s" , + dev->data->port_id,strerror (rte_errno)); goto error; } -DEBUG ("port %u allocating and configuring hash Rx queues" , - dev->data->port_id); +DRV_LOG (DEBUG ,"port %u allocating and configuring hash Rx queues" , + dev->data->port_id);rte_mempool_walk (mlx5_mp2mr_iter, priv); ret =mlx5_txq_start (dev);if (ret) { -ERROR ("port %u Tx queue allocation failed: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u Tx queue allocation failed: %s" , + dev->data->port_id,strerror (rte_errno)); goto error; } ret =mlx5_rxq_start (dev);if (ret) { -ERROR ("port %u Rx queue allocation failed: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u Rx queue allocation failed: %s" , + dev->data->port_id,strerror (rte_errno)); goto error; } ret =mlx5_rx_intr_vec_enable (dev);if (ret) { -ERROR ("port %u Rx interrupt vector creation failed" , - dev->data->port_id); +DRV_LOG (ERR ,"port %u Rx interrupt vector creation failed" , + dev->data->port_id); goto error; }mlx5_xstats_init (dev);/* Update link status and Tx/Rx callbacks for the first time. */ memset (&dev->data->dev_link,0 ,sizeof (struct rte_eth_link )); -INFO ("port %u forcing link to be up" , dev->data->port_id); +DRV_LOG (INFO ,"forcing port %u link to be up" , dev->data->port_id); ret =mlx5_force_link_status_change (dev,ETH_LINK_UP );if (ret) { -DEBUG ("failed to set port %u link to be up" , - dev->data->port_id); +DRV_LOG (DEBUG ,"failed to set port %u link to be up" , + dev->data->port_id); goto error; }mlx5_dev_interrupt_handler_install (dev);
@@ -222,8 +222,8 @@ mlx5_dev_stop(struct rte_eth_dev *dev) dev->tx_pkt_burst = removed_tx_burst;rte_wmb ();usleep (1000 * priv->rxqs_n); -DEBUG ("port %u cleaning up and destroying hash Rx queues" , - dev->data->port_id); +DRV_LOG (DEBUG ,"port %u cleaning up and destroying hash Rx queues" , + dev->data->port_id);mlx5_flow_stop (dev, &priv->flows);mlx5_traffic_disable (dev);mlx5_rx_intr_vec_disable (dev);
drivers/net/mlx5/mlx5_txq.c +89 -75
324 lines not on this page · raw message
drivers/net/mlx5/mlx5_utils.h +11 -16
@@ -61,14 +61,21 @@ pmd_drv_log_basename(const char *s)return s; } +extern int mlx5_logtype; + +#define PMD_DRV_LOG___ (level, ...) \ + rte_log(RTE_LOG_ ## level, \ + mlx5_logtype, \ + RTE_FMT(MLX5_DRIVER_NAME ": " \ + RTE_FMT_HEAD(__VA_ARGS__,), \ + RTE_FMT_TAIL(__VA_ARGS__,))) +/* * When debugging is enabled (NDEBUG not defined), file, line and function * information replace the driver name (MLX5_DRIVER_NAME) in log messages. */ #ifndef NDEBUG -#define PMD_DRV_LOG___ (level, ...) \ - ERRNO_SAFE(RTE_LOG(level, PMD, __VA_ARGS__))#define PMD_DRV_LOG__ (level, ...) \ PMD_DRV_LOG___(level, "%s:%u: %s(): " __VA_ARGS__)#define PMD_DRV_LOG_ (level, s, ...) \
@@ -80,9 +87,6 @@ pmd_drv_log_basename(const char *s) __VA_ARGS__)#else /* NDEBUG */ - -#define PMD_DRV_LOG___ (level, ...) \ - ERRNO_SAFE(RTE_LOG(level, PMD, MLX5_DRIVER_NAME ": " __VA_ARGS__))#define PMD_DRV_LOG__ (level, ...) \ PMD_DRV_LOG___(level, __VA_ARGS__)#define PMD_DRV_LOG_ (level, s, ...) \
@@ -91,33 +95,24 @@ pmd_drv_log_basename(const char *s)#endif /* NDEBUG */ /* Generic printf()-like logging macro with automatic line feed. */ -#define PMD_DRV_LOG (level, ...) \ +#define DRV_LOG (level, ...) \ PMD_DRV_LOG_(level, \ __VA_ARGS__ PMD_DRV_LOG_STRIP PMD_DRV_LOG_OPAREN, \ PMD_DRV_LOG_CPAREN) -/* -* Like assert(), DEBUG() becomes a no-op and claim_zero() does not perform -* any check when debugging is disabled. -*/ +/* claim_zero() does not perform any check when debugging is disabled. */ #ifndef NDEBUG -#define DEBUG (...) PMD_DRV_LOG(DEBUG, __VA_ARGS__)#define claim_zero (...) assert((__VA_ARGS__) == 0)#define claim_nonzero (...) assert((__VA_ARGS__) != 0)#else /* NDEBUG */ -#define DEBUG (...) (void)0#define claim_zero (...) (__VA_ARGS__)#define claim_nonzero (...) (__VA_ARGS__)#endif /* NDEBUG */ -#define INFO (...) PMD_DRV_LOG(INFO, __VA_ARGS__) -#define WARN (...) PMD_DRV_LOG(WARNING, __VA_ARGS__) -#define ERROR (...) PMD_DRV_LOG(ERR, __VA_ARGS__) -/* Convenience macros for accessing mbuf fields. */ #define NEXT (m) ((m)->next)#define DATA_LEN (m) ((m)->data_len)
drivers/net/mlx5/mlx5_vlan.c +12 -12
@@ -45,8 +45,8 @@ mlx5_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)struct priv *priv = dev->data->dev_private;unsigned int i; -DEBUG ("port %u %s VLAN filter ID %" PRIu16, - dev->data->port_id, (on ?"enable" :"disable" ), vlan_id); +DRV_LOG (DEBUG ,"port %u %s VLAN filter ID %" PRIu16, + dev->data->port_id, (on ?"enable" :"disable" ), vlan_id);assert (priv->vlan_filter_n <=RTE_DIM (priv->vlan_filter));for (i =0 ; (i != priv->vlan_filter_n); ++i)if (priv->vlan_filter[i] == vlan_id)
@@ -108,18 +108,18 @@ mlx5_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on)/* Validate hw support */ if (!priv->config.hw_vlan_strip) { -ERROR ("port %u VLAN stripping is not supported" , - dev->data->port_id); +DRV_LOG (ERR ,"port %u VLAN stripping is not supported" , + dev->data->port_id);return ; }/* Validate queue number */ if (queue >= priv->rxqs_n) { -ERROR ("port %u VLAN stripping, invalid queue number %d" , - dev->data->port_id, queue); +DRV_LOG (ERR ,"port %u VLAN stripping, invalid queue number %d" , + dev->data->port_id, queue);return ; } -DEBUG ("port %u set VLAN offloads 0x%x for port %uqueue %d" , - dev->data->port_id, vlan_offloads, rxq->port_id, queue); +DRV_LOG (DEBUG ,"port %u set VLAN offloads 0x%x for port %uqueue %d" , + dev->data->port_id, vlan_offloads, rxq->port_id, queue);if (!rxq_ctrl->ibv) {/* Update related bits in RX queue. */ rxq->vlan_strip = !!on;
@@ -132,8 +132,8 @@ mlx5_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on) }; ret = mlx5_glue->modify_wq (rxq_ctrl->ibv->wq, &mod);if (ret) { -ERROR ("port %u failed to modified stripping mode: %s" , - dev->data->port_id,strerror (rte_errno)); +DRV_LOG (ERR ,"port %u failed to modified stripping mode: %s" , + dev->data->port_id,strerror (rte_errno));return ; }/* Update related bits in RX queue. */
@@ -162,8 +162,8 @@ mlx5_vlan_offload_set(struct rte_eth_dev *dev, int mask) DEV_RX_OFFLOAD_VLAN_STRIP);if (!priv->config.hw_vlan_strip) { -ERROR ("port %u VLAN stripping is not supported" , - dev->data->port_id); +DRV_LOG (ERR ,"port %u VLAN stripping is not supported" , + dev->data->port_id);return 0 ; }/* Run on every RX queue and set/reset VLAN stripping. */
Signature · 1 line
2.11.0
Tuesday, March 13, 2018 11:24 AM, Nelio Laranjeiro:
Quoted 10 lines
This series applies on top of [1]
[1]
https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdp
dk.org%2Fdev%2Fpatchwork%2Fpatch%2F35650%2F&data=02%7C01%7Csha hafs%40mellanox.com%7Cb1ba428446e141f36ac008d588c455b7%7Ca652971c 7d2e4d9ba6a4d149256f461b%7C0%7C0%7C636565299208586718&sdata=IMr WqigZCTfcJenR4bVMusWJj1nF%2FSutMW81K8Ab3hE%3D&reserved=0
Series applied to next-net-mlx, thanks.