static int __init ieee80211_init(void) { struct sk_buff *skb; int ret; BUILD_BUG_ON(sizeof(struct ieee80211_tx_info) > sizeof(skb->cb)); BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, driver_data) + IEEE80211_TX_INFO_DRIVER_DATA_SIZE > sizeof(skb->cb)); ret = rc80211_minstrel_init(); if (ret) return ret; ret = rc80211_minstrel_ht_init(); if (ret) goto err_minstrel; ret = rc80211_pid_init(); if (ret) goto err_pid; ret = ieee80211_iface_init(); if (ret) goto err_netdev; return 0; err_netdev: rc80211_pid_exit(); err_pid: rc80211_minstrel_ht_exit(); err_minstrel: rc80211_minstrel_exit(); return ret; }
static void __exit ieee80211_exit(void) { rc80211_pid_exit(); rc80211_minstrel_ht_exit(); rc80211_minstrel_exit(); if (mesh_allocated) ieee80211s_stop(); ieee80211_iface_exit(); }
static void __exit ieee80211_exit(void) { rc80211_pid_exit(); rc80211_minstrel_ht_exit(); rc80211_minstrel_exit(); #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) flush_scheduled_work(); #endif if (mesh_allocated) ieee80211s_stop(); ieee80211_iface_exit(); }
static void __exit ieee80211_exit(void) { rc80211_pid_exit(); rc80211_minstrel_ht_exit(); rc80211_minstrel_exit(); /* * For key todo, it'll be empty by now but the work * might still be scheduled. */ flush_scheduled_work(); if (mesh_allocated) ieee80211s_stop(); ieee80211_iface_exit(); }