From owner-svn-src-user@freebsd.org Mon Apr 2 18:10:42 2018 Return-Path: Delivered-To: svn-src-user@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0C4F1F7BD46 for ; Mon, 2 Apr 2018 18:10:42 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id AE8F66A3AF; Mon, 2 Apr 2018 18:10:41 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A976D19207; Mon, 2 Apr 2018 18:10:41 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w32IAfma005173; Mon, 2 Apr 2018 18:10:41 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w32IAflH005169; Mon, 2 Apr 2018 18:10:41 GMT (envelope-from markj@FreeBSD.org) Message-Id: <201804021810.w32IAflH005169@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Mon, 2 Apr 2018 18:10:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r331883 - in user/markj/netdump: share/man/man4 sys/dev/mlx4/mlx4_en X-SVN-Group: user X-SVN-Commit-Author: markj X-SVN-Commit-Paths: in user/markj/netdump: share/man/man4 sys/dev/mlx4/mlx4_en X-SVN-Commit-Revision: 331883 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Apr 2018 18:10:42 -0000 Author: markj Date: Mon Apr 2 18:10:41 2018 New Revision: 331883 URL: https://svnweb.freebsd.org/changeset/base/331883 Log: Add netdump support to mlx4en(4). Tested with a MT27520 (ConnectX-3 Pro) adapter. Modified: user/markj/netdump/share/man/man4/netdump.4 user/markj/netdump/sys/dev/mlx4/mlx4_en/en.h user/markj/netdump/sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c user/markj/netdump/sys/dev/mlx4/mlx4_en/mlx4_en_tx.c Modified: user/markj/netdump/share/man/man4/netdump.4 ============================================================================== --- user/markj/netdump/share/man/man4/netdump.4 Mon Apr 2 16:11:49 2018 (r331882) +++ user/markj/netdump/share/man/man4/netdump.4 Mon Apr 2 18:10:41 2018 (r331883) @@ -110,6 +110,7 @@ The following network drivers support netdump: .Xr em 4 , .Xr igb 4 , .Xr ix 4 , +.Xr mlx4en 4 , .Xr re 4 , .Xr vtnet 4 . .Sh SEE ALSO Modified: user/markj/netdump/sys/dev/mlx4/mlx4_en/en.h ============================================================================== --- user/markj/netdump/sys/dev/mlx4/mlx4_en/en.h Mon Apr 2 16:11:49 2018 (r331882) +++ user/markj/netdump/sys/dev/mlx4/mlx4_en/en.h Mon Apr 2 18:10:41 2018 (r331883) @@ -54,6 +54,7 @@ #include #include +#include #include "en_port.h" #include @@ -814,6 +815,8 @@ void mlx4_en_deactivate_rx_ring(struct mlx4_en_priv *p int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int budget); +int mlx4_en_process_tx_cq(struct net_device *dev, struct mlx4_en_cq *cq); +int mlx4_en_xmit(struct mlx4_en_priv *priv, int tx_ind, struct mbuf **m); void mlx4_en_poll_tx_cq(unsigned long data); void mlx4_en_fill_qp_context(struct mlx4_en_priv *priv, int size, int stride, int is_tx, int rss, int qpn, int cqn, int user_prio, Modified: user/markj/netdump/sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c ============================================================================== --- user/markj/netdump/sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c Mon Apr 2 16:11:49 2018 (r331882) +++ user/markj/netdump/sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c Mon Apr 2 18:10:41 2018 (r331883) @@ -53,6 +53,8 @@ #include "en.h" #include "en_port.h" +NETDUMP_DEFINE(mlx4_en); + static void mlx4_en_sysctl_stat(struct mlx4_en_priv *priv); static void mlx4_en_sysctl_conf(struct mlx4_en_priv *priv); @@ -2298,6 +2300,8 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int ifmedia_add(&priv->media, IFM_ETHER | IFM_AUTO, 0, NULL); ifmedia_set(&priv->media, IFM_ETHER | IFM_AUTO); + NETDUMP_SET(dev, mlx4_en); + en_warn(priv, "Using %d TX rings\n", prof->tx_ring_num); en_warn(priv, "Using %d RX rings\n", prof->rx_ring_num); @@ -2879,3 +2883,52 @@ static void mlx4_en_sysctl_stat(struct mlx4_en_priv *p CTLFLAG_RD, &rx_ring->errors, 0, "RX soft errors"); } } + +#ifdef NETDUMP +static void +mlx4_en_netdump_init(struct ifnet *dev, int *nrxr) +{ + struct mlx4_en_priv *priv; + + priv = if_getsoftc(dev); + *nrxr = priv->rx_ring_num; +} + +static void +mlx4_en_netdump_event(struct ifnet *dev, enum netdump_ev event) +{ +} + +static int +mlx4_en_netdump_transmit(struct ifnet *dev, struct mbuf *m) +{ + struct mlx4_en_priv *priv; + int err; + + priv = if_getsoftc(dev); + if ((if_getdrvflags(dev) & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) != + IFF_DRV_RUNNING || !priv->link_state) + return (ENOENT); + + err = mlx4_en_xmit(priv, 0, &m); + if (err != 0 && m != NULL) + m_freem(m); + return (err); +} + +static int +mlx4_en_netdump_poll(struct ifnet *dev, int count) +{ + struct mlx4_en_priv *priv; + int i; + + priv = if_getsoftc(dev); + if ((if_getdrvflags(dev) & IFF_DRV_RUNNING) == 0 || !priv->link_state) + return (ENOENT); + + (void)mlx4_en_process_tx_cq(dev, priv->tx_cq[0]); + for (i = 0; i < priv->rx_ring_num; i++) + (void)mlx4_en_process_rx_cq(dev, priv->rx_cq[i], 0); + return (0); +} +#endif /* NETDUMP */ Modified: user/markj/netdump/sys/dev/mlx4/mlx4_en/mlx4_en_tx.c ============================================================================== --- user/markj/netdump/sys/dev/mlx4/mlx4_en/mlx4_en_tx.c Mon Apr 2 16:11:49 2018 (r331882) +++ user/markj/netdump/sys/dev/mlx4/mlx4_en/mlx4_en_tx.c Mon Apr 2 18:10:41 2018 (r331883) @@ -356,8 +356,7 @@ mlx4_en_tx_ring_is_full(struct mlx4_en_tx_ring *ring) return (wqs < (HEADROOM + (2 * MLX4_EN_TX_WQE_MAX_WQEBBS))); } -static int mlx4_en_process_tx_cq(struct net_device *dev, - struct mlx4_en_cq *cq) +int mlx4_en_process_tx_cq(struct net_device *dev, struct mlx4_en_cq *cq) { struct mlx4_en_priv *priv = netdev_priv(dev); struct mlx4_cq *mcq = &cq->mcq; @@ -648,7 +647,7 @@ static void mlx4_bf_copy(void __iomem *dst, volatile u __iowrite64_copy(dst, __DEVOLATILE(void *, src), bytecnt / 8); } -static int mlx4_en_xmit(struct mlx4_en_priv *priv, int tx_ind, struct mbuf **mbp) +int mlx4_en_xmit(struct mlx4_en_priv *priv, int tx_ind, struct mbuf **mbp) { enum { DS_FACT = TXBB_SIZE / DS_SIZE_ALIGNMENT,