[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] xen: x86: copy back tsc info, not pointer to tsc info in domctl



On Tue, 2015-05-26 at 11:13 +0100, Andrew Cooper wrote:
> On 26/05/15 11:04, Ian Campbell wrote:
> > In 38b37ed82705 "x86/domctl: cleanup", XEN_DOMCTL_gettscinfo was
> > changed to use the standard copyback mechanism.
> >
> > However the output TSC Info is a guerst handle, i.e. a pointer to the
> > location for the information, copyback just copies the unchanged
> > pointer back.
> >
> > Switch back to fetching the details into a local struct and explicitly
> > copying it back.
> >
> > This caused test failures in the Cambridge instance of osstest, but
> > not for some reason in the production instance.
> >
> > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> 
> Oops - I feel very silly for not noticing that.  My testing also didn't
> notice this.

It's pretty subtle.

My best guess is that the h/w in Cambridge tends to be older and
therefore perhaps doesn't all have synchronous TSCs or something.

> > ---
> >  xen/arch/x86/domctl.c |   13 ++++++++-----
> >  1 file changed, 8 insertions(+), 5 deletions(-)
> >
> > diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
> > index 684259b..e7da735 100644
> > --- a/xen/arch/x86/domctl.c
> > +++ b/xen/arch/x86/domctl.c
> > @@ -703,13 +703,16 @@ long arch_do_domctl(
> >              ret = -EINVAL;
> >          else
> >          {
> > +            xen_guest_tsc_info_t info = { 0 };
> > +
> >              domain_pause(d);
> > -            tsc_get_info(d, &domctl->u.tsc_info.info.tsc_mode,
> > -                         &domctl->u.tsc_info.info.elapsed_nsec,
> > -                         &domctl->u.tsc_info.info.gtsc_khz,
> > -                         &domctl->u.tsc_info.info.incarnation);
> > +            tsc_get_info(d, &info.tsc_mode,
> > +                            &info.elapsed_nsec,
> > +                            &info.gtsc_khz,
> > +                            &info.incarnation);
> > +            if ( copy_to_guest(domctl->u.tsc_info.out_info, &info, 1) )
> > +                ret = -EFAULT;
> >              domain_unpause(d);
> 
> The copy_to_guest() can be after the domain_unpause().

So it can. 

> Alternatively, being a domctl, we can change tsc_info to not be a guest
> handle.  There is plenty of space inside the union, and it saves a
> further memory access.

If you prefer, sure.

Perhaps fix then cleanup in a separate patch?

Ian.



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.