Hi,
        I am a user of qemu. I found that in qemu2.0.0-rc0 the gic model was 
updated. However, it seems loss ability to bind irqs to any specified core when 
the board includes multiple cortex-a9 cores. The problematic codes maybe locate 
at hw/intc/arm_gic.c:

50 void gic_update(GICState *s)
...
68         for (irq = 0; irq < s->num_irq; irq++) {
69             if (GIC_TEST_ENABLED(irq, cm) && gic_test_pending(s, irq, cm)) {
70                 if (GIC_GET_PRIORITY(irq, cpu) < best_prio) {
71                     best_prio = GIC_GET_PRIORITY(irq, cpu);
72                     best_irq = irq;
73                 }
74             }
75         }
...
gic_test_pending checks if the pending bits of an irq are set. I think the 
pending bits reflect core bindings according to the func "gic_set_irq". But in 
the following codes:

115 static void gic_set_irq_generic(GICState *s, int irq, int level,
116                                 int cm, int target)
117 {
118     if (level) {
119         GIC_SET_LEVEL(irq, cm);
120         DPRINTF("Set %d pending mask %x\n", irq, target);
121         if (GIC_TEST_EDGE_TRIGGER(irq)) {
122             GIC_SET_PENDING(irq, target);
123         }
124     } else {
125         GIC_CLEAR_LEVEL(irq, cm);
126     }
127 }

if level trigger the core target parameter of the irq is ignored and its 
pending bits will not be set. So how does the core target parameter make its 
affect?
I regard it as a bug because in previous version (1.5), our kernel and gic work 
well.
Would anyone consider about this question?

thanks
Xiaodong Zhu

Reply via email to