mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-03-21 06:24:12 +00:00
ipw2x00: simplify scan_event handling
* Drop unnesssary delayd_work_pending() tests. * Unify scan_event_{now|later} by using mod_delayed_work() w/ 0 delay for scan_event_now. * Make ipw2200 scan_event handling match ipw2100 - use mod_delayed_work() w/ 0 delay for immediate scanning. Only compile tested. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Stanislav Yakovlev <stas.yakovlev@gmail.com> Cc: linux-wireless@vger.kernel.org
This commit is contained in:
parent
7d0315a2be
commit
7c99e0bf86
3 changed files with 12 additions and 35 deletions
|
@ -2181,9 +2181,10 @@ static void isr_indicate_rf_kill(struct ipw2100_priv *priv, u32 status)
|
||||||
mod_delayed_work(system_wq, &priv->rf_kill, round_jiffies_relative(HZ));
|
mod_delayed_work(system_wq, &priv->rf_kill, round_jiffies_relative(HZ));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void send_scan_event(void *data)
|
static void ipw2100_scan_event(struct work_struct *work)
|
||||||
{
|
{
|
||||||
struct ipw2100_priv *priv = data;
|
struct ipw2100_priv *priv = container_of(work, struct ipw2100_priv,
|
||||||
|
scan_event.work);
|
||||||
union iwreq_data wrqu;
|
union iwreq_data wrqu;
|
||||||
|
|
||||||
wrqu.data.length = 0;
|
wrqu.data.length = 0;
|
||||||
|
@ -2191,18 +2192,6 @@ static void send_scan_event(void *data)
|
||||||
wireless_send_event(priv->net_dev, SIOCGIWSCAN, &wrqu, NULL);
|
wireless_send_event(priv->net_dev, SIOCGIWSCAN, &wrqu, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ipw2100_scan_event_later(struct work_struct *work)
|
|
||||||
{
|
|
||||||
send_scan_event(container_of(work, struct ipw2100_priv,
|
|
||||||
scan_event_later.work));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ipw2100_scan_event_now(struct work_struct *work)
|
|
||||||
{
|
|
||||||
send_scan_event(container_of(work, struct ipw2100_priv,
|
|
||||||
scan_event_now));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void isr_scan_complete(struct ipw2100_priv *priv, u32 status)
|
static void isr_scan_complete(struct ipw2100_priv *priv, u32 status)
|
||||||
{
|
{
|
||||||
IPW_DEBUG_SCAN("scan complete\n");
|
IPW_DEBUG_SCAN("scan complete\n");
|
||||||
|
@ -2212,13 +2201,11 @@ static void isr_scan_complete(struct ipw2100_priv *priv, u32 status)
|
||||||
|
|
||||||
/* Only userspace-requested scan completion events go out immediately */
|
/* Only userspace-requested scan completion events go out immediately */
|
||||||
if (!priv->user_requested_scan) {
|
if (!priv->user_requested_scan) {
|
||||||
if (!delayed_work_pending(&priv->scan_event_later))
|
schedule_delayed_work(&priv->scan_event,
|
||||||
schedule_delayed_work(&priv->scan_event_later,
|
round_jiffies_relative(msecs_to_jiffies(4000)));
|
||||||
round_jiffies_relative(msecs_to_jiffies(4000)));
|
|
||||||
} else {
|
} else {
|
||||||
priv->user_requested_scan = 0;
|
priv->user_requested_scan = 0;
|
||||||
cancel_delayed_work(&priv->scan_event_later);
|
mod_delayed_work(system_wq, &priv->scan_event, 0);
|
||||||
schedule_work(&priv->scan_event_now);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4459,8 +4446,7 @@ static void ipw2100_kill_works(struct ipw2100_priv *priv)
|
||||||
cancel_delayed_work_sync(&priv->wx_event_work);
|
cancel_delayed_work_sync(&priv->wx_event_work);
|
||||||
cancel_delayed_work_sync(&priv->hang_check);
|
cancel_delayed_work_sync(&priv->hang_check);
|
||||||
cancel_delayed_work_sync(&priv->rf_kill);
|
cancel_delayed_work_sync(&priv->rf_kill);
|
||||||
cancel_work_sync(&priv->scan_event_now);
|
cancel_delayed_work_sync(&priv->scan_event);
|
||||||
cancel_delayed_work_sync(&priv->scan_event_later);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ipw2100_tx_allocate(struct ipw2100_priv *priv)
|
static int ipw2100_tx_allocate(struct ipw2100_priv *priv)
|
||||||
|
@ -6195,8 +6181,7 @@ static struct net_device *ipw2100_alloc_device(struct pci_dev *pci_dev,
|
||||||
INIT_DELAYED_WORK(&priv->wx_event_work, ipw2100_wx_event_work);
|
INIT_DELAYED_WORK(&priv->wx_event_work, ipw2100_wx_event_work);
|
||||||
INIT_DELAYED_WORK(&priv->hang_check, ipw2100_hang_check);
|
INIT_DELAYED_WORK(&priv->hang_check, ipw2100_hang_check);
|
||||||
INIT_DELAYED_WORK(&priv->rf_kill, ipw2100_rf_kill);
|
INIT_DELAYED_WORK(&priv->rf_kill, ipw2100_rf_kill);
|
||||||
INIT_WORK(&priv->scan_event_now, ipw2100_scan_event_now);
|
INIT_DELAYED_WORK(&priv->scan_event, ipw2100_scan_event);
|
||||||
INIT_DELAYED_WORK(&priv->scan_event_later, ipw2100_scan_event_later);
|
|
||||||
|
|
||||||
tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
|
tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
|
||||||
ipw2100_irq_tasklet, (unsigned long)priv);
|
ipw2100_irq_tasklet, (unsigned long)priv);
|
||||||
|
|
|
@ -577,8 +577,7 @@ struct ipw2100_priv {
|
||||||
struct delayed_work wx_event_work;
|
struct delayed_work wx_event_work;
|
||||||
struct delayed_work hang_check;
|
struct delayed_work hang_check;
|
||||||
struct delayed_work rf_kill;
|
struct delayed_work rf_kill;
|
||||||
struct work_struct scan_event_now;
|
struct delayed_work scan_event;
|
||||||
struct delayed_work scan_event_later;
|
|
||||||
|
|
||||||
int user_requested_scan;
|
int user_requested_scan;
|
||||||
|
|
||||||
|
|
|
@ -4480,18 +4480,11 @@ static void handle_scan_event(struct ipw_priv *priv)
|
||||||
{
|
{
|
||||||
/* Only userspace-requested scan completion events go out immediately */
|
/* Only userspace-requested scan completion events go out immediately */
|
||||||
if (!priv->user_requested_scan) {
|
if (!priv->user_requested_scan) {
|
||||||
if (!delayed_work_pending(&priv->scan_event))
|
schedule_delayed_work(&priv->scan_event,
|
||||||
schedule_delayed_work(&priv->scan_event,
|
round_jiffies_relative(msecs_to_jiffies(4000)));
|
||||||
round_jiffies_relative(msecs_to_jiffies(4000)));
|
|
||||||
} else {
|
} else {
|
||||||
union iwreq_data wrqu;
|
|
||||||
|
|
||||||
priv->user_requested_scan = 0;
|
priv->user_requested_scan = 0;
|
||||||
cancel_delayed_work(&priv->scan_event);
|
mod_delayed_work(system_wq, &priv->scan_event, 0);
|
||||||
|
|
||||||
wrqu.data.length = 0;
|
|
||||||
wrqu.data.flags = 0;
|
|
||||||
wireless_send_event(priv->net_dev, SIOCGIWSCAN, &wrqu, NULL);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue