|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: xen | Failed pipeline for staging | 6a47ba2f
On Sat, 29 Apr 2023, Stefano Stabellini wrote:
> Your guess was correct. I have done more bisecting today. The culprit is
> the following commit (I reverted only this commit and ran 25 tests
> successfully, usually it fails in less than 5):
>
> e522c98c3 tools: Refactor console/io.c to avoid using xc_domain_getinfo()
I did more debugging. One problem seems to be that
XEN_SYSCTL_getdomaininfolist is buggy in the hypervisor. The field
u.getdomaininfolist.num_domains is not copied back to the guest. It
doesn't look like the hypercall would behave well for more than 1 guest.
I am appending the fix.
This is not sufficient to fix the failure. On a hunch, I made this
change:
/* Fetch info on every valid domain except for dom0 */
- ret = xc_domain_getinfolist(xc, 1, DOMID_FIRST_RESERVED - 1,
domaininfo);
+ ret = xc_domain_getinfolist(xc, 1, 10, domaininfo);
if (ret < 0)
return;
With it, everything works. I have run out of time today for my
investigation.
I would like to take the opportunity to highlight that gitlab-ci did a
very good job spotting an issue. I am glad we are starting to reap the
benefits of all the hard work we put into it.
Cheers,
Stefano
---
xen: fix broken XEN_SYSCTL_getdomaininfolist hypercall
XEN_SYSCTL_getdomaininfolist doesn't actually update the guest
num_domains field, only its local copy. Fix that.
Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxx>
diff --git a/xen/common/sysctl.c b/xen/common/sysctl.c
index 02505ab044..0e1097be96 100644
--- a/xen/common/sysctl.c
+++ b/xen/common/sysctl.c
@@ -107,10 +107,8 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t)
u_sysctl)
rcu_read_unlock(&domlist_read_lock);
- if ( ret != 0 )
- break;
-
op->u.getdomaininfolist.num_domains = num_domains;
+ __copy_field_to_guest(u_sysctl, op, u.getdomaininfolist.num_domains);
}
break;
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |