From e48b1790907c960b9d4f28cf7da9e0c25c5d02df Mon Sep 17 00:00:00 2001 From: Vladimir Kondratiev Date: Fri, 20 Jun 2014 10:05:07 +0300 Subject: [PATCH] wil6210: fix for 64-bit integer division On some platforms, cycles_t is 64-bit, and gcc generates call to __udivdi3 for straight division of cycles_t/cycles_t. This leads to compilation failure, as this function is not exist in the kernel runtime. do_div() to rescue Original report: tree: git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next.git master head: 2e91606f5e1ec7329557dfc0e298c4c021acbb80 commit: 7c0acf868d2e470c9d6a40091acf8d6444c01b57 [81/103] wil6210: Tx performance monitoring config: i386-randconfig-ha3-0620 (attached as .config) All error/warnings: drivers/built-in.o: In function `wil_vring_debugfs_show': >> debugfs.c:(.text+0x39b9be): undefined reference to `__udivdi3' Signed-off-by: Vladimir Kondratiev Signed-off-by: John W. Linville --- drivers/net/wireless/ath/wil6210/debugfs.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/ath/wil6210/debugfs.c b/drivers/net/wireless/ath/wil6210/debugfs.c index 7d1ef4eea0d8..a868c5eebe37 100644 --- a/drivers/net/wireless/ath/wil6210/debugfs.c +++ b/drivers/net/wireless/ath/wil6210/debugfs.c @@ -83,9 +83,10 @@ static int wil_vring_debugfs_show(struct seq_file *s, void *data) char name[10]; /* performance monitoring */ cycles_t now = get_cycles(); - cycles_t idle = txdata->idle; + cycles_t idle = txdata->idle * 100; cycles_t total = now - txdata->begin; + do_div(idle, total); txdata->begin = now; txdata->idle = 0ULL; @@ -93,7 +94,7 @@ static int wil_vring_debugfs_show(struct seq_file *s, void *data) seq_printf(s, "\n%pM CID %d TID %d [%3d|%3d] idle %3d%%\n", wil->sta[cid].addr, cid, tid, used, avail, - (int)((idle*100)/total)); + (int)idle); wil_print_vring(s, wil, name, vring, '_', 'H'); } -- 2.20.1