Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F147387991
D15259.id46184.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D15259.id46184.diff
View Options
Index: sys/dev/mlx4/driver.h
===================================================================
--- sys/dev/mlx4/driver.h
+++ sys/dev/mlx4/driver.h
@@ -101,4 +101,7 @@
return mac;
}
+void mlx4_disable_interrupts(struct mlx4_dev *);
+void mlx4_poll_interrupts(struct mlx4_dev *);
+
#endif /* MLX4_DRIVER_H */
Index: sys/dev/mlx4/mlx4_core/mlx4_eq.c
===================================================================
--- sys/dev/mlx4/mlx4_core/mlx4_eq.c
+++ sys/dev/mlx4/mlx4_core/mlx4_eq.c
@@ -1535,3 +1535,34 @@
}
EXPORT_SYMBOL(mlx4_release_eq);
+void
+mlx4_disable_interrupts(struct mlx4_dev *dev)
+{
+ struct mlx4_priv *priv = container_of(dev, struct mlx4_priv, dev);
+ int i;
+
+ if (dev->flags & MLX4_FLAG_MSI_X) {
+ for (i = 0; i < (dev->caps.num_comp_vectors + 1); ++i)
+ disable_irq(priv->eq_table.eq[i].irq);
+ } else {
+ disable_irq(dev->persist->pdev->irq);
+ }
+}
+EXPORT_SYMBOL(mlx4_disable_interrupts);
+
+void
+mlx4_poll_interrupts(struct mlx4_dev *dev)
+{
+ struct mlx4_priv *priv = container_of(dev, struct mlx4_priv, dev);
+ int i;
+
+ if (dev->flags & MLX4_FLAG_MSI_X) {
+ for (i = 0; i < (dev->caps.num_comp_vectors + 1); ++i) {
+ mlx4_msi_x_interrupt(priv->eq_table.eq[i].irq,
+ priv->eq_table.eq + i);
+ }
+ } else {
+ mlx4_interrupt(dev->persist->pdev->irq, dev);
+ }
+}
+EXPORT_SYMBOL(mlx4_poll_interrupts);
Index: sys/dev/mlx4/mlx4_en/en.h
===================================================================
--- sys/dev/mlx4/mlx4_en/en.h
+++ sys/dev/mlx4/mlx4_en/en.h
@@ -54,6 +54,7 @@
#include <dev/mlx4/cmd.h>
#include <netinet/tcp_lro.h>
+#include <netinet/netdump/netdump.h>
#include "en_port.h"
#include <dev/mlx4/stats.h>
@@ -878,6 +879,7 @@
void mlx4_en_tx_irq(struct mlx4_cq *mcq);
u16 mlx4_en_select_queue(struct net_device *dev, struct mbuf *mb);
+int mlx4_en_xmit(struct mlx4_en_priv *priv, int tx_ind, struct mbuf **mbp);
int mlx4_en_transmit(struct ifnet *dev, struct mbuf *m);
int mlx4_en_create_tx_ring(struct mlx4_en_priv *priv,
struct mlx4_en_tx_ring **pring,
Index: sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c
===================================================================
--- sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c
+++ sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c
@@ -58,6 +58,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);
@@ -2474,6 +2476,8 @@
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);
@@ -3371,3 +3375,54 @@
CTLFLAG_RD, &rx_ring->errors, 0, "RX soft errors");
}
}
+
+#ifdef NETDUMP
+static void
+mlx4_en_netdump_init(struct ifnet *dev, int *nrxr, int *ncl, int *clsize)
+{
+ struct mlx4_en_priv *priv;
+
+ priv = if_getsoftc(dev);
+ mutex_lock(&priv->mdev->state_lock);
+ *nrxr = priv->rx_ring_num;
+ *ncl = NETDUMP_MAX_IN_FLIGHT;
+ *clsize = priv->rx_mb_size;
+ mutex_unlock(&priv->mdev->state_lock);
+}
+
+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;
+
+ priv = if_getsoftc(dev);
+ if ((if_getdrvflags(dev) & IFF_DRV_RUNNING) == 0 || !priv->link_state)
+ return (ENOENT);
+
+ mlx4_poll_interrupts(priv->mdev->dev);
+
+ return (0);
+}
+#endif /* NETDUMP */
Index: sys/dev/mlx4/mlx4_en/mlx4_en_tx.c
===================================================================
--- sys/dev/mlx4/mlx4_en/mlx4_en_tx.c
+++ sys/dev/mlx4/mlx4_en/mlx4_en_tx.c
@@ -1181,7 +1181,7 @@
__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,
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Mar 11, 1:46 PM (49 m, 9 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29532749
Default Alt Text
D15259.id46184.diff (4 KB)
Attached To
Mode
D15259: Add netdump hooks for mlxen(4).
Attached
Detach File
Event Timeline
Log In to Comment