All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Chao Peng <chao.p.peng@linux.intel.com>, xen-devel@lists.xen.org
Cc: keir@xen.org, Ian.Campbell@citrix.com,
	stefano.stabellini@eu.citrix.com, George.Dunlap@eu.citrix.com,
	Ian.Jackson@eu.citrix.com, JBeulich@suse.com,
	dgdegra@tycho.nsa.gov
Subject: Re: [PATCH v16 07/10] x86: enable CMT for each domain RMID
Date: Thu, 25 Sep 2014 22:23:29 +0100	[thread overview]
Message-ID: <542487D1.5010106@citrix.com> (raw)
In-Reply-To: <1411640350-26155-8-git-send-email-chao.p.peng@linux.intel.com>

On 25/09/2014 11:19, Chao Peng wrote:
> If the CMT service is attached to a domain, its related RMID
> will be set to hardware for monitoring when the domain's vcpu is
> scheduled in. When the domain's vcpu is scheduled out, RMID 0
> (system reserved) will be set for monitoring.
>
> Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
> Signed-off-by: Chao Peng <chao.p.peng@linux.intel.com>
> Acked-by: Jan Beulich <jbeulich@suse.com>

Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

> ---
>  xen/arch/x86/domain.c           |    5 +++++
>  xen/arch/x86/psr.c              |   27 +++++++++++++++++++++++++++
>  xen/include/asm-x86/msr-index.h |    3 +++
>  xen/include/asm-x86/psr.h       |    1 +
>  4 files changed, 36 insertions(+)
>
> diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
> index 3cfd8f4..04a6719 100644
> --- a/xen/arch/x86/domain.c
> +++ b/xen/arch/x86/domain.c
> @@ -1418,6 +1418,8 @@ static void __context_switch(void)
>      {
>          memcpy(&p->arch.user_regs, stack_regs, CTXT_SWITCH_STACK_BYTES);
>          vcpu_save_fpu(p);
> +        if ( psr_cmt_enabled() )
> +            psr_assoc_rmid(0);
>          p->arch.ctxt_switch_from(p);
>      }
>  
> @@ -1442,6 +1444,9 @@ static void __context_switch(void)
>          }
>          vcpu_restore_fpu_eager(n);
>          n->arch.ctxt_switch_to(n);
> +
> +        if ( psr_cmt_enabled() && n->domain->arch.psr_rmid > 0 )
> +            psr_assoc_rmid(n->domain->arch.psr_rmid);
>      }
>  
>      gdt = !is_pv_32on64_vcpu(n) ? per_cpu(gdt_table, cpu) :
> diff --git a/xen/arch/x86/psr.c b/xen/arch/x86/psr.c
> index 41f7496..56163bd 100644
> --- a/xen/arch/x86/psr.c
> +++ b/xen/arch/x86/psr.c
> @@ -20,9 +20,15 @@
>  
>  #define PSR_CMT        (1<<0)
>  
> +struct pqr_assoc {
> +    uint64_t val;
> +    bool_t initialized;
> +};
> +
>  struct psr_cmt *__read_mostly  psr_cmt = NULL;
>  static bool_t __initdata opt_psr = 0;
>  static unsigned int __initdata opt_rmid_max = 255;
> +static DEFINE_PER_CPU(struct pqr_assoc, pqr_assoc);
>  
>  static void __init parse_psr_param(char *s)
>  {
> @@ -142,6 +148,27 @@ void psr_free_rmid(struct domain *d)
>      d->arch.psr_rmid = 0;
>  }
>  
> +void psr_assoc_rmid(unsigned int rmid)
> +{
> +    uint64_t val;
> +    uint64_t new_val;
> +    struct pqr_assoc *pqr = &this_cpu(pqr_assoc);
> +
> +    if ( !pqr->initialized )
> +    {
> +        rdmsrl(MSR_IA32_PQR_ASSOC, pqr->val);
> +        pqr->initialized = 1;
> +    }
> +    val = pqr->val;
> +
> +    new_val = (val & ~psr_cmt->rmid_mask) | (rmid & psr_cmt->rmid_mask);
> +    if ( val != new_val )
> +    {
> +        wrmsrl(MSR_IA32_PQR_ASSOC, new_val);
> +        pqr->val = new_val;
> +    }
> +}
> +
>  /*
>   * Local variables:
>   * mode: C
> diff --git a/xen/include/asm-x86/msr-index.h b/xen/include/asm-x86/msr-index.h
> index 542222e..dcb2b87 100644
> --- a/xen/include/asm-x86/msr-index.h
> +++ b/xen/include/asm-x86/msr-index.h
> @@ -323,6 +323,9 @@
>  #define MSR_IA32_TSC_DEADLINE		0x000006E0
>  #define MSR_IA32_ENERGY_PERF_BIAS	0x000001b0
>  
> +/* Platform Shared Resource MSRs */
> +#define MSR_IA32_PQR_ASSOC		0x00000c8f
> +
>  /* Intel Model 6 */
>  #define MSR_P6_PERFCTR(n)		(0x000000c1 + (n))
>  #define MSR_P6_EVNTSEL(n)		(0x00000186 + (n))
> diff --git a/xen/include/asm-x86/psr.h b/xen/include/asm-x86/psr.h
> index 930b22b..00b4625 100644
> --- a/xen/include/asm-x86/psr.h
> +++ b/xen/include/asm-x86/psr.h
> @@ -48,6 +48,7 @@ static inline bool_t psr_cmt_enabled(void)
>  void init_psr(void);
>  int psr_alloc_rmid(struct domain *d);
>  void psr_free_rmid(struct domain *d);
> +void psr_assoc_rmid(unsigned int rmid);
>  
>  #endif /* __ASM_PSR_H__ */
>  

  reply	other threads:[~2014-09-25 21:23 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-25 10:19 [PATCH v16 00/10] enable Cache Monitoring Technology (CMT) feature Chao Peng
2014-09-25 10:19 ` [PATCH v16 01/10] x86: add generic resource (e.g. MSR) access hypercall Chao Peng
2014-09-25 19:57   ` Andrew Cooper
2014-09-25 20:12     ` Konrad Rzeszutek Wilk
2014-09-25 20:17       ` Konrad Rzeszutek Wilk
2014-09-26  1:34       ` Chao Peng
2014-09-26  1:19     ` Chao Peng
2014-09-26  8:28     ` Jan Beulich
2014-09-26  8:58       ` Chao Peng
2014-09-26 15:40   ` Jan Beulich
2014-09-28  2:47     ` Chao Peng
2014-09-25 10:19 ` [PATCH v16 02/10] xsm: add resource operation related xsm policy Chao Peng
2014-09-25 10:19 ` [PATCH v16 03/10] tools: provide interface for generic resource access Chao Peng
2014-09-25 20:06   ` Konrad Rzeszutek Wilk
2014-09-25 10:19 ` [PATCH v16 04/10] x86: detect and initialize Cache Monitoring Technology feature Chao Peng
2014-09-25 20:33   ` Konrad Rzeszutek Wilk
2014-09-25 21:14     ` Andrew Cooper
2014-09-26  1:54       ` Chao Peng
2014-09-26 15:45   ` Jan Beulich
2014-09-25 10:19 ` [PATCH v16 05/10] x86: dynamically attach/detach CMT service for a guest Chao Peng
2014-09-25 20:41   ` Konrad Rzeszutek Wilk
2014-09-25 10:19 ` [PATCH v16 06/10] x86: collect global CMT information Chao Peng
2014-09-25 20:53   ` Konrad Rzeszutek Wilk
2014-09-26  9:21     ` Chao Peng
2014-09-26 13:23       ` Konrad Rzeszutek Wilk
2014-09-25 10:19 ` [PATCH v16 07/10] x86: enable CMT for each domain RMID Chao Peng
2014-09-25 21:23   ` Andrew Cooper [this message]
2014-09-25 10:19 ` [PATCH v16 08/10] x86: add CMT related MSRs in allowed list Chao Peng
2014-09-25 20:58   ` Konrad Rzeszutek Wilk
2014-09-26  8:38     ` Jan Beulich
2014-09-26 13:14       ` Konrad Rzeszutek Wilk
2014-09-25 10:19 ` [PATCH v16 09/10] xsm: add CMT related xsm policies Chao Peng
2014-09-25 10:19 ` [PATCH v16 10/10] tools: CMDs and APIs for Cache Monitoring Technology Chao Peng
2014-09-25 21:14   ` Konrad Rzeszutek Wilk

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=542487D1.5010106@citrix.com \
    --to=andrew.cooper3@citrix.com \
    --cc=George.Dunlap@eu.citrix.com \
    --cc=Ian.Campbell@citrix.com \
    --cc=Ian.Jackson@eu.citrix.com \
    --cc=JBeulich@suse.com \
    --cc=chao.p.peng@linux.intel.com \
    --cc=dgdegra@tycho.nsa.gov \
    --cc=keir@xen.org \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.