@@ -111,6 +111,9 @@ static int (*fn_hrtimer_init)(struct hrtimer *timer, clockid_t which_clock,
111111static int (* fn_hrtimer_cancel )(struct hrtimer * );
112112static 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 );
114117static 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