From: Ian Campbell <ian.campbell@citrix.com>
To: Julien Grall <julien.grall@citrix.com>, xen-devel@lists.xenproject.org
Cc: Vijaya.Kumar@caviumnetworks.com, stefano.stabellini@citrix.com,
manish.jaggi@caviumnetworks.com, vijay.kilari@gmail.com
Subject: Re: [PATCH v1 3/8] xen/arm: Support sign-extension for every read access
Date: Fri, 25 Sep 2015 17:44:45 +0100 [thread overview]
Message-ID: <1443199485.25250.212.camel@citrix.com> (raw)
In-Reply-To: <1443192698-16163-4-git-send-email-julien.grall@citrix.com>
On Fri, 2015-09-25 at 15:51 +0100, Julien Grall wrote:
> The guest may try to load data from the emulated MMIO region using
> instruction with Sign-Extension (i.e ldrs*). This can happen for any
> access smaller than the register size (byte/half-word for aarch32,
> byte/half-word/word for aarch64).
>
> The support of sign-extension was limited for byte access in vGIG
"vGIC"
> emulation. Although there is no reason to not have it generically.
>
> So move the support just after we get the data from the MMIO emulation.
>
> Signed-off-by: Julien Grall <julien.grall@citrix.com>
>
> ---
>
> I was thinking to completely drop the sign-extension support in Xen as
> it will be very unlikely to use ldrs* instruction to access MMIO.
> Although the code is fairly small, so it doesn't harm to keep it
> generically.
Yes, I think we should keep it, since we don't control what instructions
are used to access MMIO, however unlikely...
> Changes in v2:
> - Patch added
> ---
> xen/arch/arm/io.c | 29 ++++++++++++++++++++++++++++-
> xen/arch/arm/vgic-v2.c | 10 +++++-----
> xen/arch/arm/vgic-v3.c | 4 ++--
> xen/include/asm-arm/vgic.h | 8 +++-----
> 4 files changed, 38 insertions(+), 13 deletions(-)
>
> diff --git a/xen/arch/arm/io.c b/xen/arch/arm/io.c
> index 32b2194..e1b03a2 100644
> --- a/xen/arch/arm/io.c
> +++ b/xen/arch/arm/io.c
> @@ -23,6 +23,32 @@
> #include <asm/current.h>
> #include <asm/mmio.h>
>
> +static int handle_read(mmio_read_t read_cb, struct vcpu *v,
> + mmio_info_t *info, register_t *r)
> +{
> + uint8_t size = (1 << info->dabt.size) * 8;
> +
> + if ( !read_cb(v, info, r) )
> + return 0;
> +
> + /*
> + * Extend the bit sign if required.
I think you meant s/bit sign/sign bit/ but more correct would be "Sign
extend if required".
> + * Note that we expect the read handler to have zeroed the bit
> + * unused in the register.
"... to have zeroed the unused bits in the register".
But I think "unused" is a bit misleading, you mean the ones outside the
requested access size, those bits are still "used" IYSWIM. I can't think of
a terse term for "outside the requested access size I'm afraid.
Did you confirm that all existing handlers meet this requirement? Perhaps
an ASSERT would be handy?
> + */
> + if ( info->dabt.sign && (*r & (1UL << (size - 1)) ))
> + {
> + /*
> + * We are relying on register_t as the same size as
> + * an unsigned long or order to keep the 32bit some smaller
"order"? I'm not sure what you meant here so I can't suggest an
alternative.
> + */
> + BUILD_BUG_ON(sizeof(register_t) != sizeof(unsigned long));
> + *r |= (~0UL) << size;
I think here and in the initial if you need to be careful of the case where
size == 32 (on arm32) or == 64 (on arm64), since a shift by >= the size of
the variable is, I think, undefined behaviour.
It's also a waste of time sign extending in that case.
Ian.
next prev parent reply other threads:[~2015-09-25 16:44 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-25 14:51 [PATCH v1 0/8] xen/arm: vgic: Support 32-bit access for 64-bit register Julien Grall
2015-09-25 14:51 ` [PATCH v1 1/8] xen/arm: io: remove mmio_check_t typedef Julien Grall
2015-09-25 16:33 ` Ian Campbell
2015-09-25 14:51 ` [PATCH v1 2/8] xen/arm: io: Extend write/read handler to pass the register in parameter Julien Grall
2015-09-25 16:36 ` Ian Campbell
2015-09-28 16:35 ` Julien Grall
2015-09-29 10:51 ` Ian Campbell
2015-09-29 11:00 ` Julien Grall
2015-09-29 11:09 ` Ian Campbell
2015-09-25 14:51 ` [PATCH v1 3/8] xen/arm: Support sign-extension for every read access Julien Grall
2015-09-25 16:44 ` Ian Campbell [this message]
2015-09-28 16:42 ` Julien Grall
2015-09-29 11:01 ` Ian Campbell
2015-09-29 11:07 ` Julien Grall
2015-09-28 18:22 ` Julien Grall
2015-09-29 11:03 ` Ian Campbell
2015-09-29 11:13 ` Julien Grall
2015-09-29 13:13 ` Ian Campbell
2015-09-29 13:16 ` Julien Grall
2015-09-25 14:51 ` [PATCH v1 4/8] xen/arm: vgic: ctlr stores a 32-bit hardware register so use uint32_t Julien Grall
2015-09-25 16:45 ` Ian Campbell
2015-09-25 14:51 ` [PATCH v1 5/8] xen/arm: vgic: Optimize the way to store GICD_IPRIORITYR in the rank Julien Grall
2015-09-28 10:50 ` Ian Campbell
2015-09-28 17:10 ` Julien Grall
2015-09-29 10:56 ` Ian Campbell
2015-09-28 10:52 ` Ian Campbell
2015-09-28 16:43 ` Julien Grall
2015-09-25 14:51 ` [PATCH v1 6/8] xen/arm: vgic: Optimize the way to store the target vCPU " Julien Grall
2015-09-29 13:07 ` Ian Campbell
2015-09-29 13:36 ` Julien Grall
2015-09-29 14:23 ` Ian Campbell
2015-09-30 18:11 ` Julien Grall
2015-10-01 8:30 ` Ian Campbell
2015-09-25 14:51 ` [PATCH v1 7/8] xen/arm: vgic: Introduce helpers to read/write/clear/set vGIC register Julien Grall
2015-09-29 13:23 ` Ian Campbell
2015-09-29 13:48 ` Julien Grall
2015-09-29 14:24 ` Ian Campbell
2015-10-02 9:36 ` Julien Grall
2015-09-25 14:51 ` [PATCH v1 8/8] xen/arm: vgic-v3: Support 32-bit access for 64-bit registers Julien Grall
2015-09-29 13:27 ` Ian Campbell
-- strict thread matches above, loose matches on Subject: below --
2015-09-25 14:50 [PATCH v1 0/8] xen/arm: vgic: Support 32-bit access for 64-bit register Julien Grall
2015-09-25 14:51 ` [PATCH v1 3/8] xen/arm: Support sign-extension for every read access Julien Grall
2015-09-25 14:51 ` Julien Grall
2015-09-25 14:51 ` 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=1443199485.25250.212.camel@citrix.com \
--to=ian.campbell@citrix.com \
--cc=Vijaya.Kumar@caviumnetworks.com \
--cc=julien.grall@citrix.com \
--cc=manish.jaggi@caviumnetworks.com \
--cc=stefano.stabellini@citrix.com \
--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.