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