static void liquidio_destroy_nic_device(struct octeon_device *oct, int ifidx)
 {
        struct net_device *netdev = oct->props[ifidx].netdev;
-       struct lio *lio;
+       struct octeon_device_priv *oct_priv =
+               (struct octeon_device_priv *)oct->priv;
        struct napi_struct *napi, *n;
+       struct lio *lio;
 
        if (!netdev) {
                dev_err(&oct->pci_dev->dev, "%s No netdevice ptr for index %d\n",
        list_for_each_entry_safe(napi, n, &netdev->napi_list, dev_list)
                netif_napi_del(napi);
 
+       tasklet_enable(&oct_priv->droq_tasklet);
+
        if (atomic_read(&lio->ifstate) & LIO_IFSTATE_REGISTERED)
                unregister_netdev(netdev);
 
 {
        struct lio *lio = GET_LIO(netdev);
        struct octeon_device *oct = lio->oct_dev;
+       struct octeon_device_priv *oct_priv =
+               (struct octeon_device_priv *)oct->priv;
        struct napi_struct *napi, *n;
 
        if (oct->props[lio->ifidx].napi_enabled == 0) {
+               tasklet_disable(&oct_priv->droq_tasklet);
+
                list_for_each_entry_safe(napi, n, &netdev->napi_list, dev_list)
                        napi_enable(napi);
 
 {
        struct lio *lio = GET_LIO(netdev);
        struct octeon_device *oct = lio->oct_dev;
+       struct octeon_device_priv *oct_priv =
+               (struct octeon_device_priv *)oct->priv;
        struct napi_struct *napi, *n;
 
        ifstate_reset(lio, LIO_IFSTATE_RUNNING);
 
                if (OCTEON_CN23XX_PF(oct))
                        oct->droq[0]->ops.poll_mode = 0;
+
+               tasklet_enable(&oct_priv->droq_tasklet);
        }
 
        dev_info(&oct->pci_dev->dev, "%s interface is stopped\n", netdev->name);
 
  */
 static void octeon_destroy_resources(struct octeon_device *oct)
 {
+       struct octeon_device_priv *oct_priv =
+               (struct octeon_device_priv *)oct->priv;
        struct msix_entry *msix_entries;
        int i;
 
                /* Nothing to be done here either */
                break;
        }
+
+       tasklet_kill(&oct_priv->droq_tasklet);
 }
 
 /**
 static void liquidio_destroy_nic_device(struct octeon_device *oct, int ifidx)
 {
        struct net_device *netdev = oct->props[ifidx].netdev;
+       struct octeon_device_priv *oct_priv =
+               (struct octeon_device_priv *)oct->priv;
        struct napi_struct *napi, *n;
        struct lio *lio;
 
        list_for_each_entry_safe(napi, n, &netdev->napi_list, dev_list)
                netif_napi_del(napi);
 
+       tasklet_enable(&oct_priv->droq_tasklet);
+
        if (atomic_read(&lio->ifstate) & LIO_IFSTATE_REGISTERED)
                unregister_netdev(netdev);
 
 {
        struct lio *lio = GET_LIO(netdev);
        struct octeon_device *oct = lio->oct_dev;
+       struct octeon_device_priv *oct_priv =
+               (struct octeon_device_priv *)oct->priv;
        struct napi_struct *napi, *n;
 
        if (!oct->props[lio->ifidx].napi_enabled) {
+               tasklet_disable(&oct_priv->droq_tasklet);
+
                list_for_each_entry_safe(napi, n, &netdev->napi_list, dev_list)
                        napi_enable(napi);
 
 {
        struct lio *lio = GET_LIO(netdev);
        struct octeon_device *oct = lio->oct_dev;
+       struct octeon_device_priv *oct_priv =
+               (struct octeon_device_priv *)oct->priv;
        struct napi_struct *napi, *n;
 
        /* tell Octeon to stop forwarding packets to host */
                oct->props[lio->ifidx].napi_enabled = 0;
 
                oct->droq[0]->ops.poll_mode = 0;
+
+               tasklet_enable(&oct_priv->droq_tasklet);
        }
 
        cancel_delayed_work_sync(&lio->stats_wk.work);