Contenu connexe Similaire à ch15-pv1-time-management Similaire à ch15-pv1-time-management (20) ch15-pv1-time-management2. 2
*. Introduction
*. Hardware Timer Mode
*. SMP Timer Framework with 1 Processor
*. SMP Timer Framework with 2 Processors
*. Low/High Resolution Timer Base
12. 12
hw timer
hw timer
(virtual)
hw timer hw timer
發生 hw timer interrupt
執行過期 timer 的 callback func.
low res. framework
根據 timer 設定的觸發時間
設定下一個 hw timer interrupt
highres. framework
clockevent clocksource clockevent clocksource
high res. base
high res. base
low res. base
13. 18
*. Introduction
*. Hardware Timer Mode
*. SMP Timer Framework with 1 Processor
*. SMP Timer Framework with 2 Processors
*. Low/High Resolution Timer Base
16. 21
hw timer cycle
set
hw timer cycle
set set set set
hw timer cycle
set set set set
oneshot
oneshot 用法之一
oneshot 用法之二
17. 22
hw timer cycle
set
hw timer cycle
set set set set
hw timer cycle
set set set set
hw timer cycle
set
oneshot
periodic
oneshot 用法之一
oneshot 用法之二
18. 23
hw timer cycle
set
hw timer cycle
set set set set
hw timer cycle
set set set set
hw timer cycle
set
oneshot
periodic
oneshot 用法之一
oneshot 用法之二
low res. clockevent
high res. clockevent
low res. clockevent
clock_event_device
set_next_event
clockevent_timer
name
rating
irq
list
300
event_handler
19. 24
hw timer cycle
set
hw timer cycle
set set set set
hw timer cycle
set set set set
hw timer cycle
set
hw timer cycle
set
20. 25
hw timer cycle
set
hw timer cycle
set set set set
hw timer cycle
set set set set
hw timer cycle
set
hw timer cycle
set
jiffies
21. 26
hw timer cycle
set
hw timer cycle
set set set set
hw timer cycle
set set set set
hw timer cycle
set
hw timer cycle
set
jiffies
clocksource
kernel default
clocksource
clocksource
read
clocksource_timer
name
list
rating
flags
24. 31
*. Introduction
*. Hardware Timer Mode
*. SMP Timer Framework with 1 Processor
*. SMP Timer Framework with 2 Processors
*. Low/High Resolution Timer Base
56. 63
*. Introduction
*. Hardware Timer Mode
*. SMP Timer Framework with 1 Processor
*. SMP Timer Framework with 2 Processors
*. Low/High Resolution Timer Base
65. 79
cpu1cpu0
PA
0x00000000
VA
low res. base
high res. base
clock event device
clock_event_device
set_next_event
clockevent_timer
timer_set_next_event
name
rating
irq
list
“timer0”
300
E_FIQ_EXTIMER0
event_handler tick_handle_periodic
clock source
clocksource
read
clocksource_jiffies
jiffies_read
name
list
rating
“jiffies”
1
flags
66. 80
cpu1cpu0
PA
0x00000000
VA
low res. base
high res. base
clock event device
clock_event_device
set_next_event
clockevent_timer
timer_set_next_event
name
rating
irq
list
“timer0”
300
E_FIQ_EXTIMER0
event_handler tick_handle_periodic
clock source
clocksource
read
clocksource_jiffies
jiffies_read
name
list
rating
“jiffies”
1
flags
每秒 100 次的頻率做以下事情
1. 更新 jiffies_64
2. 更新 xtime
3. 執行過期的 hrtimer
4. 檢查可否切換至 high res. framework
5. 執行過期的 timer
6. 執行 scheduler
69. 83
cpu1cpu0
PA
0x00000000
VA
low res. base
high res. base
clock event device
clock_event_device
set_next_event
clockevent_timer
timer_set_next_event
name
rating
irq
list
“timer0”
300
E_FIQ_EXTIMER0
event_handler tick_handle_periodic
clock source
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
clocksource
read
clocksource_jiffies
jiffies_read
name
list
rating
“jiffies”
1
flags
70. 84
cpu1cpu0
PA
0x00000000
VA
low res. base
high res. base
clock event device
clock_event_device
set_next_event
clockevent_timer
timer_set_next_event
name
rating
irq
list
“timer0”
300
E_FIQ_EXTIMER0
event_handler tick_handle_periodic
clock source
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
clocksource
read
clocksource_jiffies
jiffies_read
name
list
rating
“jiffies”
1
flags
每秒 100 次的頻率做以下事情
1. 更新 jiffies_64
2. 更新 xtime
3. 執行過期的 hrtimer
4. 檢查可否切換至 high res. framework
5. 執行過期的 timer
6. 執行 scheduler
71. 85
clocksource
read
clocksource_jiffies
jiffies_read
name
list
rating
“jiffies”
1
flags
cpu1cpu0
low res. base
high res. base
clock event device
clock_event_device
set_next_event
clockevent_timer
timer_set_next_event
name
rating
irq
list
“timer0”
300
E_FIQ_EXTIMER0
event_handler tick_handle_periodic
clock source
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
*. cpu0 把 key/addr 寫到指定位置
*. cpu1 確認 key 之後前往 addr & loop
*. cpu0 為 cpu1 準備 low/high res. base
*. cpu0 讓 cpu1 離開 loop
*. cpu1 自己準備 clockevent
*. cpu1 等著被 scheduler 分配工作
*. 切換 clocksource
*. cpu0 把 key/addr 寫到指定位置
*. cpu1 確認 key 之後前往 addr & loop
*. cpu0 為 cpu1 準備 low/high res. base
*. cpu0 讓 cpu1 離開 loop
*. cpu1 自己準備 clockevent
*. cpu1 等著被 scheduler 分配工作
*. 切換 clocksource
PA
0x00000000
VA
72. 86
clocksource
read
clocksource_jiffies
jiffies_read
name
list
rating
“jiffies”
1
flags
cpu1cpu0
low res. base
high res. base
clock event device
clock_event_device
set_next_event
clockevent_timer
timer_set_next_event
name
rating
irq
list
“timer0”
300
E_FIQ_EXTIMER0
event_handler tick_handle_periodic
clock source
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
*. cpu0 把 key/addr 寫到指定位置
*. cpu1 確認 key 之後前往 addr & loop
*. cpu0 為 cpu1 準備 low/high res. base
*. cpu0 讓 cpu1 離開 loop
*. cpu1 自己準備 clockevent
*. cpu1 等著被 scheduler 分配工作
*. 切換 clocksource
*. cpu0 把 key/addr 寫到指定位置
*. cpu1 確認 key 之後前往 addr & loop
*. cpu0 為 cpu1 準備 low/high res. base
*. cpu0 讓 cpu1 離開 loop
*. cpu1 自己準備 clockevent
*. cpu1 等著被 scheduler 分配工作
*. 切換 clocksource
PA
0x00000000
VA
73. 87
clocksource
read
clocksource_jiffies
jiffies_read
name
list
rating
“jiffies”
1
flags
cpu1cpu0
low res. base
high res. base
clock event device
clock_event_device
set_next_event
clockevent_timer
timer_set_next_event
name
rating
irq
list
“timer0”
300
E_FIQ_EXTIMER0
event_handler tick_handle_periodic
clock source
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
low res. base
high res. base
*. cpu0 把 key/addr 寫到指定位置
*. cpu1 確認 key 之後前往 addr & loop
*. cpu0 為 cpu1 準備 low/high res. base
*. cpu0 讓 cpu1 離開 loop
*. cpu1 自己準備 clockevent
*. cpu1 等著被 scheduler 分配工作
*. 切換 clocksource
*. cpu0 把 key/addr 寫到指定位置
*. cpu1 確認 key 之後前往 addr & loop
*. cpu0 為 cpu1 準備 low/high res. base
*. cpu0 讓 cpu1 離開 loop
*. cpu1 自己準備 clockevent
*. cpu1 等著被 scheduler 分配工作
*. 切換 clocksource
PA
0x00000000
VA
74. 88
clocksource
read
clocksource_jiffies
jiffies_read
name
list
rating
“jiffies”
1
flags
cpu1cpu0
low res. base
high res. base
clock event device
clock_event_device
set_next_event
clockevent_timer
timer_set_next_event
name
rating
irq
list
“timer0”
300
E_FIQ_EXTIMER0
event_handler tick_handle_periodic
clock source
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
low res. base
high res. base
*. cpu0 把 key/addr 寫到指定位置
*. cpu1 確認 key 之後前往 addr & loop
*. cpu0 為 cpu1 準備 low/high res. base
*. cpu0 讓 cpu1 離開 loop
*. cpu1 自己準備 clockevent
*. cpu1 等著被 scheduler 分配工作
*. 切換 clocksource
*. cpu0 把 key/addr 寫到指定位置
*. cpu1 確認 key 之後前往 addr & loop
*. cpu0 為 cpu1 準備 low/high res. base
*. cpu0 讓 cpu1 離開 loop
*. cpu1 自己準備 clockevent
*. cpu1 等著被 scheduler 分配工作
*. 切換 clocksource
PA
0x00000000
VA
75. 89
clocksource
read
clocksource_jiffies
jiffies_read
name
list
rating
“jiffies”
1
flags
cpu1cpu0
0x00000000
VA
low res. base
high res. base
clock event device
clock_event_device
set_next_event
clockevent_timer
timer_set_next_event
name
rating
irq
list
“timer0”
300
E_FIQ_EXTIMER0
event_handler tick_handle_periodic
clock source
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
low res. base
high res. base
*. cpu0 把 key/addr 寫到指定位置
*. cpu1 確認 key 之後前往 addr & loop
*. cpu0 為 cpu1 準備 low/high res. base
*. cpu0 讓 cpu1 離開 loop
*. cpu1 自己準備 clockevent
*. cpu1 等著被 scheduler 分配工作
*. 切換 clocksource
*. cpu0 把 key/addr 寫到指定位置
*. cpu1 確認 key 之後前往 addr & loop
*. cpu0 為 cpu1 準備 low/high res. base
*. cpu1 啟用 mmu
*. cpu1 自己準備 clockevent
*. cpu1 等著被 scheduler 分配工作
*. 切換 clocksource
76. 90
clocksource
read
clocksource_jiffies
jiffies_read
name
list
rating
“jiffies”
1
flags
cpu1cpu0
0x00000000
VA
low res. base
high res. base
clock event device
clock_event_device
set_next_event
clockevent_timer
timer_set_next_event
name
rating
irq
list
“timer0”
300
E_FIQ_EXTIMER0
event_handler tick_handle_periodic
clock source
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
low res. base
high res. base
clock event device
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
*. cpu0 把 key/addr 寫到指定位置
*. cpu1 確認 key 之後前往 addr & loop
*. cpu0 為 cpu1 準備 low/high res. base
*. cpu0 讓 cpu1 離開 loop
*. cpu1 自己準備 clockevent
*. cpu1 等著被 scheduler 分配工作
*. 切換 clocksource
*. cpu0 把 key/addr 寫到指定位置
*. cpu1 確認 key 之後前往 addr & loop
*. cpu0 為 cpu1 準備 low/high res. base
*. cpu1 啟用 mmu
*. cpu1 自己準備 clockevent
*. cpu1 等著被 scheduler 分配工作
*. 切換 clocksource
77. 91
cpu1cpu0
0x00000000
VA
low res. base
high res. base
clock event device
clock_event_device
set_next_event
clockevent_timer
timer_set_next_event
name
rating
irq
list
“timer0”
300
E_FIQ_EXTIMER0
event_handler tick_handle_periodic
clock source
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
low res. base
high res. base
clock event device
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
每秒 100 次的頻率做以下事情
1. 更新 jiffies_64
2. 更新 xtime
3. 執行過期的 hrtimer
4. 檢查可否切換至 high res. framework
5. 執行過期的 timer
6. 執行 scheduler
每秒 100 次的頻率做以下事情
1. 更新 jiffies_64
2. 更新 xtime
3. 執行過期的 hrtimer
4. 檢查可否切換至 high res. framework
5. 執行過期的 timer
6. 執行 scheduler
clocksource
read
clocksource_jiffies
jiffies_read
name
list
rating
“jiffies”
1
flags
78. 92
clocksource
read
clocksource_jiffies
jiffies_read
name
list
rating
“jiffies”
1
flags
cpu1cpu0
0x00000000
VA
low res. base
high res. base
clock event device
clock_event_device
set_next_event
clockevent_timer
timer_set_next_event
name
rating
irq
list
“timer0”
300
E_FIQ_EXTIMER0
event_handler tick_handle_periodic
clock source
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
low res. base
high res. base
clock event device
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
*. cpu0 把 key/addr 寫到指定位置
*. cpu1 確認 key 之後前往 addr & loop
*. cpu0 為 cpu1 準備 low/high res. base
*. cpu0 讓 cpu1 離開 loop
*. cpu1 自己準備 clockevent
*. cpu1 等著被 scheduler 分配工作
*. 切換 clocksource
*. cpu0 把 key/addr 寫到指定位置
*. cpu1 確認 key 之後前往 addr & loop
*. cpu0 為 cpu1 準備 low/high res. base
*. cpu1 啟用 mmu
*. cpu1 自己準備 clockevent
*. cpu1 等著被 scheduler 分配工作
*. 切換 clocksource
79. 93
clocksource
read
clocksource_jiffies
jiffies_read
name
list
rating
“jiffies”
1
flags
cpu1cpu0
0x00000000
VA
low res. base
high res. base
clock event device
clock_event_device
set_next_event
clockevent_timer
timer_set_next_event
name
rating
irq
list
“timer0”
300
E_FIQ_EXTIMER0
event_handler tick_handle_periodic
clock source
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
low res. base
high res. base
clock event device
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
clocksource
read
clocksource_timer
timer_read
name
list
rating
“timer1”
200
CLOCK_SOURCE_IS_CONTINUOUSflags
*. cpu0 把 key/addr 寫到指定位置
*. cpu1 確認 key 之後前往 addr & loop
*. cpu0 為 cpu1 準備 low/high res. base
*. cpu0 讓 cpu1 離開 loop
*. cpu1 自己準備 clockevent
*. cpu1 等著被 scheduler 分配工作
*. 切換 clocksource
*. cpu0 把 key/addr 寫到指定位置
*. cpu1 確認 key 之後前往 addr & loop
*. cpu0 為 cpu1 準備 low/high res. base
*. cpu1 啟用 mmu
*. cpu1 自己準備 clockevent
*. cpu1 等著被 scheduler 分配工作
*. 切換 clocksource
80. 94
cpu1cpu0
0x00000000
VA
low res. base
high res. base
clock event device
clock_event_device
set_next_event
clockevent_timer
timer_set_next_event
name
rating
irq
list
“timer0”
300
E_FIQ_EXTIMER0
event_handler tick_handle_periodic
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
low res. base
high res. base
clock event device
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
每秒 100 次的頻率做以下事情
1. 更新 jiffies_64
2. 更新 xtime
3. 執行過期的 hrtimer
4. 檢查可否切換至 high res. framework
5. 執行過期的 timer
6. 執行 scheduler
每秒 100 次的頻率做以下事情
1. 更新 jiffies_64
2. 更新 xtime
3. 執行過期的 hrtimer
4. 檢查可否切換至 high res. framework
5. 執行過期的 timer
6. 執行 scheduler
clocksource
read
clocksource_jiffies
jiffies_read
name
list
rating
“jiffies”
1
flags
clock source
clocksource
read
clocksource_timer
timer_read
name
list
rating
“timer1”
200
CLOCK_SOURCE_IS_CONTINUOUSflags
83. 97
cpu1cpu0
0x00000000
VA
low res. base
high res. base
clock event device
clock_event_device
set_next_event
clockevent_timer
timer_set_next_event
name
rating
irq
list
“timer0”
300
E_FIQ_EXTIMER0
event_handler tick_handle_periodic
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
low res. base
high res. base
clock event device
clock_event_device
set_next_event
percpu_clockevent
twd_set_next_event
name
rating
irq
list
“local timer”
350
29
event_handler tick_handle_periodic
每秒 100 次的頻率做以下事情
1. 更新 jiffies_64
2. 更新 xtime
3. 執行過期的 hrtimer
4. 檢查可否切換至 high res. framework
5. 執行過期的 timer
6. 執行 scheduler
7. 設定”多久之後發出下一個 interrupt”
每秒 100 次的頻率做以下事情
1. 更新 jiffies_64
2. 更新 xtime
3. 執行過期的 hrtimer
4. 檢查可否切換至 high res. framework
5. 執行過期的 timer
6. 執行 scheduler
7. 設定”多久之後發出下一個 interrupt”
clocksource
read
clocksource_jiffies
jiffies_read
name
list
rating
“jiffies”
1
flags
clock source
clocksource
read
clocksource_timer
timer_read
name
list
rating
“timer1”
200
CLOCK_SOURCE_IS_CONTINUOUSflags
86. 103
*. Introduction
*. Hardware Timer Mode
*. SMP Timer Framework with 1 Processor
*. SMP Timer Framework with 2 Processors
*. Low/High Resolution Timer Base
109. 126
hw timer
hw timer
(virtual)
hw timer hw timer
發生 hw timer interrupt
執行過期 timer 的 callback func.
low res. framework
根據 timer 設定的觸發時間
設定下一個 hw timer interrupt
highres. framework
clockevent clocksource clockevent clocksource
high res. base
high res. base
low res. base