[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [kvm-unit-tests PATCH v8 2/3] arm: pmu: Check cycle cou
From: |
Christopher Covington |
Subject: |
Re: [Qemu-devel] [kvm-unit-tests PATCH v8 2/3] arm: pmu: Check cycle count increases |
Date: |
Mon, 14 Nov 2016 10:12:35 -0500 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2 |
Hi Drew, Wei,
On 11/14/2016 05:05 AM, Andrew Jones wrote:
> On Fri, Nov 11, 2016 at 01:55:49PM -0600, Wei Huang wrote:
>>
>>
>> On 11/11/2016 01:43 AM, Andrew Jones wrote:
>>> On Tue, Nov 08, 2016 at 12:17:14PM -0600, Wei Huang wrote:
>>>> From: Christopher Covington <address@hidden>
>>>>
>>>> Ensure that reads of the PMCCNTR_EL0 are monotonically increasing,
>>>> even for the smallest delta of two subsequent reads.
>>>>
>>>> Signed-off-by: Christopher Covington <address@hidden>
>>>> Signed-off-by: Wei Huang <address@hidden>
>>>> ---
>>>> arm/pmu.c | 98
>>>> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>>> 1 file changed, 98 insertions(+)
>>>>
>>>> diff --git a/arm/pmu.c b/arm/pmu.c
>>>> index 0b29088..d5e3ac3 100644
>>>> --- a/arm/pmu.c
>>>> +++ b/arm/pmu.c
>>>> @@ -14,6 +14,7 @@
>>>> */
>>>> #include "libcflat.h"
>>>>
>>>> +#define PMU_PMCR_E (1 << 0)
>>>> #define PMU_PMCR_N_SHIFT 11
>>>> #define PMU_PMCR_N_MASK 0x1f
>>>> #define PMU_PMCR_ID_SHIFT 16
>>>> @@ -21,6 +22,10 @@
>>>> #define PMU_PMCR_IMP_SHIFT 24
>>>> #define PMU_PMCR_IMP_MASK 0xff
>>>>
>>>> +#define PMU_CYCLE_IDX 31
>>>> +
>>>> +#define NR_SAMPLES 10
>>>> +
>>>> #if defined(__arm__)
>>>> static inline uint32_t pmcr_read(void)
>>>> {
>>>> @@ -29,6 +34,47 @@ static inline uint32_t pmcr_read(void)
>>>> asm volatile("mrc p15, 0, %0, c9, c12, 0" : "=r" (ret));
>>>> return ret;
>>>> }
>>>> +
>>>> +static inline void pmcr_write(uint32_t value)
>>>> +{
>>>> + asm volatile("mcr p15, 0, %0, c9, c12, 0" : : "r" (value));
>>>> +}
>>>> +
>>>> +static inline void pmselr_write(uint32_t value)
>>>> +{
>>>> + asm volatile("mcr p15, 0, %0, c9, c12, 5" : : "r" (value));
>>>> +}
>>>> +
>>>> +static inline void pmxevtyper_write(uint32_t value)
>>>> +{
>>>> + asm volatile("mcr p15, 0, %0, c9, c13, 1" : : "r" (value));
>>>> +}
>>>> +
>>>> +/*
>>>> + * While PMCCNTR can be accessed as a 64 bit coprocessor register,
>>>> returning 64
>>>> + * bits doesn't seem worth the trouble when differential usage of the
>>>> result is
>>>> + * expected (with differences that can easily fit in 32 bits). So just
>>>> return
>>>> + * the lower 32 bits of the cycle count in AArch32.
>>>
>>> Like I said in the last review, I'd rather we not do this. We should
>>> return the full value and then the test case should confirm the upper
>>> 32 bits are zero.
>>
>> Unless I miss something in ARM documentation, ARMv7 PMCCNTR is a 32-bit
>> register. We can force it to a more coarse-grained cycle counter with
>> PMCR.D bit=1 (see below). But it is still not a 64-bit register.
AArch32 System Register Descriptions
Performance Monitors registers
PMCCNTR, Performance Monitors Cycle Count Register
To access the PMCCNTR when accessing as a 32-bit register:
MRC p15,0,<Rt>,c9,c13,0 ; Read PMCCNTR[31:0] into Rt
MCR p15,0,<Rt>,c9,c13,0 ; Write Rt to PMCCNTR[31:0]. PMCCNTR[63:32] are
unchanged
To access the PMCCNTR when accessing as a 64-bit register:
MRRC p15,0,<Rt>,<Rt2>,c9 ; Read PMCCNTR[31:0] into Rt and PMCCNTR[63:32] into
Rt2
MCRR p15,0,<Rt>,<Rt2>,c9 ; Write Rt to PMCCNTR[31:0] and Rt2 to PMCCNTR[63:32]
Regards,
Cov
--
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm
Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code
Aurora Forum, a Linux Foundation Collaborative Project.
- [Qemu-devel] [kvm-unit-tests PATCH v8 0/3] ARM PMU tests, Wei Huang, 2016/11/08
- [Qemu-devel] [kvm-unit-tests PATCH v8 2/3] arm: pmu: Check cycle count increases, Wei Huang, 2016/11/08
- Re: [Qemu-devel] [kvm-unit-tests PATCH v8 2/3] arm: pmu: Check cycle count increases, Andrew Jones, 2016/11/11
- Re: [Qemu-devel] [kvm-unit-tests PATCH v8 2/3] arm: pmu: Check cycle count increases, Wei Huang, 2016/11/11
- Re: [Qemu-devel] [kvm-unit-tests PATCH v8 2/3] arm: pmu: Check cycle count increases, Andrew Jones, 2016/11/14
- Re: [Qemu-devel] [kvm-unit-tests PATCH v8 2/3] arm: pmu: Check cycle count increases,
Christopher Covington <=
- Re: [Qemu-devel] [kvm-unit-tests PATCH v8 2/3] arm: pmu: Check cycle count increases, Wei Huang, 2016/11/15
- Re: [Qemu-devel] [kvm-unit-tests PATCH v8 2/3] arm: pmu: Check cycle count increases, Andrew Jones, 2016/11/16
- Re: [Qemu-devel] [kvm-unit-tests PATCH v8 2/3] arm: pmu: Check cycle count increases, Christopher Covington, 2016/11/16
- Re: [Qemu-devel] [kvm-unit-tests PATCH v8 2/3] arm: pmu: Check cycle count increases, Andrew Jones, 2016/11/16
- Re: [Qemu-devel] [kvm-unit-tests PATCH v8 2/3] arm: pmu: Check cycle count increases, Christopher Covington, 2016/11/16
Re: [Qemu-devel] [kvm-unit-tests PATCH v8 2/3] arm: pmu: Check cycle count increases, Andrew Jones, 2016/11/16
[Qemu-devel] [kvm-unit-tests PATCH v8 1/3] arm: Add PMU test, Wei Huang, 2016/11/08
[Qemu-devel] [kvm-unit-tests PATCH v8 3/3] arm: pmu: Add CPI checking, Wei Huang, 2016/11/08