aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/ntb_netdev.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/drivers/net/ntb_netdev.c b/drivers/net/ntb_netdev.c
index f3cdf64997d6..63aa9d9e34c5 100644
--- a/drivers/net/ntb_netdev.c
+++ b/drivers/net/ntb_netdev.c
@@ -78,11 +78,19 @@ static void ntb_netdev_event_handler(void *data, int status)
78 netdev_dbg(ndev, "Event %x, Link %x\n", status, 78 netdev_dbg(ndev, "Event %x, Link %x\n", status,
79 ntb_transport_link_query(dev->qp)); 79 ntb_transport_link_query(dev->qp));
80 80
81 /* Currently, only link status event is supported */ 81 switch (status) {
82 if (status) 82 case NTB_LINK_DOWN:
83 netif_carrier_on(ndev);
84 else
85 netif_carrier_off(ndev); 83 netif_carrier_off(ndev);
84 break;
85 case NTB_LINK_UP:
86 if (!ntb_transport_link_query(dev->qp))
87 return;
88
89 netif_carrier_on(ndev);
90 break;
91 default:
92 netdev_warn(ndev, "Unsupported event type %d\n", status);
93 }
86} 94}
87 95
88static void ntb_netdev_rx_handler(struct ntb_transport_qp *qp, void *qp_data, 96static void ntb_netdev_rx_handler(struct ntb_transport_qp *qp, void *qp_data,
@@ -182,8 +190,10 @@ static int ntb_netdev_open(struct net_device *ndev)
182 190
183 rc = ntb_transport_rx_enqueue(dev->qp, skb, skb->data, 191 rc = ntb_transport_rx_enqueue(dev->qp, skb, skb->data,
184 ndev->mtu + ETH_HLEN); 192 ndev->mtu + ETH_HLEN);
185 if (rc == -EINVAL) 193 if (rc == -EINVAL) {
194 dev_kfree_skb(skb);
186 goto err; 195 goto err;
196 }
187 } 197 }
188 198
189 netif_carrier_off(ndev); 199 netif_carrier_off(ndev);
@@ -367,12 +377,15 @@ static void ntb_netdev_remove(struct pci_dev *pdev)
367{ 377{
368 struct net_device *ndev; 378 struct net_device *ndev;
369 struct ntb_netdev *dev; 379 struct ntb_netdev *dev;
380 bool found = false;
370 381
371 list_for_each_entry(dev, &dev_list, list) { 382 list_for_each_entry(dev, &dev_list, list) {
372 if (dev->pdev == pdev) 383 if (dev->pdev == pdev) {
384 found = true;
373 break; 385 break;
386 }
374 } 387 }
375 if (dev == NULL) 388 if (!found)
376 return; 389 return;
377 390
378 list_del(&dev->list); 391 list_del(&dev->list);