mac80211: fix throughput LED trigger
authorJohannes Berg <johannes.berg@intel.com>
Mon, 11 May 2015 17:12:09 +0000 (19:12 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 11 May 2015 17:16:04 +0000 (19:16 +0200)
As I was testing with hwsim, I missed that my previous commit to
make LED work depend on activation broke the code because I missed
removing the old trigger struct and some code was still using it,
now erroneously, causing crashes.

Fix this by always using the correct struct.

Reported-by: Felix Fietkau <nbd@openwrt.org>
Tested-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/ieee80211_i.h
net/mac80211/led.c

index 241b74f3bd812b0a01c998830615467285ec05c5..2c4fe45ea38aef70a8aba65c00916aafd8813c4e 100644 (file)
@@ -1038,7 +1038,6 @@ enum queue_stop_reason {
 
 #ifdef CONFIG_MAC80211_LEDS
 struct tpt_led_trigger {
-       struct led_trigger trig;
        char name[32];
        const struct ieee80211_tpt_blink *blink_table;
        unsigned int blink_table_len;
index 38f05565eaac38c4a03a7910316633aed6803234..0505845b7ab836c15888a06b3b7d76995d46e685 100644 (file)
@@ -276,10 +276,10 @@ static void tpt_trig_timer(unsigned long data)
                }
        }
 
-       read_lock(&tpt_trig->trig.leddev_list_lock);
-       list_for_each_entry(led_cdev, &tpt_trig->trig.led_cdevs, trig_list)
+       read_lock(&local->tpt_led.leddev_list_lock);
+       list_for_each_entry(led_cdev, &local->tpt_led.led_cdevs, trig_list)
                led_blink_set(led_cdev, &on, &off);
-       read_unlock(&tpt_trig->trig.leddev_list_lock);
+       read_unlock(&local->tpt_led.leddev_list_lock);
 }
 
 const char *
@@ -341,10 +341,10 @@ static void ieee80211_stop_tpt_led_trig(struct ieee80211_local *local)
        tpt_trig->running = false;
        del_timer_sync(&tpt_trig->timer);
 
-       read_lock(&tpt_trig->trig.leddev_list_lock);
-       list_for_each_entry(led_cdev, &tpt_trig->trig.led_cdevs, trig_list)
+       read_lock(&local->tpt_led.leddev_list_lock);
+       list_for_each_entry(led_cdev, &local->tpt_led.led_cdevs, trig_list)
                led_set_brightness(led_cdev, LED_OFF);
-       read_unlock(&tpt_trig->trig.leddev_list_lock);
+       read_unlock(&local->tpt_led.leddev_list_lock);
 }
 
 void ieee80211_mod_tpt_led_trig(struct ieee80211_local *local,