All of lore.kernel.org
 help / color / mirror / Atom feed
From: Julien Grall <julien.grall@linaro.org>
To: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: julien.grall@citrix.com, xen-devel@lists.xensource.com,
	Ian.Campbell@citrix.com
Subject: Re: [PATCH v6 1/5] xen/arm: observe itargets setting in vgic_enable_irqs and vgic_disable_irqs
Date: Tue, 24 Jun 2014 19:20:11 +0100	[thread overview]
Message-ID: <53A9C15B.9070401@linaro.org> (raw)
In-Reply-To: <alpine.DEB.2.02.1406241900540.19982@kaball.uk.xensource.com>

On 06/24/2014 07:04 PM, Stefano Stabellini wrote:
> On Tue, 24 Jun 2014, Julien Grall wrote:
>> On 24/06/14 12:38, Stefano Stabellini wrote:
>>>> Sorry for not having catch this earlier. I don't really like the idea to
>>>> extend the rank lock to vgic_{enable/disable}_irqs. The 2 functions
>>>> can be long to execute as it may touch the GIC distributor.
>>>>
>>>> In another way, the rank lock is only taken in the distributor emulation.
>>>>
>>>> Assuming we consider that distributor access may be slow:
>>>
>>> We could end up enabling or disabling the wrong set of interrupts
>>> without this change. I think it is necessary.
>>
>> AFAIU, this lock only protects the rank when we retrieve the target VCPU, the
>> other part of the function will still work without it.
>>
>> What I meant is to call vgic_get_target_vcpu, so the lock will protect only
>> what is necessary and not more.
> 
> I don't think so (unless I misunderstood your suggestion): setting
> ienable and enabling the interrupts need to be atomic.  Otherwise this
> can happen:
> 
>     VCPU0                                       VCPU1
> - rank_lock
> - write icenabler
> - get target vcpus
> - rank_unlock
>                                          - rank_lock
>                                          - write icenable
>                                          - get target vcpus (some are the same)
>                                          - rank_unlock
> 
>                                          - vgic_enable_irqs
> 
> - vgic_enable_irqs
> 
> 
> we now have an inconsistent state: we enabled the irqs written from
> vcpu0 but icenable reflects what was written from vcpu1.

In your example it's not possible because we save the value of ienable
in a temporary variable. So calling to vgic_enable_irqs on 2 different
VCPU with the same range of IRQ won't be a problem.

But... there is a possible race condition between enable and disable. We
need to serialize the access otherwise we may enable/disable by mistake
an IRQ and it's not synced anymore with the register state.

This is issue is also on Xen 4.4. Can you send a single patch which move
the unlock for this branch?

Thanks,

-- 
Julien Grall

  reply	other threads:[~2014-06-24 18:20 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-23 16:36 [PATCH v6 0/5] vgic emulation and GICD_ITARGETSR Stefano Stabellini
2014-06-23 16:37 ` [PATCH v6 1/5] xen/arm: observe itargets setting in vgic_enable_irqs and vgic_disable_irqs Stefano Stabellini
2014-06-23 17:41   ` Julien Grall
2014-06-24 11:38     ` Stefano Stabellini
2014-06-24 12:07       ` Julien Grall
2014-06-24 18:04         ` Stefano Stabellini
2014-06-24 18:20           ` Julien Grall [this message]
2014-06-24 18:29             ` Stefano Stabellini
2014-06-27 15:17   ` Ian Campbell
2014-07-02 15:39     ` Stefano Stabellini
2014-07-02 15:58       ` Ian Campbell
2014-07-02 18:05         ` Stefano Stabellini
2014-06-23 16:37 ` [PATCH v6 2/5] xen/arm: inflight irqs during migration Stefano Stabellini
2014-06-23 20:14   ` Julien Grall
2014-06-24 11:57     ` Stefano Stabellini
2014-06-24 12:17       ` Julien Grall
2014-07-02 22:27         ` Stefano Stabellini
2014-06-27 15:37   ` Ian Campbell
2014-07-02 18:22     ` Stefano Stabellini
2014-06-27 15:40   ` Ian Campbell
2014-07-02 18:33     ` Stefano Stabellini
2014-07-03  9:29       ` Ian Campbell
2014-07-03 14:43         ` Stefano Stabellini
2014-06-23 16:37 ` [PATCH v6 3/5] xen/arm: support irq delivery to vcpu > 0 Stefano Stabellini
2014-06-24 13:33   ` Julien Grall
2014-06-27 15:42     ` Ian Campbell
2014-07-02 15:52     ` Stefano Stabellini
2014-06-23 16:37 ` [PATCH v6 4/5] xen/arm: physical irq follow virtual irq Stefano Stabellini
2014-06-24 13:43   ` Julien Grall
2014-07-02 18:14     ` Stefano Stabellini
2014-06-23 16:37 ` [PATCH v6 5/5] xen: introduce sched_move_irqs Stefano Stabellini
2014-06-24  6:38   ` Jan Beulich
2014-06-24 12:02     ` George Dunlap
2014-06-27 15:46       ` Ian Campbell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53A9C15B.9070401@linaro.org \
    --to=julien.grall@linaro.org \
    --cc=Ian.Campbell@citrix.com \
    --cc=julien.grall@citrix.com \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.