Hi Stefano,
On 03/01/17 22:51, Stefano Stabellini wrote:
On Wed, 28 Dec 2016, Julien Grall wrote:
Hi Stefano,
On 22/12/16 02:15, Stefano Stabellini wrote:
gic_update_one_lr is called with the vgic lock held, but it calls
vgic_get_target_vcpu, which tries to obtain the rank lock. This can
cause deadlocks.
We already have a version of vgic_get_target_vcpu that doesn't take the
rank lock: __vgic_get_target_vcpu.
Solve the lock inversion problem, by not taking the rank lock in
gic_update_one_lr (calling __vgic_get_target_vcpu instead of
vgic_get_target_vcpu). This is safe, because vcpu target modifications
are protected by the same vgic vcpu lock.
I maintain what I said on the first version of this patch. All this patch
could be simplified by moving the call to irq_set_affinity in
vgic_irq_migrate.
There are no restriction to do that and no need to have any lock taken but the
rank lock.
All right. I'll submit a patch that does exactly that. It is not
perfect, because it drops interrupts in the problematic scenario, but it
should be a good place to start for a technical discussion.
I think I have missed something. What is the problematic scenario you
are describing? Looking at the v3, I don't see any mention of this
problem. Does it mean it has been solved?
Cheers,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel