xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
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

  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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).