void timerhook_free(struct timer_hook *hook) { if (!hook) return; if (!atomic_dec_return(&timer_hook_installed)) { unregister_tracepoint_wrapper(timer_expire_entry, hook_timer_entry, hook); unregister_tracepoint_wrapper(timer_expire_exit, hook_timer_exit, hook); } kfree(hook); }
void netpoll_wrapper_free(struct netpoll_wrapper *pWrapper) { if (pWrapper) { if (pWrapper->tracepoint_registered) unregister_tracepoint_wrapper(netif_receive_skb, hook_receive_skb, pWrapper); if (pWrapper->netpoll_initialized) netpoll_cleanup(&pWrapper->netpoll_obj); if (pWrapper->pDeviceWithHandler) { rtnl_lock(); netdev_rx_handler_unregister(pWrapper->pDeviceWithHandler); rtnl_unlock(); } kfree(pWrapper); } }