diff options
author | Calvin Owens <calvinowens@fb.com> | 2016-09-29 00:46:39 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-09-30 02:11:16 -0400 |
commit | 803783849fed11e38a30f31932c02c815520da70 (patch) | |
tree | adb7cf9c8541e2e2c73a8ee2534bdacad1573980 /drivers/net | |
parent | 6cd80b55471515e0102760b59034ded000c35a09 (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.c | 20 |
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 | */ | ||
3195 | static 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 | |||
3191 | static const struct net_device_ops mlx5e_netdev_ops_basic = { | 3205 | static 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 | ||
3213 | static const struct net_device_ops mlx5e_netdev_ops_sriov = { | 3230 | static 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 | ||
3245 | static int mlx5e_check_required_hca_cap(struct mlx5_core_dev *mdev) | 3265 | static int mlx5e_check_required_hca_cap(struct mlx5_core_dev *mdev) |