[PATCH V10 2/4] perf/powerpc: add support for sampling intr machine state
    Anju T 
    anju at linux.vnet.ibm.com
       
    Thu Jan 21 20:57:37 AEDT 2016
    
    
  
Hi mpe,
On Wednesday 20 January 2016 04:10 PM, Michael Ellerman wrote:
> On Mon, 2016-01-11 at 15:58 +0530, Anju T wrote:
>> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
>> index 9a7057e..c4ce60d 100644
>> --- a/arch/powerpc/Kconfig
>> +++ b/arch/powerpc/Kconfig
>> @@ -119,6 +119,7 @@ config PPC
>>   	select GENERIC_ATOMIC64 if PPC32
>>   	select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
>>   	select HAVE_PERF_EVENTS
>> +	select HAVE_PERF_REGS
>>   	select HAVE_REGS_AND_STACK_ACCESS_API
>>   	select HAVE_HW_BREAKPOINT if PERF_EVENTS && PPC_BOOK3S_64
>>   	select ARCH_WANT_IPC_PARSE_VERSION
>> diff --git a/arch/powerpc/perf/perf_regs.c b/arch/powerpc/perf/perf_regs.c
>> new file mode 100644
>> index 0000000..d32581763
>> --- /dev/null
>> +++ b/arch/powerpc/perf/perf_regs.c
> ...
>> +
>> +u64 perf_reg_abi(struct task_struct *task)
>> +{
>> +	return PERF_SAMPLE_REGS_ABI_64;
> What is this value used for exactly?
>
> It seems like on 32-bit kernels we should be returning PERF_SAMPLE_REGS_ABI_32.
Values to determine ABI of the registers dump.
enum perf_sample_regs_abi {
PERF_SAMPLE_REGS_ABI_NONE = 0,
PERF_SAMPLE_REGS_ABI_32 = 1,
PERF_SAMPLE_REGS_ABI_64 = 2,
};
Initially the ABI is set as NONE. So when we enable 
PERF_SAMPLE_REGS_INTR we need to get the correspodning ABI. This in turn 
required for ..
void perf_output_sample(struct perf_output_handle *handle,
         if (sample_type & PERF_SAMPLE_TRANSACTION)
                 perf_output_put(handle, data->txn);
        if (sample_type & PERF_SAMPLE_REGS_INTR) {
                u64 abi = data->regs_intr.abi;
                /*
                 * If there are no regs to dump, notice it through
                 * first u64 being zero (PERF_SAMPLE_REGS_ABI_NONE).
                 */
                perf_output_put(handle, abi);
                if (abi) {
                        u64 mask = event->attr.sample_regs_intr;
                        perf_output_sample_regs(handle,
data->regs_intr.regs,
                                                mask);
                }
        }
Here as you suggested we may need to pass the right ABI for 64 and 32 bit.
Thanks and Regards
Anju
>
>> +}
>> +
>> +void perf_get_regs_user(struct perf_regs *regs_user,
>> +			struct pt_regs *regs,
>> +			struct pt_regs *regs_user_copy)
>> +{
>> +	regs_user->regs = task_pt_regs(current);
>> +	regs_user->abi  = perf_reg_abi(current);
>> +}
> cheers
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ozlabs.org/pipermail/linuxppc-dev/attachments/20160121/98a6ae15/attachment.html>
    
    
More information about the Linuxppc-dev
mailing list