1*4882a593SmuzhiyunFrom aa74fa2fb5acf54bd46ad4c1b10e0a23a2cb3d25 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Fabrice Fontaine <fontaine.fabrice@gmail.com> 3*4882a593SmuzhiyunDate: Thu, 4 Nov 2021 18:45:11 +0100 4*4882a593SmuzhiyunSubject: [PATCH] fix build with 32-bits kernel 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunUse div_s64 or div_s64_rem to fix the following build failure on 32-bits 7*4882a593Smuzhiyunkernels: 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunERROR: modpost: "__divdi3" [/home/fabrice/buildroot/output/build/dahdi-linux-5c840cf43838e0690873e73409491c392333b3b8/drivers/dahdi/xpp/xpp_usb.ko] undefined! 10*4882a593SmuzhiyunERROR: modpost: "__udivdi3" [/home/fabrice/buildroot/output/build/dahdi-linux-5c840cf43838e0690873e73409491c392333b3b8/drivers/dahdi/xpp/xpp_usb.ko] undefined! 11*4882a593SmuzhiyunERROR: modpost: "__moddi3" [/home/fabrice/buildroot/output/build/dahdi-linux-5c840cf43838e0690873e73409491c392333b3b8/drivers/dahdi/xpp/xpp.ko] undefined! 12*4882a593SmuzhiyunERROR: modpost: "__divdi3" [/home/fabrice/buildroot/output/build/dahdi-linux-5c840cf43838e0690873e73409491c392333b3b8/drivers/dahdi/xpp/xpp.ko] undefined! 13*4882a593Smuzhiyun 14*4882a593SmuzhiyunSigned-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> 15*4882a593Smuzhiyun--- 16*4882a593Smuzhiyun drivers/dahdi/xpp/xbus-core.c | 9 ++++++--- 17*4882a593Smuzhiyun drivers/dahdi/xpp/xbus-pcm.c | 4 ++-- 18*4882a593Smuzhiyun drivers/dahdi/xpp/xbus-sysfs.c | 2 +- 19*4882a593Smuzhiyun drivers/dahdi/xpp/xframe_queue.c | 15 ++++++++++----- 20*4882a593Smuzhiyun drivers/dahdi/xpp/xpp_usb.c | 2 +- 21*4882a593Smuzhiyun 5 files changed, 20 insertions(+), 12 deletions(-) 22*4882a593Smuzhiyun 23*4882a593Smuzhiyundiff --git a/drivers/dahdi/xpp/xbus-core.c b/drivers/dahdi/xpp/xbus-core.c 24*4882a593Smuzhiyunindex fc4ce7b..b1d1fd7 100644 25*4882a593Smuzhiyun--- a/drivers/dahdi/xpp/xbus-core.c 26*4882a593Smuzhiyun+++ b/drivers/dahdi/xpp/xbus-core.c 27*4882a593Smuzhiyun@@ -1754,11 +1754,14 @@ out: 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun static void xbus_fill_proc_queue(struct seq_file *sfile, struct xframe_queue *q) 30*4882a593Smuzhiyun { 31*4882a593Smuzhiyun+ s64 msec = 0; 32*4882a593Smuzhiyun+ s32 rem = 0; 33*4882a593Smuzhiyun+ 34*4882a593Smuzhiyun+ msec = div_s64_rem(q->worst_lag_usec, 1000, &rem); 35*4882a593Smuzhiyun seq_printf(sfile, 36*4882a593Smuzhiyun- "%-15s: counts %3d, %3d, %3d worst %3d, overflows %3d worst_lag %02lld.%lld ms\n", 37*4882a593Smuzhiyun+ "%-15s: counts %3d, %3d, %3d worst %3d, overflows %3d worst_lag %02lld.%d ms\n", 38*4882a593Smuzhiyun q->name, q->steady_state_count, q->count, q->max_count, 39*4882a593Smuzhiyun- q->worst_count, q->overflows, q->worst_lag_usec / 1000, 40*4882a593Smuzhiyun- q->worst_lag_usec % 1000); 41*4882a593Smuzhiyun+ q->worst_count, q->overflows, msec, rem); 42*4882a593Smuzhiyun xframe_queue_clearstats(q); 43*4882a593Smuzhiyun } 44*4882a593Smuzhiyun 45*4882a593Smuzhiyundiff --git a/drivers/dahdi/xpp/xbus-pcm.c b/drivers/dahdi/xpp/xbus-pcm.c 46*4882a593Smuzhiyunindex 8bb2fe7..e690ce7 100644 47*4882a593Smuzhiyun--- a/drivers/dahdi/xpp/xbus-pcm.c 48*4882a593Smuzhiyun+++ b/drivers/dahdi/xpp/xbus-pcm.c 49*4882a593Smuzhiyun@@ -129,7 +129,7 @@ static int xpp_ticker_step(struct xpp_ticker *ticker, const ktime_t t) 50*4882a593Smuzhiyun usec = ktime_us_delta(ticker->last_sample, 51*4882a593Smuzhiyun ticker->first_sample); 52*4882a593Smuzhiyun ticker->first_sample = ticker->last_sample; 53*4882a593Smuzhiyun- ticker->tick_period = usec / ticker->cycle; 54*4882a593Smuzhiyun+ ticker->tick_period = div_s64(usec, ticker->cycle); 55*4882a593Smuzhiyun cycled = 1; 56*4882a593Smuzhiyun } 57*4882a593Smuzhiyun ticker->count++; 58*4882a593Smuzhiyun@@ -497,7 +497,7 @@ static void send_drift(xbus_t *xbus, int drift) 59*4882a593Smuzhiyun XBUS_DBG(SYNC, xbus, 60*4882a593Smuzhiyun "%sDRIFT adjust %s (%d) (last update %lld seconds ago)\n", 61*4882a593Smuzhiyun (disable_pll_sync) ? "Fake " : "", msg, drift, 62*4882a593Smuzhiyun- msec_delta / MSEC_PER_SEC); 63*4882a593Smuzhiyun+ div_s64(msec_delta, MSEC_PER_SEC)); 64*4882a593Smuzhiyun if (!disable_pll_sync) 65*4882a593Smuzhiyun CALL_PROTO(GLOBAL, SYNC_SOURCE, xbus, NULL, SYNC_MODE_PLL, 66*4882a593Smuzhiyun drift); 67*4882a593Smuzhiyundiff --git a/drivers/dahdi/xpp/xbus-sysfs.c b/drivers/dahdi/xpp/xbus-sysfs.c 68*4882a593Smuzhiyunindex d8c11dc..35180d9 100644 69*4882a593Smuzhiyun--- a/drivers/dahdi/xpp/xbus-sysfs.c 70*4882a593Smuzhiyun+++ b/drivers/dahdi/xpp/xbus-sysfs.c 71*4882a593Smuzhiyun@@ -249,7 +249,7 @@ static DEVICE_ATTR_READER(driftinfo_show, dev, buf) 72*4882a593Smuzhiyun /* 73*4882a593Smuzhiyun * Calculate lost ticks time 74*4882a593Smuzhiyun */ 75*4882a593Smuzhiyun- seconds = ktime_ms_delta(now, di->last_lost_tick) / 1000; 76*4882a593Smuzhiyun+ seconds = div_s64(ktime_ms_delta(now, di->last_lost_tick), 1000); 77*4882a593Smuzhiyun minutes = seconds / 60; 78*4882a593Smuzhiyun seconds = seconds % 60; 79*4882a593Smuzhiyun hours = minutes / 60; 80*4882a593Smuzhiyundiff --git a/drivers/dahdi/xpp/xframe_queue.c b/drivers/dahdi/xpp/xframe_queue.c 81*4882a593Smuzhiyunindex e986083..8e5e508 100644 82*4882a593Smuzhiyun--- a/drivers/dahdi/xpp/xframe_queue.c 83*4882a593Smuzhiyun+++ b/drivers/dahdi/xpp/xframe_queue.c 84*4882a593Smuzhiyun@@ -35,15 +35,18 @@ static void __xframe_dump_queue(struct xframe_queue *q) 85*4882a593Smuzhiyun int i = 0; 86*4882a593Smuzhiyun char prefix[30]; 87*4882a593Smuzhiyun ktime_t now = ktime_get(); 88*4882a593Smuzhiyun+ s64 msec = 0; 89*4882a593Smuzhiyun+ s32 rem = 0; 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun printk(KERN_DEBUG "%s: dump queue '%s' (first packet in each frame)\n", 92*4882a593Smuzhiyun THIS_MODULE->name, q->name); 93*4882a593Smuzhiyun list_for_each_entry_reverse(xframe, &q->head, frame_list) { 94*4882a593Smuzhiyun xpacket_t *pack = (xpacket_t *)&xframe->packets[0]; 95*4882a593Smuzhiyun s64 usec = ktime_us_delta(now, xframe->kt_queued); 96*4882a593Smuzhiyun+ msec = div_s64_rem(usec, 1000, &rem); 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun- snprintf(prefix, ARRAY_SIZE(prefix), " %3d> %5lld.%03lld msec", 99*4882a593Smuzhiyun- i++, usec / 1000, usec % 1000); 100*4882a593Smuzhiyun+ snprintf(prefix, ARRAY_SIZE(prefix), " %3d> %5lld.%03d msec", 101*4882a593Smuzhiyun+ i++, msec, rem); 102*4882a593Smuzhiyun dump_packet(prefix, pack, 1); 103*4882a593Smuzhiyun } 104*4882a593Smuzhiyun } 105*4882a593Smuzhiyun@@ -52,6 +55,8 @@ static bool __xframe_enqueue(struct xframe_queue *q, xframe_t *xframe) 106*4882a593Smuzhiyun { 107*4882a593Smuzhiyun int ret = 1; 108*4882a593Smuzhiyun static int overflow_cnt; 109*4882a593Smuzhiyun+ s64 msec = 0; 110*4882a593Smuzhiyun+ s32 rem = 0; 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun if (unlikely(q->disabled)) { 113*4882a593Smuzhiyun ret = 0; 114*4882a593Smuzhiyun@@ -60,11 +65,11 @@ static bool __xframe_enqueue(struct xframe_queue *q, xframe_t *xframe) 115*4882a593Smuzhiyun if (q->count >= q->max_count) { 116*4882a593Smuzhiyun q->overflows++; 117*4882a593Smuzhiyun if ((overflow_cnt++ % 1000) < 5) { 118*4882a593Smuzhiyun- NOTICE("Overflow of %-15s: counts %3d, %3d, %3d worst %3d, overflows %3d worst_lag %02lld.%lld ms\n", 119*4882a593Smuzhiyun+ msec = div_s64_rem(q->worst_lag_usec, 1000, &rem); 120*4882a593Smuzhiyun+ NOTICE("Overflow of %-15s: counts %3d, %3d, %3d worst %3d, overflows %3d worst_lag %02lld.%d ms\n", 121*4882a593Smuzhiyun q->name, q->steady_state_count, q->count, 122*4882a593Smuzhiyun q->max_count, q->worst_count, q->overflows, 123*4882a593Smuzhiyun- q->worst_lag_usec / 1000, 124*4882a593Smuzhiyun- q->worst_lag_usec % 1000); 125*4882a593Smuzhiyun+ msec, rem); 126*4882a593Smuzhiyun __xframe_dump_queue(q); 127*4882a593Smuzhiyun } 128*4882a593Smuzhiyun ret = 0; 129*4882a593Smuzhiyundiff --git a/drivers/dahdi/xpp/xpp_usb.c b/drivers/dahdi/xpp/xpp_usb.c 130*4882a593Smuzhiyunindex 1a591b1..3741457 100644 131*4882a593Smuzhiyun--- a/drivers/dahdi/xpp/xpp_usb.c 132*4882a593Smuzhiyun+++ b/drivers/dahdi/xpp/xpp_usb.c 133*4882a593Smuzhiyun@@ -882,7 +882,7 @@ static void xpp_send_callback(struct urb *urb) 134*4882a593Smuzhiyun usec = 0; /* System clock jumped */ 135*4882a593Smuzhiyun if (usec > xusb->max_tx_delay) 136*4882a593Smuzhiyun xusb->max_tx_delay = usec; 137*4882a593Smuzhiyun- i = usec / USEC_BUCKET; 138*4882a593Smuzhiyun+ i = div_s64(usec, USEC_BUCKET); 139*4882a593Smuzhiyun if (i >= NUM_BUCKETS) 140*4882a593Smuzhiyun i = NUM_BUCKETS - 1; 141*4882a593Smuzhiyun xusb->usb_tx_delay[i]++; 142*4882a593Smuzhiyun-- 143*4882a593Smuzhiyun2.33.0 144*4882a593Smuzhiyun 145