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


_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to