/* takes the rank lock */ struct vcpu *vgic_get_target_vcpu(struct vcpu *v, unsigned int virq) { struct vcpu *v_target; struct vgic_irq_rank *rank = vgic_rank_irq(v, virq); unsigned long flags; vgic_lock_rank(v, rank, flags); v_target = __vgic_get_target_vcpu(v, virq); vgic_unlock_rank(v, rank, flags); return v_target; }
static int vgic_get_virq_priority(struct vcpu *v, unsigned int virq) { struct vgic_irq_rank *rank = vgic_rank_irq(v, virq); unsigned long flags; int priority; vgic_lock_rank(v, rank, flags); priority = rank->priority[virq & INTERRUPT_RANK_MASK]; vgic_unlock_rank(v, rank, flags); return priority; }
/* takes the rank lock */ struct vcpu *vgic_get_target_vcpu(struct vcpu *v, unsigned int irq) { struct domain *d = v->domain; struct vcpu *v_target; struct vgic_irq_rank *rank = vgic_rank_irq(v, irq); unsigned long flags; vgic_lock_rank(v, rank, flags); v_target = d->arch.vgic.handler->get_target_vcpu(v, irq); vgic_unlock_rank(v, rank, flags); return v_target; }