HRTIMER_MODE_ABS_PINNED = HRTIMER_MODE_ABS | HRTIMER_MODE_PINNED, HRTIMER_MODE_REL_PINNED = HRTIMER_MODE_REL | HRTIMER_MODE_PINNED, HRTIMER_MODE_ABS_SOFT = HRTIMER_MODE_ABS | HRTIMER_MODE_SOFT, HRTIMER_MODE_REL_SOFT = HRTIMER_MODE_REL | HRTIMER_MODE_SOFT, HRTIMER_MODE_ABS_PINNED_SOFT ...
HRTIMER_MODE_REL_PINNED_SOFT = HRTIMER_MODE_REL_PINNED | HRTIMER_MODE_SOFT, HRTIMER_MODE_ABS_HARD = HRTIMER_MODE_ABS | HRTIMER_MODE_HARD, HRTIMER_MODE_REL_HARD = HRTIMER_MODE_REL | HRTIMER_MODE_HARD, HRTIMER_MODE_ABS_PINNED_HARD = HRTIMER_MODE_ABS_PINNED | HRTIMER_MODE_HARD, HRTIMER_M...
HRTIMER_MODE_ABS = 0x0, /* Time value is absolute */ HRTIMER_MODE_REL = 0x1, /* Time value is relative to now */ HRTIMER_MODE_PINNED = 0x02, /* Timer is bound to CPU */ HRTIMER_MODE_ABS_PINNED = 0x02, HRTIMER_MODE_REL_PINNED = 0x03, }; Notes:hrtimer的SoC-->CPUs-->Cloc...
如果系统允许高精度模式,传入的allow_nohz参数为false,tick_check_oneshot_change函数返回1,回到上面的hrtimer_run_pending函数,hrtimer_switch_to_hres函数将会被调用,已完成切换到NOHZ_MODE_HIGHRES高精度模式。
HRTIMER_MODE_ABS_PINNED = 0x02, /* 第一种和第三种的结合 */ HRTIMER_MODE_REL_PINNED = 0x03, /* 第二种和第三种的结合 */ */ void hrtimer_init(structhrtimer *timer,clockid_tclock_id,enumhrtimer_modemode); 3. 定时器启动 /*
HRTIMER_MODE_REL = 0x1, /* 相对模式 */ HRTIMER_MODE_PINNED = 0x02, /* 和CPU绑定 */ HRTIMER_MODE_ABS_PINNED = 0x02, /* 第一种和第三种的结合 */ HRTIMER_MODE_REL_PINNED = 0x03, /* 第二种和第三种的结合 */ */ void hrtimer_init(struct hrtimer *timer, clockid_t clock_id, ...
HRTIMER_MODE_ABS_PINNED); /* Check, if the timer was already in the past */ if (hrtimer_active(&ts->sched_timer)) break; now = ktime_get(); } #ifdef CONFIG_NO_HZ if (tick_nohz_enabled) ts->nohz_mode = NOHZ_MODE_HIGHRES; ...
-hrtimer_init(&ts->sched_timer,CLOCK_MONOTONIC,HRTIMER_MODE_ABS);//建立sched_timer,模拟周期性的硬件timer -ts->sched_timer.function=tick_sched_timer;//高精度模式下,系统的tick处理函数 -hrtimer_interrupt -for(i=0;i<HRTIMER_MAX_CLOCK_BASES;i++)//找出所有到期hr定时器,直接执行 -__run...
hrtimer_start(&ts->sched_timer,expires,HRTIMER_MODE_ABS_PINNED); /*Check,ifthetimerwasalreadyinthepast*/ if(hrtimer_active(&ts->sched_timer)) gotoout; } while(!need_resched()){ } tick_nohz_restart_sched_tick(); //重启模拟系统的周期tick的sched_timer定时器 ...
hrtimer_start_expires(&t->timer, mode); if (!hrtimer_active(&t->timer)) t->task = NULL; if (likely(t->task)) schedule(); hrtimer_cancel(&t->timer); mode = HRTIMER_MODE_ABS; }while (t->task && !signal_pending(current)); ...