]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
ipw2x00: simplify scan_event handling
authorTejun Heo <tj@kernel.org>
Sat, 22 Dec 2012 01:56:54 +0000 (17:56 -0800)
committerTejun Heo <tj@kernel.org>
Sat, 9 Feb 2013 19:30:48 +0000 (11:30 -0800)
* 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
drivers/net/wireless/ipw2x00/ipw2100.c
drivers/net/wireless/ipw2x00/ipw2100.h
drivers/net/wireless/ipw2x00/ipw2200.c

index d92b21a8e5977c19b528dfe9038d23aec96f708c..b3ab7b7becae1c1aae93f99b6a18be26ae7c1c7c 100644 (file)
@@ -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));
 }
 
-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;
 
        wrqu.data.length = 0;
@@ -2191,18 +2192,6 @@ static void send_scan_event(void *data)
        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)
 {
        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 */
        if (!priv->user_requested_scan) {
-               if (!delayed_work_pending(&priv->scan_event_later))
-                       schedule_delayed_work(&priv->scan_event_later,
-                                             round_jiffies_relative(msecs_to_jiffies(4000)));
+               schedule_delayed_work(&priv->scan_event,
+                                     round_jiffies_relative(msecs_to_jiffies(4000)));
        } else {
                priv->user_requested_scan = 0;
-               cancel_delayed_work(&priv->scan_event_later);
-               schedule_work(&priv->scan_event_now);
+               mod_delayed_work(system_wq, &priv->scan_event, 0);
        }
 }
 
@@ -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->hang_check);
        cancel_delayed_work_sync(&priv->rf_kill);
-       cancel_work_sync(&priv->scan_event_now);
-       cancel_delayed_work_sync(&priv->scan_event_later);
+       cancel_delayed_work_sync(&priv->scan_event);
 }
 
 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->hang_check, ipw2100_hang_check);
        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_later, ipw2100_scan_event_later);
+       INIT_DELAYED_WORK(&priv->scan_event, ipw2100_scan_event);
 
        tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
                     ipw2100_irq_tasklet, (unsigned long)priv);
index 5fe17cbab1f313c7095595fa0d8a0d31b1435e56..c6d78790cb0d0a44ce939c07841641246f835701 100644 (file)
@@ -577,8 +577,7 @@ struct ipw2100_priv {
        struct delayed_work wx_event_work;
        struct delayed_work hang_check;
        struct delayed_work rf_kill;
-       struct work_struct scan_event_now;
-       struct delayed_work scan_event_later;
+       struct delayed_work scan_event;
 
        int user_requested_scan;
 
index 844f201b7b70080b19c4e7ae70bc31f375214a7c..2c2d6db0536c315e9af127d356740150e9ce3d84 100644 (file)
@@ -4480,18 +4480,11 @@ static void handle_scan_event(struct ipw_priv *priv)
 {
        /* Only userspace-requested scan completion events go out immediately */
        if (!priv->user_requested_scan) {
-               if (!delayed_work_pending(&priv->scan_event))
-                       schedule_delayed_work(&priv->scan_event,
-                                             round_jiffies_relative(msecs_to_jiffies(4000)));
+               schedule_delayed_work(&priv->scan_event,
+                                     round_jiffies_relative(msecs_to_jiffies(4000)));
        } else {
-               union iwreq_data wrqu;
-
                priv->user_requested_scan = 0;
-               cancel_delayed_work(&priv->scan_event);
-
-               wrqu.data.length = 0;
-               wrqu.data.flags = 0;
-               wireless_send_event(priv->net_dev, SIOCGIWSCAN, &wrqu, NULL);
+               mod_delayed_work(system_wq, &priv->scan_event, 0);
        }
 }