OSDN Git Service

wil6210: Fix division by zero in wil_vring_debugfs_show
authorBoris Sorochkin <boriss@codeaurora.org>
Sun, 15 Feb 2015 12:02:35 +0000 (14:02 +0200)
committerKalle Valo <kvalo@codeaurora.org>
Fri, 27 Feb 2015 08:15:20 +0000 (10:15 +0200)
On some platforms get_cycles() implemented to allways return 0.
On such platforms "Division by zero" bug was triggered.

Signed-off-by: Boris Sorochkin <boriss@codeaurora.org>
Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/ath/wil6210/debugfs.c

index eb6de8c..fd59751 100644 (file)
@@ -103,23 +103,30 @@ static int wil_vring_debugfs_show(struct seq_file *s, void *data)
                                   % vring->size;
                        int avail = vring->size - used - 1;
                        char name[10];
+                       char sidle[10];
                        /* performance monitoring */
                        cycles_t now = get_cycles();
                        uint64_t idle = txdata->idle * 100;
                        uint64_t total = now - txdata->begin;
 
-                       do_div(idle, total);
+                       if (total != 0) {
+                               do_div(idle, total);
+                               snprintf(sidle, sizeof(sidle), "%3d%%",
+                                        (int)idle);
+                       } else {
+                               snprintf(sidle, sizeof(sidle), "N/A");
+                       }
                        txdata->begin = now;
                        txdata->idle = 0ULL;
 
                        snprintf(name, sizeof(name), "tx_%2d", i);
 
                        seq_printf(s,
-                                  "\n%pM CID %d TID %d BACK([%d] %d TU A%s) [%3d|%3d] idle %3d%%\n",
-                                  wil->sta[cid].addr, cid, tid,
-                                  txdata->agg_wsize, txdata->agg_timeout,
-                                  txdata->agg_amsdu ? "+" : "-",
-                                  used, avail, (int)idle);
+                               "\n%pM CID %d TID %d BACK([%d] %d TU A%s) [%3d|%3d] idle %s\n",
+                               wil->sta[cid].addr, cid, tid,
+                               txdata->agg_wsize, txdata->agg_timeout,
+                               txdata->agg_amsdu ? "+" : "-",
+                               used, avail, sidle);
 
                        wil_print_vring(s, wil, name, vring, '_', 'H');
                }