gsi_channel_program(channel, true);
 
        if (channel->toward_ipa)
-               netif_napi_add_tx(&gsi->dummy_dev, &channel->napi,
+               netif_napi_add_tx(gsi->dummy_dev, &channel->napi,
                                  gsi_channel_poll);
        else
-               netif_napi_add(&gsi->dummy_dev, &channel->napi,
+               netif_napi_add(gsi->dummy_dev, &channel->napi,
                               gsi_channel_poll);
 
        return 0;
        /* GSI uses NAPI on all channels.  Create a dummy network device
         * for the channel NAPI contexts to be associated with.
         */
-       init_dummy_netdev(&gsi->dummy_dev);
+       gsi->dummy_dev = alloc_netdev_dummy(0);
+       if (!gsi->dummy_dev)
+               return -ENOMEM;
        init_completion(&gsi->completion);
 
        ret = gsi_reg_init(gsi, pdev);
        if (ret)
-               return ret;
+               goto err_reg_exit;
 
        ret = gsi_irq_init(gsi, pdev);  /* No matching exit required */
        if (ret)
        return 0;
 
 err_reg_exit:
+       free_netdev(gsi->dummy_dev);
        gsi_reg_exit(gsi);
 
        return ret;
 {
        mutex_destroy(&gsi->mutex);
        gsi_channel_exit(gsi);
+       free_netdev(gsi->dummy_dev);
        gsi_reg_exit(gsi);
 }
 
 
        struct mutex mutex;             /* protects commands, programming */
        struct gsi_channel channel[GSI_CHANNEL_COUNT_MAX];
        struct gsi_evt_ring evt_ring[GSI_EVT_RING_COUNT_MAX];
-       struct net_device dummy_dev;    /* needed for NAPI */
+       struct net_device *dummy_dev;   /* needed for NAPI */
 };
 
 /**