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

[Xen-devel] RE: xenpm fail



On Mon, 2010-11-01 at 12:26 +0000, Zhang, Yang Z wrote:
> "Xenpm get-cpuidle-states" works well with your patch, but "xenpm
> start" still get segment fault. And with following patch, I didn't see
> any segment fault when run xenpm or my test case. Maybe this problem
> will solved by this patch. Pls take a look at it.

Thanks, I came up with the same by looking for all the & used with these
macros.

Will submit a patch shortly.

Ian.

> 
> diff -r a1b39d2b9001 tools/libxc/xc_pm.c
> --- a/tools/libxc/xc_pm.c       Fri Oct 22 15:14:51 2010 +0100
> +++ b/tools/libxc/xc_pm.c       Tue Nov 02 04:06:10 2010 +0800
> @@ -46,8 +46,8 @@ int xc_pm_get_pxstat(xc_interface *xch,
>  {
>      DECLARE_SYSCTL;
>      /* Sizes unknown until xc_pm_get_max_px */
> -    DECLARE_NAMED_HYPERCALL_BOUNCE(trans, &pxpt->trans_pt, 0, 
> XC_HYPERCALL_BUFFER_BOUNCE_BOTH);
> -    DECLARE_NAMED_HYPERCALL_BOUNCE(pt, &pxpt->pt, 0, 
> XC_HYPERCALL_BUFFER_BOUNCE_BOTH);
> +    DECLARE_NAMED_HYPERCALL_BOUNCE(trans, pxpt->trans_pt, 0, 
> XC_HYPERCALL_BUFFER_BOUNCE_BOTH);
> +    DECLARE_NAMED_HYPERCALL_BOUNCE(pt, pxpt->pt, 0, 
> XC_HYPERCALL_BUFFER_BOUNCE_BOTH);
> 
>      int max_px, ret;
> 
> @@ -124,8 +124,8 @@ int xc_pm_get_cxstat(xc_interface *xch,
>  int xc_pm_get_cxstat(xc_interface *xch, int cpuid, struct xc_cx_stat *cxpt)
>  {
>      DECLARE_SYSCTL;
> -    DECLARE_NAMED_HYPERCALL_BOUNCE(triggers, &cxpt->triggers, 0, 
> XC_HYPERCALL_BUFFER_BOUNCE_BOTH);
> -    DECLARE_NAMED_HYPERCALL_BOUNCE(residencies, &cxpt->residencies, 0, 
> XC_HYPERCALL_BUFFER_BOUNCE_BOTH);
> +    DECLARE_NAMED_HYPERCALL_BOUNCE(triggers, cxpt->triggers, 0, 
> XC_HYPERCALL_BUFFER_BOUNCE_BOTH);
> +    DECLARE_NAMED_HYPERCALL_BOUNCE(residencies, cxpt->residencies, 0, 
> XC_HYPERCALL_BUFFER_BOUNCE_BOTH);
>      int max_cx, ret;
> 
>      if( !cxpt || !(cxpt->triggers) || !(cxpt->residencies) )
> 
> best regards
> yang
> 
> > -----Original Message-----
> > From: Ian Campbell [mailto:Ian.Campbell@xxxxxxxxxxxxx]
> > Sent: Monday, November 01, 2010 7:24 PM
> > To: Zhang, Yang Z
> > Cc: xen-devel@xxxxxxxxxxxxxxxxxxx; Ian Jackson
> > Subject: RE: xenpm fail
> > 
> > Thanks for this...
> > 
> > On Mon, 2010-11-01 at 10:49 +0000, Zhang, Yang Z wrote:
> > [...]
> > > xc__hypercall_bounce_pre bounced 32 bytes from user buf 0x7fffffffe720 
> > > into
> > hcall buf 0x607004
> > > xc__hypercall_bounce_pre bounced 32 bytes from user buf 0x7fffffffe728 
> > > into
> > hcall buf 0x609004
> > > xc__hypercall_bounce_pre bounced 136 bytes from user buf 0x7fffffffe610
> > into hcall buf 0x60b004
> > > xc__hypercall_bounce_post bounced 136 bytes back from hcall buf 0x60b004
> > into user buf 0x7fffffffe610
> > > xc__hypercall_bounce_post bounced 32 bytes back from hcall buf 0x609004
> > into user buf 0x7fffffffe728
> > > xc__hypercall_bounce_post bounced 32 bytes back from hcall buf 0x607004
> > into user buf 0x7fffffffe720
> > 
> > This is the xc_pm_get_cxstat call, we can see it bounce max_cx(=4) *
> > sizeof(uint64_t)==32 bytes for both cxpt->triggers and cxpt->residencies
> > as well as 136 bytes for struct xensysctl.
> > 
> > However the ubuf values for triggers and residencies are suspicious,
> > they are only 8 bytes different, IOW they apparently overlap.
> > 
> > Can you try this patch which fixes a stupid thinko.
> > 
> > diff -r c3d7d2729410 tools/libxc/xc_pm.c
> > --- a/tools/libxc/xc_pm.c   Mon Nov 01 11:12:51 2010 +0000
> > +++ b/tools/libxc/xc_pm.c   Mon Nov 01 11:19:53 2010 +0000
> > @@ -124,8 +124,8 @@ int xc_pm_get_cxstat(xc_interface *xch,
> >  int xc_pm_get_cxstat(xc_interface *xch, int cpuid, struct xc_cx_stat *cxpt)
> >  {
> >      DECLARE_SYSCTL;
> > -    DECLARE_NAMED_HYPERCALL_BOUNCE(triggers, &cxpt->triggers, 0,
> > XC_HYPERCALL_BUFFER_BOUNCE_BOTH);
> > -    DECLARE_NAMED_HYPERCALL_BOUNCE(residencies,
> > &cxpt->residencies, 0, XC_HYPERCALL_BUFFER_BOUNCE_BOTH);
> > +    DECLARE_NAMED_HYPERCALL_BOUNCE(triggers, cxpt->triggers, 0,
> > XC_HYPERCALL_BUFFER_BOUNCE_BOTH);
> > +    DECLARE_NAMED_HYPERCALL_BOUNCE(residencies, cxpt->residencies,
> > 0, XC_HYPERCALL_BUFFER_BOUNCE_BOTH);
> >      int max_cx, ret;
> > 
> >      if( !cxpt || !(cxpt->triggers) || !(cxpt->residencies) )
> > 
> 



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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