Skip to content

Commit 7f5185b

Browse files
committed
Fix for hrtimer_start_range_ns which replaces hrtimer_start.
1 parent 8840497 commit 7f5185b

1 file changed

Lines changed: 13 additions & 4 deletions

File tree

driver/cyclic_linux.c

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ static int (*fn_hrtimer_init)(struct hrtimer *timer, clockid_t which_clock,
111111
static int (*fn_hrtimer_cancel)(struct hrtimer *);
112112
static int (*fn_hrtimer_start)(struct hrtimer *timer, ktime_t tim,
113113
const enum hrtimer_mode mode);
114+
static int (*fn_hrtimer_start_range_ns)(struct hrtimer *timer, ktime_t tim,
115+
unsigned long delta_ns,
116+
const enum hrtimer_mode mode);
114117
static u64 (*fn_hrtimer_forward)(struct hrtimer *timer, ktime_t now, ktime_t interval);
115118

116119
#define TMR_ALIVE 1
@@ -144,10 +147,10 @@ init_cyclic()
144147
fn_hrtimer_cancel = get_proc_addr("hrtimer_cancel");
145148
fn_hrtimer_init = get_proc_addr("hrtimer_init");
146149
fn_hrtimer_start = get_proc_addr("hrtimer_start");
147-
fn_hrtimer_start = get_proc_addr("hrtimer_start");
150+
fn_hrtimer_start_range_ns = get_proc_addr("hrtimer_start_range_ns");
148151
fn_hrtimer_forward = get_proc_addr("hrtimer_forward");
149152

150-
if (fn_hrtimer_start == NULL) {
153+
if (fn_hrtimer_start == NULL && fn_hrtimer_start_range_ns == NULL) {
151154
printk(KERN_WARNING "dtracedrv: Cannot locate hrtimer in this kernel\n");
152155
return FALSE;
153156
}
@@ -226,7 +229,10 @@ static void cyclic_tasklet_func(unsigned long arg)
226229
#else
227230
ptr->expires = ktime_add_ns(ptr->expires, kt.tv64);
228231
#endif
229-
fn_hrtimer_start(&cp->c_htp, kt, HRTIMER_MODE_REL);
232+
if (fn_hrtimer_start)
233+
fn_hrtimer_start(&cp->c_htp, kt, HRTIMER_MODE_REL);
234+
else if (fn_hrtimer_start_range_ns)
235+
fn_hrtimer_start(&cp->c_htp, kt, 0, HRTIMER_MODE_REL);
230236
# endif
231237
cp->c_state = TMR_ALIVE;
232238
}
@@ -331,7 +337,10 @@ cyclic_add(cyc_handler_t *hdrl, cyc_time_t *t)
331337
/* cp->c_htp.cb_mode = HRTIMER_CB_SOFTIRQ;*/
332338
cp->c_htp.function = be_callback;
333339

334-
fn_hrtimer_start(&cp->c_htp, kt, HRTIMER_MODE_REL);
340+
if (fn_hrtimer_start)
341+
fn_hrtimer_start(&cp->c_htp, kt, HRTIMER_MODE_REL);
342+
else
343+
fn_hrtimer_start_range_ns(&cp->c_htp, kt, 0, HRTIMER_MODE_REL);
335344

336345
return (cyclic_id_t) cp;
337346
}

0 commit comments

Comments
 (0)