Rev 2292 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2292 | Rev 2307 | ||
|---|---|---|---|
| Line 137... | Line 137... | ||
| 137 | return IRQ_ACCEPT; |
137 | return IRQ_ACCEPT; |
| 138 | } |
138 | } |
| 139 | 139 | ||
| 140 | static void l_apic_timer_irq_handler(irq_t *irq, void *arg, ...) |
140 | static void l_apic_timer_irq_handler(irq_t *irq, void *arg, ...) |
| 141 | { |
141 | { |
| - | 142 | /* |
|
| - | 143 | * Holding a spinlock could prevent clock() from preempting |
|
| - | 144 | * the current thread. In this case, we don't need to hold the |
|
| - | 145 | * irq->lock so we just unlock it and then lock it again. |
|
| - | 146 | */ |
|
| - | 147 | spinlock_unlock(&irq->lock); |
|
| 142 | clock(); |
148 | clock(); |
| - | 149 | spinlock_lock(&irq->lock); |
|
| 143 | } |
150 | } |
| 144 | 151 | ||
| 145 | /** Initialize APIC on BSP. */ |
152 | /** Initialize APIC on BSP. */ |
| 146 | void apic_init(void) |
153 | void apic_init(void) |
| 147 | { |
154 | { |
| Line 160... | Line 167... | ||
| 160 | * Other interrupts will be forwarded to the lowest priority CPU. |
167 | * Other interrupts will be forwarded to the lowest priority CPU. |
| 161 | */ |
168 | */ |
| 162 | io_apic_disable_irqs(0xffff); |
169 | io_apic_disable_irqs(0xffff); |
| 163 | 170 | ||
| 164 | irq_initialize(&l_apic_timer_irq); |
171 | irq_initialize(&l_apic_timer_irq); |
| - | 172 | l_apic_timer_irq.preack = true; |
|
| 165 | l_apic_timer_irq.devno = device_assign_devno(); |
173 | l_apic_timer_irq.devno = device_assign_devno(); |
| 166 | l_apic_timer_irq.inr = IRQ_CLK; |
174 | l_apic_timer_irq.inr = IRQ_CLK; |
| 167 | l_apic_timer_irq.claim = l_apic_timer_claim; |
175 | l_apic_timer_irq.claim = l_apic_timer_claim; |
| 168 | l_apic_timer_irq.handler = l_apic_timer_irq_handler; |
176 | l_apic_timer_irq.handler = l_apic_timer_irq_handler; |
| 169 | irq_register(&l_apic_timer_irq); |
177 | irq_register(&l_apic_timer_irq); |