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

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

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

dann frazier-4
From: wanghaibin <[hidden email]>

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 <[hidden email]>
Signed-off-by: Eric Auger <[hidden email]>
Reviewed-by: Christoffer Dall <[hidden email]>
Signed-off-by: Christoffer Dall <[hidden email]>
(cherry picked from commit b92382620e33c9f1bcbcd7c169262b9bf0525871)
Signed-off-by: dann frazier <[hidden email]>
---
 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
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team
Reply | Threaded
Open this post in threaded view
|

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

Paolo Pisati-5
Clean upstream cherry pick.

Acked-by: Paolo Pisati <[hidden email]>

On Thu, Nov 9, 2017 at 3:19 AM, dann frazier <[hidden email]> wrote:

> From: wanghaibin <[hidden email]>
>
> 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 <[hidden email]>
> Signed-off-by: Eric Auger <[hidden email]>
> Reviewed-by: Christoffer Dall <[hidden email]>
> Signed-off-by: Christoffer Dall <[hidden email]>
> (cherry picked from commit b92382620e33c9f1bcbcd7c169262b9bf0525871)
> Signed-off-by: dann frazier <[hidden email]>
> ---
>  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
> [hidden email]
> https://lists.ubuntu.com/mailman/listinfo/kernel-team



--
bye,
p.

--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team
Reply | Threaded
Open this post in threaded view
|

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

Stefan Bader-2
On 09.11.2017 09:21, Paolo Pisati wrote:

> Clean upstream cherry pick.
>
> Acked-by: Paolo Pisati <[hidden email]>
>
> On Thu, Nov 9, 2017 at 3:19 AM, dann frazier <[hidden email]> wrote:
>> From: wanghaibin <[hidden email]>
>>
>> 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 <[hidden email]>
>> Signed-off-by: Eric Auger <[hidden email]>
>> Reviewed-by: Christoffer Dall <[hidden email]>
>> Signed-off-by: Christoffer Dall <[hidden email]>
>> (cherry picked from commit b92382620e33c9f1bcbcd7c169262b9bf0525871)
>> Signed-off-by: dann frazier <[hidden email]>
>> ---
>>  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
>> [hidden email]
>> https://lists.ubuntu.com/mailman/listinfo/kernel-team
>
>
>
For some reason I seem to see this patch twice... and I am still sober...


--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team

signature.asc (836 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

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

Kleber Souza
In reply to this post by dann frazier-4
On 11/09/17 03:19, dann frazier wrote:

> From: wanghaibin <[hidden email]>
>
> 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 <[hidden email]>
> Signed-off-by: Eric Auger <[hidden email]>
> Reviewed-by: Christoffer Dall <[hidden email]>
> Signed-off-by: Christoffer Dall <[hidden email]>
> (cherry picked from commit b92382620e33c9f1bcbcd7c169262b9bf0525871)
> Signed-off-by: dann frazier <[hidden email]>

Acked-by: Kleber Sacilotto de Souza <[hidden email]>

> ---
>  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;
>  }
>

--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team
Reply | Threaded
Open this post in threaded view
|

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

Stefan Bader-2
In reply to this post by dann frazier-4
On 09.11.2017 03:19, dann frazier wrote:

> From: wanghaibin <[hidden email]>
>
> 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 <[hidden email]>
> Signed-off-by: Eric Auger <[hidden email]>
> Reviewed-by: Christoffer Dall <[hidden email]>
> Signed-off-by: Christoffer Dall <[hidden email]>
> (cherry picked from commit b92382620e33c9f1bcbcd7c169262b9bf0525871)
> Signed-off-by: dann frazier <[hidden email]>
> ---
>  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;
>  }
>
Applied to Artful master-next. Thanks


--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team

signature.asc (836 bytes) Download Attachment