diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2018-11-08 20:26:32 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2018-11-08 20:26:32 +0100 |
commit | 85afec4c2f95f12970b9f0e9a73a02cf29645745 (patch) | |
tree | db278f2603b5772bfbebd753d035095b158fdb56 /sys | |
parent | b7aedbb36634b9d67ec74d1156af03090ee913ba (diff) |
bcm: intrenable() can happen from any cpu in case of dma interrupts
Diffstat (limited to 'sys')
-rw-r--r-- | sys/src/9/bcm/trap.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/sys/src/9/bcm/trap.c b/sys/src/9/bcm/trap.c index 08534b2d9..ac5223324 100644 --- a/sys/src/9/bcm/trap.c +++ b/sys/src/9/bcm/trap.c @@ -177,17 +177,20 @@ irqenable(int irq, void (*f)(Ureg*, void*), void* a) Vctl *v; Intregs *ip; u32int *enable; + int cpu; ip = (Intregs*)INTREGS; if((v = xalloc(sizeof(Vctl))) == nil) panic("irqenable: no mem"); + cpu = 0; v->irq = irq; if(irq >= IRQlocal){ - v->reg = (u32int*)(ARMLOCAL + Localintpending) + m->machno; + cpu = m->machno; + v->reg = (u32int*)(ARMLOCAL + Localintpending) + cpu; if(irq >= IRQmbox0) - enable = (u32int*)(ARMLOCAL + Localmboxint) + m->machno; + enable = (u32int*)(ARMLOCAL + Localmboxint) + cpu; else - enable = (u32int*)(ARMLOCAL + Localtimerint) + m->machno; + enable = (u32int*)(ARMLOCAL + Localtimerint) + cpu; v->mask = 1 << (irq - IRQlocal); }else if(irq >= IRQbasic){ enable = &ip->ARMenable; @@ -207,8 +210,8 @@ irqenable(int irq, void (*f)(Ureg*, void*), void* a) vfiq = v; ip->FIQctl = Fiqenable | irq; }else{ - v->next = vctl[m->machno]; - vctl[m->machno] = v; + v->next = vctl[cpu]; + vctl[cpu] = v; if(irq >= IRQmbox0){ if(irq <= IRQmbox3) *enable |= 1 << (irq - IRQmbox0); |