All of lore.kernel.org
 help / color / mirror / Atom feed
From: Julien Grall <julien.grall@arm.com>
To: Andre Przywara <andre.przywara@arm.com>,
	Stefano Stabellini <sstabellini@kernel.org>
Cc: xen-devel@lists.xenproject.org,
	Shanker Donthineni <shankerd@codeaurora.org>,
	Vijay Kilari <vijay.kilari@gmail.com>
Subject: Re: [PATCH v2 02/27] ARM: GICv3: allocate LPI pending and property table
Date: Thu, 23 Mar 2017 17:42:54 +0000	[thread overview]
Message-ID: <83bb8c72-4ee5-35fe-4fe6-0140fca9de89@arm.com> (raw)
In-Reply-To: <e45b61c3-7650-50be-798e-6de5003b5f7c@arm.com>



On 23/03/17 14:40, Andre Przywara wrote:
> Hi,

Hi Andre,

>
> On 21/03/17 21:23, Julien Grall wrote:
>> Hi Andre,
>>
>> On 03/16/2017 11:20 AM, Andre Przywara wrote:
>>> diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig
>>> index bf64c61..86f7b53 100644
>>> --- a/xen/arch/arm/Kconfig
>>> +++ b/xen/arch/arm/Kconfig
>>> @@ -49,6 +49,21 @@ config HAS_ITS
>>>          bool "GICv3 ITS MSI controller support"
>>>          depends on HAS_GICV3
>>>
>>> +config MAX_PHYS_LPI_BITS
>>> +        depends on HAS_ITS
>>> +        int "Maximum bits for GICv3 host LPIs (14-32)"
>>> +        range 14 32
>>> +        default "20"
>>> +        help
>>> +          Specifies the maximum number of LPIs (in bits) Xen should take
>>> +          care of. The host ITS may provide support for a very large
>>> number
>>> +          of supported LPIs, for all of which we may not want to
>>> allocate
>>> +          memory, so this number here allows to limit this.
>>> +          Xen itself does not know how many LPIs domains will ever need
>>> +          beforehand.
>>> +          This can be overridden on the command line with the
>>> max_lpi_bits
>>> +          parameter.
>>
>> I continue to disagree on this Kconfig option. There is no sensible
>> default value and I don't see how a distribution will be able to pick-up
>> one value here.
>>
>> If the number of LPIs have to be restricted, this should be done via the
>> command line or a per-platform option.
>
> So are you opting for taking the hardware provided value, unless there
> is a command line option or a per-platform limit?
>
> Please keep in mind that the situation here is different from the device
> table:
> - There is no indirect table option for the property and pending table.
>   Any redistributor supporting 32 bits worth of LPIs would lead to a
>   4GB property table and 512MB pending table allocation.
> - An OS like Linux can make sensible assumptions about the number of
>   LPIs needed and only allocate as much LPIs as required. Linux for
>   instance uses at most 65536. Xen cannot easily make this decision.
>   So we would need to go as high as possible, but not too high to not
>   waste memory. I see different tradeoffs here between a distribution
>   targeting servers or another one aiming at some embedded devices, for
>   instance. So I would expect exactly this decision to be covered by a
>   Kconfig option.

Hence why a parameter on the command line is the better place for that. 
The decision is left to the user.

>> I have already made my point on previous e-mails so I am not going to
>> argue more.
>
> So as I mentioned before, I am happy to loose the Kconfig option, but
> then we need some sensible default value. In our case we could be cheeky
> here for now and just use the Linux value, because a Linux Dom0 would be
> the only user. But that doesn't sound very future proof, though this may
> not matter for 4.9.

I don't think we need a sensible default value and IHMO there is none. I 
would left the user to decide the exact number.

>>> +/* Global state */
>>> +static struct {
>>> +    /* The global LPI property table, shared by all redistributors. */
>>> +    uint8_t *lpi_property;
>>> +    /*
>>> +     * Number of physical LPIs the host supports. This is a property of
>>> +     * the GIC hardware. We depart from the habit of naming these things
>>> +     * "physical" in Xen, as the GICv3/4 spec uses the term "physical
>>> LPI"
>>> +     * in a different context to differentiate them from "virtual LPIs".
>>> +     */
>>> +    unsigned long int nr_host_lpis;
>>
>> Why unsigned long?
>
> Because someone requested that I store the actual number of LPIs, not
> the number of bits required to encode them. So I need to cover the case
> of exactly 32 bits worth of LPIs, which u32 cannot hold.

Fair enough.

[...]

>>> +int gicv3_lpi_init_rdist(void __iomem * rdist_base)
>>> +{
>>> +    uint32_t reg;
>>> +    uint64_t table_reg;
>>> +    int ret;
>>> +
>>> +    /* We don't support LPIs without an ITS. */
>>> +    if ( !gicv3_its_host_has_its() )
>>> +        return -ENODEV;
>>> +
>>> +    /* Make sure LPIs are disabled before setting up the tables. */
>>> +    reg = readl_relaxed(rdist_base + GICR_CTLR);
>>> +    if ( reg & GICR_CTLR_ENABLE_LPIS )
>>> +        return -EBUSY;
>>> +
>>> +    ret = gicv3_lpi_allocate_pendtable(&table_reg);
>>> +    if (ret)
>>> +        return ret;
>>> +    writeq_relaxed(table_reg, rdist_base + GICR_PENDBASER);
>>
>> Same question as on the previous version. The cacheability and
>> shareability may not stick. This was a bug fix in Linux (see commit
>> 241a386) and I am struggling to understand why Xen would not be affected?
>
> Oh, OK, we need to remove cacheability if shareability is denied, though
> that sounds like a hardware bug to me if this is not observed by the
> redistributor.
> The reason I didn't care about it here was that software doesn't use the
> pending table, so there would be nothing on the code side to be done in
> case the redistributor shoots down one of our requests.
> The mentioned Linux patch covers all ITS tables and the property table
> as well.

The patch was sent by Marc and I trust him to do the right things. 
Looking at the commit message, it is to avoid cacheable traffic. Unless 
you give me a good reason for not doing that, please do the change.

I don't want to end-up digging into weird bug later on because we 
decided that "the hardware is not supposed to do that".

[...]

>>> diff --git a/xen/include/asm-arm/gic.h b/xen/include/asm-arm/gic.h
>>> index 836a103..12bd155 100644
>>> --- a/xen/include/asm-arm/gic.h
>>> +++ b/xen/include/asm-arm/gic.h
>>> @@ -220,6 +220,8 @@ enum gic_version {
>>>      GIC_V3,
>>>  };
>>>
>>> +#define LPI_OFFSET      8192
>>
>> My comments on the previous version about LPI_OFFSET are not addressed.
>> And one question was left unanswered.
>
> Do you mean this?
>>> It would make much sense to have this definition moved in irq.h
>>> close to NR_IRQS.
>
> Admittedly I missed that over the next question...
> I think I wasn't convinced in the first place to put this GIC specific
> detail into the generic irq.h, but I see that it makes sense since we
> have the do_LPI() prototype in there as well.
>
>>> Also, I am a bit surprised that NR_IRQS & co has not been modified.
>>> Is there any reason for that?
>
> But I answered on this one.
> Is there anything else you want to have answered?

Yes, the question in  <dae3afdb-d64d-a81b-7df3-ed8a61e00ad1@arm.com>.

"Can we have a comment on top of NR_IRQS explaining why LPIs are not 
taken into account?"

Cheers,

-- 
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

  reply	other threads:[~2017-03-23 17:42 UTC|newest]

Thread overview: 119+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-16 11:20 [PATCH v2 00/27] arm64: Dom0 ITS emulation Andre Przywara
2017-03-16 11:20 ` [PATCH v2 01/27] ARM: GICv3 ITS: parse and store ITS subnodes from hardware DT Andre Przywara
2017-03-21 20:17   ` Julien Grall
2017-03-23 10:57     ` Andre Przywara
2017-03-23 17:32       ` Julien Grall
2017-03-16 11:20 ` [PATCH v2 02/27] ARM: GICv3: allocate LPI pending and property table Andre Przywara
2017-03-21 21:23   ` Julien Grall
2017-03-23 14:40     ` Andre Przywara
2017-03-23 17:42       ` Julien Grall [this message]
2017-03-23 17:45         ` Stefano Stabellini
2017-03-23 17:49           ` Julien Grall
2017-03-23 18:01             ` Stefano Stabellini
2017-03-23 18:21               ` Andre Przywara
2017-03-24 11:45                 ` Julien Grall
2017-03-24 17:22                   ` Stefano Stabellini
2017-03-21 22:57   ` Stefano Stabellini
2017-03-21 23:08     ` André Przywara
2017-03-21 23:27       ` Stefano Stabellini
2017-03-23 10:50         ` Andre Przywara
2017-03-23 17:47           ` Julien Grall
2017-03-16 11:20 ` [PATCH v2 03/27] ARM: GICv3 ITS: allocate device and collection table Andre Przywara
2017-03-21 23:29   ` Stefano Stabellini
2017-03-22 13:52   ` Julien Grall
2017-03-22 16:08     ` André Przywara
2017-03-22 16:33       ` Julien Grall
2017-03-29 13:58         ` Andre Przywara
2017-03-16 11:20 ` [PATCH v2 04/27] ARM: GICv3 ITS: map ITS command buffer Andre Przywara
2017-03-21 23:48   ` Stefano Stabellini
2017-03-22 15:23   ` Julien Grall
2017-03-22 16:31     ` André Przywara
2017-03-22 16:41       ` Julien Grall
2017-03-16 11:20 ` [PATCH v2 05/27] ARM: GICv3 ITS: introduce ITS command handling Andre Przywara
2017-03-16 15:05   ` Shanker Donthineni
2017-03-16 15:18     ` Andre Przywara
2017-03-22  0:02   ` Stefano Stabellini
2017-03-22 15:59   ` Julien Grall
2017-04-03 10:58     ` Andre Przywara
2017-04-03 11:23       ` Julien Grall
2017-03-16 11:20 ` [PATCH v2 06/27] ARM: GICv3 ITS: introduce device mapping Andre Przywara
2017-03-22 17:29   ` Julien Grall
2017-04-03 20:08     ` Andre Przywara
2017-04-03 20:41       ` Julien Grall
2017-04-04  9:57         ` Andre Przywara
2017-03-22 22:45   ` Stefano Stabellini
2017-04-03 19:45     ` Andre Przywara
2017-03-30 11:17   ` Vijay Kilari
2017-03-16 11:20 ` [PATCH v2 07/27] ARM: arm64: activate atomic 64-bit accessors Andre Przywara
2017-03-22 17:30   ` Julien Grall
2017-03-22 22:49     ` Stefano Stabellini
2017-03-16 11:20 ` [PATCH v2 08/27] ARM: GICv3 ITS: introduce host LPI array Andre Przywara
2017-03-22 23:38   ` Stefano Stabellini
2017-03-23  8:48     ` Julien Grall
2017-03-23 10:21     ` Andre Przywara
2017-03-23 17:52       ` Stefano Stabellini
2017-03-24 11:54         ` Julien Grall
2017-03-23 19:08   ` Julien Grall
2017-04-03 19:30     ` Andre Przywara
2017-04-03 20:13       ` Julien Grall
2017-03-16 11:20 ` [PATCH v2 09/27] ARM: GICv3: introduce separate pending_irq structs for LPIs Andre Przywara
2017-03-22 23:44   ` Stefano Stabellini
2017-03-23 20:08     ` André Przywara
2017-03-24 10:59       ` Julien Grall
2017-03-24 11:40   ` Julien Grall
2017-03-24 15:50     ` Andre Przywara
2017-03-24 16:19       ` Julien Grall
2017-03-24 17:26       ` Stefano Stabellini
2017-03-27  9:02         ` Andre Przywara
2017-03-27 14:01           ` Julien Grall
2017-03-27 17:44             ` Stefano Stabellini
2017-03-27 17:49               ` Julien Grall
2017-03-27 18:39                 ` Stefano Stabellini
2017-03-27 21:24                   ` Julien Grall
2017-03-28  7:58                   ` Jan Beulich
2017-03-28 13:12                     ` Julien Grall
2017-03-28 13:34                       ` Jan Beulich
2017-03-16 11:20 ` [PATCH v2 10/27] ARM: GICv3: forward pending LPIs to guests Andre Przywara
2017-03-24 12:03   ` Julien Grall
2017-04-03 14:18     ` Andre Przywara
2017-04-04 11:49       ` Julien Grall
2017-04-04 12:51         ` Andre Przywara
2017-04-04 12:50           ` Julien Grall
2017-03-16 11:20 ` [PATCH v2 11/27] ARM: GICv3: enable ITS and LPIs on the host Andre Przywara
2017-03-16 11:20 ` [PATCH v2 12/27] ARM: vGICv3: handle virtual LPI pending and property tables Andre Przywara
2017-03-24 12:09   ` Julien Grall
2017-03-16 11:20 ` [PATCH v2 13/27] ARM: vGICv3: Handle disabled LPIs Andre Przywara
2017-03-24 12:20   ` Julien Grall
2017-03-16 11:20 ` [PATCH v2 14/27] ARM: vGICv3: introduce basic ITS emulation bits Andre Przywara
2017-03-16 16:25   ` Shanker Donthineni
2017-03-20 12:17     ` Vijay Kilari
2017-03-24 12:41   ` Julien Grall
2017-03-16 11:20 ` [PATCH v2 15/27] ARM: vITS: introduce translation table walks Andre Przywara
2017-03-24 13:00   ` Julien Grall
2017-04-03 18:25     ` Andre Przywara
2017-04-04 15:59       ` Julien Grall
2017-03-16 11:20 ` [PATCH v2 16/27] ARM: vITS: handle CLEAR command Andre Przywara
2017-03-24 14:27   ` Julien Grall
2017-03-24 15:53     ` Andre Przywara
2017-03-24 17:17       ` Stefano Stabellini
2017-03-27  8:44         ` Andre Przywara
2017-03-27 14:12           ` Julien Grall
2017-03-16 11:20 ` [PATCH v2 17/27] ARM: vITS: handle INT command Andre Przywara
2017-03-24 14:38   ` Julien Grall
2017-03-16 11:20 ` [PATCH v2 18/27] ARM: vITS: handle MAPC command Andre Przywara
2017-03-16 11:20 ` [PATCH v2 19/27] ARM: vITS: handle MAPD command Andre Przywara
2017-03-24 14:41   ` Julien Grall
2017-03-16 11:20 ` [PATCH v2 20/27] ARM: vITS: handle MAPTI command Andre Przywara
2017-03-24 14:54   ` Julien Grall
2017-04-03 18:47     ` Andre Przywara
2017-03-16 11:20 ` [PATCH v2 21/27] ARM: vITS: handle MOVI command Andre Przywara
2017-03-24 15:00   ` Julien Grall
2017-03-16 11:20 ` [PATCH v2 22/27] ARM: vITS: handle DISCARD command Andre Przywara
2017-03-16 11:20 ` [PATCH v2 23/27] ARM: vITS: handle INV command Andre Przywara
2017-03-16 11:20 ` [PATCH v2 24/27] ARM: vITS: handle INVALL command Andre Przywara
2017-03-24 15:12   ` Julien Grall
2017-03-16 11:20 ` [PATCH v2 25/27] ARM: vITS: create and initialize virtual ITSes for Dom0 Andre Przywara
2017-03-24 15:18   ` Julien Grall
2017-03-16 11:20 ` [PATCH v2 26/27] ARM: vITS: create ITS subnodes for Dom0 DT Andre Przywara
2017-03-16 11:20 ` [PATCH v2 27/27] ARM: vGIC: advertise LPI support Andre Przywara
2017-03-24 15:25   ` Julien Grall

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=83bb8c72-4ee5-35fe-4fe6-0140fca9de89@arm.com \
    --to=julien.grall@arm.com \
    --cc=andre.przywara@arm.com \
    --cc=shankerd@codeaurora.org \
    --cc=sstabellini@kernel.org \
    --cc=vijay.kilari@gmail.com \
    --cc=xen-devel@lists.xenproject.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.