Message ID | 20171109021957.ptzzke2ohr7az7y4@xps13.dannf |
---|---|
State | New |
Headers | show |
Series | [SRU,Artful] KVM: arm/arm64: vgic-its: Fix return value for device table restore | expand |
Clean upstream cherry pick. Acked-by: Paolo Pisati <paolo.pisati@canonical.com> On Thu, Nov 9, 2017 at 3:19 AM, dann frazier <dann.frazier@canonical.com> wrote: > From: wanghaibin <wanghaibin.wang@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@huawei.com> > Signed-off-by: Eric Auger <eric.auger@redhat.com> > Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org> > Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org> > (cherry picked from commit b92382620e33c9f1bcbcd7c169262b9bf0525871) > Signed-off-by: dann frazier <dann.frazier@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@lists.ubuntu.com > https://lists.ubuntu.com/mailman/listinfo/kernel-team
On 09.11.2017 09:21, Paolo Pisati wrote: > Clean upstream cherry pick. > > Acked-by: Paolo Pisati <paolo.pisati@canonical.com> > > On Thu, Nov 9, 2017 at 3:19 AM, dann frazier <dann.frazier@canonical.com> wrote: >> From: wanghaibin <wanghaibin.wang@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@huawei.com> >> Signed-off-by: Eric Auger <eric.auger@redhat.com> >> Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org> >> Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org> >> (cherry picked from commit b92382620e33c9f1bcbcd7c169262b9bf0525871) >> Signed-off-by: dann frazier <dann.frazier@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@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...
On 11/09/17 03:19, dann frazier wrote: > From: wanghaibin <wanghaibin.wang@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@huawei.com> > Signed-off-by: Eric Auger <eric.auger@redhat.com> > Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org> > Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org> > (cherry picked from commit b92382620e33c9f1bcbcd7c169262b9bf0525871) > Signed-off-by: dann frazier <dann.frazier@canonical.com> Acked-by: Kleber Sacilotto de Souza <kleber.souza@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; > } >
On 09.11.2017 03:19, dann frazier wrote: > From: wanghaibin <wanghaibin.wang@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@huawei.com> > Signed-off-by: Eric Auger <eric.auger@redhat.com> > Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org> > Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org> > (cherry picked from commit b92382620e33c9f1bcbcd7c169262b9bf0525871) > Signed-off-by: dann frazier <dann.frazier@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; > } > Applied to Artful master-next. Thanks
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; }