struct dma_pool *desc_pool;
        struct work_struct tx_work;
        struct napi_struct rx_napi;
-       struct net_device napi_dev;
+       struct net_device *napi_dev;
        u32 map_addr;
        u64 dma_mask;
        /* protect SDMA with concurrent access from multiple CPUs */
        if (err)
                goto err_evt_register;
 
-       init_dummy_netdev(&sdma->napi_dev);
+       sdma->napi_dev = alloc_netdev_dummy(0);
+       if (!sdma->napi_dev) {
+               dev_err(dev, "not able to initialize dummy device\n");
+               err = -ENOMEM;
+               goto err_alloc_dummy;
+       }
 
-       netif_napi_add(&sdma->napi_dev, &sdma->rx_napi, prestera_sdma_rx_poll);
+       netif_napi_add(sdma->napi_dev, &sdma->rx_napi, prestera_sdma_rx_poll);
        napi_enable(&sdma->rx_napi);
 
        return 0;
 
+err_alloc_dummy:
+       prestera_hw_event_handler_unregister(sw, PRESTERA_EVENT_TYPE_RXTX,
+                                            prestera_rxtx_handle_event);
 err_evt_register:
 err_tx_init:
        prestera_sdma_tx_fini(sdma);
 
        napi_disable(&sdma->rx_napi);
        netif_napi_del(&sdma->rx_napi);
+       free_netdev(sdma->napi_dev);
        prestera_hw_event_handler_unregister(sw, PRESTERA_EVENT_TYPE_RXTX,
                                             prestera_rxtx_handle_event);
        prestera_sdma_tx_fini(sdma);