From: Julien Grall <julien.grall@citrix.com>
To: Ian Campbell <ian.campbell@citrix.com>,
Julien Grall <julien.grall@citrix.com>
Cc: manish.jaggi@caviumnetworks.com,
Julien Grall <julien.grall@linaro.org>,
Stefano Stabellini <stefano.stabellini@citrix.com>,
Vijay Kilari <vijay.kilari@gmail.com>,
xen-devel <xen-devel@lists.xen.org>
Subject: Re: [Draft E] Xen on ARM vITS Handling
Date: Wed, 10 Jun 2015 10:52:35 -0400 [thread overview]
Message-ID: <55784F33.3030803@citrix.com> (raw)
In-Reply-To: <1433947542.30003.93.camel@citrix.com>
On 10/06/2015 10:45, Ian Campbell wrote:
> On Wed, 2015-06-10 at 10:40 -0400, Julien Grall wrote:
>>> ## Virtual LPI injection
>>>
>>> As discussed above the `vgic_vcpu_inject_irq` functionality will need
>>> to be extended to cover this new case, most likely via a new
>>> `vgic_vcpu_inject_lpi` frontend function. `vgic_vcpu_inject_irq` will
>>> also require some refactoring to allow the priority to be passed in
>>> from the caller (since `LPI` proprity comes from the `LPI` CFG table,
>>> while `SPI` and `PPI` priority is configured via other means).
>>>
>>> `vgic_vcpu_inject_lpi` receives a `struct domain *` and a virtual
>>> interrupt number (corresponding to a vLPI) and needs to figure out
>>> which vcpu this should map to.
>>>
>>> To do this it must look up the Collection ID associated (via the vITS)
>>> with that LPI.
>>>
>>> Proposal: Add a new `its_device` field to `struct irq_guest`, a
>>> pointer to the associated `struct its_device`. The existing `struct
>>> irq_guest.virq` field contains the event ID (perhaps use a `union`
>>> to give a more appropriate name) and _not_ the virtual LPI. Injection
>>> then consists of:
>>>
>>> d = irq_guest->domain
>>> virq = irq_guest->virq
>>> its_device = irq_guest->its_device
>>>
>>> get_vitt_entry(d, its_device->virt_device_id, virq, &vitt)
>>> vcpu = d->its_collections[vitt.collection]
>>>
>>> if !is_valid_lpi(vitt.vlpi): error
>>>
>>> get_vlpi_cfg(d, vitt.vlpi, &cfg)
>>> if !cfg.enabled: ignore
>>
>> Why? If you ignore it, it won't be possible anymore to inject the same
>> LPI to the guest when it's re-enabled.
>>
>> This is a valid use case and can happen if you decouple the pLPI
>> configuration and vLPI configuration or because the value is not yet
>> replicate. AFAIU, you are using the latter in this spec.
>
> Should we mark it as pending somewhere then? We can't actually inject it
> for sure, since it is masked.
vgic_vcpu_inject_irq does already the job for you. If the IRQ is not
enabled (i.e !GIC_IRQ_GUEST_QUEUED), the IRQ will be queue in the list
of inflight irqs of the VCPU.
> This would then re-require us to trap writes to the cfg page to allow us
> to reenable, which also makes sense.
Correct.
> So the only question is how to record the pending but not injected bit
> and to consider any other implications -- such as on SET/CLR_LPIPENDR.
I don't follow you. I though we said that we ignore guest request to
clear IRQ?
Regards,
--
Julien Grall
next prev parent reply other threads:[~2015-06-10 14:52 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-09 15:42 [Draft E] Xen on ARM vITS Handling Ian Campbell
2015-06-09 15:50 ` Manish Jaggi
2015-06-10 9:03 ` Ian Campbell
2015-06-10 9:18 ` Ian Campbell
2015-06-10 13:37 ` Julien Grall
2015-06-10 14:30 ` Ian Campbell
2015-06-10 14:40 ` Julien Grall
2015-06-10 14:45 ` Ian Campbell
2015-06-10 14:52 ` Julien Grall [this message]
2015-06-10 15:52 ` 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=55784F33.3030803@citrix.com \
--to=julien.grall@citrix.com \
--cc=ian.campbell@citrix.com \
--cc=julien.grall@linaro.org \
--cc=manish.jaggi@caviumnetworks.com \
--cc=stefano.stabellini@citrix.com \
--cc=vijay.kilari@gmail.com \
--cc=xen-devel@lists.xen.org \
/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.