aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorCalvin Owens <calvinowens@fb.com>2016-09-29 00:46:39 -0400
committerDavid S. Miller <davem@davemloft.net>2016-09-30 02:11:16 -0400
commit803783849fed11e38a30f31932c02c815520da70 (patch)
treeadb7cf9c8541e2e2c73a8ee2534bdacad1573980 /drivers/net
parent6cd80b55471515e0102760b59034ded000c35a09 (diff)
mlx5: Add ndo_poll_controller() implementation
This implements ndo_poll_controller in net_device_ops callbacks for mlx5, which is necessary to use netconsole with this driver. Acked-By: Saeed Mahameed <saeedm@mellanox.com> Signed-off-by: Calvin Owens <calvinowens@fb.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_main.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
index b58cfe37dead..7eaf38020a8f 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
@@ -3188,6 +3188,20 @@ static int mlx5e_xdp(struct net_device *dev, struct netdev_xdp *xdp)
3188 } 3188 }
3189} 3189}
3190 3190
3191#ifdef CONFIG_NET_POLL_CONTROLLER
3192/* Fake "interrupt" called by netpoll (eg netconsole) to send skbs without
3193 * reenabling interrupts.
3194 */
3195static void mlx5e_netpoll(struct net_device *dev)
3196{
3197 struct mlx5e_priv *priv = netdev_priv(dev);
3198 int i;
3199
3200 for (i = 0; i < priv->params.num_channels; i++)
3201 napi_schedule(&priv->channel[i]->napi);
3202}
3203#endif
3204
3191static const struct net_device_ops mlx5e_netdev_ops_basic = { 3205static const struct net_device_ops mlx5e_netdev_ops_basic = {
3192 .ndo_open = mlx5e_open, 3206 .ndo_open = mlx5e_open,
3193 .ndo_stop = mlx5e_close, 3207 .ndo_stop = mlx5e_close,
@@ -3208,6 +3222,9 @@ static const struct net_device_ops mlx5e_netdev_ops_basic = {
3208#endif 3222#endif
3209 .ndo_tx_timeout = mlx5e_tx_timeout, 3223 .ndo_tx_timeout = mlx5e_tx_timeout,
3210 .ndo_xdp = mlx5e_xdp, 3224 .ndo_xdp = mlx5e_xdp,
3225#ifdef CONFIG_NET_POLL_CONTROLLER
3226 .ndo_poll_controller = mlx5e_netpoll,
3227#endif
3211}; 3228};
3212 3229
3213static const struct net_device_ops mlx5e_netdev_ops_sriov = { 3230static const struct net_device_ops mlx5e_netdev_ops_sriov = {
@@ -3240,6 +3257,9 @@ static const struct net_device_ops mlx5e_netdev_ops_sriov = {
3240 .ndo_get_vf_stats = mlx5e_get_vf_stats, 3257 .ndo_get_vf_stats = mlx5e_get_vf_stats,
3241 .ndo_tx_timeout = mlx5e_tx_timeout, 3258 .ndo_tx_timeout = mlx5e_tx_timeout,
3242 .ndo_xdp = mlx5e_xdp, 3259 .ndo_xdp = mlx5e_xdp,
3260#ifdef CONFIG_NET_POLL_CONTROLLER
3261 .ndo_poll_controller = mlx5e_netpoll,
3262#endif
3243}; 3263};
3244 3264
3245static int mlx5e_check_required_hca_cap(struct mlx5_core_dev *mdev) 3265static int mlx5e_check_required_hca_cap(struct mlx5_core_dev *mdev)