summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2018-11-08 20:26:32 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2018-11-08 20:26:32 +0100
commit85afec4c2f95f12970b9f0e9a73a02cf29645745 (patch)
treedb278f2603b5772bfbebd753d035095b158fdb56 /sys
parentb7aedbb36634b9d67ec74d1156af03090ee913ba (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.c13
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);