Re: [PATCH v3 4/6] ARCv2: perf: implement exclusion of event counting in user or kernel mode

2015-08-24 Thread Vineet Gupta
On Monday 24 August 2015 08:00 PM, Vineet Gupta wrote:
> On Monday 24 August 2015 07:50 PM, Alexey Brodkin wrote:
>> > Cc: Peter Zijlstra 
>> > Cc: Arnaldo Carvalho de Melo 
>> > Signed-off-by: Alexey Brodkin 
>> > ---
>> >
>> > No changes since v2.
>> >
>> > No changes since v1.
>> >
>> > 
>> >}
>> >  
>> > +  hwc->config = 0;
>> > +
>> > +  if (is_isa_arcv2()) {
>> > +  /* "exclude user" means "count only kernel" */
>> > +  if (event->attr.exclude_user)
>> > +  hwc->config |= ARC_REG_PCT_CONFIG_KERN;
>> > +
>> > +  /* "exclude kernel" means "count only user" */
>> > +  if (event->attr.exclude_kernel)
>> > +  hwc->config |= ARC_REG_PCT_CONFIG_USER;
>> > +  }
>> > +
>> >switch (event->attr.type) {
>> >case PERF_TYPE_HARDWARE:
>> >if (event->attr.config >= PERF_COUNT_HW_MAX)
>> >return -ENOENT;
>> >if (arc_pmu->ev_hw_idx[event->attr.config] < 0)
>> >return -ENOENT;
>> > -  hwc->config = arc_pmu->ev_hw_idx[event->attr.config];
>> > +  hwc->config |= arc_pmu->ev_hw_idx[event->attr.config];
> With raw events patch dropped - this hunk need not be present.

Please ignore this stupid comment - this was written when I was presumably 
smoking
pot !

> 
>> >pr_debug("init event %d with h/w %d \'%s\'\n",
>> > (int) event->attr.config, (int) hwc->config,
>> > arc_pmu_ev_hw_map[event->attr.config]);
>> > @@ -163,7 +175,7 @@ static int arc_pmu_event_init(struct perf_event *event)
>> >ret = arc_pmu_cache_event(event->attr.config);
>> >if (ret < 0)
>> >return ret;
>> > -  hwc->config = arc_pmu->ev_hw_idx[ret];
>> > +  hwc->config |= arc_pmu->ev_hw_idx[ret];
>> >return 0;
>> >default:
>> >return -ENOENT;

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v3 4/6] ARCv2: perf: implement exclusion of event counting in user or kernel mode

2015-08-24 Thread Vineet Gupta
On Monday 24 August 2015 07:50 PM, Alexey Brodkin wrote:
> Cc: Peter Zijlstra 
> Cc: Arnaldo Carvalho de Melo 
> Signed-off-by: Alexey Brodkin 
> ---
>
> No changes since v2.
>
> No changes since v1.
>
> 
>   }
>  
> + hwc->config = 0;
> +
> + if (is_isa_arcv2()) {
> + /* "exclude user" means "count only kernel" */
> + if (event->attr.exclude_user)
> + hwc->config |= ARC_REG_PCT_CONFIG_KERN;
> +
> + /* "exclude kernel" means "count only user" */
> + if (event->attr.exclude_kernel)
> + hwc->config |= ARC_REG_PCT_CONFIG_USER;
> + }
> +
>   switch (event->attr.type) {
>   case PERF_TYPE_HARDWARE:
>   if (event->attr.config >= PERF_COUNT_HW_MAX)
>   return -ENOENT;
>   if (arc_pmu->ev_hw_idx[event->attr.config] < 0)
>   return -ENOENT;
> - hwc->config = arc_pmu->ev_hw_idx[event->attr.config];
> + hwc->config |= arc_pmu->ev_hw_idx[event->attr.config];

With raw events patch dropped - this hunk need not be present.

>   pr_debug("init event %d with h/w %d \'%s\'\n",
>(int) event->attr.config, (int) hwc->config,
>arc_pmu_ev_hw_map[event->attr.config]);
> @@ -163,7 +175,7 @@ static int arc_pmu_event_init(struct perf_event *event)
>   ret = arc_pmu_cache_event(event->attr.config);
>   if (ret < 0)
>   return ret;
> - hwc->config = arc_pmu->ev_hw_idx[ret];
> + hwc->config |= arc_pmu->ev_hw_idx[ret];
>   return 0;
>   default:
>   return -ENOENT;

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH v3 4/6] ARCv2: perf: implement exclusion of event counting in user or kernel mode

2015-08-24 Thread Alexey Brodkin
Cc: Peter Zijlstra 
Cc: Arnaldo Carvalho de Melo 
Signed-off-by: Alexey Brodkin 
---

No changes since v2.

No changes since v1.

 arch/arc/include/asm/perf_event.h |  3 +++
 arch/arc/kernel/perf_event.c  | 16 ++--
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/arch/arc/include/asm/perf_event.h 
b/arch/arc/include/asm/perf_event.h
index 9ed593e..876e216 100644
--- a/arch/arc/include/asm/perf_event.h
+++ b/arch/arc/include/asm/perf_event.h
@@ -34,6 +34,9 @@
 #define ARC_REG_PCT_INT_CTRL   0x25E
 #define ARC_REG_PCT_INT_ACT0x25F
 
+#define ARC_REG_PCT_CONFIG_USER(1 << 18)   /* count in user mode */
+#define ARC_REG_PCT_CONFIG_KERN(1 << 19)   /* count in kernel mode 
*/
+
 #define ARC_REG_PCT_CONTROL_CC (1 << 16)   /* clear counts */
 #define ARC_REG_PCT_CONTROL_SN (1 << 17)   /* snapshot */
 
diff --git a/arch/arc/kernel/perf_event.c b/arch/arc/kernel/perf_event.c
index ce0fa60..997ccbd 100644
--- a/arch/arc/kernel/perf_event.c
+++ b/arch/arc/kernel/perf_event.c
@@ -147,13 +147,25 @@ static int arc_pmu_event_init(struct perf_event *event)
local64_set(&hwc->period_left, hwc->sample_period);
}
 
+   hwc->config = 0;
+
+   if (is_isa_arcv2()) {
+   /* "exclude user" means "count only kernel" */
+   if (event->attr.exclude_user)
+   hwc->config |= ARC_REG_PCT_CONFIG_KERN;
+
+   /* "exclude kernel" means "count only user" */
+   if (event->attr.exclude_kernel)
+   hwc->config |= ARC_REG_PCT_CONFIG_USER;
+   }
+
switch (event->attr.type) {
case PERF_TYPE_HARDWARE:
if (event->attr.config >= PERF_COUNT_HW_MAX)
return -ENOENT;
if (arc_pmu->ev_hw_idx[event->attr.config] < 0)
return -ENOENT;
-   hwc->config = arc_pmu->ev_hw_idx[event->attr.config];
+   hwc->config |= arc_pmu->ev_hw_idx[event->attr.config];
pr_debug("init event %d with h/w %d \'%s\'\n",
 (int) event->attr.config, (int) hwc->config,
 arc_pmu_ev_hw_map[event->attr.config]);
@@ -163,7 +175,7 @@ static int arc_pmu_event_init(struct perf_event *event)
ret = arc_pmu_cache_event(event->attr.config);
if (ret < 0)
return ret;
-   hwc->config = arc_pmu->ev_hw_idx[ret];
+   hwc->config |= arc_pmu->ev_hw_idx[ret];
return 0;
default:
return -ENOENT;
-- 
2.4.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/