From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: kevin.tian@intel.com, keir@xen.org, JBeulich@suse.com,
jun.nakajima@intel.com, tim@xen.org, dietmar.hahn@ts.fujitsu.com,
xen-devel@lists.xen.org, suravee.suthikulpanit@amd.com
Subject: Re: [PATCH v7 04/19] x86/VPMU: Make vpmu marcos a bit more efficient
Date: Fri, 6 Jun 2014 19:13:26 +0100 [thread overview]
Message-ID: <539204C6.9000009@citrix.com> (raw)
In-Reply-To: <1402076415-26475-5-git-send-email-boris.ostrovsky@oracle.com>
On 06/06/14 18:40, Boris Ostrovsky wrote:
> Update macros that modify VPMU flags to allow changing multiple bits at once.
Modify how? It appears to only be an introduction of "vcpu_are_all_set()".
>
> Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
> Acked-by: Kevin Tian <kevin.tian@intel.com>
> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> Reviewed-by: Dietmar Hahn <dietmar.hahn@ts.fujitsu.com>
> Tested-by: Dietmar Hahn <dietmar.hahn@ts.fujitsu.com>
> ---
> xen/arch/x86/hvm/vmx/vpmu_core2.c | 5 +----
> xen/arch/x86/hvm/vpmu.c | 3 +--
> xen/include/asm-x86/hvm/vpmu.h | 9 +++++----
> 3 files changed, 7 insertions(+), 10 deletions(-)
>
> diff --git a/xen/arch/x86/hvm/vmx/vpmu_core2.c b/xen/arch/x86/hvm/vmx/vpmu_core2.c
> index f5f249f..bf3cd33 100644
> --- a/xen/arch/x86/hvm/vmx/vpmu_core2.c
> +++ b/xen/arch/x86/hvm/vmx/vpmu_core2.c
> @@ -326,10 +326,7 @@ static int core2_vpmu_save(struct vcpu *v)
> {
> struct vpmu_struct *vpmu = vcpu_vpmu(v);
>
> - if ( !vpmu_is_set(vpmu, VPMU_CONTEXT_SAVE) )
> - return 0;
> -
> - if ( !vpmu_is_set(vpmu, VPMU_CONTEXT_LOADED) )
> + if ( !vpmu_are_all_set(vpmu, VPMU_CONTEXT_SAVE | VPMU_CONTEXT_LOADED) )
> return 0;
>
> __core2_vpmu_save(v);
> diff --git a/xen/arch/x86/hvm/vpmu.c b/xen/arch/x86/hvm/vpmu.c
> index 63765fa..d456aa6 100644
> --- a/xen/arch/x86/hvm/vpmu.c
> +++ b/xen/arch/x86/hvm/vpmu.c
> @@ -143,8 +143,7 @@ void vpmu_save(struct vcpu *v)
> struct vpmu_struct *vpmu = vcpu_vpmu(v);
> int pcpu = smp_processor_id();
>
> - if ( !(vpmu_is_set(vpmu, VPMU_CONTEXT_ALLOCATED) &&
> - vpmu_is_set(vpmu, VPMU_CONTEXT_LOADED)) )
> + if ( !vpmu_are_all_set(vpmu, VPMU_CONTEXT_ALLOCATED | VPMU_CONTEXT_LOADED) )
> return;
>
> vpmu->last_pcpu = pcpu;
> diff --git a/xen/include/asm-x86/hvm/vpmu.h b/xen/include/asm-x86/hvm/vpmu.h
> index 40f63fb..7cd7266 100644
> --- a/xen/include/asm-x86/hvm/vpmu.h
> +++ b/xen/include/asm-x86/hvm/vpmu.h
> @@ -81,10 +81,11 @@ struct vpmu_struct {
> #define VPMU_CPU_HAS_BTS 0x200 /* Has Branch Trace Store */
>
>
> -#define vpmu_set(_vpmu, _x) ((_vpmu)->flags |= (_x))
> -#define vpmu_reset(_vpmu, _x) ((_vpmu)->flags &= ~(_x))
> -#define vpmu_is_set(_vpmu, _x) ((_vpmu)->flags & (_x))
> -#define vpmu_clear(_vpmu) ((_vpmu)->flags = 0)
> +#define vpmu_set(_vpmu, _x) ((_vpmu)->flags |= (_x))
> +#define vpmu_reset(_vpmu, _x) ((_vpmu)->flags &= ~(_x))
> +#define vpmu_is_set(_vpmu, _x) ((_vpmu)->flags & (_x))
> +#define vpmu_are_all_set(_vpmu, _x) (((_vpmu)->flags & (_x)) == (_x))
> +#define vpmu_clear(_vpmu) ((_vpmu)->flags = 0)
These macros' implicit types don't quite match their implementation.
set, reset and clear are implicitly void. (and frankly clear and reset
are confusing given the other bitopt nomenclature, but I don't suggest
changing them).
is_set and are_all_set are implicitly bool, but don't have !!'s
I realise I am straying vastly into personal preference here, but I feel
these would be much nicer as static inlines with proper types, and const
correctness for {is,are_all}_set().
~Andrew
>
> int vpmu_do_wrmsr(unsigned int msr, uint64_t msr_content);
> int vpmu_do_rdmsr(unsigned int msr, uint64_t *msr_content);
next prev parent reply other threads:[~2014-06-06 18:13 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-06 17:39 [PATCH v7 00/19] x86/PMU: Xen PMU PV(H) support Boris Ostrovsky
2014-06-06 17:39 ` [PATCH v7 01/19] common/symbols: Export hypervisor symbols to privileged guest Boris Ostrovsky
2014-06-06 17:57 ` Andrew Cooper
2014-06-06 19:05 ` Boris Ostrovsky
2014-06-06 19:13 ` Andrew Cooper
2014-06-10 11:31 ` Jan Beulich
2014-06-06 17:39 ` [PATCH v7 02/19] VPMU: Mark context LOADED before registers are loaded Boris Ostrovsky
2014-06-06 17:59 ` Andrew Cooper
2014-06-10 15:29 ` Jan Beulich
2014-06-10 15:40 ` Boris Ostrovsky
2014-06-06 17:39 ` [PATCH v7 03/19] x86/VPMU: Set MSR bitmaps only for HVM/PVH guests Boris Ostrovsky
2014-06-06 18:02 ` Andrew Cooper
2014-06-06 19:07 ` Boris Ostrovsky
2014-06-06 17:40 ` [PATCH v7 04/19] x86/VPMU: Make vpmu marcos a bit more efficient Boris Ostrovsky
2014-06-06 18:13 ` Andrew Cooper [this message]
2014-06-06 19:28 ` Boris Ostrovsky
2014-06-06 17:40 ` [PATCH v7 05/19] intel/VPMU: Clean up Intel VPMU code Boris Ostrovsky
2014-06-06 18:34 ` Andrew Cooper
2014-06-06 19:43 ` Boris Ostrovsky
2014-06-10 8:19 ` Jan Beulich
2014-06-06 17:40 ` [PATCH v7 06/19] vmx: Merge MSR management routines Boris Ostrovsky
2014-06-11 9:55 ` Jan Beulich
2014-06-06 17:40 ` [PATCH v7 07/19] x86/VPMU: Handle APIC_LVTPC accesses Boris Ostrovsky
2014-06-06 17:40 ` [PATCH v7 08/19] intel/VPMU: MSR_CORE_PERF_GLOBAL_CTRL should be initialized to zero Boris Ostrovsky
2014-06-06 17:40 ` [PATCH v7 09/19] x86/VPMU: Add public xenpmu.h Boris Ostrovsky
2014-06-06 19:32 ` Andrew Cooper
2014-06-11 10:03 ` Jan Beulich
2014-06-11 12:32 ` Boris Ostrovsky
2014-06-06 17:40 ` [PATCH v7 10/19] x86/VPMU: Make vpmu not HVM-specific Boris Ostrovsky
2014-06-11 10:07 ` Jan Beulich
2014-06-11 13:57 ` Is: Reviewed-by, Acked-by rules. Was:Re: " Konrad Rzeszutek Wilk
2014-06-11 20:25 ` Jan Beulich
2014-06-12 11:10 ` George Dunlap
2014-06-12 16:21 ` Jan Beulich
2014-06-06 17:40 ` [PATCH v7 11/19] x86/VPMU: Interface for setting PMU mode and flags Boris Ostrovsky
2014-06-06 19:58 ` Andrew Cooper
2014-06-06 20:42 ` Boris Ostrovsky
2014-06-11 10:14 ` Jan Beulich
2014-06-17 15:01 ` Boris Ostrovsky
2014-06-17 15:14 ` Jan Beulich
2014-06-06 17:40 ` [PATCH v7 12/19] x86/VPMU: Initialize PMU for PV guests Boris Ostrovsky
2014-06-06 20:13 ` Andrew Cooper
2014-06-06 20:49 ` Boris Ostrovsky
2014-06-11 10:20 ` Jan Beulich
2014-06-11 12:49 ` Boris Ostrovsky
2014-06-11 12:53 ` Jan Beulich
2014-06-06 17:40 ` [PATCH v7 13/19] x86/VPMU: Add support for PMU register handling on " Boris Ostrovsky
2014-06-06 20:26 ` Andrew Cooper
2014-06-06 20:53 ` Boris Ostrovsky
2014-06-06 17:40 ` [PATCH v7 14/19] x86/VPMU: Handle PMU interrupts for " Boris Ostrovsky
2014-06-06 20:40 ` Andrew Cooper
2014-06-06 21:21 ` Boris Ostrovsky
2014-06-06 17:40 ` [PATCH v7 15/19] x86/VPMU: Merge vpmu_rdmsr and vpmu_wrmsr Boris Ostrovsky
2014-06-06 17:40 ` [PATCH v7 16/19] x86/VPMU: Add privileged PMU mode Boris Ostrovsky
2014-06-06 17:40 ` [PATCH v7 17/19] x86/VPMU: Save VPMU state for PV guests during context switch Boris Ostrovsky
2014-06-06 17:40 ` [PATCH v7 18/19] x86/VPMU: NMI-based VPMU support Boris Ostrovsky
2014-06-06 17:40 ` [PATCH v7 19/19] x86/VPMU: Move VPMU files up from hvm/ directory Boris Ostrovsky
2014-06-06 21:05 ` Andrew Cooper
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=539204C6.9000009@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=JBeulich@suse.com \
--cc=boris.ostrovsky@oracle.com \
--cc=dietmar.hahn@ts.fujitsu.com \
--cc=jun.nakajima@intel.com \
--cc=keir@xen.org \
--cc=kevin.tian@intel.com \
--cc=suravee.suthikulpanit@amd.com \
--cc=tim@xen.org \
--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.