]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/net/ethernet/mellanox/mlx4/en_netdev.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[mirror_ubuntu-bionic-kernel.git] / drivers / net / ethernet / mellanox / mlx4 / en_netdev.c
index 886e1bc86374d990fc92655c7e1b40a3d611b45c..0c7e3f69a73bb6f787b8387efd3d34624a188568 100644 (file)
@@ -69,34 +69,6 @@ int mlx4_en_setup_tc(struct net_device *dev, u8 up)
        return 0;
 }
 
-#ifdef CONFIG_NET_RX_BUSY_POLL
-/* must be called with local_bh_disable()d */
-static int mlx4_en_low_latency_recv(struct napi_struct *napi)
-{
-       struct mlx4_en_cq *cq = container_of(napi, struct mlx4_en_cq, napi);
-       struct net_device *dev = cq->dev;
-       struct mlx4_en_priv *priv = netdev_priv(dev);
-       struct mlx4_en_rx_ring *rx_ring = priv->rx_ring[cq->ring];
-       int done;
-
-       if (!priv->port_up)
-               return LL_FLUSH_FAILED;
-
-       if (!mlx4_en_cq_lock_poll(cq))
-               return LL_FLUSH_BUSY;
-
-       done = mlx4_en_process_rx_cq(dev, cq, 4);
-       if (likely(done))
-               rx_ring->cleaned += done;
-       else
-               rx_ring->misses++;
-
-       mlx4_en_cq_unlock_poll(cq);
-
-       return done;
-}
-#endif /* CONFIG_NET_RX_BUSY_POLL */
-
 #ifdef CONFIG_RFS_ACCEL
 
 struct mlx4_en_filter {
@@ -1561,8 +1533,6 @@ int mlx4_en_start_port(struct net_device *dev)
        for (i = 0; i < priv->rx_ring_num; i++) {
                cq = priv->rx_cq[i];
 
-               mlx4_en_cq_init_lock(cq);
-
                err = mlx4_en_init_affinity_hint(priv, i);
                if (err) {
                        en_err(priv, "Failed preparing IRQ affinity hint\n");
@@ -1859,13 +1829,6 @@ void mlx4_en_stop_port(struct net_device *dev, int detach)
        for (i = 0; i < priv->rx_ring_num; i++) {
                struct mlx4_en_cq *cq = priv->rx_cq[i];
 
-               local_bh_disable();
-               while (!mlx4_en_cq_lock_napi(cq)) {
-                       pr_info("CQ %d locked\n", i);
-                       mdelay(1);
-               }
-               local_bh_enable();
-
                napi_synchronize(&cq->napi);
                mlx4_en_deactivate_rx_ring(priv, priv->rx_ring[i]);
                mlx4_en_deactivate_cq(priv, cq);
@@ -2072,6 +2035,9 @@ void mlx4_en_destroy_netdev(struct net_device *dev)
        /* flush any pending task for this netdev */
        flush_workqueue(mdev->workqueue);
 
+       if (mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_TS)
+               mlx4_en_remove_timestamp(mdev);
+
        /* Detach the netdev so tasks would not attempt to access it */
        mutex_lock(&mdev->state_lock);
        mdev->pndev[priv->port] = NULL;
@@ -2503,9 +2469,6 @@ static const struct net_device_ops mlx4_netdev_ops = {
        .ndo_setup_tc           = mlx4_en_setup_tc,
 #ifdef CONFIG_RFS_ACCEL
        .ndo_rx_flow_steer      = mlx4_en_filter_rfs,
-#endif
-#ifdef CONFIG_NET_RX_BUSY_POLL
-       .ndo_busy_poll          = mlx4_en_low_latency_recv,
 #endif
        .ndo_get_phys_port_id   = mlx4_en_get_phys_port_id,
 #ifdef CONFIG_MLX4_EN_VXLAN
@@ -3058,9 +3021,12 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
        }
        queue_delayed_work(mdev->workqueue, &priv->stats_task, STATS_DELAY);
 
+       /* Initialize time stamp mechanism */
        if (mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_TS)
-               queue_delayed_work(mdev->workqueue, &priv->service_task,
-                                  SERVICE_TASK_DELAY);
+               mlx4_en_init_timestamp(mdev);
+
+       queue_delayed_work(mdev->workqueue, &priv->service_task,
+                          SERVICE_TASK_DELAY);
 
        mlx4_en_set_stats_bitmap(mdev->dev, &priv->stats_bitmap,
                                 mdev->profile.prof[priv->port].rx_ppp,