From fea903ecd799ec49a2ebc4cc8cfb7bb96fd31ddc Mon Sep 17 00:00:00 2001 From: Jon Mason Date: Fri, 22 Nov 2013 16:44:13 -0700 Subject: ntb_netdev: Fix list_for_each_entry exit issue If list_for_each_entry exits without finding the ntb_device, the dev pointer will not be NULL. Thus the check will never be true and the code will not exit when it should. Correct this by adding a bool to determine when the device is found, otherwise exit in good fashion. Signed-off-by: Jon Mason --- drivers/net/ntb_netdev.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'drivers/net/ntb_netdev.c') diff --git a/drivers/net/ntb_netdev.c b/drivers/net/ntb_netdev.c index f3cdf64997d6..8298880bfdd8 100644 --- a/drivers/net/ntb_netdev.c +++ b/drivers/net/ntb_netdev.c @@ -367,12 +367,15 @@ static void ntb_netdev_remove(struct pci_dev *pdev) { struct net_device *ndev; struct ntb_netdev *dev; + bool found = false; list_for_each_entry(dev, &dev_list, list) { - if (dev->pdev == pdev) + if (dev->pdev == pdev) { + found = true; break; + } } - if (dev == NULL) + if (!found) return; list_del(&dev->list); -- cgit v1.2.2 From e8bc2ebdceea3c0c6de16d899f0679654c308739 Mon Sep 17 00:00:00 2001 From: Jon Mason Date: Fri, 22 Nov 2013 16:50:57 -0700 Subject: ntb_netdev: Fix skb free issue in open In ntb_netdev_open, when ntb_transport_rx_enqueue fails the skb that was attempting to be enqueued is not freed. Free this skb on the ntb_transport_rx_enqueue error. Signed-off-by: Jon Mason --- drivers/net/ntb_netdev.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'drivers/net/ntb_netdev.c') diff --git a/drivers/net/ntb_netdev.c b/drivers/net/ntb_netdev.c index 8298880bfdd8..8e6752fd89ac 100644 --- a/drivers/net/ntb_netdev.c +++ b/drivers/net/ntb_netdev.c @@ -182,8 +182,10 @@ static int ntb_netdev_open(struct net_device *ndev) rc = ntb_transport_rx_enqueue(dev->qp, skb, skb->data, ndev->mtu + ETH_HLEN); - if (rc == -EINVAL) + if (rc == -EINVAL) { + dev_kfree_skb(skb); goto err; + } } netif_carrier_off(ndev); -- cgit v1.2.2 From 403c63cb6d7ec2caca2f9222ff843ac89d7d700a Mon Sep 17 00:00:00 2001 From: Jon Mason Date: Mon, 29 Jul 2013 16:31:18 -0700 Subject: NTB: client event cleanup Provide a better event interface between the client and transport Signed-off-by: Jon Mason --- drivers/net/ntb_netdev.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'drivers/net/ntb_netdev.c') diff --git a/drivers/net/ntb_netdev.c b/drivers/net/ntb_netdev.c index 8e6752fd89ac..14570b28d528 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) netdev_dbg(ndev, "Event %x, Link %x\n", status, ntb_transport_link_query(dev->qp)); - /* Currently, only link status event is supported */ - if (status) - netif_carrier_on(ndev); - else + switch (status) { + case NTB_LINK_DOWN: netif_carrier_off(ndev); + break; + case NTB_LINK_UP: + if (!ntb_transport_link_query(dev->qp)) + return; + + netif_carrier_on(ndev); + break; + default: + netdev_warn(ndev, "Unsupported event type %d\n", status); + } } static void ntb_netdev_rx_handler(struct ntb_transport_qp *qp, void *qp_data, -- cgit v1.2.2 From 53ca4fea0bbe966b3123509125898b286a136f47 Mon Sep 17 00:00:00 2001 From: Jon Mason Date: Tue, 26 Nov 2013 11:21:50 -0700 Subject: NTB: Code Style Clean-up Some white space and 80 char overruns corrected. Signed-off-by: Jon Mason --- drivers/net/ntb_netdev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/net/ntb_netdev.c') diff --git a/drivers/net/ntb_netdev.c b/drivers/net/ntb_netdev.c index 14570b28d528..63aa9d9e34c5 100644 --- a/drivers/net/ntb_netdev.c +++ b/drivers/net/ntb_netdev.c @@ -377,7 +377,7 @@ static void ntb_netdev_remove(struct pci_dev *pdev) { struct net_device *ndev; struct ntb_netdev *dev; - bool found = false; + bool found = false; list_for_each_entry(dev, &dev_list, list) { if (dev->pdev == pdev) { -- cgit v1.2.2