Subversion Repositories HelenOS

Rev

Rev 2265 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2265 Rev 2292
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);
-
 
148
    clock();
142
    clock();
149
    spinlock_lock(&irq->lock);
-
 
150
}
143
}
151
 
144
 
152
/** Initialize APIC on BSP. */
145
/** Initialize APIC on BSP. */
153
void apic_init(void)
146
void apic_init(void)
154
{
147
{
Line 167... Line 160...
167
     * Other interrupts will be forwarded to the lowest priority CPU.
160
     * Other interrupts will be forwarded to the lowest priority CPU.
168
     */
161
     */
169
    io_apic_disable_irqs(0xffff);
162
    io_apic_disable_irqs(0xffff);
170
   
163
   
171
    irq_initialize(&l_apic_timer_irq);
164
    irq_initialize(&l_apic_timer_irq);
172
    l_apic_timer_irq.preack = true;
-
 
173
    l_apic_timer_irq.devno = device_assign_devno();
165
    l_apic_timer_irq.devno = device_assign_devno();
174
    l_apic_timer_irq.inr = IRQ_CLK;
166
    l_apic_timer_irq.inr = IRQ_CLK;
175
    l_apic_timer_irq.claim = l_apic_timer_claim;
167
    l_apic_timer_irq.claim = l_apic_timer_claim;
176
    l_apic_timer_irq.handler = l_apic_timer_irq_handler;
168
    l_apic_timer_irq.handler = l_apic_timer_irq_handler;
177
    irq_register(&l_apic_timer_irq);
169
    irq_register(&l_apic_timer_irq);