diff options
Diffstat (limited to 'drivers/net/mlx4/en_netdev.c')
-rw-r--r-- | drivers/net/mlx4/en_netdev.c | 199 |
1 files changed, 94 insertions, 105 deletions
diff --git a/drivers/net/mlx4/en_netdev.c b/drivers/net/mlx4/en_netdev.c index e8eeef0c9c9a..e02bafdd3682 100644 --- a/drivers/net/mlx4/en_netdev.c +++ b/drivers/net/mlx4/en_netdev.c | |||
@@ -51,14 +51,14 @@ static void mlx4_en_vlan_rx_register(struct net_device *dev, struct vlan_group * | |||
51 | struct mlx4_en_dev *mdev = priv->mdev; | 51 | struct mlx4_en_dev *mdev = priv->mdev; |
52 | int err; | 52 | int err; |
53 | 53 | ||
54 | mlx4_dbg(HW, priv, "Registering VLAN group:%p\n", grp); | 54 | en_dbg(HW, priv, "Registering VLAN group:%p\n", grp); |
55 | priv->vlgrp = grp; | 55 | priv->vlgrp = grp; |
56 | 56 | ||
57 | mutex_lock(&mdev->state_lock); | 57 | mutex_lock(&mdev->state_lock); |
58 | if (mdev->device_up && priv->port_up) { | 58 | if (mdev->device_up && priv->port_up) { |
59 | err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, grp); | 59 | err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, grp); |
60 | if (err) | 60 | if (err) |
61 | mlx4_err(mdev, "Failed configuring VLAN filter\n"); | 61 | en_err(priv, "Failed configuring VLAN filter\n"); |
62 | } | 62 | } |
63 | mutex_unlock(&mdev->state_lock); | 63 | mutex_unlock(&mdev->state_lock); |
64 | } | 64 | } |
@@ -72,15 +72,15 @@ static void mlx4_en_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) | |||
72 | if (!priv->vlgrp) | 72 | if (!priv->vlgrp) |
73 | return; | 73 | return; |
74 | 74 | ||
75 | mlx4_dbg(HW, priv, "adding VLAN:%d (vlgrp entry:%p)\n", | 75 | en_dbg(HW, priv, "adding VLAN:%d (vlgrp entry:%p)\n", |
76 | vid, vlan_group_get_device(priv->vlgrp, vid)); | 76 | vid, vlan_group_get_device(priv->vlgrp, vid)); |
77 | 77 | ||
78 | /* Add VID to port VLAN filter */ | 78 | /* Add VID to port VLAN filter */ |
79 | mutex_lock(&mdev->state_lock); | 79 | mutex_lock(&mdev->state_lock); |
80 | if (mdev->device_up && priv->port_up) { | 80 | if (mdev->device_up && priv->port_up) { |
81 | err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, priv->vlgrp); | 81 | err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, priv->vlgrp); |
82 | if (err) | 82 | if (err) |
83 | mlx4_err(mdev, "Failed configuring VLAN filter\n"); | 83 | en_err(priv, "Failed configuring VLAN filter\n"); |
84 | } | 84 | } |
85 | mutex_unlock(&mdev->state_lock); | 85 | mutex_unlock(&mdev->state_lock); |
86 | } | 86 | } |
@@ -94,9 +94,8 @@ static void mlx4_en_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) | |||
94 | if (!priv->vlgrp) | 94 | if (!priv->vlgrp) |
95 | return; | 95 | return; |
96 | 96 | ||
97 | mlx4_dbg(HW, priv, "Killing VID:%d (vlgrp:%p vlgrp " | 97 | en_dbg(HW, priv, "Killing VID:%d (vlgrp:%p vlgrp entry:%p)\n", |
98 | "entry:%p)\n", vid, priv->vlgrp, | 98 | vid, priv->vlgrp, vlan_group_get_device(priv->vlgrp, vid)); |
99 | vlan_group_get_device(priv->vlgrp, vid)); | ||
100 | vlan_group_set_device(priv->vlgrp, vid, NULL); | 99 | vlan_group_set_device(priv->vlgrp, vid, NULL); |
101 | 100 | ||
102 | /* Remove VID from port VLAN filter */ | 101 | /* Remove VID from port VLAN filter */ |
@@ -104,7 +103,7 @@ static void mlx4_en_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) | |||
104 | if (mdev->device_up && priv->port_up) { | 103 | if (mdev->device_up && priv->port_up) { |
105 | err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, priv->vlgrp); | 104 | err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, priv->vlgrp); |
106 | if (err) | 105 | if (err) |
107 | mlx4_err(mdev, "Failed configuring VLAN filter\n"); | 106 | en_err(priv, "Failed configuring VLAN filter\n"); |
108 | } | 107 | } |
109 | mutex_unlock(&mdev->state_lock); | 108 | mutex_unlock(&mdev->state_lock); |
110 | } | 109 | } |
@@ -150,9 +149,10 @@ static void mlx4_en_do_set_mac(struct work_struct *work) | |||
150 | err = mlx4_register_mac(mdev->dev, priv->port, | 149 | err = mlx4_register_mac(mdev->dev, priv->port, |
151 | priv->mac, &priv->mac_index); | 150 | priv->mac, &priv->mac_index); |
152 | if (err) | 151 | if (err) |
153 | mlx4_err(mdev, "Failed changing HW MAC address\n"); | 152 | en_err(priv, "Failed changing HW MAC address\n"); |
154 | } else | 153 | } else |
155 | mlx4_dbg(HW, priv, "Port is down, exiting...\n"); | 154 | en_dbg(HW, priv, "Port is down while " |
155 | "registering mac, exiting...\n"); | ||
156 | 156 | ||
157 | mutex_unlock(&mdev->state_lock); | 157 | mutex_unlock(&mdev->state_lock); |
158 | } | 158 | } |
@@ -174,7 +174,6 @@ static void mlx4_en_clear_list(struct net_device *dev) | |||
174 | static void mlx4_en_cache_mclist(struct net_device *dev) | 174 | static void mlx4_en_cache_mclist(struct net_device *dev) |
175 | { | 175 | { |
176 | struct mlx4_en_priv *priv = netdev_priv(dev); | 176 | struct mlx4_en_priv *priv = netdev_priv(dev); |
177 | struct mlx4_en_dev *mdev = priv->mdev; | ||
178 | struct dev_mc_list *mclist; | 177 | struct dev_mc_list *mclist; |
179 | struct dev_mc_list *tmp; | 178 | struct dev_mc_list *tmp; |
180 | struct dev_mc_list *plist = NULL; | 179 | struct dev_mc_list *plist = NULL; |
@@ -182,7 +181,7 @@ static void mlx4_en_cache_mclist(struct net_device *dev) | |||
182 | for (mclist = dev->mc_list; mclist; mclist = mclist->next) { | 181 | for (mclist = dev->mc_list; mclist; mclist = mclist->next) { |
183 | tmp = kmalloc(sizeof(struct dev_mc_list), GFP_ATOMIC); | 182 | tmp = kmalloc(sizeof(struct dev_mc_list), GFP_ATOMIC); |
184 | if (!tmp) { | 183 | if (!tmp) { |
185 | mlx4_err(mdev, "failed to allocate multicast list\n"); | 184 | en_err(priv, "failed to allocate multicast list\n"); |
186 | mlx4_en_clear_list(dev); | 185 | mlx4_en_clear_list(dev); |
187 | return; | 186 | return; |
188 | } | 187 | } |
@@ -219,13 +218,13 @@ static void mlx4_en_do_set_multicast(struct work_struct *work) | |||
219 | 218 | ||
220 | mutex_lock(&mdev->state_lock); | 219 | mutex_lock(&mdev->state_lock); |
221 | if (!mdev->device_up) { | 220 | if (!mdev->device_up) { |
222 | mlx4_dbg(HW, priv, "Card is not up, ignoring " | 221 | en_dbg(HW, priv, "Card is not up, " |
223 | "multicast change.\n"); | 222 | "ignoring multicast change.\n"); |
224 | goto out; | 223 | goto out; |
225 | } | 224 | } |
226 | if (!priv->port_up) { | 225 | if (!priv->port_up) { |
227 | mlx4_dbg(HW, priv, "Port is down, ignoring " | 226 | en_dbg(HW, priv, "Port is down, " |
228 | "multicast change.\n"); | 227 | "ignoring multicast change.\n"); |
229 | goto out; | 228 | goto out; |
230 | } | 229 | } |
231 | 230 | ||
@@ -236,29 +235,27 @@ static void mlx4_en_do_set_multicast(struct work_struct *work) | |||
236 | if (dev->flags & IFF_PROMISC) { | 235 | if (dev->flags & IFF_PROMISC) { |
237 | if (!(priv->flags & MLX4_EN_FLAG_PROMISC)) { | 236 | if (!(priv->flags & MLX4_EN_FLAG_PROMISC)) { |
238 | if (netif_msg_rx_status(priv)) | 237 | if (netif_msg_rx_status(priv)) |
239 | mlx4_warn(mdev, "Port:%d entering promiscuous mode\n", | 238 | en_warn(priv, "Entering promiscuous mode\n"); |
240 | priv->port); | ||
241 | priv->flags |= MLX4_EN_FLAG_PROMISC; | 239 | priv->flags |= MLX4_EN_FLAG_PROMISC; |
242 | 240 | ||
243 | /* Enable promiscouos mode */ | 241 | /* Enable promiscouos mode */ |
244 | err = mlx4_SET_PORT_qpn_calc(mdev->dev, priv->port, | 242 | err = mlx4_SET_PORT_qpn_calc(mdev->dev, priv->port, |
245 | priv->base_qpn, 1); | 243 | priv->base_qpn, 1); |
246 | if (err) | 244 | if (err) |
247 | mlx4_err(mdev, "Failed enabling " | 245 | en_err(priv, "Failed enabling " |
248 | "promiscous mode\n"); | 246 | "promiscous mode\n"); |
249 | 247 | ||
250 | /* Disable port multicast filter (unconditionally) */ | 248 | /* Disable port multicast filter (unconditionally) */ |
251 | err = mlx4_SET_MCAST_FLTR(mdev->dev, priv->port, 0, | 249 | err = mlx4_SET_MCAST_FLTR(mdev->dev, priv->port, 0, |
252 | 0, MLX4_MCAST_DISABLE); | 250 | 0, MLX4_MCAST_DISABLE); |
253 | if (err) | 251 | if (err) |
254 | mlx4_err(mdev, "Failed disabling " | 252 | en_err(priv, "Failed disabling " |
255 | "multicast filter\n"); | 253 | "multicast filter\n"); |
256 | 254 | ||
257 | /* Disable port VLAN filter */ | 255 | /* Disable port VLAN filter */ |
258 | err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, NULL); | 256 | err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, NULL); |
259 | if (err) | 257 | if (err) |
260 | mlx4_err(mdev, "Failed disabling " | 258 | en_err(priv, "Failed disabling VLAN filter\n"); |
261 | "VLAN filter\n"); | ||
262 | } | 259 | } |
263 | goto out; | 260 | goto out; |
264 | } | 261 | } |
@@ -269,20 +266,19 @@ static void mlx4_en_do_set_multicast(struct work_struct *work) | |||
269 | 266 | ||
270 | if (priv->flags & MLX4_EN_FLAG_PROMISC) { | 267 | if (priv->flags & MLX4_EN_FLAG_PROMISC) { |
271 | if (netif_msg_rx_status(priv)) | 268 | if (netif_msg_rx_status(priv)) |
272 | mlx4_warn(mdev, "Port:%d leaving promiscuous mode\n", | 269 | en_warn(priv, "Leaving promiscuous mode\n"); |
273 | priv->port); | ||
274 | priv->flags &= ~MLX4_EN_FLAG_PROMISC; | 270 | priv->flags &= ~MLX4_EN_FLAG_PROMISC; |
275 | 271 | ||
276 | /* Disable promiscouos mode */ | 272 | /* Disable promiscouos mode */ |
277 | err = mlx4_SET_PORT_qpn_calc(mdev->dev, priv->port, | 273 | err = mlx4_SET_PORT_qpn_calc(mdev->dev, priv->port, |
278 | priv->base_qpn, 0); | 274 | priv->base_qpn, 0); |
279 | if (err) | 275 | if (err) |
280 | mlx4_err(mdev, "Failed disabling promiscous mode\n"); | 276 | en_err(priv, "Failed disabling promiscous mode\n"); |
281 | 277 | ||
282 | /* Enable port VLAN filter */ | 278 | /* Enable port VLAN filter */ |
283 | err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, priv->vlgrp); | 279 | err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, priv->vlgrp); |
284 | if (err) | 280 | if (err) |
285 | mlx4_err(mdev, "Failed enabling VLAN filter\n"); | 281 | en_err(priv, "Failed enabling VLAN filter\n"); |
286 | } | 282 | } |
287 | 283 | ||
288 | /* Enable/disable the multicast filter according to IFF_ALLMULTI */ | 284 | /* Enable/disable the multicast filter according to IFF_ALLMULTI */ |
@@ -290,12 +286,12 @@ static void mlx4_en_do_set_multicast(struct work_struct *work) | |||
290 | err = mlx4_SET_MCAST_FLTR(mdev->dev, priv->port, 0, | 286 | err = mlx4_SET_MCAST_FLTR(mdev->dev, priv->port, 0, |
291 | 0, MLX4_MCAST_DISABLE); | 287 | 0, MLX4_MCAST_DISABLE); |
292 | if (err) | 288 | if (err) |
293 | mlx4_err(mdev, "Failed disabling multicast filter\n"); | 289 | en_err(priv, "Failed disabling multicast filter\n"); |
294 | } else { | 290 | } else { |
295 | err = mlx4_SET_MCAST_FLTR(mdev->dev, priv->port, 0, | 291 | err = mlx4_SET_MCAST_FLTR(mdev->dev, priv->port, 0, |
296 | 0, MLX4_MCAST_DISABLE); | 292 | 0, MLX4_MCAST_DISABLE); |
297 | if (err) | 293 | if (err) |
298 | mlx4_err(mdev, "Failed disabling multicast filter\n"); | 294 | en_err(priv, "Failed disabling multicast filter\n"); |
299 | 295 | ||
300 | /* Flush mcast filter and init it with broadcast address */ | 296 | /* Flush mcast filter and init it with broadcast address */ |
301 | mlx4_SET_MCAST_FLTR(mdev->dev, priv->port, ETH_BCAST, | 297 | mlx4_SET_MCAST_FLTR(mdev->dev, priv->port, ETH_BCAST, |
@@ -314,7 +310,7 @@ static void mlx4_en_do_set_multicast(struct work_struct *work) | |||
314 | err = mlx4_SET_MCAST_FLTR(mdev->dev, priv->port, 0, | 310 | err = mlx4_SET_MCAST_FLTR(mdev->dev, priv->port, 0, |
315 | 0, MLX4_MCAST_ENABLE); | 311 | 0, MLX4_MCAST_ENABLE); |
316 | if (err) | 312 | if (err) |
317 | mlx4_err(mdev, "Failed enabling multicast filter\n"); | 313 | en_err(priv, "Failed enabling multicast filter\n"); |
318 | 314 | ||
319 | mlx4_en_clear_list(dev); | 315 | mlx4_en_clear_list(dev); |
320 | } | 316 | } |
@@ -346,10 +342,10 @@ static void mlx4_en_tx_timeout(struct net_device *dev) | |||
346 | struct mlx4_en_dev *mdev = priv->mdev; | 342 | struct mlx4_en_dev *mdev = priv->mdev; |
347 | 343 | ||
348 | if (netif_msg_timer(priv)) | 344 | if (netif_msg_timer(priv)) |
349 | mlx4_warn(mdev, "Tx timeout called on port:%d\n", priv->port); | 345 | en_warn(priv, "Tx timeout called on port:%d\n", priv->port); |
350 | 346 | ||
351 | priv->port_stats.tx_timeout++; | 347 | priv->port_stats.tx_timeout++; |
352 | mlx4_dbg(DRV, priv, "Scheduling watchdog\n"); | 348 | en_dbg(DRV, priv, "Scheduling watchdog\n"); |
353 | queue_work(mdev->workqueue, &priv->watchdog_task); | 349 | queue_work(mdev->workqueue, &priv->watchdog_task); |
354 | } | 350 | } |
355 | 351 | ||
@@ -376,10 +372,10 @@ static void mlx4_en_set_default_moderation(struct mlx4_en_priv *priv) | |||
376 | * satisfy our coelsing target. | 372 | * satisfy our coelsing target. |
377 | * - moder_time is set to a fixed value. | 373 | * - moder_time is set to a fixed value. |
378 | */ | 374 | */ |
379 | priv->rx_frames = MLX4_EN_RX_COAL_TARGET / priv->dev->mtu + 1; | 375 | priv->rx_frames = MLX4_EN_RX_COAL_TARGET; |
380 | priv->rx_usecs = MLX4_EN_RX_COAL_TIME; | 376 | priv->rx_usecs = MLX4_EN_RX_COAL_TIME; |
381 | mlx4_dbg(INTR, priv, "Default coalesing params for mtu:%d - " | 377 | en_dbg(INTR, priv, "Default coalesing params for mtu:%d - " |
382 | "rx_frames:%d rx_usecs:%d\n", | 378 | "rx_frames:%d rx_usecs:%d\n", |
383 | priv->dev->mtu, priv->rx_frames, priv->rx_usecs); | 379 | priv->dev->mtu, priv->rx_frames, priv->rx_usecs); |
384 | 380 | ||
385 | /* Setup cq moderation params */ | 381 | /* Setup cq moderation params */ |
@@ -412,7 +408,6 @@ static void mlx4_en_set_default_moderation(struct mlx4_en_priv *priv) | |||
412 | static void mlx4_en_auto_moderation(struct mlx4_en_priv *priv) | 408 | static void mlx4_en_auto_moderation(struct mlx4_en_priv *priv) |
413 | { | 409 | { |
414 | unsigned long period = (unsigned long) (jiffies - priv->last_moder_jiffies); | 410 | unsigned long period = (unsigned long) (jiffies - priv->last_moder_jiffies); |
415 | struct mlx4_en_dev *mdev = priv->mdev; | ||
416 | struct mlx4_en_cq *cq; | 411 | struct mlx4_en_cq *cq; |
417 | unsigned long packets; | 412 | unsigned long packets; |
418 | unsigned long rate; | 413 | unsigned long rate; |
@@ -472,11 +467,11 @@ static void mlx4_en_auto_moderation(struct mlx4_en_priv *priv) | |||
472 | moder_time = priv->rx_usecs; | 467 | moder_time = priv->rx_usecs; |
473 | } | 468 | } |
474 | 469 | ||
475 | mlx4_dbg(INTR, priv, "tx rate:%lu rx_rate:%lu\n", | 470 | en_dbg(INTR, priv, "tx rate:%lu rx_rate:%lu\n", |
476 | tx_pkt_diff * HZ / period, rx_pkt_diff * HZ / period); | 471 | tx_pkt_diff * HZ / period, rx_pkt_diff * HZ / period); |
477 | 472 | ||
478 | mlx4_dbg(INTR, priv, "Rx moder_time changed from:%d to %d period:%lu " | 473 | en_dbg(INTR, priv, "Rx moder_time changed from:%d to %d period:%lu " |
479 | "[jiff] packets:%lu avg_pkt_size:%lu rate:%lu [p/s])\n", | 474 | "[jiff] packets:%lu avg_pkt_size:%lu rate:%lu [p/s])\n", |
480 | priv->last_moder_time, moder_time, period, packets, | 475 | priv->last_moder_time, moder_time, period, packets, |
481 | avg_pkt_size, rate); | 476 | avg_pkt_size, rate); |
482 | 477 | ||
@@ -487,8 +482,7 @@ static void mlx4_en_auto_moderation(struct mlx4_en_priv *priv) | |||
487 | cq->moder_time = moder_time; | 482 | cq->moder_time = moder_time; |
488 | err = mlx4_en_set_cq_moder(priv, cq); | 483 | err = mlx4_en_set_cq_moder(priv, cq); |
489 | if (err) { | 484 | if (err) { |
490 | mlx4_err(mdev, "Failed modifying moderation for cq:%d " | 485 | en_err(priv, "Failed modifying moderation for cq:%d\n", i); |
491 | "on port:%d\n", i, priv->port); | ||
492 | break; | 486 | break; |
493 | } | 487 | } |
494 | } | 488 | } |
@@ -511,8 +505,7 @@ static void mlx4_en_do_get_stats(struct work_struct *work) | |||
511 | 505 | ||
512 | err = mlx4_en_DUMP_ETH_STATS(mdev, priv->port, 0); | 506 | err = mlx4_en_DUMP_ETH_STATS(mdev, priv->port, 0); |
513 | if (err) | 507 | if (err) |
514 | mlx4_dbg(HW, priv, "Could not update stats for " | 508 | en_dbg(HW, priv, "Could not update stats \n"); |
515 | "port:%d\n", priv->port); | ||
516 | 509 | ||
517 | mutex_lock(&mdev->state_lock); | 510 | mutex_lock(&mdev->state_lock); |
518 | if (mdev->device_up) { | 511 | if (mdev->device_up) { |
@@ -536,12 +529,10 @@ static void mlx4_en_linkstate(struct work_struct *work) | |||
536 | * report to system log */ | 529 | * report to system log */ |
537 | if (priv->last_link_state != linkstate) { | 530 | if (priv->last_link_state != linkstate) { |
538 | if (linkstate == MLX4_DEV_EVENT_PORT_DOWN) { | 531 | if (linkstate == MLX4_DEV_EVENT_PORT_DOWN) { |
539 | if (netif_msg_link(priv)) | 532 | en_dbg(LINK, priv, "Link Down\n"); |
540 | mlx4_info(mdev, "Port %d - link down\n", priv->port); | ||
541 | netif_carrier_off(priv->dev); | 533 | netif_carrier_off(priv->dev); |
542 | } else { | 534 | } else { |
543 | if (netif_msg_link(priv)) | 535 | en_dbg(LINK, priv, "Link Up\n"); |
544 | mlx4_info(mdev, "Port %d - link up\n", priv->port); | ||
545 | netif_carrier_on(priv->dev); | 536 | netif_carrier_on(priv->dev); |
546 | } | 537 | } |
547 | } | 538 | } |
@@ -556,58 +547,53 @@ int mlx4_en_start_port(struct net_device *dev) | |||
556 | struct mlx4_en_dev *mdev = priv->mdev; | 547 | struct mlx4_en_dev *mdev = priv->mdev; |
557 | struct mlx4_en_cq *cq; | 548 | struct mlx4_en_cq *cq; |
558 | struct mlx4_en_tx_ring *tx_ring; | 549 | struct mlx4_en_tx_ring *tx_ring; |
559 | struct mlx4_en_rx_ring *rx_ring; | ||
560 | int rx_index = 0; | 550 | int rx_index = 0; |
561 | int tx_index = 0; | 551 | int tx_index = 0; |
562 | u16 stride; | ||
563 | int err = 0; | 552 | int err = 0; |
564 | int i; | 553 | int i; |
565 | int j; | 554 | int j; |
566 | 555 | ||
567 | if (priv->port_up) { | 556 | if (priv->port_up) { |
568 | mlx4_dbg(DRV, priv, "start port called while port already up\n"); | 557 | en_dbg(DRV, priv, "start port called while port already up\n"); |
569 | return 0; | 558 | return 0; |
570 | } | 559 | } |
571 | 560 | ||
572 | /* Calculate Rx buf size */ | 561 | /* Calculate Rx buf size */ |
573 | dev->mtu = min(dev->mtu, priv->max_mtu); | 562 | dev->mtu = min(dev->mtu, priv->max_mtu); |
574 | mlx4_en_calc_rx_buf(dev); | 563 | mlx4_en_calc_rx_buf(dev); |
575 | mlx4_dbg(DRV, priv, "Rx buf size:%d\n", priv->rx_skb_size); | 564 | en_dbg(DRV, priv, "Rx buf size:%d\n", priv->rx_skb_size); |
576 | stride = roundup_pow_of_two(sizeof(struct mlx4_en_rx_desc) + | 565 | |
577 | DS_SIZE * priv->num_frags); | ||
578 | /* Configure rx cq's and rings */ | 566 | /* Configure rx cq's and rings */ |
567 | err = mlx4_en_activate_rx_rings(priv); | ||
568 | if (err) { | ||
569 | en_err(priv, "Failed to activate RX rings\n"); | ||
570 | return err; | ||
571 | } | ||
579 | for (i = 0; i < priv->rx_ring_num; i++) { | 572 | for (i = 0; i < priv->rx_ring_num; i++) { |
580 | cq = &priv->rx_cq[i]; | 573 | cq = &priv->rx_cq[i]; |
581 | rx_ring = &priv->rx_ring[i]; | ||
582 | 574 | ||
583 | err = mlx4_en_activate_cq(priv, cq); | 575 | err = mlx4_en_activate_cq(priv, cq); |
584 | if (err) { | 576 | if (err) { |
585 | mlx4_err(mdev, "Failed activating Rx CQ\n"); | 577 | en_err(priv, "Failed activating Rx CQ\n"); |
586 | goto cq_err; | 578 | goto cq_err; |
587 | } | 579 | } |
588 | for (j = 0; j < cq->size; j++) | 580 | for (j = 0; j < cq->size; j++) |
589 | cq->buf[j].owner_sr_opcode = MLX4_CQE_OWNER_MASK; | 581 | cq->buf[j].owner_sr_opcode = MLX4_CQE_OWNER_MASK; |
590 | err = mlx4_en_set_cq_moder(priv, cq); | 582 | err = mlx4_en_set_cq_moder(priv, cq); |
591 | if (err) { | 583 | if (err) { |
592 | mlx4_err(mdev, "Failed setting cq moderation parameters"); | 584 | en_err(priv, "Failed setting cq moderation parameters"); |
593 | mlx4_en_deactivate_cq(priv, cq); | 585 | mlx4_en_deactivate_cq(priv, cq); |
594 | goto cq_err; | 586 | goto cq_err; |
595 | } | 587 | } |
596 | mlx4_en_arm_cq(priv, cq); | 588 | mlx4_en_arm_cq(priv, cq); |
597 | 589 | priv->rx_ring[i].cqn = cq->mcq.cqn; | |
598 | ++rx_index; | 590 | ++rx_index; |
599 | } | 591 | } |
600 | 592 | ||
601 | err = mlx4_en_activate_rx_rings(priv); | ||
602 | if (err) { | ||
603 | mlx4_err(mdev, "Failed to activate RX rings\n"); | ||
604 | goto cq_err; | ||
605 | } | ||
606 | |||
607 | err = mlx4_en_config_rss_steer(priv); | 593 | err = mlx4_en_config_rss_steer(priv); |
608 | if (err) { | 594 | if (err) { |
609 | mlx4_err(mdev, "Failed configuring rss steering\n"); | 595 | en_err(priv, "Failed configuring rss steering\n"); |
610 | goto rx_err; | 596 | goto cq_err; |
611 | } | 597 | } |
612 | 598 | ||
613 | /* Configure tx cq's and rings */ | 599 | /* Configure tx cq's and rings */ |
@@ -616,16 +602,16 @@ int mlx4_en_start_port(struct net_device *dev) | |||
616 | cq = &priv->tx_cq[i]; | 602 | cq = &priv->tx_cq[i]; |
617 | err = mlx4_en_activate_cq(priv, cq); | 603 | err = mlx4_en_activate_cq(priv, cq); |
618 | if (err) { | 604 | if (err) { |
619 | mlx4_err(mdev, "Failed allocating Tx CQ\n"); | 605 | en_err(priv, "Failed allocating Tx CQ\n"); |
620 | goto tx_err; | 606 | goto tx_err; |
621 | } | 607 | } |
622 | err = mlx4_en_set_cq_moder(priv, cq); | 608 | err = mlx4_en_set_cq_moder(priv, cq); |
623 | if (err) { | 609 | if (err) { |
624 | mlx4_err(mdev, "Failed setting cq moderation parameters"); | 610 | en_err(priv, "Failed setting cq moderation parameters"); |
625 | mlx4_en_deactivate_cq(priv, cq); | 611 | mlx4_en_deactivate_cq(priv, cq); |
626 | goto tx_err; | 612 | goto tx_err; |
627 | } | 613 | } |
628 | mlx4_dbg(DRV, priv, "Resetting index of collapsed CQ:%d to -1\n", i); | 614 | en_dbg(DRV, priv, "Resetting index of collapsed CQ:%d to -1\n", i); |
629 | cq->buf->wqe_index = cpu_to_be16(0xffff); | 615 | cq->buf->wqe_index = cpu_to_be16(0xffff); |
630 | 616 | ||
631 | /* Configure ring */ | 617 | /* Configure ring */ |
@@ -633,7 +619,7 @@ int mlx4_en_start_port(struct net_device *dev) | |||
633 | err = mlx4_en_activate_tx_ring(priv, tx_ring, cq->mcq.cqn, | 619 | err = mlx4_en_activate_tx_ring(priv, tx_ring, cq->mcq.cqn, |
634 | priv->rx_ring[0].srq.srqn); | 620 | priv->rx_ring[0].srq.srqn); |
635 | if (err) { | 621 | if (err) { |
636 | mlx4_err(mdev, "Failed allocating Tx ring\n"); | 622 | en_err(priv, "Failed allocating Tx ring\n"); |
637 | mlx4_en_deactivate_cq(priv, cq); | 623 | mlx4_en_deactivate_cq(priv, cq); |
638 | goto tx_err; | 624 | goto tx_err; |
639 | } | 625 | } |
@@ -651,30 +637,30 @@ int mlx4_en_start_port(struct net_device *dev) | |||
651 | priv->prof->rx_pause, | 637 | priv->prof->rx_pause, |
652 | priv->prof->rx_ppp); | 638 | priv->prof->rx_ppp); |
653 | if (err) { | 639 | if (err) { |
654 | mlx4_err(mdev, "Failed setting port general configurations" | 640 | en_err(priv, "Failed setting port general configurations " |
655 | " for port %d, with error %d\n", priv->port, err); | 641 | "for port %d, with error %d\n", priv->port, err); |
656 | goto tx_err; | 642 | goto tx_err; |
657 | } | 643 | } |
658 | /* Set default qp number */ | 644 | /* Set default qp number */ |
659 | err = mlx4_SET_PORT_qpn_calc(mdev->dev, priv->port, priv->base_qpn, 0); | 645 | err = mlx4_SET_PORT_qpn_calc(mdev->dev, priv->port, priv->base_qpn, 0); |
660 | if (err) { | 646 | if (err) { |
661 | mlx4_err(mdev, "Failed setting default qp numbers\n"); | 647 | en_err(priv, "Failed setting default qp numbers\n"); |
662 | goto tx_err; | 648 | goto tx_err; |
663 | } | 649 | } |
664 | /* Set port mac number */ | 650 | /* Set port mac number */ |
665 | mlx4_dbg(DRV, priv, "Setting mac for port %d\n", priv->port); | 651 | en_dbg(DRV, priv, "Setting mac for port %d\n", priv->port); |
666 | err = mlx4_register_mac(mdev->dev, priv->port, | 652 | err = mlx4_register_mac(mdev->dev, priv->port, |
667 | priv->mac, &priv->mac_index); | 653 | priv->mac, &priv->mac_index); |
668 | if (err) { | 654 | if (err) { |
669 | mlx4_err(mdev, "Failed setting port mac\n"); | 655 | en_err(priv, "Failed setting port mac\n"); |
670 | goto tx_err; | 656 | goto tx_err; |
671 | } | 657 | } |
672 | 658 | ||
673 | /* Init port */ | 659 | /* Init port */ |
674 | mlx4_dbg(HW, priv, "Initializing port\n"); | 660 | en_dbg(HW, priv, "Initializing port\n"); |
675 | err = mlx4_INIT_PORT(mdev->dev, priv->port); | 661 | err = mlx4_INIT_PORT(mdev->dev, priv->port); |
676 | if (err) { | 662 | if (err) { |
677 | mlx4_err(mdev, "Failed Initializing port\n"); | 663 | en_err(priv, "Failed Initializing port\n"); |
678 | goto mac_err; | 664 | goto mac_err; |
679 | } | 665 | } |
680 | 666 | ||
@@ -694,12 +680,11 @@ tx_err: | |||
694 | } | 680 | } |
695 | 681 | ||
696 | mlx4_en_release_rss_steer(priv); | 682 | mlx4_en_release_rss_steer(priv); |
697 | rx_err: | ||
698 | for (i = 0; i < priv->rx_ring_num; i++) | ||
699 | mlx4_en_deactivate_rx_ring(priv, &priv->rx_ring[i]); | ||
700 | cq_err: | 683 | cq_err: |
701 | while (rx_index--) | 684 | while (rx_index--) |
702 | mlx4_en_deactivate_cq(priv, &priv->rx_cq[rx_index]); | 685 | mlx4_en_deactivate_cq(priv, &priv->rx_cq[rx_index]); |
686 | for (i = 0; i < priv->rx_ring_num; i++) | ||
687 | mlx4_en_deactivate_rx_ring(priv, &priv->rx_ring[i]); | ||
703 | 688 | ||
704 | return err; /* need to close devices */ | 689 | return err; /* need to close devices */ |
705 | } | 690 | } |
@@ -712,8 +697,7 @@ void mlx4_en_stop_port(struct net_device *dev) | |||
712 | int i; | 697 | int i; |
713 | 698 | ||
714 | if (!priv->port_up) { | 699 | if (!priv->port_up) { |
715 | mlx4_dbg(DRV, priv, "stop port (%d) called while port already down\n", | 700 | en_dbg(DRV, priv, "stop port called while port already down\n"); |
716 | priv->port); | ||
717 | return; | 701 | return; |
718 | } | 702 | } |
719 | netif_stop_queue(dev); | 703 | netif_stop_queue(dev); |
@@ -758,13 +742,13 @@ static void mlx4_en_restart(struct work_struct *work) | |||
758 | struct mlx4_en_dev *mdev = priv->mdev; | 742 | struct mlx4_en_dev *mdev = priv->mdev; |
759 | struct net_device *dev = priv->dev; | 743 | struct net_device *dev = priv->dev; |
760 | 744 | ||
761 | mlx4_dbg(DRV, priv, "Watchdog task called for port %d\n", priv->port); | 745 | en_dbg(DRV, priv, "Watchdog task called for port %d\n", priv->port); |
762 | 746 | ||
763 | mutex_lock(&mdev->state_lock); | 747 | mutex_lock(&mdev->state_lock); |
764 | if (priv->port_up) { | 748 | if (priv->port_up) { |
765 | mlx4_en_stop_port(dev); | 749 | mlx4_en_stop_port(dev); |
766 | if (mlx4_en_start_port(dev)) | 750 | if (mlx4_en_start_port(dev)) |
767 | mlx4_err(mdev, "Failed restarting port %d\n", priv->port); | 751 | en_err(priv, "Failed restarting port %d\n", priv->port); |
768 | } | 752 | } |
769 | mutex_unlock(&mdev->state_lock); | 753 | mutex_unlock(&mdev->state_lock); |
770 | } | 754 | } |
@@ -780,14 +764,14 @@ static int mlx4_en_open(struct net_device *dev) | |||
780 | mutex_lock(&mdev->state_lock); | 764 | mutex_lock(&mdev->state_lock); |
781 | 765 | ||
782 | if (!mdev->device_up) { | 766 | if (!mdev->device_up) { |
783 | mlx4_err(mdev, "Cannot open - device down/disabled\n"); | 767 | en_err(priv, "Cannot open - device down/disabled\n"); |
784 | err = -EBUSY; | 768 | err = -EBUSY; |
785 | goto out; | 769 | goto out; |
786 | } | 770 | } |
787 | 771 | ||
788 | /* Reset HW statistics and performance counters */ | 772 | /* Reset HW statistics and performance counters */ |
789 | if (mlx4_en_DUMP_ETH_STATS(mdev, priv->port, 1)) | 773 | if (mlx4_en_DUMP_ETH_STATS(mdev, priv->port, 1)) |
790 | mlx4_dbg(HW, priv, "Failed dumping statistics\n"); | 774 | en_dbg(HW, priv, "Failed dumping statistics\n"); |
791 | 775 | ||
792 | memset(&priv->stats, 0, sizeof(priv->stats)); | 776 | memset(&priv->stats, 0, sizeof(priv->stats)); |
793 | memset(&priv->pstats, 0, sizeof(priv->pstats)); | 777 | memset(&priv->pstats, 0, sizeof(priv->pstats)); |
@@ -804,7 +788,7 @@ static int mlx4_en_open(struct net_device *dev) | |||
804 | mlx4_en_set_default_moderation(priv); | 788 | mlx4_en_set_default_moderation(priv); |
805 | err = mlx4_en_start_port(dev); | 789 | err = mlx4_en_start_port(dev); |
806 | if (err) | 790 | if (err) |
807 | mlx4_err(mdev, "Failed starting port:%d\n", priv->port); | 791 | en_err(priv, "Failed starting port:%d\n", priv->port); |
808 | 792 | ||
809 | out: | 793 | out: |
810 | mutex_unlock(&mdev->state_lock); | 794 | mutex_unlock(&mdev->state_lock); |
@@ -817,8 +801,7 @@ static int mlx4_en_close(struct net_device *dev) | |||
817 | struct mlx4_en_priv *priv = netdev_priv(dev); | 801 | struct mlx4_en_priv *priv = netdev_priv(dev); |
818 | struct mlx4_en_dev *mdev = priv->mdev; | 802 | struct mlx4_en_dev *mdev = priv->mdev; |
819 | 803 | ||
820 | if (netif_msg_ifdown(priv)) | 804 | en_dbg(IFDOWN, priv, "Close port called\n"); |
821 | mlx4_info(mdev, "Close called for port:%d\n", priv->port); | ||
822 | 805 | ||
823 | mutex_lock(&mdev->state_lock); | 806 | mutex_lock(&mdev->state_lock); |
824 | 807 | ||
@@ -850,7 +833,6 @@ void mlx4_en_free_resources(struct mlx4_en_priv *priv) | |||
850 | 833 | ||
851 | int mlx4_en_alloc_resources(struct mlx4_en_priv *priv) | 834 | int mlx4_en_alloc_resources(struct mlx4_en_priv *priv) |
852 | { | 835 | { |
853 | struct mlx4_en_dev *mdev = priv->mdev; | ||
854 | struct mlx4_en_port_profile *prof = priv->prof; | 836 | struct mlx4_en_port_profile *prof = priv->prof; |
855 | int i; | 837 | int i; |
856 | 838 | ||
@@ -879,7 +861,7 @@ int mlx4_en_alloc_resources(struct mlx4_en_priv *priv) | |||
879 | return 0; | 861 | return 0; |
880 | 862 | ||
881 | err: | 863 | err: |
882 | mlx4_err(mdev, "Failed to allocate NIC resources\n"); | 864 | en_err(priv, "Failed to allocate NIC resources\n"); |
883 | return -ENOMEM; | 865 | return -ENOMEM; |
884 | } | 866 | } |
885 | 867 | ||
@@ -889,7 +871,7 @@ void mlx4_en_destroy_netdev(struct net_device *dev) | |||
889 | struct mlx4_en_priv *priv = netdev_priv(dev); | 871 | struct mlx4_en_priv *priv = netdev_priv(dev); |
890 | struct mlx4_en_dev *mdev = priv->mdev; | 872 | struct mlx4_en_dev *mdev = priv->mdev; |
891 | 873 | ||
892 | mlx4_dbg(DRV, priv, "Destroying netdev on port:%d\n", priv->port); | 874 | en_dbg(DRV, priv, "Destroying netdev on port:%d\n", priv->port); |
893 | 875 | ||
894 | /* Unregister device - this will close the port if it was up */ | 876 | /* Unregister device - this will close the port if it was up */ |
895 | if (priv->registered) | 877 | if (priv->registered) |
@@ -918,11 +900,11 @@ static int mlx4_en_change_mtu(struct net_device *dev, int new_mtu) | |||
918 | struct mlx4_en_dev *mdev = priv->mdev; | 900 | struct mlx4_en_dev *mdev = priv->mdev; |
919 | int err = 0; | 901 | int err = 0; |
920 | 902 | ||
921 | mlx4_dbg(DRV, priv, "Change MTU called - current:%d new:%d\n", | 903 | en_dbg(DRV, priv, "Change MTU called - current:%d new:%d\n", |
922 | dev->mtu, new_mtu); | 904 | dev->mtu, new_mtu); |
923 | 905 | ||
924 | if ((new_mtu < MLX4_EN_MIN_MTU) || (new_mtu > priv->max_mtu)) { | 906 | if ((new_mtu < MLX4_EN_MIN_MTU) || (new_mtu > priv->max_mtu)) { |
925 | mlx4_err(mdev, "Bad MTU size:%d.\n", new_mtu); | 907 | en_err(priv, "Bad MTU size:%d.\n", new_mtu); |
926 | return -EPERM; | 908 | return -EPERM; |
927 | } | 909 | } |
928 | dev->mtu = new_mtu; | 910 | dev->mtu = new_mtu; |
@@ -932,13 +914,13 @@ static int mlx4_en_change_mtu(struct net_device *dev, int new_mtu) | |||
932 | if (!mdev->device_up) { | 914 | if (!mdev->device_up) { |
933 | /* NIC is probably restarting - let watchdog task reset | 915 | /* NIC is probably restarting - let watchdog task reset |
934 | * the port */ | 916 | * the port */ |
935 | mlx4_dbg(DRV, priv, "Change MTU called with card down!?\n"); | 917 | en_dbg(DRV, priv, "Change MTU called with card down!?\n"); |
936 | } else { | 918 | } else { |
937 | mlx4_en_stop_port(dev); | 919 | mlx4_en_stop_port(dev); |
938 | mlx4_en_set_default_moderation(priv); | 920 | mlx4_en_set_default_moderation(priv); |
939 | err = mlx4_en_start_port(dev); | 921 | err = mlx4_en_start_port(dev); |
940 | if (err) { | 922 | if (err) { |
941 | mlx4_err(mdev, "Failed restarting port:%d\n", | 923 | en_err(priv, "Failed restarting port:%d\n", |
942 | priv->port); | 924 | priv->port); |
943 | queue_work(mdev->workqueue, &priv->watchdog_task); | 925 | queue_work(mdev->workqueue, &priv->watchdog_task); |
944 | } | 926 | } |
@@ -952,6 +934,7 @@ static const struct net_device_ops mlx4_netdev_ops = { | |||
952 | .ndo_open = mlx4_en_open, | 934 | .ndo_open = mlx4_en_open, |
953 | .ndo_stop = mlx4_en_close, | 935 | .ndo_stop = mlx4_en_close, |
954 | .ndo_start_xmit = mlx4_en_xmit, | 936 | .ndo_start_xmit = mlx4_en_xmit, |
937 | .ndo_select_queue = mlx4_en_select_queue, | ||
955 | .ndo_get_stats = mlx4_en_get_stats, | 938 | .ndo_get_stats = mlx4_en_get_stats, |
956 | .ndo_set_multicast_list = mlx4_en_set_multicast, | 939 | .ndo_set_multicast_list = mlx4_en_set_multicast, |
957 | .ndo_set_mac_address = mlx4_en_set_mac, | 940 | .ndo_set_mac_address = mlx4_en_set_mac, |
@@ -974,7 +957,7 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, | |||
974 | int i; | 957 | int i; |
975 | int err; | 958 | int err; |
976 | 959 | ||
977 | dev = alloc_etherdev(sizeof(struct mlx4_en_priv)); | 960 | dev = alloc_etherdev_mq(sizeof(struct mlx4_en_priv), prof->tx_ring_num); |
978 | if (dev == NULL) { | 961 | if (dev == NULL) { |
979 | mlx4_err(mdev, "Net device allocation failed\n"); | 962 | mlx4_err(mdev, "Net device allocation failed\n"); |
980 | return -ENOMEM; | 963 | return -ENOMEM; |
@@ -1012,7 +995,7 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, | |||
1012 | priv->max_mtu = mdev->dev->caps.eth_mtu_cap[priv->port]; | 995 | priv->max_mtu = mdev->dev->caps.eth_mtu_cap[priv->port]; |
1013 | priv->mac = mdev->dev->caps.def_mac[priv->port]; | 996 | priv->mac = mdev->dev->caps.def_mac[priv->port]; |
1014 | if (ILLEGAL_MAC(priv->mac)) { | 997 | if (ILLEGAL_MAC(priv->mac)) { |
1015 | mlx4_err(mdev, "Port: %d, invalid mac burned: 0x%llx, quiting\n", | 998 | en_err(priv, "Port: %d, invalid mac burned: 0x%llx, quiting\n", |
1016 | priv->port, priv->mac); | 999 | priv->port, priv->mac); |
1017 | err = -EINVAL; | 1000 | err = -EINVAL; |
1018 | goto out; | 1001 | goto out; |
@@ -1031,19 +1014,17 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, | |||
1031 | err = mlx4_alloc_hwq_res(mdev->dev, &priv->res, | 1014 | err = mlx4_alloc_hwq_res(mdev->dev, &priv->res, |
1032 | MLX4_EN_PAGE_SIZE, MLX4_EN_PAGE_SIZE); | 1015 | MLX4_EN_PAGE_SIZE, MLX4_EN_PAGE_SIZE); |
1033 | if (err) { | 1016 | if (err) { |
1034 | mlx4_err(mdev, "Failed to allocate page for rx qps\n"); | 1017 | en_err(priv, "Failed to allocate page for rx qps\n"); |
1035 | goto out; | 1018 | goto out; |
1036 | } | 1019 | } |
1037 | priv->allocated = 1; | 1020 | priv->allocated = 1; |
1038 | 1021 | ||
1039 | /* Populate Tx priority mappings */ | ||
1040 | mlx4_en_set_prio_map(priv, priv->tx_prio_map, prof->tx_ring_num); | ||
1041 | |||
1042 | /* | 1022 | /* |
1043 | * Initialize netdev entry points | 1023 | * Initialize netdev entry points |
1044 | */ | 1024 | */ |
1045 | dev->netdev_ops = &mlx4_netdev_ops; | 1025 | dev->netdev_ops = &mlx4_netdev_ops; |
1046 | dev->watchdog_timeo = MLX4_EN_WATCHDOG_TIMEOUT; | 1026 | dev->watchdog_timeo = MLX4_EN_WATCHDOG_TIMEOUT; |
1027 | dev->real_num_tx_queues = MLX4_EN_NUM_TX_RINGS; | ||
1047 | 1028 | ||
1048 | SET_ETHTOOL_OPS(dev, &mlx4_en_ethtool_ops); | 1029 | SET_ETHTOOL_OPS(dev, &mlx4_en_ethtool_ops); |
1049 | 1030 | ||
@@ -1057,7 +1038,9 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, | |||
1057 | * Set driver features | 1038 | * Set driver features |
1058 | */ | 1039 | */ |
1059 | dev->features |= NETIF_F_SG; | 1040 | dev->features |= NETIF_F_SG; |
1041 | dev->vlan_features |= NETIF_F_SG; | ||
1060 | dev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; | 1042 | dev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; |
1043 | dev->vlan_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; | ||
1061 | dev->features |= NETIF_F_HIGHDMA; | 1044 | dev->features |= NETIF_F_HIGHDMA; |
1062 | dev->features |= NETIF_F_HW_VLAN_TX | | 1045 | dev->features |= NETIF_F_HW_VLAN_TX | |
1063 | NETIF_F_HW_VLAN_RX | | 1046 | NETIF_F_HW_VLAN_RX | |
@@ -1067,6 +1050,8 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, | |||
1067 | if (mdev->LSO_support) { | 1050 | if (mdev->LSO_support) { |
1068 | dev->features |= NETIF_F_TSO; | 1051 | dev->features |= NETIF_F_TSO; |
1069 | dev->features |= NETIF_F_TSO6; | 1052 | dev->features |= NETIF_F_TSO6; |
1053 | dev->vlan_features |= NETIF_F_TSO; | ||
1054 | dev->vlan_features |= NETIF_F_TSO6; | ||
1070 | } | 1055 | } |
1071 | 1056 | ||
1072 | mdev->pndev[port] = dev; | 1057 | mdev->pndev[port] = dev; |
@@ -1074,9 +1059,13 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, | |||
1074 | netif_carrier_off(dev); | 1059 | netif_carrier_off(dev); |
1075 | err = register_netdev(dev); | 1060 | err = register_netdev(dev); |
1076 | if (err) { | 1061 | if (err) { |
1077 | mlx4_err(mdev, "Netdev registration failed\n"); | 1062 | en_err(priv, "Netdev registration failed for port %d\n", port); |
1078 | goto out; | 1063 | goto out; |
1079 | } | 1064 | } |
1065 | |||
1066 | en_warn(priv, "Using %d TX rings\n", prof->tx_ring_num); | ||
1067 | en_warn(priv, "Using %d RX rings\n", prof->rx_ring_num); | ||
1068 | |||
1080 | priv->registered = 1; | 1069 | priv->registered = 1; |
1081 | queue_delayed_work(mdev->workqueue, &priv->stats_task, STATS_DELAY); | 1070 | queue_delayed_work(mdev->workqueue, &priv->stats_task, STATS_DELAY); |
1082 | return 0; | 1071 | return 0; |