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

Re: [Xen-devel] [PATCH v9 12/20] x86/VPMU: Initialize PMU for PV(H) guests



>>> On 08.08.14 at 18:55, <boris.ostrovsky@xxxxxxxxxx> wrote:
> --- a/xen/arch/x86/hvm/svm/svm.c
> +++ b/xen/arch/x86/hvm/svm/svm.c
> @@ -1158,7 +1158,9 @@ static int svm_vcpu_initialise(struct vcpu *v)
>          return rc;
>      }
>  
> -    vpmu_initialise(v);
> +    /* PVH's VPMU is initialized via hypercall */
> +    if ( is_hvm_domain(v->domain) )
> +        vpmu_initialise(v);
>  
>      svm_guest_osvw_init(v);
>  
> @@ -1167,7 +1169,9 @@ static int svm_vcpu_initialise(struct vcpu *v)
>  
>  static void svm_vcpu_destroy(struct vcpu *v)
>  {
> -    vpmu_destroy(v);
> +    /* PVH's VPMU destroyed via hypercall */
> +    if ( is_hvm_domain(v->domain) )
> +        vpmu_destroy(v);

While I can see that being the case for init, is this really correct for
destroy even for a misbehaving guest?

> --- a/xen/arch/x86/hvm/svm/vpmu.c
> +++ b/xen/arch/x86/hvm/svm/vpmu.c
> @@ -386,14 +386,21 @@ static int amd_vpmu_initialise(struct vcpu *v)
>        }
>      }
>  
> -    ctxt = xzalloc_bytes(sizeof(struct xen_pmu_amd_ctxt) +
> -                         2 * sizeof(uint64_t) * AMD_MAX_COUNTERS);
> -    if ( !ctxt )
> +    if ( is_hvm_domain(v->domain) )
>      {
> -        gdprintk(XENLOG_WARNING, "Insufficient memory for PMU, "
> -            " PMU feature is unavailable on domain %d vcpu %d.\n",
> -            v->vcpu_id, v->domain->domain_id);
> -        return -ENOMEM;
> +        ctxt = xzalloc_bytes(sizeof(struct xen_pmu_amd_ctxt) +
> +                             2 * sizeof(uint64_t) * AMD_MAX_COUNTERS);
> +        if ( !ctxt )
> +        {
> +            gdprintk(XENLOG_WARNING, "Insufficient memory for PMU, "
> +                " PMU feature is unavailable on domain %d vcpu %d.\n",
> +                v->vcpu_id, v->domain->domain_id);

If you already have to touch this, please make it sane: gdprintk()
already prints a (domain,vcpu) pair, and two of them are unlikely
to be useful here. Also this should make use of %pv.

> +            return -ENOMEM;
> +        }
> +    }
> +    else
> +    {
> +        ctxt = &v->arch.vpmu.xenpmu_data->pmu.c.amd;
>      }

Pointless braces.

> @@ -387,7 +399,7 @@ static int core2_vpmu_alloc_resource(struct vcpu *v)
>  
>      return 1;
>  
> -out_err:
> +out_err_hvm:
>      vmx_rm_msr(MSR_CORE_PERF_GLOBAL_CTRL, VMX_HOST_MSR);
>      vmx_rm_msr(MSR_CORE_PERF_GLOBAL_CTRL, VMX_GUEST_MSR);
>      release_pmu_ownship(PMU_OWNER_HVM);
> @@ -395,6 +407,7 @@ out_err:
>      xfree(core2_vpmu_cxt);
>      xfree(p);
>  
> +out_err:

I think I said this before: Please indent labels by at least one space.

> --- a/xen/arch/x86/hvm/vpmu.c
> +++ b/xen/arch/x86/hvm/vpmu.c
> @@ -22,10 +22,13 @@
>  #include <xen/sched.h>
>  #include <xen/xenoprof.h>
>  #include <xen/event.h>
> +#include <xen/softirq.h>
> +#include <xen/hypercall.h>

Leftover additions from an earlier version?

Jan


_______________________________________________
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®.