/*
  * MultiQ manipulation helper functions
  */
-void vxge_stop_all_tx_queue(struct vxgedev *vdev)
+static inline int vxge_netif_queue_stopped(struct vxge_fifo *fifo)
 {
-       int i;
-       struct net_device *dev = vdev->ndev;
+       struct net_device *dev = fifo->ndev;
+       struct netdev_queue *txq = NULL;
+       int vpath_no = fifo->driver_id;
+       int ret = 0;
 
-       if (vdev->config.tx_steering_type != TX_MULTIQ_STEERING) {
-               for (i = 0; i < vdev->no_of_vpath; i++)
-                       vdev->vpaths[i].fifo.queue_state = VPATH_QUEUE_STOP;
-       }
-       netif_tx_stop_all_queues(dev);
+       if (fifo->tx_steering_type)
+               txq = netdev_get_tx_queue(dev, vpath_no);
+       else
+               txq = netdev_get_tx_queue(dev, 0);
+
+       ret = netif_tx_queue_stopped(txq);
+       return ret;
 }
 
 void vxge_stop_tx_queue(struct vxge_fifo *fifo)
 {
        struct net_device *dev = fifo->ndev;
-
        struct netdev_queue *txq = NULL;
-       if (fifo->tx_steering_type == TX_MULTIQ_STEERING)
+
+       if (fifo->tx_steering_type)
                txq = netdev_get_tx_queue(dev, fifo->driver_id);
-       else {
+       else
                txq = netdev_get_tx_queue(dev, 0);
-               fifo->queue_state = VPATH_QUEUE_STOP;
-       }
 
        netif_tx_stop_queue(txq);
 }
 
-void vxge_start_all_tx_queue(struct vxgedev *vdev)
-{
-       int i;
-       struct net_device *dev = vdev->ndev;
-
-       if (vdev->config.tx_steering_type != TX_MULTIQ_STEERING) {
-               for (i = 0; i < vdev->no_of_vpath; i++)
-                       vdev->vpaths[i].fifo.queue_state = VPATH_QUEUE_START;
-       }
-       netif_tx_start_all_queues(dev);
-}
-
-static void vxge_wake_all_tx_queue(struct vxgedev *vdev)
-{
-       int i;
-       struct net_device *dev = vdev->ndev;
-
-       if (vdev->config.tx_steering_type != TX_MULTIQ_STEERING) {
-               for (i = 0; i < vdev->no_of_vpath; i++)
-                       vdev->vpaths[i].fifo.queue_state = VPATH_QUEUE_START;
-       }
-       netif_tx_wake_all_queues(dev);
-}
-
-void vxge_wake_tx_queue(struct vxge_fifo *fifo, struct sk_buff *skb)
+void vxge_wake_tx_queue(struct vxge_fifo *fifo)
 {
        struct net_device *dev = fifo->ndev;
-
-       int vpath_no = fifo->driver_id;
        struct netdev_queue *txq = NULL;
-       if (fifo->tx_steering_type == TX_MULTIQ_STEERING) {
+       int vpath_no = fifo->driver_id;
+
+       if (fifo->tx_steering_type)
                txq = netdev_get_tx_queue(dev, vpath_no);
-               if (netif_tx_queue_stopped(txq))
-                       netif_tx_wake_queue(txq);
-       } else {
+       else
                txq = netdev_get_tx_queue(dev, 0);
-               if (fifo->queue_state == VPATH_QUEUE_STOP)
-                       if (netif_tx_queue_stopped(txq)) {
-                               fifo->queue_state = VPATH_QUEUE_START;
-                               netif_tx_wake_queue(txq);
-                       }
-       }
+
+       if (netif_tx_queue_stopped(txq))
+               netif_tx_wake_queue(txq);
 }
 
 /*
        vdev->stats.link_up++;
 
        netif_carrier_on(vdev->ndev);
-       vxge_wake_all_tx_queue(vdev);
+       netif_tx_wake_all_queues(vdev->ndev);
 
        vxge_debug_entryexit(VXGE_TRACE,
                "%s: %s:%d Exiting...", vdev->ndev->name, __func__, __LINE__);
 
        vdev->stats.link_down++;
        netif_carrier_off(vdev->ndev);
-       vxge_stop_all_tx_queue(vdev);
+       netif_tx_stop_all_queues(vdev->ndev);
 
        vxge_debug_entryexit(VXGE_TRACE,
                "%s: %s:%d Exiting...", vdev->ndev->name, __func__, __LINE__);
                                &dtr, &t_code) == VXGE_HW_OK);
 
        *skb_ptr = done_skb;
-       vxge_wake_tx_queue(fifo, skb);
+       vxge_wake_tx_queue(fifo);
 
        vxge_debug_entryexit(VXGE_TRACE,
                                "%s: %s:%d  Exiting...",
                        return NETDEV_TX_LOCKED;
        }
 
-       if (vdev->config.tx_steering_type == TX_MULTIQ_STEERING) {
-               if (netif_subqueue_stopped(dev, skb)) {
-                       spin_unlock_irqrestore(&fifo->tx_lock, flags);
-                       return NETDEV_TX_BUSY;
-               }
-       } else if (unlikely(fifo->queue_state == VPATH_QUEUE_STOP)) {
-               if (netif_queue_stopped(dev)) {
-                       spin_unlock_irqrestore(&fifo->tx_lock, flags);
-                       return NETDEV_TX_BUSY;
-               }
+       if (vxge_netif_queue_stopped(fifo)) {
+               spin_unlock_irqrestore(&fifo->tx_lock, flags);
+               return NETDEV_TX_BUSY;
        }
+
        avail = vxge_hw_fifo_free_txdl_count_get(fifo_hw);
        if (avail == 0) {
                vxge_debug_tx(VXGE_ERR,
        clear_bit(vp_id, &vdev->vp_reset);
 
        /* Start the vpath queue */
-       vxge_wake_tx_queue(&vdev->vpaths[vp_id].fifo, NULL);
+       vxge_wake_tx_queue(&vdev->vpaths[vp_id].fifo);
 
        return ret;
 }
                                "%s: execution mode is debug, returning..",
                                vdev->ndev->name);
                clear_bit(__VXGE_STATE_CARD_UP, &vdev->state);
-               vxge_stop_all_tx_queue(vdev);
+               netif_tx_stop_all_queues(vdev->ndev);
                return 0;
                }
        }
 
                switch (vdev->cric_err_event) {
                case VXGE_HW_EVENT_UNKNOWN:
-                       vxge_stop_all_tx_queue(vdev);
+                       netif_tx_stop_all_queues(vdev->ndev);
                        vxge_debug_init(VXGE_ERR,
                                "fatal: %s: Disabling device due to"
                                "unknown error",
                case VXGE_HW_EVENT_VPATH_ERR:
                        break;
                case VXGE_HW_EVENT_CRITICAL_ERR:
-                       vxge_stop_all_tx_queue(vdev);
+                       netif_tx_stop_all_queues(vdev->ndev);
                        vxge_debug_init(VXGE_ERR,
                                "fatal: %s: Disabling device due to"
                                "serious error",
                        ret = -EPERM;
                        goto out;
                case VXGE_HW_EVENT_SERR:
-                       vxge_stop_all_tx_queue(vdev);
+                       netif_tx_stop_all_queues(vdev->ndev);
                        vxge_debug_init(VXGE_ERR,
                                "fatal: %s: Disabling device due to"
                                "serious error",
                        ret = -EPERM;
                        goto out;
                case VXGE_HW_EVENT_SLOT_FREEZE:
-                       vxge_stop_all_tx_queue(vdev);
+                       netif_tx_stop_all_queues(vdev->ndev);
                        vxge_debug_init(VXGE_ERR,
                                "fatal: %s: Disabling device due to"
                                "slot freeze",
        }
 
        if ((event == VXGE_LL_FULL_RESET) || (event == VXGE_LL_START_RESET))
-               vxge_stop_all_tx_queue(vdev);
+               netif_tx_stop_all_queues(vdev->ndev);
 
        if (event == VXGE_LL_FULL_RESET) {
                status = vxge_reset_all_vpaths(vdev);
                        vxge_hw_vpath_rx_doorbell_init(vdev->vpaths[i].handle);
                }
 
-               vxge_wake_all_tx_queue(vdev);
+               netif_tx_wake_all_queues(vdev->ndev);
        }
 
 out:
                vxge_hw_vpath_rx_doorbell_init(vdev->vpaths[i].handle);
        }
 
-       vxge_start_all_tx_queue(vdev);
+       netif_tx_start_all_queues(vdev->ndev);
        goto out0;
 
 out2:
 
        netif_carrier_off(vdev->ndev);
        printk(KERN_NOTICE "%s: Link Down\n", vdev->ndev->name);
-       vxge_stop_all_tx_queue(vdev);
+       netif_tx_stop_all_queues(vdev->ndev);
 
        /* Note that at this point xmit() is stopped by upper layer */
        if (do_io)
        u64 stat;
 
        *vdev_out = NULL;
-       if (config->tx_steering_type == TX_MULTIQ_STEERING)
+       if (config->tx_steering_type)
                no_of_queue = no_of_vpath;
 
        ndev = alloc_etherdev_mq(sizeof(struct vxgedev),
        if (vdev->config.gro_enable)
                ndev->features |= NETIF_F_GRO;
 
-       if (vdev->config.tx_steering_type == TX_MULTIQ_STEERING)
-               ndev->real_num_tx_queues = no_of_vpath;
-
 #ifdef NETIF_F_LLTX
        ndev->features |= NETIF_F_LLTX;
 #endif