[PATCH][SRU Artful] KVM: arm/arm64: vgic-its: Fix return value for device table restore

Stefan Bader stefan.bader at canonical.com
Wed Nov 15 10:53:06 UTC 2017


On 09.11.2017 09:21, Paolo Pisati wrote:
> Clean upstream cherry pick.
> 
> Acked-by: Paolo Pisati <paolo.pisati at canonical.com>
> 
> On Thu, Nov 9, 2017 at 3:19 AM, dann frazier <dann.frazier at canonical.com> wrote:
>> From: wanghaibin <wanghaibin.wang at huawei.com>
>>
>> BugLink: https://bugs.launchpad.net/bugs/1710019
>>
>> If ITT only contains invalid entries, vgic_its_restore_itt
>> returns 1 and this is considered as an an error in
>> vgic_its_restore_dte.
>>
>> Also in case the device table only contains invalid entries,
>> the table restore fails and this is not correct.
>>
>> This patch fixes those 2 issues:
>> - vgic_its_restore_itt now returns <= 0 values. If all
>>   ITEs are invalid, this is considered as successful.
>> - vgic_its_restore_device_tables also returns <= 0 values.
>>
>> We also simplify the returned value computation in
>> handle_l1_dte.
>>
>> Signed-off-by: wanghaibin <wanghaibin.wang at huawei.com>
>> Signed-off-by: Eric Auger <eric.auger at redhat.com>
>> Reviewed-by: Christoffer Dall <christoffer.dall at linaro.org>
>> Signed-off-by: Christoffer Dall <christoffer.dall at linaro.org>
>> (cherry picked from commit b92382620e33c9f1bcbcd7c169262b9bf0525871)
>> Signed-off-by: dann frazier <dann.frazier at canonical.com>
>> ---
>>  virt/kvm/arm/vgic/vgic-its.c | 20 +++++++++++++++-----
>>  1 file changed, 15 insertions(+), 5 deletions(-)
>>
>> diff --git a/virt/kvm/arm/vgic/vgic-its.c b/virt/kvm/arm/vgic/vgic-its.c
>> index aa6b68db80b4..dedf84b858fb 100644
>> --- a/virt/kvm/arm/vgic/vgic-its.c
>> +++ b/virt/kvm/arm/vgic/vgic-its.c
>> @@ -1942,6 +1942,14 @@ static int vgic_its_save_itt(struct vgic_its *its, struct its_device *device)
>>         return 0;
>>  }
>>
>> +/**
>> + * vgic_its_restore_itt - restore the ITT of a device
>> + *
>> + * @its: its handle
>> + * @dev: device handle
>> + *
>> + * Return 0 on success, < 0 on error
>> + */
>>  static int vgic_its_restore_itt(struct vgic_its *its, struct its_device *dev)
>>  {
>>         const struct vgic_its_abi *abi = vgic_its_get_abi(its);
>> @@ -1953,6 +1961,10 @@ static int vgic_its_restore_itt(struct vgic_its *its, struct its_device *dev)
>>         ret = scan_its_table(its, base, max_size, ite_esz, 0,
>>                              vgic_its_restore_ite, dev);
>>
>> +       /* scan_its_table returns +1 if all ITEs are invalid */
>> +       if (ret > 0)
>> +               ret = 0;
>> +
>>         return ret;
>>  }
>>
>> @@ -2109,10 +2121,7 @@ static int handle_l1_dte(struct vgic_its *its, u32 id, void *addr,
>>         ret = scan_its_table(its, gpa, SZ_64K, dte_esz,
>>                              l2_start_id, vgic_its_restore_dte, NULL);
>>
>> -       if (ret <= 0)
>> -               return ret;
>> -
>> -       return 1;
>> +       return ret;
>>  }
>>
>>  /**
>> @@ -2142,8 +2151,9 @@ static int vgic_its_restore_device_tables(struct vgic_its *its)
>>                                      vgic_its_restore_dte, NULL);
>>         }
>>
>> +       /* scan_its_table returns +1 if all entries are invalid */
>>         if (ret > 0)
>> -               ret = -EINVAL;
>> +               ret = 0;
>>
>>         return ret;
>>  }
>> --
>> 2.15.0
>>
>>
>> --
>> kernel-team mailing list
>> kernel-team at lists.ubuntu.com
>> https://lists.ubuntu.com/mailman/listinfo/kernel-team
> 
> 
> 

For some reason I seem to see this patch twice... and I am still sober...

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20171115/1f228818/attachment.sig>


More information about the kernel-team mailing list