diff options
author | Pavel Roskin <proski@gnu.org> | 2007-03-05 02:19:06 -0500 |
---|---|---|
committer | Guido Guenther <agx@bogon.sigxcpu.org> | 2007-03-05 10:28:37 +0100 |
commit | 4b50804c047272075f07edb5b62d857e3200d6a0 (patch) | |
tree | 21e07f0abbcd33fb8ba7fa7b69f025e8836680fb | |
parent | 72f691a24e23a3c82dc43a1f4684c91c86dc133c (diff) |
[PATCH] Fix divizion by zero in ad-hoc mode
This would happen if the card gets more than one management packet in a
jiffy. Fix it by updating qual->qual at most once a second.
Measuremensts over a shorter period are meaningless anyway.
Signed-off-by: Pavel Roskin <proski@gnu.org>
-rw-r--r-- | at76_usb.c | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -3202,9 +3202,15 @@ static void calc_qual(struct at76c503 *dev, struct at76c503_rx_buffer *buf, stru (dev->board_type == BOARDTYPE_503_INTERSIL_3863)) { qual->qual=buf->link_quality; } else { + unsigned long msec; + + /* Update qual at most once a second */ + msec = jiffies_to_msecs(jiffies) - dev->beacons_last_qual; + if (msec < 1000) + return; + qual->qual = qual->level * dev->beacons_received * - dev->beacon_period / - (jiffies_to_msecs(jiffies) - dev->beacons_last_qual); + dev->beacon_period / msec; dev->beacons_last_qual = jiffies_to_msecs(jiffies); dev->beacons_received = 0; |