summaryrefslogtreecommitdiffstats
path: root/libs/dahdi-linux/patches/130-xpp-fix-32-bit-kernel.patch
blob: 3069569c6bcafd34d3d8d4564f8cb5260ab02931 (plain)
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
commit 648016d6b3a06f7ec75c17ef94ffa17be59eebcf
Author: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Date:   Wed Aug 16 09:30:01 2023 +0200

    xpp: 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!
    
    [Retrieved from:
    https://git.buildroot.net/buildroot/tree/package/dahdi-linux/0002-fix-build-with-32-bits-kernel.patch]
    
    Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>

--- a/drivers/dahdi/xpp/xbus-core.c
+++ b/drivers/dahdi/xpp/xbus-core.c
@@ -1771,11 +1771,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);
 }
 
--- 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_ti
 		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
 	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);
--- a/drivers/dahdi/xpp/xbus-sysfs.c
+++ b/drivers/dahdi/xpp/xbus-sysfs.c
@@ -249,7 +249,7 @@ static DEVICE_ATTR_READER(driftinfo_show
 	/*
 	 * 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;
--- a/drivers/dahdi/xpp/xframe_queue.c
+++ b/drivers/dahdi/xpp/xframe_queue.c
@@ -35,15 +35,18 @@ static void __xframe_dump_queue(struct x
 	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 xfra
 {
 	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 xfra
 	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;
--- a/drivers/dahdi/xpp/xpp_usb.c
+++ b/drivers/dahdi/xpp/xpp_usb.c
@@ -891,7 +891,7 @@ static void xpp_send_callback(struct 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]++;