Re: [Xen-devel] [PATCH v22 02/14] x86/VPMU: Add public xenpmu.h

2015-05-27 Thread Boris Ostrovsky

On 05/27/2015 08:28 AM, Jan Beulich wrote:

On 26.05.15 at 19:50, boris.ostrov...@oracle.com wrote:

On 05/26/2015 12:13 PM, Jan Beulich wrote:

On 21.05.15 at 19:57, boris.ostrov...@oracle.com wrote:

+ * guest when PMU_CACHED bit in pmu_flags is set (which is done by the
+ * hypervisor during PMU interrupt). Hypervisor will read updated data in
+ * XENPMU_flush hypercall and clear PMU_CACHED bit.
+ */
+struct xen_pmu_arch {
+union {
+/*
+ * Processor's registers at the time of interrupt.
+ * WO for hypervisor, RO for guests.
+ */
+struct xen_pmu_regs regs;
+/* Padding for adding new registers to xen_pmu_regs in the future

*/

+#define XENPMU_REGS_PAD_SZ  64
+uint8_t pad[XENPMU_REGS_PAD_SZ];
+} r;
+
+/* WO for hypervisor, RO for guest */
+uint64_t pmu_flags;
+
+/*
+ * APIC LVTPC register.
+ * RW for both hypervisor and guest.
+ * Only APIC_LVT_MASKED bit is loaded by the hypervisor into hardware
+ * during XENPMU_flush or XENPMU_lvtpc_set.
+ */
+union {
+uint32_t lapic_lvtpc;

Considering this isn't being used in this patch, could I ask you to
move it where it is being used (keeping only the pad member and
perhaps a placeholder comment here), so verifying that the
read-once requirement for the hypervisor side is met becomes
more obvious?

I can certainly delay defining this field until later patch but how is
this filed different from xen_pmu_arch (not seen here) which is also
read-once? Wouldn't you then want to have that definition deferred as well?

I'm confused - the only xen_pmu_arch I see in this patch is
struct xen_pmu_arch (and its uses), which the field above is
actually part of, and which is also visible in the context above. So
I doubt that's what you're referring to. But yes, fields with read-
once requirements would better be defined in the patch(es) using
them, so reviewers don't need to hunt them down.


Sorry, I meant amd/intel members of the union below (I forgot we were 
already in the arch header file):


+/*
+ * Vendor-specific PMU registers.
+ * RW for both hypervisor and guest.
+ * Guest's updates to this field are verified and then loaded by the
+ * hypervisor into hardware during XENPMU_flush
+ */
+union {
+struct xen_pmu_amd_ctxt amd;
+struct xen_pmu_intel_ctxt intel;
+
+/*
+ * Padding for contexts (fixed parts only, does not include MSR 
banks

+ * that are specified by offsets)
+ */
+#define XENPMU_CTXT_PAD_SZ  128
+uint8_t pad[XENPMU_CTXT_PAD_SZ];
+} c;
+};

I think they are first used in patch 11 so I assume you also want me to 
just keep the pad here (with a comment explaining why it is here) until 
that patch.


-boris

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


Re: [Xen-devel] [PATCH v22 02/14] x86/VPMU: Add public xenpmu.h

2015-05-27 Thread Jan Beulich
 On 26.05.15 at 19:50, boris.ostrov...@oracle.com wrote:
 On 05/26/2015 12:13 PM, Jan Beulich wrote:
 On 21.05.15 at 19:57, boris.ostrov...@oracle.com wrote:

 + * guest when PMU_CACHED bit in pmu_flags is set (which is done by the
 + * hypervisor during PMU interrupt). Hypervisor will read updated data in
 + * XENPMU_flush hypercall and clear PMU_CACHED bit.
 + */
 +struct xen_pmu_arch {
 +union {
 +/*
 + * Processor's registers at the time of interrupt.
 + * WO for hypervisor, RO for guests.
 + */
 +struct xen_pmu_regs regs;
 +/* Padding for adding new registers to xen_pmu_regs in the future 
 */
 +#define XENPMU_REGS_PAD_SZ  64
 +uint8_t pad[XENPMU_REGS_PAD_SZ];
 +} r;
 +
 +/* WO for hypervisor, RO for guest */
 +uint64_t pmu_flags;
 +
 +/*
 + * APIC LVTPC register.
 + * RW for both hypervisor and guest.
 + * Only APIC_LVT_MASKED bit is loaded by the hypervisor into hardware
 + * during XENPMU_flush or XENPMU_lvtpc_set.
 + */
 +union {
 +uint32_t lapic_lvtpc;
 Considering this isn't being used in this patch, could I ask you to
 move it where it is being used (keeping only the pad member and
 perhaps a placeholder comment here), so verifying that the
 read-once requirement for the hypervisor side is met becomes
 more obvious?
 
 I can certainly delay defining this field until later patch but how is 
 this filed different from xen_pmu_arch (not seen here) which is also 
 read-once? Wouldn't you then want to have that definition deferred as well?

I'm confused - the only xen_pmu_arch I see in this patch is
struct xen_pmu_arch (and its uses), which the field above is
actually part of, and which is also visible in the context above. So
I doubt that's what you're referring to. But yes, fields with read-
once requirements would better be defined in the patch(es) using
them, so reviewers don't need to hunt them down.

Jan


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


Re: [Xen-devel] [PATCH v22 02/14] x86/VPMU: Add public xenpmu.h

2015-05-27 Thread Jan Beulich
 On 27.05.15 at 17:18, boris.ostrov...@oracle.com wrote:
 On 05/27/2015 10:26 AM, Jan Beulich wrote:
 On 27.05.15 at 15:44, boris.ostrov...@oracle.com wrote:
 Sorry, I meant amd/intel members of the union below (I forgot we were
 already in the arch header file):

 +/*
 + * Vendor-specific PMU registers.
 + * RW for both hypervisor and guest.
 + * Guest's updates to this field are verified and then loaded by the
 + * hypervisor into hardware during XENPMU_flush
 + */
 +union {
 +struct xen_pmu_amd_ctxt amd;
 +struct xen_pmu_intel_ctxt intel;
 +
 +/*
 + * Padding for contexts (fixed parts only, does not include MSR 
 banks
 + * that are specified by offsets)
 + */
 +#define XENPMU_CTXT_PAD_SZ  128
 +uint8_t pad[XENPMU_CTXT_PAD_SZ];
 +} c;
 +};

 I think they are first used in patch 11 so I assume you also want me to
 just keep the pad here (with a comment explaining why it is here) until
 that patch.
 Ah, those ones I simply recalled having checked in the previous
 version already.

 
 But should they they also not be defined until later patch, to be 
 consistent with how lapic_lvtpc's definition is deferred?

I think that would be better.

Jan


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


Re: [Xen-devel] [PATCH v22 02/14] x86/VPMU: Add public xenpmu.h

2015-05-27 Thread Jan Beulich
 On 27.05.15 at 15:44, boris.ostrov...@oracle.com wrote:
 Sorry, I meant amd/intel members of the union below (I forgot we were 
 already in the arch header file):
 
 +/*
 + * Vendor-specific PMU registers.
 + * RW for both hypervisor and guest.
 + * Guest's updates to this field are verified and then loaded by the
 + * hypervisor into hardware during XENPMU_flush
 + */
 +union {
 +struct xen_pmu_amd_ctxt amd;
 +struct xen_pmu_intel_ctxt intel;
 +
 +/*
 + * Padding for contexts (fixed parts only, does not include MSR banks
 + * that are specified by offsets)
 + */
 +#define XENPMU_CTXT_PAD_SZ  128
 +uint8_t pad[XENPMU_CTXT_PAD_SZ];
 +} c;
 +};
 
 I think they are first used in patch 11 so I assume you also want me to 
 just keep the pad here (with a comment explaining why it is here) until 
 that patch.

Ah, those ones I simply recalled having checked in the previous
version already.

Jan


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


Re: [Xen-devel] [PATCH v22 02/14] x86/VPMU: Add public xenpmu.h

2015-05-26 Thread Boris Ostrovsky

On 05/26/2015 12:13 PM, Jan Beulich wrote:

On 21.05.15 at 19:57, boris.ostrov...@oracle.com wrote:


+ * guest when PMU_CACHED bit in pmu_flags is set (which is done by the
+ * hypervisor during PMU interrupt). Hypervisor will read updated data in
+ * XENPMU_flush hypercall and clear PMU_CACHED bit.
+ */
+struct xen_pmu_arch {
+union {
+/*
+ * Processor's registers at the time of interrupt.
+ * WO for hypervisor, RO for guests.
+ */
+struct xen_pmu_regs regs;
+/* Padding for adding new registers to xen_pmu_regs in the future */
+#define XENPMU_REGS_PAD_SZ  64
+uint8_t pad[XENPMU_REGS_PAD_SZ];
+} r;
+
+/* WO for hypervisor, RO for guest */
+uint64_t pmu_flags;
+
+/*
+ * APIC LVTPC register.
+ * RW for both hypervisor and guest.
+ * Only APIC_LVT_MASKED bit is loaded by the hypervisor into hardware
+ * during XENPMU_flush or XENPMU_lvtpc_set.
+ */
+union {
+uint32_t lapic_lvtpc;

Considering this isn't being used in this patch, could I ask you to
move it where it is being used (keeping only the pad member and
perhaps a placeholder comment here), so verifying that the
read-once requirement for the hypervisor side is met becomes
more obvious?


I can certainly delay defining this field until later patch but how is 
this filed different from xen_pmu_arch (not seen here) which is also 
read-once? Wouldn't you then want to have that definition deferred as well?


-boris



With these adjusted, Acked-by: Jan Beulich jbeul...@suse.com.




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


Re: [Xen-devel] [PATCH v22 02/14] x86/VPMU: Add public xenpmu.h

2015-05-26 Thread Jan Beulich
 On 21.05.15 at 19:57, boris.ostrov...@oracle.com wrote:
 --- a/xen/include/public/arch-arm.h
 +++ b/xen/include/public/arch-arm.h
 @@ -434,6 +434,11 @@ struct xen_arch_domainconfig {
  
  #endif
  
 +#ifndef __ASSEMBLY__
 +/* Stub definition of PMU structure */
 +typedef struct xen_pmu_arch {} xen_pmu_arch_t;

I'm afraid structures without members aren't standard C, so this
needs a dummy field as being in a public interface. I'm sorry for
not noticing this earlier.

 +/*
 + * Architecture-specific information describing state of the processor at
 + * the time of PMU interrupt.
 + * Fields of this structure marked as RW for guest can only be written by the

s/can/should/ ?

 + * guest when PMU_CACHED bit in pmu_flags is set (which is done by the
 + * hypervisor during PMU interrupt). Hypervisor will read updated data in
 + * XENPMU_flush hypercall and clear PMU_CACHED bit.
 + */
 +struct xen_pmu_arch {
 +union {
 +/*
 + * Processor's registers at the time of interrupt.
 + * WO for hypervisor, RO for guests.
 + */
 +struct xen_pmu_regs regs;
 +/* Padding for adding new registers to xen_pmu_regs in the future */
 +#define XENPMU_REGS_PAD_SZ  64
 +uint8_t pad[XENPMU_REGS_PAD_SZ];
 +} r;
 +
 +/* WO for hypervisor, RO for guest */
 +uint64_t pmu_flags;
 +
 +/*
 + * APIC LVTPC register.
 + * RW for both hypervisor and guest.
 + * Only APIC_LVT_MASKED bit is loaded by the hypervisor into hardware
 + * during XENPMU_flush or XENPMU_lvtpc_set.
 + */
 +union {
 +uint32_t lapic_lvtpc;

Considering this isn't being used in this patch, could I ask you to
move it where it is being used (keeping only the pad member and
perhaps a placeholder comment here), so verifying that the
read-once requirement for the hypervisor side is met becomes
more obvious?

With these adjusted, Acked-by: Jan Beulich jbeul...@suse.com.


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