From: Julien Grall <julien.grall@citrix.com>
To: Vijay Kilari <vijay.kilari@gmail.com>,
Ian Campbell <ian.campbell@citrix.com>
Cc: "xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
Stefano Stabellini <stefano.stabellini@citrix.com>,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Subject: Re: xen/arm: gicv3: Computation of GICD_TYPER.IDbits
Date: Fri, 18 Sep 2015 11:21:03 +0100 [thread overview]
Message-ID: <55FBE58F.1040006@citrix.com> (raw)
In-Reply-To: <CALicx6t5zFvWCD7ZOe=wBDp9NHGqY2H8gprjuFxN8k-u02xeYw@mail.gmail.com>
On 18/09/15 10:48, Vijay Kilari wrote:
> On Fri, Sep 18, 2015 at 2:03 PM, Ian Campbell <ian.campbell@citrix.com> wrote:
>> On Fri, 2015-09-18 at 12:56 +0530, Vijay Kilari wrote:
>>> Hi Julien,
>>>
>>> static int vgic_v3_distr_mmio_read(struct vcpu *v, mmio_info_t *info)
>>> {
>>> ...
>>> case GICD_TYPER:
>>> {
>>> /*
>>> * Number of interrupt identifier bits supported by the
>>> GIC
>>> * Stream Protocol Interface
>>> */
>>> unsigned int irq_bits =
>>> get_count_order(vgic_num_irqs(v->domain));
>>> }
>>>
>>> I think we should use ilog2() instead of get_count_order()?
>>
>> Please explain why.
>
> For a given value, get_count_order returns next highest 2^n bit that can contain
> this number, where as ilog2 returns number max highest bit set to
> contain the value.
> (Here is the output of get_count_order() and ilog2() for various sizes )
>
> 128K get_count_order 17 log2 17
> 64K get_count_order 16 log2 16
> 48K get_count_order 16 log2 15
2^16 = 64K
2^15 = 32K
So here the number of bits returned wouldn't be enough to fit the value.
We would expose the wrong number of IRQ to the guest.
> 32K get_count_order 15 log2 15
> 24K get_count_order 15 log2 14
> 16K get_count_order 14 log2 14
> 8K get_count_order 13 log2 13
>
> Here if irq_bits should specify number of bits required to specify the number.
> So log2 is more appropriate. Even Linux ITS driver uses ilog2 to count number
> of bits required.
ilog2 is used in the ITS code because they round up the number of ITEs
to a power of 2.
ilog2 will always return the highest bit set in the number. So if it's
not a power of two it will return one bit less than it's required to
contain the value.
get_count_order will take care of it by adding 1 if the number is not a
power of 2.
Regards,
--
Julien Grall
prev parent reply other threads:[~2015-09-18 10:21 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-18 7:26 xen/arm: gicv3: Computation of GICD_TYPER.IDbits Vijay Kilari
2015-09-18 8:33 ` Ian Campbell
2015-09-18 9:48 ` Vijay Kilari
2015-09-18 10:21 ` Julien Grall [this message]
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=55FBE58F.1040006@citrix.com \
--to=julien.grall@citrix.com \
--cc=ian.campbell@citrix.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.