Re: [PATCH V8 03/10] powerpc, perf: Re organize BHRB processing

2015-06-12 Thread Anshuman Khandual
On 06/11/2015 09:02 AM, Daniel Axtens wrote:
 +
  /* Processing BHRB entries */
  static void power_pmu_bhrb_read(struct cpu_hw_events *cpuhw)
  {
 -  u64 val;
 -  u64 addr;
 +  u64 val, addr, tmp;
 Please don't use 'tmp' here. As far as I can tell, you use this variable
 to compute the 'to' address. The name should reflect that.

 Agreed but then it will be a new preparatory patch at the beginning
 of this patch series.

 I don't think I understand what you're saying here. Why do you need a
 new patch? As I understand it, you've introduced 'tmp' in this patch;
 couldn't you just rename it to, for example, to_addr, instead of tmp in
 this patch?

Sorry for the confusion, I meant separate patch for the other
two changes I had agreed to (i.e changing the name and type of
'pred' variable) as suggested in the previous mail not for this
one. Will change 'tmp' into 'to_addr' in this patch itself.

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

Re: [PATCH V8 03/10] powerpc, perf: Re organize BHRB processing

2015-06-10 Thread Anshuman Khandual
On 06/10/2015 10:06 AM, Daniel Axtens wrote:
 
 +void update_branch_entry(struct cpu_hw_events *cpuhw,
 +int index, u64 from, u64 to, int pred)
 +{
 +cpuhw-bhrb_entries[index].from = from;
 +cpuhw-bhrb_entries[index].to = to;
 +cpuhw-bhrb_entries[index].mispred = pred;
 +cpuhw-bhrb_entries[index].predicted = ~pred;
 +}
 
 I realise you're copying existing code, but:
  - could you please rename pred? If we assign .mispred to pred
 and .predicted to ~pred, we should pick a different name for pred.

Agreed.

  - I'm really uncomfortable with the bitwise inverting a signed integer.
 Can you explain what is going on here? Looking at
 include/uapi/linux/perf_event.h, this seems to be a single bit flag:
 shouldn't this then be a logical flip rather than a bitwise one?
 (Furthermore, looking at that header, why is pred an int at all? Why not
 a bool?)

Agreed.

 
 +
  /* Processing BHRB entries */
  static void power_pmu_bhrb_read(struct cpu_hw_events *cpuhw)
  {
 -u64 val;
 -u64 addr;
 +u64 val, addr, tmp;
 Please don't use 'tmp' here. As far as I can tell, you use this variable
 to compute the 'to' address. The name should reflect that.

Agreed but then it will be a new preparatory patch at the beginning
of this patch series.

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

Re: [PATCH V8 03/10] powerpc, perf: Re organize BHRB processing

2015-06-10 Thread Daniel Axtens
  +
   /* Processing BHRB entries */
   static void power_pmu_bhrb_read(struct cpu_hw_events *cpuhw)
   {
  -  u64 val;
  -  u64 addr;
  +  u64 val, addr, tmp;
  Please don't use 'tmp' here. As far as I can tell, you use this variable
  to compute the 'to' address. The name should reflect that.
 
 Agreed but then it will be a new preparatory patch at the beginning
 of this patch series.
 
I don't think I understand what you're saying here. Why do you need a
new patch? As I understand it, you've introduced 'tmp' in this patch;
couldn't you just rename it to, for example, to_addr, instead of tmp in
this patch?
-- 
Regards,
Daniel


signature.asc
Description: This is a digitally signed message part
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Re: [PATCH V8 03/10] powerpc, perf: Re organize BHRB processing

2015-06-09 Thread Daniel Axtens

 +void update_branch_entry(struct cpu_hw_events *cpuhw,
 + int index, u64 from, u64 to, int pred)
 +{
 + cpuhw-bhrb_entries[index].from = from;
 + cpuhw-bhrb_entries[index].to = to;
 + cpuhw-bhrb_entries[index].mispred = pred;
 + cpuhw-bhrb_entries[index].predicted = ~pred;
 +}

I realise you're copying existing code, but:
 - could you please rename pred? If we assign .mispred to pred
and .predicted to ~pred, we should pick a different name for pred.
 - I'm really uncomfortable with the bitwise inverting a signed integer.
Can you explain what is going on here? Looking at
include/uapi/linux/perf_event.h, this seems to be a single bit flag:
shouldn't this then be a logical flip rather than a bitwise one?
(Furthermore, looking at that header, why is pred an int at all? Why not
a bool?)

 +
  /* Processing BHRB entries */
  static void power_pmu_bhrb_read(struct cpu_hw_events *cpuhw)
  {
 - u64 val;
 - u64 addr;
 + u64 val, addr, tmp;
Please don't use 'tmp' here. As far as I can tell, you use this variable
to compute the 'to' address. The name should reflect that.

Regards,
Daniel


signature.asc
Description: This is a digitally signed message part
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

[PATCH V8 03/10] powerpc, perf: Re organize BHRB processing

2015-06-08 Thread Anshuman Khandual
This patch cleans up some existing indentation problem in code and
re organizes the BHRB processing code with an helper function named
'update_branch_entry' making it more readable. This patch does not
change any functionality.

Signed-off-by: Anshuman Khandual khand...@linux.vnet.ibm.com
---
 arch/powerpc/perf/core-book3s.c | 107 
 1 file changed, 54 insertions(+), 53 deletions(-)

diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
index ae61629..d10d2c1 100644
--- a/arch/powerpc/perf/core-book3s.c
+++ b/arch/powerpc/perf/core-book3s.c
@@ -412,11 +412,19 @@ static __u64 power_pmu_bhrb_to(u64 addr)
return target - (unsigned long)instr + addr;
 }
 
+void update_branch_entry(struct cpu_hw_events *cpuhw,
+   int index, u64 from, u64 to, int pred)
+{
+   cpuhw-bhrb_entries[index].from = from;
+   cpuhw-bhrb_entries[index].to = to;
+   cpuhw-bhrb_entries[index].mispred = pred;
+   cpuhw-bhrb_entries[index].predicted = ~pred;
+}
+
 /* Processing BHRB entries */
 static void power_pmu_bhrb_read(struct cpu_hw_events *cpuhw)
 {
-   u64 val;
-   u64 addr;
+   u64 val, addr, tmp;
int r_index, u_index, pred;
 
r_index = 0;
@@ -427,63 +435,56 @@ static void power_pmu_bhrb_read(struct cpu_hw_events 
*cpuhw)
if (!val)
/* Terminal marker: End of valid BHRB entries */
break;
-   else {
-   addr = val  BHRB_EA;
-   pred = val  BHRB_PREDICTION;
 
-   if (!addr)
-   /* invalid entry */
-   continue;
+   addr = val  BHRB_EA;
+   pred = val  BHRB_PREDICTION;
+
+   if (!addr)
+   /* invalid entry */
+   continue;
 
-   /* Branches are read most recent first (ie. mfbhrb 0 is
-* the most recent branch).
-* There are two types of valid entries:
-* 1) a target entry which is the to address of a
-*computed goto like a blr,bctr,btar.  The next
-*entry read from the bhrb will be branch
-*corresponding to this target (ie. the actual
-*blr/bctr/btar instruction).
-* 2) a from address which is an actual branch.  If a
-*target entry proceeds this, then this is the
-*matching branch for that target.  If this is not
-*following a target entry, then this is a branch
-*where the target is given as an immediate field
-*in the instruction (ie. an i or b form branch).
-*In this case we need to read the instruction from
-*memory to determine the target/to address.
+   /* Branches are read most recent first (ie. mfbhrb 0 is
+* the most recent branch).
+* There are two types of valid entries:
+* 1) a target entry which is the to address of a
+*computed goto like a blr,bctr,btar.  The next
+*entry read from the bhrb will be branch
+*corresponding to this target (ie. the actual
+*blr/bctr/btar instruction).
+* 2) a from address which is an actual branch.  If a
+*target entry proceeds this, then this is the
+*matching branch for that target.  If this is not
+*following a target entry, then this is a branch
+*where the target is given as an immediate field
+*in the instruction (ie. an i or b form branch).
+*In this case we need to read the instruction from
+*memory to determine the target/to address.
+*/
+   if (val  BHRB_TARGET) {
+   /* Target branches use two entries
+* (ie. computed gotos/XL form)
 */
+   tmp = addr;
+
+   /* Get from address in next entry */
+   val = read_bhrb(r_index++);
+   if (!val)
+   break;
+   addr = val  BHRB_EA;
if (val  BHRB_TARGET) {
-   /* Target branches use two entries
-* (ie. computed gotos/XL form)
-*/
-   cpuhw-bhrb_entries[u_index].to = addr;
-   cpuhw-bhrb_entries[u_index].mispred = pred;
-