From: Julien Grall <julien.grall@citrix.com>
To: Vijay Kilari <vijay.kilari@gmail.com>,
Julien Grall <julien.grall@citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
Prasun Kapoor <Prasun.Kapoor@caviumnetworks.com>,
manish.jaggi@caviumnetworks.com,
Julien Grall <julien.grall@linaro.org>,
"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
Stefano Stabellini <stefano.stabellini@citrix.com>
Subject: Re: Xen/arm: Virtual ITS command queue handling
Date: Sat, 16 May 2015 09:49:51 +0100 [thread overview]
Message-ID: <555704AF.7050102@citrix.com> (raw)
In-Reply-To: <CALicx6ujpyC=82MC=kLB_TkNMLTW9f+eRw_znFSd-_9fyxU3zA@mail.gmail.com>
Hi,
On 16/05/2015 05:03, Vijay Kilari wrote:
> On Fri, May 15, 2015 at 11:01 PM, Julien Grall <julien.grall@citrix.com> wrote:
>> On 15/05/15 16:38, Ian Campbell wrote:
>>> On Fri, 2015-05-15 at 16:05 +0100, Julien Grall wrote:
>>>> On 15/05/15 15:04, Vijay Kilari wrote:
>>>>> On Fri, May 15, 2015 at 7:14 PM, Julien Grall <julien.grall@citrix.com> wrote:
>>>>>> On 15/05/15 14:24, Ian Campbell wrote:
>>>>>>> On Fri, 2015-05-15 at 18:44 +0530, Vijay Kilari wrote:
>>>>>>>> On Fri, May 15, 2015 at 6:23 PM, Ian Campbell <ian.campbell@citrix.com> wrote:
>>>>>>>>> On Fri, 2015-05-15 at 18:17 +0530, Vijay Kilari wrote:
>>>>>>>>>> On Fri, May 15, 2015 at 5:33 PM, Julien Grall <julien.grall@citrix.com> wrote:
>>>>>>>>>>> On 15/05/15 12:30, Ian Campbell wrote:
>>>>>>>>>>>>> Handling of Single vITS and multipl pITS can be made simple.
>>>>>>>>>>>>>
>>>>>>>>>>>>> All ITS commands except SYNC & INVALL has device id which will
>>>>>>>>>>>>> help us to know to which pITS it should be sent.
>>>>>>>>>>>>>
>>>>>>>>>>>>> SYNC & INVALL can be dropped by Xen on Guest request
>>>>>>>>>>>>> and let Xen append where ever SYNC & INVALL is required.
>>>>>>>>>>>>> (Ex; Linux driver adds SYNC for required commands).
>>>>>>>>>>>>> With this assumption, all ITS commands are mapped to pITS
>>>>>>>>>>>>> and no need of synchronization across pITS
>>>>>>>>>>>>
>>>>>>>>>>>> You've ignored the second bullet its three sub-bullets, I think.
>>>>>>>>>>>
>>>>>>>>>> Why can't we group the batch of commands based on pITS it has
>>>>>>>>>> to be sent?.
>>>>>>>>>
>>>>>>>>> Are you suggesting that each batch we send should be synchronous? (i.e.
>>>>>>>>> end with SYNC+INT) That doesn't seem at all desirable.
>>>>>>>>
>>>>>>>> Not only at the end of batch, SYNC can be appended based on every
>>>>>>>> command within the batch.
>>>>>>>
>>>>>>> Could be, but something to avoid I think?
>>>>>>
>>>>>> That would slow down the ITS processing (SYNC is waiting that the
>>>>>> previous command has executed).
>>>>>>
>>>>>> Also, what about INTALL? Sending it everytime would be horrible for the
>>>>>> performance because it flush the ITS cache.
>>>>>
>>>>> INVALL is not required everytime. It can be sent only as mentioned in spec Note.
>>>>> ex; MOVI
>>
>> BTW, when you quote the spec, can you give the section number/version of
>> the spec? So far, I'm not able to find anything about the relation
>> between MOVI and INVALL in my spec.
>>
>
> See 5.13.19 INVALL collection of PRD03-GENC-010745 20.0
Still nothing about MOVI... How did you deduce it?
The spec only says:
"this command is expected to be used by software when it changed the
re-configuration of an LPI in memory
to ensure any cached copies of the old configuration are discarded."
>> INV* commands are sent in order to ask the ITS reloading the
>> configuration tables (see 4.8.4 PRD03-GENC-010745 24.0):
>>
>> "The effects of this caching are not visible to software except when
>> reconfiguring an LPI, in which case an explicit invalidate command must
>> be issued (e.g. an ITS INV command or a write to GICR_INVLPIR)
>> Note: this means hardware must manage its caches automatically when
>> moving interrupts"
>>
>> So, it looks like to me that INV* command are only necessary when
>> configuration tables is changed.
>>
>> FWIW, Linux is using INVALL when a collection is map and INV when the
>> LPI configuration is changed. I don't see any INV* command after MOVI.
>> So it confirms what the spec says.
>>
>>>>> Note: this command is expected to be used by software when it changed
>>>>> the re-configuration
>>>>> of an LPI in memory to ensure any cached copies of the old
>>>>> configuration are discarded.
>>>>
>>>> INVALL is used when a large number of LPIs has been reconfigured. If you
>>>> send one by MOVI is not efficient at all and will slowdown all the
>>>> interrupts for few milliseconds. We need to use them with caution.
>>>>
>>>> Usually a guest will send one for multiple MOVI command.
>>>
>>> We should be prepared for a guest which does nothing but send INVALL
>>> commands (i.e. trying to DoS the host).
>>>
>>> I mentioned earlier about maybe needing to track which pITS's a SYNC
>>> goes to (based on what SYNC have happened already and what commands the
>>> guest has sent since).
>>>
>>> Do we also need to track which LPIs a guest has fiddled with in order to
>>> decide (perhaps via a threshold) whether to use INVALL vs a small number
>>> of targeted INVALL?
>>
>> I did some reading about the INV* commands (INV and INVALL). The
>> interesting section in GICv3 is 4.8.4 PRD03-GENC-010745 24.0.
>>
>> They are only used to ensure the ITS re-read the LPIs configuration
>> table. I don't speak about the pending table as the spec (4.8.5) says
>> that it's maintained solely by a re-distributor. It's up to the
>> implementation to provide a mechanism to sync the memory (useful for
>> Power Management).
>>
>> The LPIs configuration tables is used to enable/disable the LPI and set
>> the priority. Only the enable/disable bit needs to be replicated to the
>> hardware.
>>
>> The pITS LPIs configuration tables is managed by Xen. Each guest will
>> provide to the vITS his own LPIs configuration table.
>>
>> The emulation of INV* command will depend on how we decide to emulate
>> the LPIs configuration table.
>>
>> Solution 1: Trap every access to the guest LPIs configuration table
>>
> Trapping on guest LPI configuration table is mandatory to
> enable/disable LPI in LPI pending table. There is no ITS command
> for this. In my RFC patches I have done this, where Xen calls
> irq_hw_controller's set_affinity which will send INVALL command
Trapping is not mandatory. The ITS may not read the LPI configuration
table until a INV/INVALL command has been sent.
The vITS is not forced to enable/disable the LPIs until one of this
command is sent.
Regards,
--
Julien Grall
next prev parent reply other threads:[~2015-05-16 8:49 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-05 12:14 Xen/arm: Virtual ITS command queue handling Vijay Kilari
2015-05-05 13:51 ` Stefano Stabellini
2015-05-05 13:54 ` Julien Grall
2015-05-05 15:56 ` Vijay Kilari
2015-05-05 14:09 ` Julien Grall
2015-05-05 16:09 ` Vijay Kilari
2015-05-05 16:27 ` Julien Grall
2015-05-12 15:02 ` Ian Campbell
2015-05-12 17:35 ` Julien Grall
2015-05-13 13:23 ` Ian Campbell
2015-05-13 14:26 ` Julien Grall
2015-05-15 10:59 ` Ian Campbell
2015-05-15 11:26 ` Vijay Kilari
2015-05-15 11:30 ` Ian Campbell
2015-05-15 12:03 ` Julien Grall
2015-05-15 12:47 ` Vijay Kilari
2015-05-15 12:52 ` Julien Grall
2015-05-15 12:53 ` Ian Campbell
2015-05-15 13:14 ` Vijay Kilari
2015-05-15 13:24 ` Ian Campbell
2015-05-15 13:44 ` Julien Grall
2015-05-15 14:04 ` Vijay Kilari
2015-05-15 15:05 ` Julien Grall
2015-05-15 15:38 ` Ian Campbell
2015-05-15 17:31 ` Julien Grall
2015-05-16 4:03 ` Vijay Kilari
2015-05-16 8:49 ` Julien Grall [this message]
2015-05-19 11:38 ` Vijay Kilari
2015-05-19 11:48 ` Ian Campbell
2015-05-19 11:55 ` Ian Campbell
2015-05-19 12:10 ` Vijay Kilari
2015-05-19 12:19 ` Ian Campbell
2015-05-19 12:48 ` Vijay Kilari
2015-05-19 13:12 ` Ian Campbell
2015-05-19 14:05 ` Julien Grall
2015-05-19 14:48 ` Ian Campbell
2015-05-19 15:44 ` Julien Grall
2015-05-15 14:05 ` Ian Campbell
2015-05-15 12:19 ` Julien Grall
2015-05-15 12:58 ` Ian Campbell
2015-05-15 13:24 ` Julien Grall
2015-05-19 12:14 ` Ian Campbell
2015-05-19 13:27 ` Julien Grall
2015-05-19 13:36 ` Ian Campbell
2015-05-19 13:46 ` Julien Grall
2015-05-19 13:54 ` Ian Campbell
2015-05-19 14:04 ` Vijay Kilari
2015-05-19 14:18 ` Ian Campbell
2015-05-21 12:37 ` Manish Jaggi
2015-05-26 13:04 ` Ian Campbell
2015-06-01 22:57 ` Manish Jaggi
2015-06-02 8:29 ` Ian Campbell
2015-05-19 14:06 ` Julien Grall
2015-05-13 16:27 ` Vijay Kilari
2015-05-15 11:28 ` Ian Campbell
2015-05-15 12:38 ` Vijay Kilari
2015-05-15 13:06 ` Ian Campbell
2015-05-15 13:17 ` Julien Grall
2015-05-15 11:45 ` Xen on ARM vITS Handling Draft B (Was Re: Xen/arm: Virtual ITS command queue handling) Ian Campbell
2015-05-15 14:55 ` Julien Grall
2015-05-19 12:10 ` Ian Campbell
2015-05-19 13:37 ` Julien Grall
2015-05-19 13:51 ` Ian Campbell
2015-05-22 12:16 ` Vijay Kilari
2015-05-22 12:49 ` Julien Grall
2015-05-22 13:58 ` Vijay Kilari
2015-05-22 14:35 ` Julien Grall
2015-05-22 14:54 ` Vijay Kilari
2015-05-24 10:35 ` Julien Grall
2015-05-25 9:06 ` Vijay Kilari
2015-05-25 9:32 ` Julien Grall
2015-05-25 10:40 ` Vijay Kilari
2015-05-25 12:44 ` Julien Grall
2015-05-25 13:38 ` Vijay Kilari
2015-05-25 17:11 ` Julien Grall
2015-05-27 11:22 ` Ian Campbell
2015-05-27 11:22 ` 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=555704AF.7050102@citrix.com \
--to=julien.grall@citrix.com \
--cc=Prasun.Kapoor@caviumnetworks.com \
--cc=ian.campbell@citrix.com \
--cc=julien.grall@linaro.org \
--cc=manish.jaggi@caviumnetworks.com \
--cc=stefano.stabellini@citrix.com \
--cc=stefano.stabellini@eu.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.