| From 8c58be34494b7f1b2adb446e2d8beeb90e5de65b Mon Sep 17 00:00:00 2001 |
| From: Eric Auger <eric.auger@redhat.com> |
| Date: Fri, 13 Dec 2019 10:42:37 +0100 |
| Subject: KVM: arm/arm64: vgic-its: Fix restoration of unmapped collections |
| |
| From: Eric Auger <eric.auger@redhat.com> |
| |
| commit 8c58be34494b7f1b2adb446e2d8beeb90e5de65b upstream. |
| |
| Saving/restoring an unmapped collection is a valid scenario. For |
| example this happens if a MAPTI command was sent, featuring an |
| unmapped collection. At the moment the CTE fails to be restored. |
| Only compare against the number of online vcpus if the rdist |
| base is set. |
| |
| Fixes: ea1ad53e1e31a ("KVM: arm64: vgic-its: Collection table save/restore") |
| Signed-off-by: Eric Auger <eric.auger@redhat.com> |
| Signed-off-by: Marc Zyngier <maz@kernel.org> |
| Reviewed-by: Zenghui Yu <yuzenghui@huawei.com> |
| Link: https://lore.kernel.org/r/20191213094237.19627-1-eric.auger@redhat.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| virt/kvm/arm/vgic/vgic-its.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/virt/kvm/arm/vgic/vgic-its.c |
| +++ b/virt/kvm/arm/vgic/vgic-its.c |
| @@ -2472,7 +2472,8 @@ static int vgic_its_restore_cte(struct v |
| target_addr = (u32)(val >> KVM_ITS_CTE_RDBASE_SHIFT); |
| coll_id = val & KVM_ITS_CTE_ICID_MASK; |
| |
| - if (target_addr >= atomic_read(&kvm->online_vcpus)) |
| + if (target_addr != COLLECTION_NOT_MAPPED && |
| + target_addr >= atomic_read(&kvm->online_vcpus)) |
| return -EINVAL; |
| |
| collection = find_collection(its, coll_id); |