goto out;
        } else if (len > MRVDRV_ETH_RX_PACKET_BUFFER_SIZE) {
                lbs_pr_err("%s: error: card has %d bytes of data, but "
-                          "our maximum skb size is %lu\n",
+                          "our maximum skb size is %zu\n",
                           __func__, len, MRVDRV_ETH_RX_PACKET_BUFFER_SIZE);
                err = -EINVAL;
                goto out;
 
        lbs_deb_spi("libertas_spi_remove\n");
        lbs_deb_enter(LBS_DEB_SPI);
-       priv->surpriseremoved = 1;
 
        lbs_stop_card(priv);
+       lbs_remove_card(priv); /* will call free_netdev */
+
+       priv->surpriseremoved = 1;
        free_irq(spi->irq, card);
        if_spi_terminate_spi_thread(card);
-       lbs_remove_card(priv); /* will call free_netdev */
        if (card->pdata->teardown)
                card->pdata->teardown(spi);
        free_if_spi_card(card);