From: Christoffer Dall <cdall@linaro.org>
To: Eric Auger <eric.auger@redhat.com>
Cc: eric.auger.pro@gmail.com, linux-kernel@vger.kernel.org,
kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu,
marc.zyngier@arm.com, peter.maydell@linaro.org,
andre.przywara@arm.com, wanghaibin.wang@huawei.com,
wu.wubin@huawei.com, drjones@redhat.com, wei@redhat.com
Subject: Re: [PATCH v5 02/10] KVM: arm/arm64: vgic-its: Fix vgic_its_restore_collection_table returned value
Date: Tue, 24 Oct 2017 18:15:43 +0200 [thread overview]
Message-ID: <20171024161543.GC91785@lvm> (raw)
In-Reply-To: <1508767709-15256-3-git-send-email-eric.auger@redhat.com>
On Mon, Oct 23, 2017 at 04:08:21PM +0200, Eric Auger wrote:
> vgic_its_restore_cte returns +1 if the collection table entry
> is valid and properly decoded. As a consequence, if the
> collection table is fully filled with valid data that are
> decoded without error, vgic_its_restore_collection_table()
> returns +1. This is wrong.
>
> Let's use the standard C convention for both vgic_its_restore_cte
> and vgic_its_restore_collection_table. vgic_its_restore_cte now
> returns whether we have reached the end of the table in the @last
> output parameter. vgic_its_restore_collection_table aborts in case
> of error or if the end is found. Otherwise, it now returns 0.
>
> Fixes: ea1ad53e1e31a3 (KVM: arm64: vgic-its: Collection table save/restore)
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
> Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
>
> ---
>
> need to be CC'ed stable
>
> v4 -> v5:
> - added Christoffer R-b
>
> v2 -> v3: creation
> ---
> virt/kvm/arm/vgic/vgic-its.c | 40 +++++++++++++++++++++++++++++++---------
> 1 file changed, 31 insertions(+), 9 deletions(-)
>
> diff --git a/virt/kvm/arm/vgic/vgic-its.c b/virt/kvm/arm/vgic/vgic-its.c
> index d27a301..b0ba80f 100644
> --- a/virt/kvm/arm/vgic/vgic-its.c
> +++ b/virt/kvm/arm/vgic/vgic-its.c
> @@ -2169,7 +2169,19 @@ static int vgic_its_save_cte(struct vgic_its *its,
> return kvm_write_guest(its->dev->kvm, gpa, &val, esz);
> }
>
> -static int vgic_its_restore_cte(struct vgic_its *its, gpa_t gpa, int esz)
> +/**
> + * vgic_its_restore_cte - Restore a collection table entry
> + *
> + * @its: its handle
> + * @gpa: guest physical address of the entry
> + * @esz: entry size
> + * @last: output boolean indicating whether we have reached the
> + * end of the collection table (ie. an invalid entry was decoded)
> + *
> + * Return: 0 upon success, < 0 on error
> + */
> +static int vgic_its_restore_cte(struct vgic_its *its, gpa_t gpa, int esz,
> + bool *last)
> {
> struct its_collection *collection;
> struct kvm *kvm = its->dev->kvm;
> @@ -2182,7 +2194,8 @@ static int vgic_its_restore_cte(struct vgic_its *its, gpa_t gpa, int esz)
> if (ret)
> return ret;
> val = le64_to_cpu(val);
> - if (!(val & KVM_ITS_CTE_VALID_MASK))
> + *last = !(val & KVM_ITS_CTE_VALID_MASK);
> + if (*last)
> return 0;
>
> target_addr = (u32)(val >> KVM_ITS_CTE_RDBASE_SHIFT);
> @@ -2198,7 +2211,7 @@ static int vgic_its_restore_cte(struct vgic_its *its, gpa_t gpa, int esz)
> if (ret)
> return ret;
> collection->target_addr = target_addr;
> - return 1;
> + return 0;
> }
>
> /**
> @@ -2243,8 +2256,13 @@ static int vgic_its_save_collection_table(struct vgic_its *its)
>
> /**
> * vgic_its_restore_collection_table - reads the collection table
> - * in guest memory and restores the ITS internal state. Requires the
> - * BASER registers to be restored before.
> + * in guest memory and restores the ITS collection cache.
> + *
> + * @its: its handle
> + *
> + * Requires the Collection BASER to be previously restored.
> + *
> + * Returns 0 on success or < 0 on error
> */
> static int vgic_its_restore_collection_table(struct vgic_its *its)
> {
> @@ -2262,13 +2280,17 @@ static int vgic_its_restore_collection_table(struct vgic_its *its)
> max_size = GITS_BASER_NR_PAGES(its->baser_coll_table) * SZ_64K;
>
> while (read < max_size) {
> - ret = vgic_its_restore_cte(its, gpa, cte_esz);
> - if (ret <= 0)
> - break;
> + bool last;
> +
> + ret = vgic_its_restore_cte(its, gpa, cte_esz, &last);
> + if (ret < 0 || last)
> + return ret;
> gpa += cte_esz;
> read += cte_esz;
> }
> - return ret;
> +
> + /* table was fully filled with valid entries, decoded without error */
> + return 0;
Why is this patch not replaced with:
if (ret > 0)
ret = 0;
Thanks,
-Christoffer
next prev parent reply other threads:[~2017-10-24 16:15 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-23 14:08 [PATCH v5 00/10] vITS Migration fixes and reset Eric Auger
2017-10-23 14:08 ` Eric Auger
2017-10-23 14:08 ` [PATCH v5 01/10] KVM: arm/arm64: vgic-its: Fix return value for device table restore Eric Auger
2017-10-23 14:08 ` Eric Auger
2017-10-24 16:02 ` Christoffer Dall
2017-10-23 14:08 ` [PATCH v5 02/10] KVM: arm/arm64: vgic-its: Fix vgic_its_restore_collection_table returned value Eric Auger
2017-10-24 16:15 ` Christoffer Dall [this message]
2017-10-23 14:08 ` [PATCH v5 03/10] KVM: arm/arm64: vgic-its: Check CBASER/BASER validity before enabling the ITS Eric Auger
2017-10-23 14:08 ` Eric Auger
2017-10-25 9:38 ` Marc Zyngier
2017-10-25 9:38 ` Marc Zyngier
2017-10-25 9:46 ` Marc Zyngier
2017-10-25 9:46 ` Marc Zyngier
2017-10-25 11:52 ` Christoffer Dall
2017-10-23 14:08 ` [PATCH v5 04/10] KVM: arm/arm64: vgic-its: Check GITS_BASER Valid bit before saving tables Eric Auger
2017-10-23 14:08 ` Eric Auger
2017-10-25 9:47 ` Marc Zyngier
2017-10-25 9:47 ` Marc Zyngier
2017-10-23 14:08 ` [PATCH v5 05/10] KVM: arm/arm64: vgic-its: Save the collection table before device tables Eric Auger
2017-10-25 9:59 ` Christoffer Dall
2017-10-23 14:08 ` [PATCH v5 06/10] KVM: arm/arm64: vgic-its: Remove kvm_its_unmap_device Eric Auger
2017-10-25 9:45 ` Christoffer Dall
2017-10-23 14:08 ` [PATCH v5 07/10] KVM: arm/arm64: vgic-its: New helper functions to free the caches Eric Auger
2017-10-23 14:08 ` Eric Auger
2017-10-25 10:31 ` Christoffer Dall
2017-10-25 10:31 ` Christoffer Dall
2017-10-25 10:31 ` Marc Zyngier
2017-10-25 10:31 ` Marc Zyngier
2017-10-23 14:08 ` [PATCH v5 08/10] KVM: arm/arm64: vgic-its: Free caches when GITS_BASER Valid bit is cleared Eric Auger
2017-10-25 10:23 ` Marc Zyngier
2017-10-25 10:23 ` Marc Zyngier
2017-10-23 14:08 ` [PATCH v5 09/10] KVM: arm/arm64: Document KVM_DEV_ARM_ITS_CTRL_RESET Eric Auger
2017-10-23 14:08 ` Eric Auger
2017-10-25 10:40 ` Marc Zyngier
2017-10-25 10:40 ` Marc Zyngier
2017-10-23 14:08 ` [PATCH v5 10/10] KVM: arm/arm64: vgic-its: Implement KVM_DEV_ARM_ITS_CTRL_RESET Eric Auger
2017-10-25 10:52 ` Marc Zyngier
2017-10-25 10:52 ` Marc Zyngier
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=20171024161543.GC91785@lvm \
--to=cdall@linaro.org \
--cc=andre.przywara@arm.com \
--cc=drjones@redhat.com \
--cc=eric.auger.pro@gmail.com \
--cc=eric.auger@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-kernel@vger.kernel.org \
--cc=marc.zyngier@arm.com \
--cc=peter.maydell@linaro.org \
--cc=wanghaibin.wang@huawei.com \
--cc=wei@redhat.com \
--cc=wu.wubin@huawei.com \
/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.