#ifdef CONFIG_PM_SLEEP
        unregister_pm_notifier(&tp->pm_notifier);
  #endif
-       if (!test_bit(RTL8152_UNPLUG, &tp->flags))
-               napi_disable(&tp->napi);
 +      tasklet_disable(&tp->tx_tl);
+       napi_disable(&tp->napi);
        clear_bit(WORK_ENABLE, &tp->flags);
        usb_kill_urb(tp->intr_urb);
        cancel_delayed_work_sync(&tp->schedule);
        return 0;
  
  out1:
-       netif_napi_del(&tp->napi);
 +      tasklet_kill(&tp->tx_tl);
        usb_set_intfdata(intf, NULL);
  out:
        free_netdev(netdev);
        if (tp) {
                rtl_set_unplug(tp);
  
-               netif_napi_del(&tp->napi);
                unregister_netdev(tp->netdev);
 +              tasklet_kill(&tp->tx_tl);
                cancel_delayed_work_sync(&tp->hw_phy_work);
                tp->rtl_ops.unload(tp);
                free_netdev(tp->netdev);
 
  
        _debug("RELEASE CALL %p (%d CONN %p)", call, call->debug_id, conn);
  
 -      if (conn)
 +      if (conn) {
                rxrpc_disconnect_call(call);
 +              conn->security->free_call_crypto(call);
 +      }
  
-       for (i = 0; i < RXRPC_RXTX_BUFF_SIZE; i++) {
-               rxrpc_free_skb(call->rxtx_buffer[i],
-                              (call->tx_phase ? rxrpc_skb_tx_cleaned :
-                               rxrpc_skb_rx_cleaned));
-               call->rxtx_buffer[i] = NULL;
-       }
- 
+       rxrpc_cleanup_ring(call);
        _leave("");
  }