[PATCH 1/2] workqueue rework INIT_WORK now takes 2 arguments and we can get the user data through the container_of macro. Signed-off-by: Mattia Dongili --- ipw3945.c | 198 ++++++++++++++++++++++++++++++------------------------------- 1 files changed, 98 insertions(+), 100 deletions(-) diff --git a/ipw3945.c b/ipw3945.c index c1346b3..1a633e7 100644 --- a/ipw3945.c +++ b/ipw3945.c @@ -208,18 +208,18 @@ static int ipw_stop_tx_queue(struct ipw_priv *priv); static struct ipw_rx_queue *ipw_rx_queue_alloc(struct ipw_priv *); static void ipw_rx_queue_free(struct ipw_priv *, struct ipw_rx_queue *); -static void ipw_rx_queue_replenish(void *); +static void ipw_rx_queue_replenish(struct ipw_priv *); static int ipw_up(struct ipw_priv *); -static void ipw_bg_up(void *); +static void ipw_bg_up(struct work_struct *work); static void ipw_down(struct ipw_priv *); -static void ipw_bg_down(void *); +static void ipw_bg_down(struct work_struct *work); static int ipw_card_show_info(struct ipw_priv *priv); static int ipw_query_eeprom(struct ipw_priv *priv, u32 offset, u32 len, u8 * buf); -static void ipw_bg_alive_start(void *data); +static void ipw_bg_alive_start(struct work_struct *work); static int ipw_send_card_state(struct ipw_priv *priv, u32 flags, u8 meta_flag); static void ipw_link_down(struct ipw_priv *priv); @@ -1351,9 +1351,9 @@ static void ipw_setup_activity_timer(struct ipw_priv *priv) IPW_ACTIVITY_PERIOD); } -static void ipw_bg_activity_timer(void *data) +static void ipw_bg_activity_timer(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, activity_timer); if (priv->status & STATUS_EXIT_PENDING) return; @@ -1666,7 +1666,7 @@ static ssize_t show_retry_rate(struct device *d, static DEVICE_ATTR(retry_rate, S_IWUSR | S_IRUSR, show_retry_rate, store_retry_rate); -static void ipw_bg_daemon_cmd(void *data); +static void ipw_bg_daemon_cmd(struct work_struct *work); static ssize_t store_cmd(struct device *d, struct device_attribute *attr, const char *buf, size_t count) @@ -3394,9 +3394,9 @@ static void ipw_connection_init_rx_config(struct ipw_priv *priv) #define IPW_SCAN_CHECK_WATCHDOG (7 * HZ) -static void ipw_bg_scan_check(void *data) +static void ipw_bg_scan_check(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, scan_check); if (priv->status & STATUS_EXIT_PENDING) return; @@ -4514,9 +4514,9 @@ static void ipw_init_rates_mask(struct ipw_priv *priv) } } -static void ipw_bg_calibrated_work(void *data) +static void ipw_bg_calibrated_work(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, calibrated_work); int rc = 0; mutex_lock(&priv->mutex); @@ -4722,9 +4722,9 @@ static void ipw_init_geos(struct ipw_priv *priv, kfree(geo); } -static void ipw_bg_daemon_cmd(void *data) +static void ipw_bg_daemon_cmd(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, daemon_cmd_work); struct list_head *element; struct ipw_host_cmd cmd = { .id = 0, @@ -4941,9 +4941,9 @@ static void ipw_bg_daemon_cmd(void *data) spin_unlock_irqrestore(&priv->daemon_lock, flags); } -static void ipw_bg_post_associate(void *data) +static void ipw_bg_post_associate(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, post_associate); if (priv->status & STATUS_EXIT_PENDING) return; @@ -5221,9 +5221,8 @@ static int ipw_rx_queue_restock(struct ipw_priv *priv) * * This is called as a scheduled work item (except for during intialization) */ -static void ipw_rx_queue_replenish(void *data) +static void ipw_rx_queue_replenish(struct ipw_priv *priv) { - struct ipw_priv *priv = data; struct ipw_rx_queue *rxq = priv->rxq; struct list_head *element; struct ipw_rx_mem_buffer *rxb; @@ -5256,15 +5255,15 @@ static void ipw_rx_queue_replenish(void *data) spin_unlock_irqrestore(&priv->lock, flags); } -static void ipw_bg_rx_queue_replenish(void *data) +static void ipw_bg_rx_queue_replenish(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, rx_replenish); if (priv->status & STATUS_EXIT_PENDING) return; mutex_lock(&priv->mutex); - ipw_rx_queue_replenish(data); + ipw_rx_queue_replenish(priv); mutex_unlock(&priv->mutex); } @@ -6748,15 +6747,15 @@ static int ipw_disassociate(void *data) return 1; } -static void ipw_bg_disassociate(void *data) +static void ipw_bg_disassociate(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, disassociate); if (priv->status & STATUS_EXIT_PENDING) return; mutex_lock(&priv->mutex); - ipw_disassociate(data); + ipw_disassociate(priv); mutex_unlock(&priv->mutex); } @@ -7109,15 +7108,15 @@ static void ipw_gather_stats(struct ipw_priv *priv) IPW_STATS_INTERVAL); } -static void ipw_bg_gather_stats(void *data) +static void ipw_bg_gather_stats(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, gather_stats); if (priv->status & STATUS_EXIT_PENDING) return; mutex_lock(&priv->mutex); - ipw_gather_stats(data); + ipw_gather_stats(priv); mutex_unlock(&priv->mutex); } @@ -7609,9 +7608,9 @@ static int ipw_find_adhoc_network(struct ipw_priv *priv, return 1; } -static void ipw_merge_adhoc_network(void *data) +static void ipw_merge_adhoc_network(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, merge_networks); struct ieee80211_network *network = NULL; struct ipw_network_match match = { .network = priv->assoc_network @@ -8180,10 +8179,10 @@ static int ipw_get_channels_for_scan(struct ipw_priv *priv, u8 band, return indx; } -static void ipw_bg_request_scan(void *data) +static void ipw_bg_request_scan(struct work_struct *work) { struct ipw_daemon_cmd_list *element; - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, request_scan); int rc = 0; struct daemon_scan_request *scan; const struct ieee80211_geo *geo = ieee80211_get_geo(priv->ieee); @@ -8377,16 +8376,16 @@ static void ipw_bg_request_scan(void *data) mutex_unlock(&priv->mutex); } -static void ipw_bg_abort_scan(void *data) +static void ipw_bg_abort_scan(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, abort_scan); if (priv->status & STATUS_EXIT_PENDING) return; mutex_lock(&priv->mutex); if (priv->status & STATUS_READY) - ipw_abort_scan(data); + ipw_abort_scan(priv); mutex_unlock(&priv->mutex); } @@ -8640,9 +8639,9 @@ static int ipw_qos_activate(struct ipw_priv *priv, struct ieee80211_qos_data return ret; } -static void ipw_bg_qos_activate(void *data) +static void ipw_bg_qos_activate(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, qos_activate); if (priv == NULL) return; @@ -8965,9 +8964,9 @@ static void ipw_send_association_req(struct ipw_priv *priv) msecs_to_jiffies(IPW_ASSOC_STATE_TIMEOUT)); } -static void ipw_bg_auth_work(void *data) +static void ipw_bg_auth_work(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, auth_work); struct ieee80211_auth *auth; unsigned long flags; @@ -9462,9 +9461,9 @@ static int ipw_handle_assoc_response(struct net_device *dev, struct ieee80211_as return 0; } -static void ipw_bg_report_work(void *data) +static void ipw_bg_report_work(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, report_work); if (priv->status & STATUS_EXIT_PENDING) return; @@ -9697,15 +9696,15 @@ static void ipw_roam(void *data) priv->status &= ~STATUS_ROAMING; } -static void ipw_bg_roam(void *data) +static void ipw_bg_roam(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, roam); if (priv->status & STATUS_EXIT_PENDING) return; mutex_lock(&priv->mutex); - ipw_roam(data); + ipw_roam(priv); mutex_unlock(&priv->mutex); } @@ -9796,9 +9795,9 @@ static int ipw_associate(void *data) return 1; } -static void ipw_bg_daemon_tx_status_sync(void *data) +static void ipw_bg_daemon_tx_status_sync(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, daemon_tx_status_sync); if (priv->status & STATUS_EXIT_PENDING) return; @@ -9812,15 +9811,15 @@ static void ipw_bg_daemon_tx_status_sync(void *data) #define IPW_FORCE_TXPOWR_CALIB (180 * HZ) -static void ipw_bg_associate(void *data) +static void ipw_bg_associate(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, associate); if (priv->status & STATUS_EXIT_PENDING) return; mutex_lock(&priv->mutex); - ipw_associate(data); + ipw_associate(priv); mutex_unlock(&priv->mutex); } @@ -13572,9 +13571,9 @@ static int ipw_rate_scale_flush_old(struct ipw_priv *priv, u32 flush_interval) #define IPW_RATE_FLUSH_MAX 5000 // msec #define IPW_RATE_FLUSH_MIN 50 // msec -static void ipw_bg_rate_scale_flush(void *data) +static void ipw_bg_rate_scale_flush(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, rate_scale_flush); int rc = 0; unsigned long flags; u32 tx_ave, duration; @@ -14831,9 +14830,9 @@ static irqreturn_t ipw_isr(int irq, void *data) return IRQ_NONE; } -static void ipw_bg_rf_kill(void *data) +static void ipw_bg_rf_kill(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, rf_kill); wake_up_interruptible(&priv->wait_command_queue); @@ -14901,9 +14900,9 @@ static void ipw_link_up(struct ipw_priv *priv) ipw_scan_initiate(priv, priv->ieee->freq_band, 1000); } -static void ipw_bg_update_link_led(void *data) +static void ipw_bg_update_link_led(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, update_link_led); if (priv->status & STATUS_EXIT_PENDING) return; @@ -14912,9 +14911,9 @@ static void ipw_bg_update_link_led(void *data) mutex_unlock(&priv->mutex); } -static void ipw_bg_link_up(void *data) +static void ipw_bg_link_up(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, link_up); if (priv->status & STATUS_EXIT_PENDING) return; @@ -14946,9 +14945,9 @@ static void ipw_link_down(struct ipw_priv *priv) ipw_scan_initiate(priv, priv->ieee->freq_band, 0); } -static void ipw_bg_link_down(void *data) +static void ipw_bg_link_down(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, link_down); if (priv->status & STATUS_EXIT_PENDING) return; @@ -14957,9 +14956,9 @@ static void ipw_bg_link_down(void *data) mutex_unlock(&priv->mutex); } -static void ipw_bg_resume_work(void *data) +static void ipw_bg_resume_work(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, resume_work); unsigned long flags; mutex_lock(&priv->mutex); @@ -15017,10 +15016,10 @@ static void ipw_bg_resume_work(void *data) * This callback is used for retransmitting the current auth/assoc frame * during an association sequence */ -static void ipw_bg_assoc_state_retry(void *data) +static void ipw_bg_assoc_state_retry(struct work_struct *work) { unsigned long flags; - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, assoc_state_retry); mutex_lock(&priv->mutex); @@ -15033,7 +15032,7 @@ static void ipw_bg_assoc_state_retry(void *data) priv->data_retry_limit)) { IPW_DEBUG_ASSOC("Association failed after %d checks.\n", priv->association_retries); - ipw_send_disassociate(data, 1); + ipw_send_disassociate(priv, 1); goto unlock; } @@ -15075,45 +15074,44 @@ static int ipw_setup_deferred_work(struct ipw_priv *priv) init_waitqueue_head(&priv->wait_command_queue); init_waitqueue_head(&priv->wait_daemon_cmd_done); - INIT_WORK(&priv->associate, ipw_bg_associate, priv); - INIT_WORK(&priv->calibrated_work, ipw_bg_calibrated_work, priv); - INIT_WORK(&priv->disassociate, ipw_bg_disassociate, priv); - INIT_WORK(&priv->rx_replenish, ipw_bg_rx_queue_replenish, priv); - INIT_WORK(&priv->rf_kill, ipw_bg_rf_kill, priv); - INIT_WORK(&priv->up, ipw_bg_up, priv); - INIT_WORK(&priv->down, ipw_bg_down, priv); - INIT_WORK(&priv->request_scan, ipw_bg_request_scan, priv); - INIT_WORK(&priv->gather_stats, ipw_bg_gather_stats, priv); - INIT_WORK(&priv->abort_scan, ipw_bg_abort_scan, priv); - INIT_WORK(&priv->roam, ipw_bg_roam, priv); - INIT_WORK(&priv->scan_check, ipw_bg_scan_check, priv); - INIT_WORK(&priv->link_up, ipw_bg_link_up, priv); - INIT_WORK(&priv->update_link_led, ipw_bg_update_link_led, priv); - INIT_WORK(&priv->link_down, ipw_bg_link_down, priv); - INIT_WORK(&priv->auth_work, ipw_bg_auth_work, priv); - INIT_WORK(&priv->merge_networks, ipw_merge_adhoc_network, priv); - INIT_WORK(&priv->assoc_state_retry, ipw_bg_assoc_state_retry, priv); - - INIT_WORK(&priv->alive_start, ipw_bg_alive_start, priv); - INIT_WORK(&priv->resume_work, ipw_bg_resume_work, priv); + INIT_WORK(&priv->associate, ipw_bg_associate); + INIT_WORK(&priv->calibrated_work, ipw_bg_calibrated_work); + INIT_WORK(&priv->disassociate, ipw_bg_disassociate); + INIT_WORK(&priv->rx_replenish, ipw_bg_rx_queue_replenish); + INIT_WORK(&priv->rf_kill, ipw_bg_rf_kill); + INIT_WORK(&priv->up, ipw_bg_up); + INIT_WORK(&priv->down, ipw_bg_down); + INIT_WORK(&priv->request_scan, ipw_bg_request_scan); + INIT_WORK(&priv->gather_stats, ipw_bg_gather_stats); + INIT_WORK(&priv->abort_scan, ipw_bg_abort_scan); + INIT_WORK(&priv->roam, ipw_bg_roam); + INIT_WORK(&priv->scan_check, ipw_bg_scan_check); + INIT_WORK(&priv->link_up, ipw_bg_link_up); + INIT_WORK(&priv->update_link_led, ipw_bg_update_link_led); + INIT_WORK(&priv->link_down, ipw_bg_link_down); + INIT_WORK(&priv->auth_work, ipw_bg_auth_work); + INIT_WORK(&priv->merge_networks, ipw_merge_adhoc_network); + INIT_WORK(&priv->assoc_state_retry, ipw_bg_assoc_state_retry); + + INIT_WORK(&priv->alive_start, ipw_bg_alive_start); + INIT_WORK(&priv->resume_work, ipw_bg_resume_work); #ifdef CONFIG_IPW3945_QOS /* QoS */ - INIT_WORK(&priv->qos_activate, ipw_bg_qos_activate, priv); + INIT_WORK(&priv->qos_activate, ipw_bg_qos_activate); #endif /* 802.11h */ - INIT_WORK(&priv->report_work, ipw_bg_report_work, priv); + INIT_WORK(&priv->report_work, ipw_bg_report_work); - INIT_WORK(&priv->post_associate, ipw_bg_post_associate, priv); + INIT_WORK(&priv->post_associate, ipw_bg_post_associate); - INIT_WORK(&priv->activity_timer, ipw_bg_activity_timer, priv); + INIT_WORK(&priv->activity_timer, ipw_bg_activity_timer); - INIT_WORK(&priv->daemon_cmd_work, ipw_bg_daemon_cmd, priv); - INIT_WORK(&priv->daemon_tx_status_sync, - ipw_bg_daemon_tx_status_sync, priv); + INIT_WORK(&priv->daemon_cmd_work, ipw_bg_daemon_cmd); + INIT_WORK(&priv->daemon_tx_status_sync, ipw_bg_daemon_tx_status_sync); - INIT_WORK(&priv->rate_scale_flush, ipw_bg_rate_scale_flush, priv); + INIT_WORK(&priv->rate_scale_flush, ipw_bg_rate_scale_flush); tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long)) ipw_irq_tasklet, (unsigned long)priv); @@ -15486,15 +15484,15 @@ static void ipw_alive_start(struct ipw_priv *priv) ipw_send_daemon_sync(priv, DAEMON_SYNC_INIT, 0, NULL); } -static void ipw_bg_alive_start(void *data) +static void ipw_bg_alive_start(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, alive_start); if (priv->status & STATUS_EXIT_PENDING) return; mutex_lock(&priv->mutex); - ipw_alive_start(data); + ipw_alive_start(priv); mutex_unlock(&priv->mutex); } @@ -15565,15 +15563,15 @@ static int ipw_up(struct ipw_priv *priv) return -EIO; } -static void ipw_bg_up(void *data) +static void ipw_bg_up(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, up); if (priv->status & STATUS_EXIT_PENDING) return; mutex_lock(&priv->mutex); - ipw_up(data); + ipw_up(priv); mutex_unlock(&priv->mutex); } @@ -15685,15 +15683,15 @@ static void ipw_down(struct ipw_priv *priv) ipw_send_daemon_sync(priv, DAEMON_SYNC_UNINIT, 0, NULL); } -static void ipw_bg_down(void *data) +static void ipw_bg_down(struct work_struct *work) { - struct ipw_priv *priv = data; + struct ipw_priv *priv = container_of(work, struct ipw_priv, down); if (priv->status & STATUS_EXIT_PENDING) return; mutex_lock(&priv->mutex); - ipw_down(data); + ipw_down(priv); mutex_unlock(&priv->mutex); }