Skip to content

Commit

Permalink
drivers: perf: Implement perf event mmap support in the legacy backend
Browse files Browse the repository at this point in the history
Implement the needed callbacks in the legacy driver so that we can
directly access the counters through perf in userspace.

Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
Reviewed-by: Atish Patra <atishp@rivosinc.com>
  • Loading branch information
Alexandre Ghiti authored and palmer-dabbelt committed Aug 16, 2023
1 parent 83c5e13 commit 50be342
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions drivers/perf/riscv_pmu_legacy.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,29 @@ static void pmu_legacy_ctr_start(struct perf_event *event, u64 ival)
local64_set(&hwc->prev_count, initial_val);
}

static uint8_t pmu_legacy_csr_index(struct perf_event *event)
{
return event->hw.idx;
}

static void pmu_legacy_event_mapped(struct perf_event *event, struct mm_struct *mm)
{
if (event->attr.config != PERF_COUNT_HW_CPU_CYCLES &&
event->attr.config != PERF_COUNT_HW_INSTRUCTIONS)
return;

event->hw.flags |= PERF_EVENT_FLAG_USER_READ_CNT;
}

static void pmu_legacy_event_unmapped(struct perf_event *event, struct mm_struct *mm)
{
if (event->attr.config != PERF_COUNT_HW_CPU_CYCLES &&
event->attr.config != PERF_COUNT_HW_INSTRUCTIONS)
return;

event->hw.flags &= ~PERF_EVENT_FLAG_USER_READ_CNT;
}

/*
* This is just a simple implementation to allow legacy implementations
* compatible with new RISC-V PMU driver framework.
Expand All @@ -91,6 +114,9 @@ static void pmu_legacy_init(struct riscv_pmu *pmu)
pmu->ctr_get_width = NULL;
pmu->ctr_clear_idx = NULL;
pmu->ctr_read = pmu_legacy_read_ctr;
pmu->event_mapped = pmu_legacy_event_mapped;
pmu->event_unmapped = pmu_legacy_event_unmapped;
pmu->csr_index = pmu_legacy_csr_index;

perf_pmu_register(&pmu->pmu, "cpu", PERF_TYPE_RAW);
}
Expand Down

0 comments on commit 50be342

Please sign in to comment.